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
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.
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!!!
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
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
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
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
Publicado: 15/01/2010 4:09 pm
ya lo solucione hay un post explicando eso mismo
Publicado: 15/01/2010 4:10 pm
aldo tu error se soluciona poniendo
ob_start(); // al inicio
ob_end_flush(); // al final
Saludos
Publicado: 18/01/2010 8:28 am
excelente funciona a la perfeccion compañero
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.
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
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!
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)
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
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
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
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
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
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
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’);
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’);
Publicado: 26/07/2010 10:57 am
Gracias excelente aporte
Publicado: 05/08/2010 11:11 am
Enhorabuena por tus consejos.
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
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!
Publicado: 17/08/2010 3:17 pm
necisto que al generar archivos pdf me acepte etiquetas html y no aparesca solo en texto
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?
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…
Publicado: 11/11/2010 9:38 am
La información resultó útil. ¡Gracias por el aporte!
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
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();
}
?>
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!
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.
Publicado: 29/03/2011 4:29 pm
me salen los textos pegados como hago para el salto de linea
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
Publicado: 19/05/2011 10:15 pm
Alguien sabe como cambiar de posicion el texto????
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?
Publicado: 08/06/2011 10:41 am
otra cosita los salto de linea no me funcionan.
Gracias por la yudan que puedan prestar.
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
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
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?
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!
Publicado: 24/10/2011 12:34 am
Hey hermano muy bueno me sirvio de mucho tu post….sigue así éxitos…!
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)‘,
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
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?
Publicado: 13/12/2011 7:23 pm
perro no me funca lo del pdf …necesito uregente hacer eso en mi proyecto
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.
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?
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