PDFs con fondo utilizando PHP

En esta oportunidad les presentamos la forma de generar archivos PDF que contengan un fondo personalizado utilizando PHP. Esto nos puede permitir crear por ejemplo diplomas o certificados de forma rápida basado en un fondo predeterminado en conjunto con la información extraída de una base de datos. Para la generación de archivos PDF utilizaremos la clase R&OS: pdf class de la cual ya hemos comentado anteriormente en Generar PDF con PHP.

pdf-background.jpg

Requisitos
Lo primero que se necesita es la clase R&OS: pdf Class que es la base para la creación de PDF. Lo siguiente es una clase llamada backgroundPDF el cual es una extensión de la clase anterior. Esta la puedes encontrar en Background colors and images, descargan el archivo class.backgroundpdf.txt y lo renombran a class.backgroundpdf.php.

Implementando
Para la implementación de los PDF con fondo, incluimos las dos clases necesarias y luego inicializamos el PDF creando una instancia de la clase backgroundPDF de la siguiente forma.

include('class.ezpdf.php');
include('class.backgroundpdf.php'); 
 
$pdf = new backgroundPDF('a4', 'portrait', 'image', array('img'=>'img.jpg'));  

En donde hemos seleccionado el tipo de papel, la orientación del papel y la imagen que deseamos utilizar como fondo para nuestro PDF. Luego de ello continuamos con los comandos ya conocidos para la creación de PDF con lo cual tendríamos:

include('class.ezpdf.php');
include('class.backgroundpdf.php'); 
 
$pdf = new backgroundPDF('a4', 'portrait', 'image', array('img'=>'img.jpg'));  
$pdf->selectFont('Helvetica.afm'); 
$pdf->ezText('Background in PDF', 50); 
$pdf->ezText('', 12); 
$pdf->ezText('Ejemplo de PDF utilizando una imagen como Fondo.', 12); 
$pdf->ezNewPage(); 
$pdf->ezText('Pagina 2', 50); 
 
$pdf->ezStream();

Con lo cual obtenemos el siguiente resultado que hemos colocado en pdf-background.php. Como ven es muy sencillo y tiene infinidad de utilidades. Finalmente les dejo los archivo fuente de este ejemplo para que puedan hacer sus propios cambios.

Comentarios Total 45 comentarios

Foreman
Publicado: 31/01/2008 11:22 am

Pues si puedo usart esto con el mismo wordpres para darle un sello a mis entradas.

ketz
Publicado: 01/02/2008 2:55 am

hola ke tal.. saludos..

una duda… por que me manda error de adobe diciendo que elarchivo esta dañado, e intentado bajar la calidad a menos de 7kb y solo asi me funciona, pero obvio se ve muy mal…

cualquier ayuda te lo agradeceria.. muy buen blog.. ;)

Alejandro
Publicado: 04/02/2008 12:54 pm

Lo de las imagenes me funciona bien, pero cuando quiero insertar acentos o la ñ me aparecen caracteres raros, alguna idea?
GRacias

karla
Publicado: 02/04/2008 11:32 am

muchas gracias por tu aporte realmente me sirvio, ahora necesito agregarle el logo y fecha numero de pagina es decir pie de paginaa y cabezare como podria hacerlo porfa si tienes uno q me sirva de ayuda o guia´´?

Laura
Publicado: 30/05/2008 9:11 pm

Hey Alejandro, revisa que tengas buena la ruta hacia la carpeta fonts:

$pdf->selectFont(‘../fonts/Helvetica.afm’);

seguro te solucionara el problema =P

Mahatma
Publicado: 30/06/2008 5:54 pm

Qué tal buenas tardes. Disculpen hay alguna forma para poder colocar en cualquier parte del PDF los objetos dondo yo quiero, es decir, Supongamos que los quiero a determinada cantidad de pixeles del margen izquierod, derecho, etc, etc.
Como si le aplicara un CSS.
Muchas gracias.

Coraly
Publicado: 06/07/2008 4:06 pm

Estoy tratando de hacer un reporte pdf, que tiene dos niveles de ruptura, pareciera que la instrucción $pdf->ezStream(); cierra el ciclo.
No existe una forma de imprimir registros en forma parcial.

Diana
Publicado: 30/08/2008 8:04 pm

Hola, me ha servido perfecto tu ejemlo, mil gracias; aunque tengo un pequeño problema necesito que la imagen no se agrande al tamaño de la hoja, por que mi imagen debe de quedar en aprox un cuarto de la hoja pero me la agranda al tamaño de la hoja completa. Alguien podría ayudarme??

Luis
Publicado: 09/09/2008 1:45 pm

Hola amigo.
Super interesante su ejemplo, pero toy tratando de adaptarlo a mis necesidades pero no encuentro como sombrear el encbezado de titulo de una tabla del formulario.por favor si me pueden ayudar. Gracias

