Crear PDF con Imagenes en PHP

R&OS: pdf class una librería muy potente con la cual se pueden generar archivos PDF utilizando PHP tiene entre sus muchas cualidades el soporte para incluir imágenes dinámicamente. Si aún no sabes como utilizar R&OS, puedes leer Generar PDF con PHP en el cual explicamos los aspectos básicos del uso de esta librería.

Insertando imágenes
La librería R&OS tiene una función llamada ezImage la cual permite incluir una imagen desde un archivo cuya sintaxis es la siguiente:

  1. ezImage(image,[padding],[width],[resize],[justification])

En donde, image es la ruta de la imagen a incluir, padding es la separación entre el contenido y la imagen expresado en pixels, width es el ancho, resize es el tipo de redimensión a aplicarse (full, width, none), justification es la justificación de la imagen (center, left, right).

Luego si deseamos incluir una imagen llamada img.jpg, que no tenga margen de separación, de ancho 420 pixels y alineado a la izquierda. Finalmente imprimimos la fecha y hora de generación del archivo.

  1. include('class.ezpdf.php');
  2. $pdf =& new Cezpdf('a4');
  3. $pdf->selectFont('fonts/courier.afm');
  4. $pdf->ezText("<b>PDF con Imagenes en PHP</b>\n",20);
  5. $pdf->ezText("Ejemplo de inclusión de imagenes en pdf\n\n",12);
  6. $pdf->ezImage("img.jpg", 0, 420, 'none', 'left');
  7. $pdf->ezText("<b>Fecha:</b> ".date("d/m/Y"),10);
  8. $pdf->ezText("<b>Hora:</b> ".date("H:i:s"),10);
  9. $pdf->ezText("<c:alink:http://unijimpe.net/>unijimpe</c:alink>");
  10. $pdf->ezStream();

Nótese que primero hemos incluido el archivo class.ezpdf.php el cual nos permite hacer uso de las funciones para crear pdf, luego creamos un pdf con tamaño de papel A4, escribimos un texto luego en la línea 6 mostramos la imagen deseada. Al final del ejemplo hemos incluido un enlace, esto utilizando la propiedad c:link.

El resultado del ejemplo lo pueden ver en http://samples.unijimpe.net/pdf/pdfimg.php, además de ello les dejo los archivo fuente para que lo descarguen y pongan en práctica lo aprendido.

Posts Relacionados

Comentarios Total 60 comentarios


Fernando
Publicado: 13/01/2008 2:43 pm

Buenas tardes unji, te hago una consulta, lo que estoy necesitando es convertir integramente paginas html a pdf, como veo que estas en tema, te topaste con alguna herramienta open source para linux que haga esto, y luego pueda ser llamada desde php?

Desde ya, muchas gracias por anticipado.

Saludos!

Fernando

dpueyo
Publicado: 22/01/2008 4:54 am

Hola unijimpe. Es impresionante como funciona la clase para los pdf, pero a mi el tema de las imágenes sin embargo no me funciona ni siquiera copiando y pegando el ejemplo, lógicamente poniendo las fuentes y la imagen en su sitio (supongo), por qué puede ser?. Gracias.

unijimpe
Publicado: 22/01/2008 9:41 pm

dpueyo, la verdad a mi siempre me ha funcionado de maravillas, es muy posible que no tengas activadas las librerías para manejo de imágenes en PHP. Si envías el error que te sale es muy posible que nuestros visitantes te puedan ayudar.

Orlando
Publicado: 05/02/2008 1:06 pm

Por favor informacion hacerca de las imagenes ya que no puedo visualizarsu ejemplo de pdf cn imagnes en el servidor de mi pc …

dpueyo
Publicado: 07/02/2008 8:23 am

No he podido entrar antes a ver las respuestas y bueno, veo que a otro visitante más le pasa lo que a mi. Unijimpe, qué es eso activar las librerías de manejo de imágenes en PHP ¿?, yo tengo contratado un servidor virtual que permite MySQL y PHP y lo que hago es utilizarlo, pero la verdad es que de configuración no se casi nada. Gracias.

alejo
Publicado: 03/04/2008 1:32 pm

Mi problema es que no se como llamar una imagen pero no desde un url sino desde el mismo pc ya que el proyecto lo tengo en el localhost

Ed
Publicado: 07/04/2008 10:47 am

Hola unijimpe, tengo la siguiente pregunta, ¿cómo ingreso dos imágenes consecutivas en una sola fila?, ya que cuando inserto una la siguiente se va a la siguiente fila.

