entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

3votos

(PHP) Escribir en imagen, y ponerla en PDF

Hola, estoy haciendo una solución en la que necesito obtener una imagen escribir en ella texto y un QR. Las librerías que uso son GD y TCPDF.
La imagen es de 254ppp y de 1000x800 px por lo que tiene que estar con dimenciones de 10x8 cm en el PDF.
De forma básica lo que quiero hacer es.

  1. Leer mi imagen (plantilla)
  2. Crear una copia de trabajo (trabajo)
  3. Colocar el texto en su respectivo lugar.
  4. Colocar la imagen en el PDF con dimensiones 10 x 8 cm.
  5. Liberar la copia de trabajo (destruir)
  6. Repetir desde el (2) en caso de existir mas.

Si me pueden ayudar con esto le agradecería mucho.

1 Respuesta

6votos

Leonardo-Tadei Puntos227320

Hola mrgenis,

1 Leer mi imagen (plantilla)

$im = imagecreatefromjpeg("ruta/plantilla.jpeg);

Si es de otro formato deberás cambiar al imagecreate corespondiente.

2 Crear una copia de trabajo (trabajo)

Esto se hace al final, ya que mientras tanto trabajás con la imagen en RAM usando el identificador $im

3 Colocar el texto en su respectivo lugar.

$unTexto = "Hola Mundo";
$negro = imagecolorallocate($im, 0, 0, 0);
// Reemplace la ruta por la de su propia fuente
$fuente = 'arial.ttf';
// Añadir el texto
imagettftext($im, 20, 0, 10, 20, $negro, $fuente, $unTexto);

Más opciones como ángulos, posiciones, etc en http://php.net//manual/es/function.imagettftext.php

4 Colocar la imagen en el PDF con dimensiones 10 x 8 cm.

Luego de cargada la biblioteca y de inicializado el PDF

// Image example with resizing
$pdf->Image('images/image_demo.jpg', 15, 140, 75, 113, 'JPG', 'http://www.tcpdf.org', '', true, 150, '', false, false, 1, false, false, false);

Acá hay un ejemplo de cómo se usa http://www.tcpdf.org/examples/example_009.phps y así se ve ese resultado http://www.tcpdf.org/examples/example_009.pdf
Como los PDF manejan la escala en centrímetros y la imagen se escala en píxeles, tendrás que calcular la relación según la resolución que maneje la bilbioteca para dejarla de 10x8. Una forma simple es poner una imagen de 100px, imprimirla y medirla: luego por regla de tres obtenés cuantos píxeles son 10cm y 8cm.

5 Liberar la copia de trabajo (destruir)

Hasta el paso 3 la imagen está en momoria. Para poder incluirla en el PDF tendrás que primero generar un archivo en disco:

imagejpg($im. "rutaTemporal/nombreDeArchivo.jpeg"); // Crea el archivo en el disco para ser referenciado en el PDF
imagedestroy($im); // libera ram
...
...
// Se crea el PDF
...
...
unlink( "rutaTemporal/nombreDeArchivo.jpeg"); // borra el archivo

6 Repetir desde el (2) en caso de existir mas.

Ponés todo el código en un bucle for o while para generar cada uno de los PDFs
Podrías de hecho poner todo el proceso en una función que reciba como parámetros el texto a poner y alguna otra cosa variable que tengas, de forma tal de tener dentro del bucle solo la llamada a una función... es lo mismo para hace mucho más legible el código!

bonus 7 Vas a tener problemas con los nombres de los archivos JPEG a generar, ya que si se repiten podrías pisar uno que toadvía está en eso. Para esto podrías usar la función tempnam() que crea un nombre de archivo garantizando que sea único en un directorio http://ar2.php.net/manual/es/function.tempnam.php

Saludos!

PD: por qué ponerle texto a la imagen en vez de ponerlo directamente en el PDF??? Salvo que tengas que superponer el texto a la imagen o hacer un efecto raro, te ahorrás un paso importante ya que no tendrías que cargar la imagen a memoria y procesarla....
Te ahorrarías el paso 3, la mitad del 5 y el problema de los nombres de archivo duplicados...

1voto

MrGenis comentado

Me gustaría hacer que el texto sea sobre el PDF y no sobre la imagen, pero no tengo clara la idea como hacerlo ya que no se como se comporte el tamaño de la imagen al colocarla. Primero intentare poner la imagen (sin texto) para ver si queda a 10x8 cm o intentar que quede a la medida.

1voto

Alejandro Castillo A comentado

La librería tcpdf se puede usar para imprimir html como pdf?

1voto

Alejandro Castillo A comentado

como se importa la librería, y que archivos se agregan al proyecto? según vi se incluye un archivo tcpdf.php

require_once('tcpdf_include.php');

1voto

Leonardo-Tadei comentado

Hola Alejandro,

sí se puede generar un PDF partiendo de un HTML: http://www.tcpdf.org/examples/example_006.phps

La parte e imprimirlo dependerá de si hay o no impresora en la PC de destino ;-)

1voto

Leonardo-Tadei comentado

Hola mrgenis,

Imprimir texto es la tarea más simple en PDF!

Todos los ejemplos del proncipio son sobre escriir y formatear texto. El método a invocar es $pdf->Cell() y para entender como funciona, imaginate que se define un punto para generar un acelda (el punto está en la esquina superior ozquierda) y a partir de él se escribe el texto.

Las propiedades de alineación del texto son relativas al tamaño de la celda ya que el texto puede ponerse centrado o alineado a la derecha.

Saludos!

1voto

MrGenis comentado

Ya terminamos el modulo, finalmente utilizamos la que indicaste colocar el texto independientemente de la imagen, lo mas "complicado" fue el ajustar la imagen para que se colocara con las dimensiones indicadas.

1voto

Leonardo-Tadei comentado

Qué bueno que quedó funcionando.
Felicitaciones!

Por favor, accede o regístrate para responder a esta pregunta.

Otras Preguntas y Respuestas


...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta