martes, julio 08, 2008

Pdf y PHP / MySql con DOMPdf

Hace unos dias atras buscando en google encontre un clase llamada DOMPdf, que hace muy facil archivos pdf a partir de un archivo HTML.
En comparacion con otros como TCPDF, FDPF y R&OS que son robustos pero cuando uno quiere solo hacer unas simple impresion en pdf es demasiado, comparado con DOMPdf, que esta basado en FPDF, ofrece una manera sencilla de generar archivos PDF desde PHP.

Lo primero es bajar dompdf-0.5.1.tar.gz

2.- Creamos una carpeta llamada pdf en el directorio donde publicas tus paginas .php

3.- Descomprimimos el archivo descargado de DomPDF en la carpeta pdf y le cambiamos el nombre de " dompdf-0.5.1" a solo " dompdf " para hacer las cosas mas faciles.

4.- Crea un archivo php que llamaremos " toPdf.php " esto sera lo que vamos a pasar a .pdf, en tu caso serian tablas con registros de tu Base de Datos por ejemplo.

-------------------------------------------------------------------------------------------------------------------------------------------------------------
//archivo toPdf.php

<?php
require_once("/ruta/dompdf_config.inc.php");
$cabeza = "<img src='ruta/imagen.gif' width='82' height='106' border='0' alt=''>";
$cabeza .= '<br><b>Informe de Prueba</b><br><br>';
$html = $POST['$cabeza'].$POST['$html'];
$dompdf = new DOMPDF();
$dompdf->load_html($html);
$dompdf->render();
$dompdf->stream("prueba.pdf");
?>


-------------------------------------------------------------------------------------------------------------------------------------------------------------

5.- Crea un archivo llamado "sendPDF.php" este sera el archivo que le dira a DomPDF que necesitamos convertir "toPdf.php" a .pdf .

-------------------------------------------------------------------------------------------------------------------------------------------------------------
//archivo sendPDF.php

<?php
include(conexion.php)
conectar();
$result = mysql_query($Sql);
desconectar();
$html = '<table>';
$html .= '<tr><th>ID</th><th>Nombre</th><th>Nivel</th>';
foreach ($matriz_con_encabezados as $cabezeras) {
  $html .= '<th>'.$cabezeras.'</th>';
}
$html .= '</tr>';
while ($row = mysql_fetch_array($result)) {
if($bgcolor == '#DDFFC3') $bgcolor = '#C2FF92';
else $bgcolor = '#DDFFC3';
$html .= '<tr bgcolor='.$bgcolor.'><td>'.$row['ID_USUARIO'].'</td><td>'.$row['AP_PATERNO'].' '.$row['AP_MATERNO'].', '.$row['NOMBRES'].'</td> <td>'.$row['N_CURSO'].' '.$row['N_PARALELO'].'</td>';
foreach ($nombretabla as $dato) {
  $html .= '<td>'.$dato.'</td>';
}
$html .= '</tr>';

}
$html .= '</table>';
echo $html;
$html = urlencode($html);
echo "<a href='toPDF.php?html=$html'>Click Aqui para descargar el informe</a>";
?>

-------------------------------------------------------------------------------------------------------------------------------------------------------------

6.- Ahora abre tu navegador y coloca " http://localhost/sendPDF.php "

y listo.....!!!!!!!!!!! veras como se descarga automaticamente el archivo pdf.

Los archivos mas importantes de la libreria DomPDF son como vez " dompdf.php " " dompdf_config.inc.php ", Siempre que quieras pasar un archivo a pdf le pasas las siguientes variables por GET.

Ademas de esta manera te evitaras muchos dolores de cabeza con los Header(Location.....) que es otra manera de hacerlo, o de incluirlo todo en un solo archivo .php, en el caso que desees trabajar con base de datos mysql u otra bd.

Espero que les sirva y si tienes dudas aqui estaremos..................

31 comentarios:

Diego Carrillo dijo...

He seguido al pie de la letra el ejemplo pero me salen errores...

Y el código de la página esta así:

$link=mysql_connect("localhost","root","123456") or die ("Error conectando");
mysql_select_db("sigathu",$link)or die ("Error seleccionando la BD");
$sql="select nic, name, pw from altas";
$res = mysql_query($sql,$link) or die ("Error en la consulta".mysql_error());

$html = '(table)';
$html .= '(tr)(th)NIC(/th)(th)Nombre(/th)(th)Password(/th)';
foreach ($matriz_con_encabezados as $cabezeras) {
$html .= '(th)'.$cabezeras.'(/th)';
}
$html .= '(/tr)';
while ($row=mysql_fetch_array($res)) {
if($bgcolor == '#DDFFC3') $bgcolor = '#C2FF92';
else $bgcolor = '#DDFFC3';
$html .= '(tr bgcolor='.$bgcolor.')(td)'.$row['0'].'(/td)(td)'.$row['1'].'(/td)(td) '.$row['2'].'(/td)' ;
foreach ($nombretabla as $dato) {
$html .= '(td)'.$dato.'(/td)';
}
$html .= '(/tr)';

}
$html .= '(/table)';
echo $html;
$html = urlencode($html);
echo "(a href='toPDF.php?html=$html')Click Aqui para descargar el informe(/a)";
?)