Pelirrojo
Publicado: 14/05/2008 6:23 am

Me han encantado los ejemplos!
Descubrí tu web buscando material de cómo pasar a pdf desde php y en seguida tuve que agregarla a mis marcadores.

Pero aunque crea que deba feilicitarte por la web este comentario lo hago para hacerte una consulta acerca de dichas librerías. ¿es posible editar el nombre del fichero de salida? es que por defecto me pone el nombre de la web.php en lugar del que quiero.

Muchas gracias por todo

anominmo
Publicado: 20/05/2008 5:19 pm

Hola:

Quiero agradecer por este tipo de publciaciones, a quienes estamos empezando nos ayuda mucho.

Saludos,

del_dan
Publicado: 19/06/2008 4:34 am

problemas con accentos solucionado con lo siguiente:

$tex = mb_convert_encoding($texto, “ISO-8859-1″, “UTF-8″);

FERNANDO ESPARZA
Publicado: 24/07/2008 12:00 am

Estimado, del_dan su funcion para solucionar el problema de los acentos igual me solucionaria los problemas de las ñ. Trate de montar pero no resulta.

Gracias

gaelrosx
Publicado: 18/08/2008 11:24 am

estoy suasndo uuntu 7.04 y los pdfs me salen en blanco con esta clase.
tengo instalado php5. cual sera el problema? agraceceria si alguien me puede responder.

roncas
Publicado: 26/08/2008 12:32 pm

tengo instalado php 5.1.2 en windows y me sale pura basura cuando quiero hacer un pdf, tengo que configurarle algo adicional o esa version no es compatible con cpdf? gracias de antemano

Jhossept
Publicado: 30/09/2008 10:58 am

roncas, es posible que dejes algun espacio en blanco en el HTML antes de activar el interprete PHP (<? o <?PHP) si hay un solo espacio o linea estas escribiendo html entonces ya no puedes generar pdf.. debe decirte que no se pueden modificar los header

Jhossept
Publicado: 30/09/2008 11:03 am

en cuanto a las imagenes.. me di cuenta que no muestra los archivos con extencion png (.png), o por lo menos en mi maquina.. sino en .jpg, lo probe y funciona.. de todas maneras estamos a la orden en loq ue pueda ayudar.. Saludos..!!

Mercky
Publicado: 10/10/2008 2:47 am

Tengo una cadena de texto similar a la siguiente:

$cadena=”Hola, mundo”;

[...]
$pdf->ezText($cadena);
[...]

Esto hace que mi PDF muestre la cadena tal cual.

Si aplico strip_tags($cadena), el problema desaparece, pero información vital (enlaces, por ejemplo) desaparece igualmente.

¿Conoce alguien alguna otra solución?

Alejandro
Publicado: 16/10/2008 11:43 am

hola estoy utilizando tu librería, al parecer todo funciona bien, excepto las imagenes, cuando agrego la linea de las imagenes,
“ezImage(“img.jpg”, 0, 420, ‘none’, ‘left’);” me marca que el archivo esta dañado y no puede ser reparado, pero cuando quito esa linea todo funciona Ok, alguien sabe por que sucede esto? gracias.

Pao
Publicado: 03/11/2008 12:36 am

Alejandro tal vez es porque la imagen no existe, comprobaste que existiera?

PeTer
Publicado: 03/11/2008 1:52 pm

Hola Amigos.!!

Tengo problemas con el código ya que al generar el formato PDF no me respeta los saltos de linea y escribe todo en el mismo renglón, encimando todo el texto.

Agradeceria su ayuda

forix
Publicado: 05/01/2009 9:03 am

hola estoy relaizando un programa en php tengo sod dificultades ..

la primera quiero hacer una seleccion de varias opciones checkbox y que esto me quede almacenado en al base de datos.. por ejemplo dias que mas te gustan de la semana(apaercen todos y yo selecciono dos o tres) y que estos me quden guardados en la base de datos como lo hago y como debe estar ese campo en la tabla de la base de datos..

Luchaca
Publicado: 08/01/2009 6:29 am

hola a todos!!
Para aquellos que teneis problemas con la funcion EzImage para mostrar imagenes en el pdf, probar con la siguiente funcion. A mi me pasaba lo mismo y me ha funcionado!!
$pdf->addJpegFromFile(‘./images/ros.jpg’, posicion_x, posicion_y);

Suerte a todos!!

Rodrigo
Publicado: 14/01/2009 11:25 pm

Muchas gracias!

He utilizado 3 de tus tutoriales para un proyecto q tengo q entregar de un dia pa otro.

