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:

 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.

include('class.ezpdf.php');
$pdf =& new Cezpdf('a4');
$pdf->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("unijimpe");
$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.

Comentarios Total 113 comentarios

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.

Abril
Publicado: 26/03/2010 8:56 am

Hola necesito imprimir una imagen extraida de una BD en pdf, si alguien me puede ayudar con la sintaxis que debo utiizar. Gracias

ansanflo
Publicado: 19/04/2010 5:15 am

Hola a todos, a mi me pasaba lo mismo que a todos, que solo me mostraba la primera imagen de todas las que ponía, y el resto ni caso, pero al final lo he podido solucionar.
Se me ocurrió imprimir lo siguiente por probar en el PDF a ver que salía:

Y cual fue mi sorpresa cuando vi que en el PDF aparecía esto:

Por algún motivo, no detectaba la última \ de la ruta, por lo que en la ruta de la imagen que insertaba con ezImage le puse al final en lugar de una, dos \\, así:

$pdf->ezImage(«C:\Documents and Settings\Mis Imagener\Varios\\firma.png»,20,75,’none’, ‘left’);

Y ya funciona!! :-D

Un saludo!

ansanflo
Publicado: 19/04/2010 5:18 am

bueno, en los huecos donde no sale nada ponía

(Etiquetas img con la ruta al archivo png en el campo src)

juan
Publicado: 20/04/2010 12:22 pm

En mi BD estan almacenadas fotografias en un campo blob, hago la consulta de la imagen que quiero, la transformo y puedo mostrarla en el navegador, pero mi aplicacion requiere que sea mostrada en un pdf generado con ezpdf

Jose
Publicado: 11/05/2010 2:14 pm

Hola, tengo un problema y es que al añadir unos 20 $pdf->ezText(«lo que sea»); me empieza a dar problemas, si quito alguna linea se me resuelve el problema y no es porque esté mal escrita. Me da el error al abrir el documento. El archivo está dañado y no puede repararse. ¿Alguna idea?

Gracias

JC
Publicado: 12/05/2010 12:11 pm

Hola, yo también tengo el problema de que al insertar algo que tenga almacenado en la base de datos que ocupe más de 1 línea solo me muestra una línea, por favor, si alguien sabe como se solucciona este problema que me lo comunique que me está ocasionando muchos problemas.

Un saludo y gracias por adelantado

leo
Publicado: 14/05/2010 10:29 am

alguien sabe com hago para que el pdf que se genera se abra en una nueva pestaña o que abra el adobe y lo muestre alli, pues cuando lo genero se abre el pdf en la misma pestaña que tengo mi aplicacion

carlos
Publicado: 28/06/2010 1:24 am

Wenos dias, ami lo que me gustaria saber es si puedo meter una imagen dentro de una tabla. y a lado una descripcion por ejemplo.
un saludo y gracias de antemano

ronny
Publicado: 01/07/2010 7:46 pm

tambien ando buscando una idea parecida a la de carlos….imagen al lado de un texto….o de varias lineas de texto

Rodrigo
Publicado: 25/07/2010 3:25 pm

que tal, miren quisiera poder ayudar a alguien pero eh leido alguno de sus preguntas y no le atino a ninguno, lo haria en compensacion por que quiero preguntar algo espero me puedan opinar, gracias, miren yo eh usado la clace jlpdf para crear un pdf con formato de texto, pero ahora quiero meter una imagen dentro del archivo pdf como encabezado y no lo consigo eh bajado la clace fpdf pero al $pdf->ezImage(«ros.jpg», 0, 420, ‘none’, ‘left’); me aparece el siguiente mensaje de error—-> Fatal error: Call to undefined method JLPDF::ezImage() in C:\AppServ\www\pdf\pdf.php on line 44
la idea que yo tengo es que al crear el pdf con $pdf=new JLPDF(); y al instanciar el metodo $pdf->ezImage(«ros.jpg», 0, 420, ‘none’, ‘left’); pues este no esta incluido dentro de JLPDF pero segun yo deberia de funcionar al usar en el encabezado include(‘class.ezpdf.php’);