Edward
Publicado: 16/09/2008 6:45 pm

Hola.
Muy buenas estas pastillas, casi todo esta en la documentación si uno lee bien pero estas pastillas si que yudan mycho para dar un buen inicio.

Gracias!

andres
Publicado: 08/10/2008 8:58 am

mira que sin utilizar la libreria class.backgroundpdf.php, los ejemplos me funcionan perfectamente, pero al utilizarla para generarla con la imagen me genera el siguiente error

img.jpg
Warning: Cannot modify header information – headers already sent by (output started at C:\AppServ\php5\PEAR\class.backgroundpdf.php:73) in C:\AppServ\php5\PEAR\class.pdf.php on line 1916

cualquier ayuda gracias…..

Korku
Publicado: 10/01/2009 10:36 am

Me da el mismo error como el caso de andres… ¿Por qué puede ser?

Warning: Cannot modify header information – headers already sent by (output started at /homepages/5/d217807405/htdocs/dev025/pdf/class.backgroundpdf.php:128) in /homepages/5/d217807405/htdocs/dev025/pdf/class.pdf.php on line 1916

Warning: Cannot modify header information – headers already sent by (output started at /homepages/5/d217807405/htdocs/dev025/pdf/class.backgroundpdf.php:128) in /homepages/5/d217807405/htdocs/dev025/pdf/class.pdf.php on line 1917

Warning: Cannot modify header information – headers already sent by (output started at /homepages/5/d217807405/htdocs/dev025/pdf/class.backgroundpdf.php:128) in /homepages/5/d217807405/htdocs/dev025/pdf/class.pdf.php on line 1919

Korku
Publicado: 10/01/2009 10:44 am

Ya lo solucioné!

Usar buffers de salida con ob_start(); en el inicio del script y ob_end_flush(); en el final del script.

Leer http://www.php.net/manual/es/function.ob-start.php
http://www.php.net/manual/es/function.ob-end-flush.php

Lucas
Publicado: 28/04/2009 4:43 pm

Como lo solucionaste?
Le puse los
ob_start(); // al inicio
ob_end_flush(); // al final

Pero cuando llamo a la imagen no la carga.

$pdf = new backgroundPDF(‘a4’, ‘landscape’, ‘image’, array(‘img’=>’imagen.php?idcertificado=1’));

Ayuda por favor.

Lucas
Publicado: 28/04/2009 4:44 pm

Agrego que si genera el PDF pero sin la imagen de fondo.

Lucas
Publicado: 28/04/2009 4:47 pm