Me has salvado!!!!

Jinme
Publicado: 19/01/2009 7:12 pm

Gracias por el post, tengo una pregunta: es posible colocar texto sobre la imagen? como para crear certificados digitalmente.

kervin licett
Publicado: 04/02/2009 6:53 pm

Buenas noches quien me puede ayudar estoy generando report con ezpdf, trabajando localmente con la version de php5 y lo genera bien el report, pero cuando lo paso al server que tiene php4 no lo genera como lo muestra localmente!! es urgente es para mi proyecto de grado

Carla
Publicado: 05/02/2009 9:01 am

Hola a todos!!
Ante todo mi saludo cordial para todas las personas que hacen posible que este tipo de Sitios sigan en aumento en pro de ayudar sin lucrarse de la necesidad de conocimiento de los usuarios.
hasta ahora todo me ha sido muy util y sencillo, pero que… ¡¡¡nunca faltan!!! no he podido visualizar las imagenes!! agradezco la ayuda que me puedan brindar…

require_once(‘class.ezpdf.php’);
$pdf=new Cezpdf(‘LEGAL’);
$pdf->ezImage(‘index4_r1_c1.jpg’, ‘none’, 90, ‘none’, ‘center’);
$pdf->selectFont(‘fonts/Times-Roman.afm’);
$pdf->ezSetCmMargins(2,2,3,3);

ICARO
Publicado: 06/04/2009 3:13 pm

hola…. excelente el tema… pero tengo una consulta….

el ejemplo dado ace referencia a un ARCHIVO DE IMAGEN pero que es de ruta fija (“img.jpg”)… es posible que la imagen resultante, dependa de un registro sql ??? (asi como los datos asociados)… gracias !!

ICARO
Publicado: 06/04/2009 4:57 pm

hola.. soy yo.. el mismo del post anterior… jaja… solo queria aclarar, que al referirme a que sea una imágen dependiente, me refiero a que llame a la imágen del campo que tenga un registro determinado. por ejemplo, que si en mi base de datos tengo los campos “nombre”, “apellido”, “telefono”, “fotousuario”….
como hago para crear un pdf que me muestre los datos y foto de un usuario que tengo en la base de datos ?

espero haberme explicado bien..
gracias a todos !!!

Fran
Publicado: 15/04/2009 2:05 pm

Hola me da error cuando inserto mas de una imagen,¿alguien sabe por que? si solo meto una va bien a la segunda falla. Saludos

ramsesaguirre
Publicado: 22/04/2009 9:38 pm

Antes que nada un saludo a todos

Un comentario como puedo generar una marca de agua, ejemplo como algunos textos “Copia”, “original”, etc.

saludos

Ruben Lopez
Publicado: 24/04/2009 5:21 am

Esta clase me va de maravilla en Explorer pero NO FUNCIONA en FIREFOX. A que podria ser debido? Hay alguna solucion?

Rene Plaz
Publicado: 03/05/2009 9:51 pm

Hola,
Estoy utilizando esta clase, localmente me sale todo Ok, pero cuando lo subo al servidor (Hosting)todo el texto me sale en 1 sola línea y las tablas salen de un tamaño minúsculo.

¿Qué puede estar pasando?

Gracias,
Rene Plaz C.

tonatiuh
Publicado: 05/05/2009 2:50 pm

Yo lo que quiero es poner una imagen y al lado el texto, pero no encuentro como, no se si alguien tenga la solucion, gracias

Betty
Publicado: 14/05/2009 9:35 am

Tengo el mismo problema de René Plaz
“…utilizando esta clase, localmente me sale todo Ok, pero cuando lo subo al servidor todo el texto me sale en 1 sola línea y las tablas salen de un tamaño minúsculo.”
Necesito una ayudita, por favor..

Diego
Publicado: 10/06/2009 1:06 am

Tengo problemas con el código ya que al generar el formato PDF no me respeta los saltos de linea y escribe todo en la misma linea…

necesito ayuda, porfavor.

Suko
Publicado: 22/06/2009 6:05 pm

Buenas

Para todos aquellos que les falle la llamada a ezimage, probad a cambiar el tamaño de la imagen (Ej: 72×82), probablemete sea ese el problema.

Saludos.

lili
Publicado: 26/06/2009 5:33 pm