diganme como puedo resolver esto, espero que me puedan ayudar, abajo les dejo parte del codigo:

AddPage();
$pdf->SetFont(‘Arial’,»,12);

$pdf->ezImage(«ros.jpg», 0, 420, ‘none’, ‘left’);

$pdf->SetX(100);
$pdf->SetY(45);
$pdf->JLCell(«$head»,180,’c’);

Rodrigo
Publicado: 25/07/2010 3:38 pm

Les posteo de nuevo mi codigo

AddPage();
$pdf->SetFont(‘Arial’,»,12);
$pdf->ezImage(«ros.jpg», 0, 420, ‘none’, ‘left’);
$pdf->SetX(100);
$pdf->SetY(45);
$pdf->JLCell(«$head»,180,’c’);

Jose Tapia
Publicado: 26/07/2010 10:57 am

Gracias excelente aporte

gmlego
Publicado: 05/08/2010 11:11 am

Enhorabuena por tus consejos.

adriana
Publicado: 12/08/2010 12:33 pm

hola chicos(cas), alguien me puede ayudar!!!!!!!!!! como se hace para poder inserta imagenes a un pdf??

las imagenes estan en el servidor.
pense que era asi pero marca error . y es obligatorio sacarlas de mi servidor como le ago
Ejemplo
pdf.Image «http://ipServer/carpeta1/carpeta2/a.jpg»,12,10,32,27,»»,»»

alguien me puede ayudar?? gracias

la_cosita
Publicado: 16/08/2010 5:59 pm

Neo X…. GRACIAS!! por tu comentario sobre el ob_end_clean(); pude mostrar mi imagen. Gracias! SIRVE DEMAS!

mauirico
Publicado: 17/08/2010 3:17 pm

necisto que al generar archivos pdf me acepte etiquetas html y no aparesca solo en texto

dbp
Publicado: 23/09/2010 12:49 am

hola quisiera saber si esta libreria funciona para linux? porq he creeado unos reportes en win, alli funcionan pero a la hora de probarlos en linux no.
Tengo hacer algo adicional?

jose
Publicado: 08/10/2010 10:45 am

Hay alguna manera de insertar una imagen dentro de una columna de una tabal generada con ezTable() , debido a que al momento de insertar la imagen tanto con ezImage() y con addJpegFromFile() , las imagenes se colocan en otra posicion no respetando la posicion dentro de la tabla…

Eduardo
Publicado: 11/11/2010 9:38 am

La información resultó útil. ¡Gracias por el aporte!

linaval
Publicado: 17/11/2010 10:45 am

Por si alguien todavía lo necesita, encontre la forma de insertar imágenes dentro de una tabla en el siguiente link

http://sourceforge.net/projects/pdf-php/forums/forum/261702/topic/1329018

carlos osorio
Publicado: 07/12/2010 7:10 pm

necesito incluir 2 imagenes dentro de un pdf pero he intentado utilizando todas las funcione que dan y no me funciona… acontinuacion coloco el codigo si pueden colaborarme les agradeceria.

selectFont(‘./fonts/Helvetica’);
//$pdf->addJpegFromFile(«fosfatos.JPG»,0,0,595);
//$pdf->ezImage(«icontec.JPG», 0, 20, ‘none’, ‘left’);
$pdf->ezImage(«C:\xampp\htdocs\pdfphpmysql\informes\\fosfatos.jpg»,20,75,’none’, ‘left’);

// Se inicializa el contador de paginas en 1 y se especifica en que lugar se va a imprimir
$pdf->ezStartPageNumbers(500,18,10,»,’Pagina : {PAGENUM} de {TOTALPAGENUM}’,1);
$fechs = date(«d/m/y»);