header(«Content-Type: image/jpeg»);
require_once(«../conectarse.php»);
require_once(«../funciones.php»);
$idcertificado=$_GET[‘idcertificado’];
conectar();
$result = mysql_query(«SELECT imagen FROM certificados WHERE idcertificado=’$idcertificado'»);
$result_array = mysql_fetch_array($result);
echo $result_array[0];

Luis Alberto
Publicado: 16/05/2009 9:53 am

Funciona muy bien, pero estoy tratando de generar una factura en pdf y necesito imprimir el texto con coordenadas exactas, como lo hago porque no veo en la clase una funcion que me permita hacerlo, agradezco su colabacion.

eduardo
Publicado: 26/05/2009 4:44 pm

como se pueden crear hojas de estilo con la clase css.php en pear?

raul
Publicado: 02/06/2009 7:16 am

buenas, no me carga la imagen de fondo,
estoy haciendo una prueba con el codigo que viene aqui, tengo todos los ficheros correctamente en el servidor.

gracias

Elena
Publicado: 20/07/2009 5:56 am

Muchas gracias por el ejemplo, me ha servido de mucho. Ahora necesito saber si hay alguna manera en el que la segunda hoja de mi PDF tenga un fondo diferente a la que he puesto en la primera página.

Muchas gracias,

Elena
Publicado: 20/07/2009 6:31 am

Por favor necesito una ayudita,
gracias

Fabricio
Publicado: 24/11/2009 1:50 pm

puedo usar como fondo otro pdf? mil gracias

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

Hola para los que tengan problemas con este ejemplo y con el ejemplo que indica como poner una imagen 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.

Ahora lo que yo quiero preguntar es 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!

Fernando
Publicado: 10/01/2010 2:16 pm

Ya probe los ejemplos aqui mencionados funcionan bien, solo que necesito hacer un reporte en un formato en papel definido mi duda es la misma que la de Luis Alberto
Publicado: 16/05/2009 9:53 am como imprimir los resultados de la base de datos en coordenadas exactas.
Espero que me puedan ayudar???????

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

Hola a todos, me funciono a las mil maravlllas y me esta sacando de un problemon que ni se imaginan, bueno en mi pdf inserte otra imagen arriba, pero necesito insertar una siguente al lado, pero al insertarla me la deja abajo… y mi otra duda es si al insertar texto, podria justificarlo left,center o right… eso
Saludos y gracias por el aporte

Dash
Publicado: 16/01/2010 8:50 pm

No me habia dado cuenta, pero esto no funciona con IE pero si me funciona a la perfeccion con mozilla… alguen tiene algun modo de solucionar esto?

Wanda
Publicado: 04/04/2010 3:08 am

no saben lo agradecida que estoy, ya solucione, tenia dias leyendo investigando y probando de todo, la solucion esta simple linea era lo que faltaba

ob_end_clean();

gracias!!!!!

Alexis Marín
Publicado: 18/05/2010 2:59 pm

para colocar fondos diferentes a cada pagina copie una de las funciones y la agregue a la clase class.backgroundpdf

esta la pueden sacar de aca: http://www.google.com/notebook/public/02148221336876690088/BDR-PDAoQ4crm54ol

Saludos

Alberto
Publicado: 19/07/2010 8:48 am

Me ha servido de mucha ayuda, muuchisimas gracias!!!! De verdad!!
Esta genial esta clase!!

Graphixx
Publicado: 18/08/2010 11:34 am

Cuando uso imagenes de mas de 100kb no las carga, alguien sabe por que sucede esto ?

Franco
Publicado: 18/11/2010 11:33 pm

Alguien podria ayudarme con una ejemplo, ya que la imagen de fondo no se carga.

$pdf = new backgroundPDF(‘a4′, ‘landscape’, ‘image’, array(‘img’=>’imagen.php?idcertificado=1′));

en cual de los siguientes parametros debo direccionar a la imagen a cargar???

‘image’ o ‘array(‘img’=>’direccion de l aimagen’)’???

gracias por su ayuda….

terius
Publicado: 09/04/2011 4:08 pm

hola me han servido mucho estos ejemplos pero quisiera saber si alguien sabe donde se puede conseguir la documentacion de esta clase traduciada al español y que la mande a mi correo teriusdarck@hotmail.com se lo agradeceria mucho

Mila
Publicado: 13/04/2011 3:09 pm

Por favor alguien podria decirme como colocar encabezado en todas las paginas. gracias

Consstantinne
Publicado: 23/11/2011 2:42 pm

Para los que desean cambiar el tamaño de la imagen este es el código:

$pdf = new backgroundPDF(‘a4’, ‘portrait’, ‘image’, array(‘img’ => ‘img.jpg’, ‘width’ => 522, ‘height’ => 331, ‘xpos’ =>10, ‘ypos’ => 500));

Tan solo se cambian los valores del ancho, del alto, y la posición donde desean que aparezca la imagen (xpos, ypos).

Espero que les sirva!!!

Suerte en su proyecto.

Gracias a todos por su aporte!

jacqueline
Publicado: 22/12/2011 10:32 am

tengo el siguiente error ayundenme por favor

Warning: Cannot modify header information – headers already sent by (output started at C:\AppServ\www\oportunidad\incluir\config.php:13) in C:\AppServ\www\oportunidad\librerias\class.pdf.php on line 1916

Warning: Cannot modify header information – headers already sent by (output started at C:\AppServ\www\oportunidad\incluir\config.php:13) in C:\AppServ\www\oportunidad\librerias\class.pdf.php on line 1917

Warning: Cannot modify header information – headers already sent by (output started at C:\AppServ\www\oportunidad\incluir\config.php:13) in C:\AppServ\www\oportunidad\librerias\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 <> >> /MediaBox [0.000 0.000 595.280 841.890] >> endobj 4 0 obj [/PDF /Text ] endobj 5 0 obj <> endobj 6 0 obj <> endobj 7 0 obj <> stream xœ•WÍ’ÚF¾ó}Lª²ãù—tr·HX œœe¡]Ë…$,Ày/ „‹— oÞ1`ë’€ŸÂùc®Æ?Ãús#¸ÒÄçìrÈc´œ„ÓÙ|.ÖK+P²€pé]œ|ŸÎî{G{¥º(üc¶š}_Ø1͆’sB9¿œ»º£Ì³“Äêr5ä/Ž»Åkdð×HÒÓ¶}TžTJ÷‘-¬F£÷?L`¤”ƒÉ¨}¼S|Íã”åÙDƒœ3E ‰âÂbäœ)=ÖôJøç8ùrL·Y‘B\Å ~ƒ§mY¥{øšm·és¼·E-<<4v9Û:Û•RMtà ¿K“O1–aží³²p~)õÆî¿ãÜU२(œ<Œçˬ„uÔ¨%±1û±›ÌEwn¢èqÙ¥àLœ6Û[äŒ)?m°Ki3f[nËl‘3¦‘h#¶GšX‹deë´­k·³ÈÂ}•3ôŽö)‘L^ç­qö(éš9³yÁd¤Å&­PGFTo:I½ªTiìnÒ±VWعcÈQïɧòzU(uÕwe—•â„ùν ø69þ½œ§Ý”XË&®=ó ì³ÜmcÜœgiq(!)+2»z,Ì ¼½¡xæzÅ7ˆ³x#;Š¿ÙJJz$½uäz+µVRØÆ…§Vêˆ-rÆl\Ò’Úˆe%k‘¬l–8¶o1|Ê(œ}R-†ÏsìaC‹)\ù×YIâlЁãå» ï?,¦ËS_ÚBz˜ÌwÄ1″aRë,yéÝ%ħ/Y‘§›,>ÜpçÒGé÷^šéîüŠ,8¸tï]n—b¥B_¹þ àCío³§,‰ëÆ‚n+¡¨MU’øž=¯ŠŸUuEôõzYäW4ri]!¥è¥h=лÅúL#øÑF,W˜ØŽdgëÔ\¿.¹ãá/q1ÇÃ_r†½´qËÿDuE endstream endobj 8 0 obj <> endobj xref 0 9 0000000000 65535 f 0000000015 00000 n 0000000080 00000 n 0000000126 00000 n 0000000280 00000 n 0000000309 00000 n 0000000445 00000 n 0000000508 00000 n 0000001697 00000 n trailer <> startxref 1804 %%EOF

Ruth
Publicado: 26/12/2011 11:44 pm

Muchas gracias, los codigos funcionan agregando la linea
ob_end_clean();
antes del
$pdf->ezStream();

Mil gracias

JORGE
Publicado: 01/01/2012 11:02 pm

Estimados amigos, alguien sabe como se puede poner color de fondo a una celda en especial o a una fila y poner un borde a una fila en especial he intentado hacerlo pero no lo he logrado. Agredecere sus respuestas gracias !!!

GevolutionXalapa
Publicado: 16/03/2012 12:15 am

Buenooo… un saludo a todos

les voy a comentar un problema que me sucedió y me trajo un buen ratoootee viendo cual era el problema.

El problema de visualizacion de la imagen completa puess esta linea define el fondo

$pdf = new backgroundPDF(‘a4’, ‘portrait’, ‘image’, array(‘img’=>’img.jpg’));

por lo que es correcto y algunos le funcionara como a un compañero en mi caso no lo fue y consultando unas paginas medí cuenta que solo faltaavaaa agregar «&»‘img.jpg’));