hola, pues me gusta esta clase, pero tengo un problema que no he podido resolver.
resulta que mis datos tiene un gran numero de letas y al mostrarlos en el pdf se ven en una sola linea.
como hago para insertar saltos de linea en mi testo.
probre con str_replace(” “,”",$texto); pero me cambia los espacios por esto”".
por favor si alguien sabe como resolver esto, agradeceria que me lo dijera.

lili
Publicado: 26/06/2009 5:35 pm

esto funciona muy bien para insertar imagenes.
$pdf->addJpegFromFile(“logo.JPG”,0,0,595); //coloca la imagen

lili
Publicado: 26/06/2009 5:39 pm

claro qeu es posible colocar imagen de fondo.
solo tienes que descargar la libreria class.backgroundpdf.php
crear una instancia.
ejemplo $pdf = new backgroundPDF(‘a4′, ‘portrait’, ‘image’, array(‘img’=>’fondo.jpg’))y listo.
y listo.

Reyna Vivero Garcia
Publicado: 14/07/2009 4:09 pm

URGE AYUDA !!

Hola, alguien que pueda ayudarme, estoy trabajando con base de datos de MYSQL y tengo un campo que contiene TEXTO, LIGAS e IMAGENES, es un campo de noticias, si lo despliego en HTML todo sale bien, pero cuando lo paso a PDF no se como hacer para que esa imagen que esta dentro del campo $noticia se despliegue……..alguien puede ayudarme?…ya resolvi lo de las ligas, pero la imagen no tengo ni idea como hacerla funcionar.

Reyna Vivero Garcia
Publicado: 14/07/2009 4:20 pm

MI CORREO ES reyna.vivero@cfe.gob.mx

francisco
Publicado: 17/09/2009 2:24 pm

como puedo traer una imagen de mysql a pdf, estoy usando este campo pero no me trae nada:

$pdf->addText(180, 300, 10, “”);

cristian
Publicado: 25/09/2009 4:56 am

hola, tengo un problema ocupo el ejemplo que posteaste… y no funciona me sale un error que dice: el archivo esta dañado y no puede repararse.. la imagen si existe (y ese es el problema) porke cuando pongo una imagen ke no existe funciona… pero lo importante es ke funcione con la imagen… gracias por su ayuda!

DAKA
Publicado: 28/09/2009 2:30 pm

Nadie ha resuelto lo de la linea?????, es desesperante!!!!, espero resolverlo para ayudar a todos!!!, saludos

nicole
Publicado: 01/10/2009 5:24 pm

Hola!!! estoy tratando de incorporar en el pdf que genero mas de dos imagenes , empleo el siguiente codigo

$pdf->ezImage(“Gotica.JPG”, 5, 45, ‘none’, ‘left’);
$pdf->addJpegFromFile(“escudo.JPG”,480,730,20);

pero cuando inserto la siguiente linea

$pdf->ezImage(“escudo.JPG”, 0, 20, ‘none’, ‘left’);

me sale un eror que dice que el archivo PDF esta dañado y no pude repararse…lo mismo pasa si en vez de usar ezImage empleo addJpegFromFile

ahora he tratado de cambiar la ultima linea por la siguiente,

$pdf->addPngFromFile(“escudo.PNG”,480,730,20);

cuando lo hago, el pdf sale normal, solo que muestra unicamente las dos primeras imagenes y la ultima no sale… que puedo hacer??

estoy haciendo algo mal??, las imagenes miden menos de 72×82 pix…. existe alguna clase de restriccion en la cantidad de imagenes que se pueden meter en un pdf generado con php y estas clases (R&OS)?? ayuda urgente!!! porfavor!!!

gracias de antemano por la ayuda que puedan darme!!^^

_vic_
Publicado: 10/10/2009 5:01 pm

Hola quisiera saber si es posible poner varias imágenes seguidas (una a la derecha de la otra) ya que el procedimiento $pdf->ezImage() automáticamente le agrega el intro (\n) y cuando pones varias imágenes las pone una debajo de la otra.
Un saludo buen blog.

Crear PDF con Imagenes en PHP | Distro-Geek...
Publicado: 04/11/2009 4:17 pm

[...] en: unijimpe Compartir Hide [...]

Andres
Publicado: 10/11/2009 11:56 am

Hola,
Muy bueno el post. Pero me parece que debería corregir porque el ejemplo copiado en un localhost o servidor da error. Con la solución de
$pdf->addJpegFromFile(”logo.JPG”,0,0,595); //coloca la imagen
Funciona pero estaria bueno, explicar mejor estas otras funciones.

Slds.
Andres

Neo X
Publicado: 23/11/2009 5:07 pm

Hola para los que tengan problemas con este ejemplo y con el ejemplo que indica como hacer que una imagen se ponga como fondo en un documento solo basta con agregar ob_end_clean() antes de la instruccion $pdf->ezStream(); quedando el codigo de esta manera:

selectFont(‘fonts/courier.afm’);
$pdf->ezText(“PDF con Imagenes en PHP\n”,20);
$pdf->ezText(“Ejemplo de inclusión de imagenes en pdf\n\n”,12);

$pdf->ezImage(“img.jpg”, 0, 420, ‘none’, ‘left’);

$pdf->ezText(“Fecha: “.date(“d/m/Y”),10);
$pdf->ezText(“Hora: “.date(“H:i:s”),10);
$pdf->ezText(‘Fuente: blog.unijimpe.net’);

ob_end_clean();

$pdf->ezStream();
?>

Esto tambien resuelve el problema de “El archivo no empieza con %-PDF” espero que les sirva

Neo X
Publicado: 24/11/2009 7:50 pm

Alguien a podido obtener una imagen que este guardada dentro de la Base de Datos e incluirla dentro de una tabla, esto es, para que cuando se saquen los datos del usuario muestre todos sus datos junto con una fotografia suya, lo he intentado pero no he tenido resultados favorables, de antemano gracias!

unijimpe
Publicado: 24/11/2009 9:47 pm

Neo X, gracias por tu colaboración, respecto a la pregunta que haces, para las imágenes es recomendable guardar solo el nombre del archivo de imagen y guardar la imagen en una carpeta, luego para mostrar la imagen lees de la base de datos el nombre del archivo y lo utilizas para mostrar la imagen.

AngelFQC
Publicado: 03/12/2009 10:49 pm

Hola, gracias
unijimpe!
me has ayudado mucho
y Neo X es cierto con eso se soluciona lo de las imagenes

el
ob_end_clean();

antes del
$pdf->ezStream();

gracias!!!

AngelFQC
Publicado: 03/12/2009 10:55 pm

ahora
como puedo hacer para poner una imagen y un texto al lado
que me salgan en una misma linea
¿se puede?
gracias otra vez

Esmeralda
Publicado: 28/12/2009 10:43 am

Hola. tengo un problema, tengo una tabla de registros en mysql, quiero pasarlos a pdf, el primer campo correcponde a la direccion de una imagen, y lo que deseo hacer es que me imprima la lista entera incluyen la imagen, hasta el momento no lo he logrado, ya que cuando pongo el array del campo de imagenes me imprime solo la ruta y nombre de la imagen…

saludos

Aldo
Publicado: 05/01/2010 10:28 am

Hola….

pues io sigo teniendo problemas con los acentos al generar los pdf..

ya intente usando la funcion que se menciona mas arriba pero no me sirve, los acentos aparecen como un rombo con un signo de interrogacion adentro

iv�n p�rez

ademas de eso, me sale el siguiente error:

A PHP Error was encountered

Severity: Warning

Message: Cannot modify header information – headers already sent by (output started at C:\xampp\htdocs\softcredit\modules\cartera\controllers\admin\cartera.php:4384)

Filename: libraries/class.pdf.php

Line Number: 1916

y pues si quito esa linea de codigo ya no me marca el error..

alguien me puede ayudar?

Gracias

Dash
Publicado: 15/01/2010 3:09 pm

Al crear el pdf se puede insertar la imagen y escribir sobre ella, dejar la imagen como marca de agua o alguna justificacion que me deje insertar teto encima de la imagen?????

Saludos

Dash
Publicado: 15/01/2010 4:09 pm

ya lo solucione hay un post explicando eso mismo

Dash
Publicado: 15/01/2010 4:10 pm

aldo tu error se soluciona poniendo
ob_start(); // al inicio
ob_end_flush(); // al final

Saludos

rafael vivas
Publicado: 18/01/2010 8:28 am

excelente funciona a la perfeccion compañero

zervanstyle
Publicado: 11/02/2010 1:41 am

Saludos, de seguro la siguiente información les será de mucha utilidad para la mayoria, que hemos obtenidos muy buenas soluciones mediante este blog…La siguiente es que esta clase ezpdf, no trata imagenes *.png por lo tanto muchos deberán estar atentos ante cualquier situación parecida.

 

Comentar

En este blog los comentarios están moderados, no aparecerán inmediatamente en la página al ser enviados. Por favor, evita los comentarios ofensivos u obscenos por que no serán aprobados.

(Requerido)

(Requerido, no será publicado)

(Requerido)

(Tags aceptados: <a> <em> <strong> <code> <ul> <li>)