$host = ‘localhost’;
$user = ‘root’;
$password = »;
$database = ‘demo’;

$query= ‘select * from pruebafosfatos’;

// abrir la conexion
$link = mysql_connect($host,$user,$password);
mysql_select_db($database);
//inicializamos los array
$data = array(); //1ros datos
$data2= array(); //2dos datos
$data3=array(); //dato del certificado nro.
$data4=array(); //datos de los limites
// hacer query
$result = mysql_query ($query ) or die (mysql_error());
//
//Aqui se coloca el header de la Tabla

$cols = array(
‘lote_muestra ‘=>’Lote de Muestra’,
$fechs=>’Fecha Informe’,
‘ciudad’=>’Ciudad’,
‘departamento’=>’Departamento’);

$cols2 = array(

‘estado_fisico’=>’Estado’,
‘apariencia’=>’Apariencia’,
‘descripcion’=>’Descripcion’);

$cols3=array(‘certifi_nro ‘=>’Nro Certificado’);
$cols4=array(

‘limite_super’=>’Limite Superior’,
‘limite_infe’=>’Limite Infeior’,
‘desviacio’=>’Desviacion’);

//

while ($row = mysql_fetch_row($result)) {
$cer=$row[0];
$lote=$row[1];
//$fechinfo=$row[2];
$ciud=$row[3];
$depa=$row[4];
$esta=$row[5];
$apa=$row[6];
$des=$row[7];

// Aqui se agregan las variables formateadas a los array
$data[] = array(
‘lote_muestra ‘=>$lote,
$fechs=>$fechs,
‘ciudad’=>$ciud,
‘departamento’=>$depa);

$data2[] = array(
‘estado_fisico’=>$esta,
‘apariencia’=>$apa,
‘descripcion’=>$des);

//dejamos un espacio en blanco despues del anterior array
$data2[] = array(
‘estado_fisico’=>»,
‘apariencia’=>»,
‘descripcion’=>»);
$data3[] = array(
‘certifi_nro ‘=>$cer
);
}

//opciones de los 2 primeros array
$options = array(
‘shadeCol’=>array(0.9,0.9,0.9),
‘xOrientation’=>’center’,
‘width’=>500,

);

//opciones del 3 array
$options2=array(
‘shadeCol’=>array(0.9,0.9,0.9),
‘xOrientation’=>’center’,
‘width’=>100,

);

$txttit = «EMPRESA DE FOSFATOS DEL HUILA S.A\n»;
$txttit.= «NIT. 891.101.163-9«;

$pdf->ezText($txttit,12);
$pdf->ezText(«\n»,10);//saltos de linea

$pdf->ezTable($data3,$cols3,’CERTIFICADO DE ANALISIS’,$options2,array(‘fontSize’=>6,
‘cols’=>array(

‘certifi_nro’=>array(‘justification’=>’center’)
)
));// salida
$pdf->ezText(«\n»,3);
$pdf->ezTable($data,$cols,»,$options,array(‘fontSize’=>6,
‘cols’=>array(

‘lote_muestra’=>array(‘justification’=>’left’)
,’fecha_informe’=>array(‘justification’=>’left’)
,’ciudad’=>array(‘justification’=>’center’)
,’departamento’=>array(‘justification’=>’center’)

)
));// salida
$pdf->ezText(«\n»,1);
$pdf->ezTable($data2,$cols2,»,$options,array(‘fontSize’=>6,
‘cols’=>array(

‘estado_fisico’=>array(‘justification’=>’center’)
,’apariencia’=>array(‘justification’=>’right’)
,’descripcion’=>array(‘justification’=>’center’)
)
));// salida
//
//

if (isset($d) && $d){

$pdfcode = $pdf->ezOutput();
$pdfcode = str_replace(‘\n’,’\n’,htmlspecialchars($pdfcode));
echo »;
echo trim($pdfcode);
echo »;
} else {

$pdf->ezStream();
}
?>