me genera error en las lineas 9 y 17
9-)foreach ($matriz_con_encabezados as $cabezeras) {

17-)foreach ($nombretabla as $dato) {

Estos son los errores:
Warning: Invalid argument supplied for foreach() in C:\AppServ\www\pdf\sendPDF.php on line 9

Warning: Invalid argument supplied for foreach() in C:\AppServ\www\pdf\sendPDF.php on line 17

Sera que el foreach($matriz_con_encabezados...)
ese $matriz.. debe ser el nombre alguna variable definida antes o consulta o aque corresponde...
al igual que el de foreach ($nombretabla .... sera el nombre de la tabla de la consulta sql...

Diego Carrillo dijo...

Perdon por cambiar las < > por ( ) pero el editor no me permite las < >.

y cuando pulso en el:
Click Aqui para descargar el informe
en la página que se carga sale...

Notice: Undefined variable: POST in C:\AppServ\www\pdf\toPdf.php on line 5

Notice: Undefined variable: POST in C:\AppServ\www\pdf\toPdf.php on line 5

Fatal error: Uncaught exception 'DOMPDF_Exception' with message 'Requested HTML document contains no data.' in C:\AppServ\www\pdf\dompdf\include\frame_tree.cls.php:135 Stack trace: #0 C:\AppServ\www\pdf\dompdf\include\dompdf.cls.php(293): Frame_Tree->build_tree() #1 C:\AppServ\www\pdf\dompdf\include\dompdf.cls.php(377): DOMPDF->_process_html() #2 C:\AppServ\www\pdf\toPdf.php(8): DOMPDF->render() #3 {main} thrown in C:\AppServ\www\pdf\dompdf\include\frame_tree.cls.php on line 135

Tengo el apache 2.2.4
php 5.2.3 y mysql 5.0.45.

Que problema será que no puedo generar el pdf???

Gracias por la ayuda

Anónimo dijo...

Hay muchos problemas pero el que tu dices del POST es que no sería asi sino $_POST, que en realidad debería ser un $_GET

Emits dijo...

Hola

tambien he estado siguiendo este famoso "DOMPdf"

pero solo mi problema es que no puedo encryptar los archivos genrados, es decir incluir contraseña pàra editar o imprimir o copiar texto, etc

Alguien tiene alguna idea?
he buscado en el codigo fuente, pero no soy muy experto en POO.

grax!

Anónimo dijo...

get facebook likes
buy facebook likes

http://www.gameculture.com/2011/03/02/red-bull-augmented-racing http://www.gpucomputing.net/?q=node/69
facebook likes buy facebook likes buy facebook likes
Hello, I pull up Internet Explorer, and it lets me keep my home pages up for a couple of seconds and goes to blocked after a few seconds. It says blocked in the tab up at the top. Do I have a virus or what? How can I fix this? Please help! Thanks!

facebook likes 1000 facebook likes [url=http://1000fbfans.info]get facebook likes [/url] buy facebook likes

Anónimo dijo...

xanax online generic xanax orange round - xanax recreational use weed

Anónimo dijo...

generic xanax xanax side effects in children - xanax online no membership

Anónimo dijo...

buy tramadol online tramadol withdrawal clonidine - buy tramadol pay with mastercard

Anónimo dijo...

buy alprazolam xanax 60 minutes - xanax more drug_uses

Anónimo dijo...

buy tramadol online tramadol 50 mg half life - long will tramadol high last

Anónimo dijo...

generic tramadol tramadol no prescription buy - buy tramadol generic ultram

Anónimo dijo...

buy tramadol online tramadol 717 - buy tramadol online overnight usa

Anónimo dijo...

order tramadol tramadol 50 mg every 4 hours - tramadol jitters

Anónimo dijo...

buy tramadol online get rid tramadol addiction - tramadol dosage and side effects

Anónimo dijo...

buy tramadol online tramadol extended release high - buy tramadol online with mastercard

Anónimo dijo...

alprazolam no prescription xanax dosage before mri - xanax grapefruit side effects

Anónimo dijo...

buy cialis online cialis 36 hour reviews - cialis daily prescription

Anónimo dijo...

buy tramadol online tramadol hcl 50 mg para que sirve - buy tramadol in egypt

Anónimo dijo...

xanax online xanax 2mg green - xanax 2mg bars street value

Anónimo dijo...

cheap cialis cialis online andorra - buy cialis reviews

Anónimo dijo...

cialis online generic cialis ranbaxy - cialis daily nhs

Anónimo dijo...

tramadol online pharmacy tramadol for dogs how often - buy tramadol in usa no prescription

Anónimo dijo...

buy tramadol online buy tramadol online illegal - buy tramadol in the usa

Anónimo dijo...

order tramadol online without prescription ordertramadolonline - buy tramadol online overnight cod

Anónimo dijo...

http://blog.dawn.com/dblog/buy/#about-us tramadol 150 mg dose - buy tramadol saturday delivery

Anónimo dijo...

buy tramadol online tramadol overdose level - buy tramadol online usa

Anónimo dijo...

buy tramadol tramadol 50mg hcl - tramadol 4 dollar list

Anónimo dijo...

ativan anxiety ativan dosage get high - ativan dosage valium

Anónimo dijo...

generic lorazepam side effects of ativan .5 mg - ativan dosage drip

Anónimo dijo...

tramadol generic tramadol 50 mg beer - tramadol ultram narcotic

Anónimo dijo...

buy tramadol online tramadol for dogs liquid - tramadol 325 mg