yyy listo espero que les aya ayudado puesto que todos tenemos que colaborar. Un saludo

yamsita
Publicado: 30/05/2012 6:06 pm

hola hola,
He corrido el codigo y me da este error, le he dado vueltas pero no puedo resolverlo, alguien me podria ayudar…

Fatal error: cannot redeclare class Cezpdf in ……..class.ezpdf.php on line 1554

feacias por su ayuda

andres
Publicado: 17/07/2012 3:21 pm

hola me gustaria saber como incluir la imagen de fondo en una consulta sql

Ricardo PB
Publicado: 03/10/2012 12:12 pm

Hace unos 6 meses estoy intentando hacer lo que acontinuación les explico, espero que haya alguien que pueda ayudarme:
Tengo una red social con una orientación determinada y queremos entregar certificados a nuestros abonados una vez que hayan rellenado un formulario y hecho una donación de un Euro mediante Paypal; con los datos obtenidos en el formulario se crearía el certificado o diploma que el miembro podría descargar en PDF e imprimirlo en su casa. Alguna idea? Gracias

Miguel
Publicado: 30/11/2012 4:48 am

Hola a todos, resulta que tengo un problema. Todo funciona perfectamente, pero cuando genero mas de 5 pdf’s se cuelga ¿como podria solucionarlo? Gracias

Andreina
Publicado: 31/01/2013 3:04 pm

Excelente!! rato en esto y el ob_end_clean(); es la solución…. Gracias de verdad!

Spans
Publicado: 05/10/2013 5:49 pm

Saludos, ya me funciona todo perfecto para lo que quiero pero existe un problema, no me colola el texto en negrita por elemplo coloco.

$pdf->ezText(« TITULO /b>»,12,array(‘justification’=>’center’));

me aparece bien, en negrita, pero cuando le agrego la imagen o esta linea de codigo

$pdf = new backgroundPDF(‘letter’, ‘portrait’, ‘image’, array(‘img’=>’img/fondo_logo.jpg’));

aparece la imagen, el texto pero me quita las negrita, alguien me puede ayudar con esto o sabe la solución.

DAVID
Publicado: 20/07/2014 4:20 am

Hola no se si me contestaras pero he descargado tu ejemplo y me da error al generar el pdf y no he llegado ni ha utilizarlo esta como tu lo has puesto. Me puedes ayudar

 

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>)