aleXANDrE Sales
Publicado: 25/02/2011 8:21 am

Neo X,
obrigado pela dica do «ob_end_clean();».

Fazia 3 dias que eu estava quebrando a cabeça tentando colocar imagem e não conseguia de jeito nenhum!

Valeu pela colaboração!

Ruben Juarez
Publicado: 03/03/2011 1:42 pm

!!!!!! Hola a todos,
todo el ejemplo esta muy bien, solo un detalle al generar mi PDF no muestra la imagen solo el texto. Ya verifique las extensiones. Si alguien me puede ayudar se lo agradecería mucho.

machetiao
Publicado: 29/03/2011 4:29 pm

me salen los textos pegados como hago para el salto de linea

Yeid
Publicado: 31/03/2011 1:07 pm

EL SALTO DE LINEA ES \n

mira este ejemplo :
$pdf->ezText(«Nombre_campo\n\n»,12);

aquí hace dos saltos de linea..

Hasta pronto machetiao

Ruben Juarez
Publicado: 19/05/2011 10:15 pm

Alguien sabe como cambiar de posicion el texto????

Yeiny
Publicado: 08/06/2011 10:39 am

Buen Dìa!!

Ptrimero felicitaciones por los ejemplos a mi particularmente me ha ayudado muchisimo. Pero tengo un inconveniente a mis texto me sale todo montado en una linea, porque serà? y otra cosa la línea $pdf->selectFont(‘fonts/Helvetica.afm’) que me quiere decir?

Yeiny
Publicado: 08/06/2011 10:41 am

otra cosita los salto de linea no me funcionan.

Gracias por la yudan que puedan prestar.

Ruben Juarez Cadena
Publicado: 01/07/2011 12:42 pm

Hola, me gustarí saber si alguien sabe como cargar una imagen de la base de datos, con el campo blod y agregarla a esta forma de generar un pdf.

Les agradeceria mucho me ayudaran con esto. estoy dispuesto a pagar si alguien me ayuda. Saludos

YeisonSoto
Publicado: 25/08/2011 7:44 pm

Hola amigo, muy util tu ejemplo de generacion de pdf con php, tengo un problema resulta que cuando genero el pdf, me muestra la hora pero con 7 horas de adelanto, ose a aqui en mi computador tengo las 8:00 Pm y me muestra las 2:00 de la mañana, me puedes ayudar

EDGAR
Publicado: 01/09/2011 3:11 pm

Hola, muy buen post, pero hay cosas q no comprendo, para empezar estoy ingresando una tabla sacada de una BD MySQL, quisiera q esta tabla pueda tener una cabecera, es decir.

1. Poner una cabecera hecha en HTML y mostrarla en mi PDF.

2. Seguido de esta cabecera me gustaria poder mostrar toda mi tabla en MySQL.

He logrado poner una imagen en la cabecera y tambien colocar la tabla llena con datos MySQL, pero no logro que esta cabecera sea un HTML que contenga una imagen y ademas PALABRAS ESCRITAS AL LADO DERECHO DE LA IMAGEN…

Por favor alguien podria ayudarme?

Kelele Head
Publicado: 28/09/2011 1:11 am

@EDGAR
Publicado: 01/09/2011 3:11 pm

Hola, muy buen post, pero hay cosas q no comprendo, para empezar estoy ingresando una tabla sacada de una BD MySQL, quisiera q esta tabla pueda tener una cabecera, es decir.

1. Poner una cabecera hecha en HTML y mostrarla en mi PDF.

2. Seguido de esta cabecera me gustaria poder mostrar toda mi tabla en MySQL.

He logrado poner una imagen en la cabecera y tambien colocar la tabla llena con datos MySQL, pero no logro que esta cabecera sea un HTML que contenga una imagen y ademas PALABRAS ESCRITAS AL LADO DERECHO DE LA IMAGEN…

Por favor alguien podria ayudarme?

Hola Edgar… me puedes decir como hiciste para que saliera la imagen de cabecera? yo pongo la imagen pero sale el espacio en blanco!

Henry
Publicado: 24/10/2011 12:34 am

Hey hermano muy bueno me sirvio de mucho tu post….sigue así éxitos…!

JUAN
Publicado: 05/11/2011 12:14 pm

HOLA BUEN DIA!

ESTOY INTENTANDO METER UN MEDIUMBLOB AL PDF, PODRIAS DE FAVOR ORIENTARME COMO PUEDO METERLO AL PDF PÁRA QUE APARESCA LA IMAGEN, LA LINEA QUE UTILIZO PARA INSERTAR LA IMAGEN ES LA SIGUIENTE:

‘addJpegFromFile(«consultar.php?idfoto=’.$clave.'»,0,0)’ =>’foto‘,
‘clave’=>’Clave‘,
‘nombrep’=>’Nombre(s)‘,

alberto
Publicado: 09/11/2011 3:50 pm

para los amigos que quieren imprimir un campo de texto y necesitan que se siga en la siguiente linea les envio esto.

$pdf->MultiCell(70,2,$Campo’] ,0,’L’,0,’L’);

Espero que les sirvan.

Saludos a todos.
Alberto

daniela
Publicado: 05/12/2011 1:56 pm

Estimado, le comento que tengo puesto \n como salto de linea y efectivamente corta la palabra pero en vez de posicionarla en la línea de abajo lo que hace es volver a escribir en la misma línea, me pueden ayudar?

pietro
Publicado: 13/12/2011 7:23 pm

perro no me funca lo del pdf …necesito uregente hacer eso en mi proyecto

Juan Moreno
Publicado: 26/12/2011 5:26 pm

Hola, funciona muy bien, pruebenlo subido al servidor pues localmente no funciona, mi duda es la sgte genera archivos PDFs con un peso no mayo de 30MB si excede ya no lo genera ni las primeras páginas, ¿Alguien tuvo esta observación y me puede ayudar?, gracias sean felices.

Rodwyn
Publicado: 27/12/2011 12:11 pm

lo hice talcual y me sali esto:
Warning: Cannot modify header information – headers already sent by (output started at C:\AppServ\www\ejemplos\imagen.php:9) in C:\AppServ\www\ejemplos\class.pdf.php on line 1916

Warning: Cannot modify header information – headers already sent by (output started at C:\AppServ\www\ejemplos\imagen.php:9) in C:\AppServ\www\ejemplos\class.pdf.php on line 1917

Warning: Cannot modify header information – headers already sent by (output started at C:\AppServ\www\ejemplos\imagen.php:9) in C:\AppServ\www\ejemplos\class.pdf.php on line 1919
%PDF-1.3 %���� 1 0 obj <> endobj 2 0 obj <> endobj 3 0 obj << /Type /Pages /Kids [6 0 R ] /Count 1 /Resources << /ProcSet 4 0 R /Font <> /XObject <> >> /MediaBox [0.000 0.000 595.280 841.890] >> endobj 4 0 obj [/PDF /Text /ImageC ] endobj 5 0 obj <> endobj 6 0 obj <> endobj 7 0 obj <> stream x�m�Mn�0��>�,����/����h�»pM��@)�eْߌ��f�K�#�l�q��$bP!;<���cs�������g�*�glE0���յE.
¿que estoy haciendo mal?

kamicase
Publicado: 31/12/2011 4:38 pm

Como le hago para poner un encabezado y un pie de pagina a cada una de las paginas que me genere el pdf

 

Comentar

En este blog los comentarios están moderados, serán mostrados cuando el administrador los apruebe. Por favor, evita comentarios ofensivos u obscenos por que no serán aprobados.
Si deseas publicar código fuente debes hacerlo entre las etiquedas <code> y </code>, además debes reemplazar los carácteres < por &lt; y > por &gt;.

(Requerido)

(Requerido, no será publicado)

(Requerido)

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