Foros del Web » Programando para Internet » PHP »

Aporte/ejemplo crear pdf haciendo clic con html2pdf

Estas en el tema de Aporte/ejemplo crear pdf haciendo clic con html2pdf en el foro de PHP en Foros del Web. En el aporte anterior añadí un ejemplo simple de como pasar el html a pdf usando dompdf haciendo click a un botón y cambiado sus ...
  #1 (permalink)  
Antiguo 08/06/2011, 05:53
 
Fecha de Ingreso: agosto-2010
Ubicación: Tenerife
Mensajes: 893
Antigüedad: 13 años, 8 meses
Puntos: 202
Aporte/ejemplo crear pdf haciendo clic con html2pdf

En el aporte anterior añadí un ejemplo simple de como pasar el html a pdf usando dompdf haciendo click a un botón y cambiado sus características.
http://www.forosdelweb.com/f18/aport...dompdf-919465/

Como algunos usuarios prefieren html2pdf a dompdf mostraré como hacer exactamente lo mismo con apenas modificar unas líneas de la función.

Recuerdo que sólo es un ejemplo que sirva de guía, para quienes han tenido problemas al crear pdfs.

Descargar html2pdf:
http://sourceforge.net/projects/phphtml2pdf/

Opciones:
html2pdf, dispone de muchísimas otras opciones, pero me centraré en lo básico que es mostrar el pdf y poder cambiarle las opciones.

No se muestran estas opciones en el ejemplo pero las comento ya que se le pueden añadir y que hacen de html2pdf una "buena" librería para convertir a pdf: (Ver en la documentación en caso de dudas)

Dejo la documentación del html2pdf en español:
http://wiki.spipu.net/doku.php?id=ht...:es:v3:accueil

Un pequeño dejavú, (aunque no igual) del post anterior:

convertToPDF.php
Código PHP:
<?php

function doPDF($path='',$content='',$body=false,$style='',$mode=false,$paper_1='P',$paper_2='A4')
{    
    if( 
$body!=true and $body!=false $body=false;
    if( 
$mode!=true and $mode!=false $mode=false;

    if( 
$body == true )
    {
        
$content='
        <!doctype html>
        <html>
        <head>
            <link rel="stylesheet" href="'
.$style.'" type="text/css" />
        </head>
        <body>'
            
.$content.
        
'</body>
        </html>'
;
    }

    if( 
$content!='' )
    {
        
ob_start();
        
        echo 
'<page>'.$content.'</page>';
        
        
//Añadimos la extensión del archivo. Si está vacío el nombre lo creamos
        
$path!='' $path .='.pdf' $path crearNombre(10);  
            
        
$content ob_get_clean(); 
        require_once(
'html2pdf/html2pdf.class.php'); 
        
        
//Orientación / formato del pdf y el idioma.
        
$pdf = new HTML2PDF($paper_1,$paper_2,'es'/*, array(10, 10, 10, 10) /*márgenes*/); //los márgenes también pueden definirse en <page> ver documentación
        
        
$pdf->WriteHTML($content);
        
        if(
$mode==false)
        {
            
//El pdf es creado "al vuelo", el nombre del archivo aparecerá predeterminado cuando le demos a guardar
            
$pdf->Output($path); // mostrar
            //$pdf->Output('ejemplo.pdf', 'D');  //forzar descarga 
        
}
        else
        {
            
$pdf->Output($path'F'); //guardar archivo ( ¡ojo! si ya existe lo sobreescribe )
            
header('Location: '.$path); // abrir
        
}
    
    }

}

function 
crearNombre($length)
{
    if( ! isset(
$length) or ! is_numeric($length) ) $length=6;
    
    
$str  "0123456789abcdefghijklmnopqrstuvwxyz";
    
$path '';
    
    for(
$i=$i<$length $i++)
      
$path .= $str{rand(0,strlen($str)-1)};

    return 
$path.'_'.date("d-m-Y_H-i-s").'.pdf';    
}

?>
index.php
Código PHP:
<?php

//Aquí pondriamos por ejemplo la consulta
$html='
<table style="background-color="#BECEDC"">
<tr>
<td>
    <img src="http://demo.html2pdf.fr/examples/res/logo.gif"/>
</td>
</tr>    
<tr>
<td>
<table>
    <tr>
        <th>Nombre</th>
        <th>Tipo</th>
        <th>Imagen</th>
        <th>Comentario</th>
        <th>Unidades</th>
        <th>Precio unidad</th>    
    </tr>    
    <tr>
        <td>pensandoo</td>
        <td>icono</td>
        <td><img src="http://static.forosdelweb.com/fdwtheme/images/smilies/scratchchin.gif"/></td>
        <td>iconito pensativo</td>
        <td>3</td>
        <td>10</td>
    </tr>
    <tr>
        <td>fiesta</td>
        <td>icono 3</td>
        <td><img src="http://static.forosdelweb.com/fdwtheme/images/smilies/porra.gif"/></td>
        <td>iconito festejando</td>
        <td>1</td>
        <td>24</td>
    </tr>
    <tr>
        <td>silbando</td>
        <td>icono</td>
        <td><img src="http://static.forosdelweb.com/fdwtheme/images/smilies/silbar.gif"/></td>
        <td>bombilla silbando</td>
        <td>19</td>
        <td>50</td>
    </tr>
    <tr>
        <td>no no no</td>
        <td>icono 2</td>
        <td><img src="http://static.forosdelweb.com/fdwtheme/images/smilies/negar.gif"/></td>
        <td>negacion</td>
        <td>5</td>
        <td>1</td>
    </tr>
</table>
</td>
</tr>
</table>
'
;

include(
'convertToPDF.php');

if ( isset(
$_POST['PDF_1']) )
    
doPDF('ejemplo',$html,false);

if ( isset(
$_POST['PDF_2']) )
    
doPDF('ejemplo',$html,true,'style.css');

if ( isset(
$_POST['PDF_3']) )
    
doPDF('',$html,true,'style.css');
            
if ( isset(
$_POST['PDF_4']) )
    
doPDF('ejemplo',$html,true,'style.css',false,'P','A5'); //será más grande (comparar con $_POST['PDF_2'])
    
if ( isset($_POST['PDF_5']) )
    
doPDF('ejemplo',$html,true,'',true);

if ( isset(
$_POST['PDF_6']) )
    
doPDF('',$html,true,'style.css',true);
    
if ( isset(
$_POST['PDF_7']) )
    
doPDF('pdfs/nuevo-ejemplo',$html,true,'style.css',true);



?>

<!doctype html>
<html>

<head>
    <link rel="stylesheet" href="style.css" type="text/css" />
</head>

<body>
<table class="header">
    <tr>
        <td><a href="http://www.forosdelweb.com/f18/" target="_blank"><h1>PHP</h1></a></td>
        <td><a href="http://www.forosdelweb.com/" target="_blank"><h2>FOROSDELWEB</h2></a></td>
    </tr>
</table>

<table class="menu">
    <tr>
        <td>Ejemplos para: <strong>html2pdf</strong></td>
        <td><a href="http://wiki.spipu.net/doku.php?id=html2pdf:es:v3:accueil" target="_blank">Documentaci&oacute;n</a></td>
        <td><a href="http://www.yaronet.com/html2pdf" target="_blank">Foro</a></td>
        <td><a href="http://html2pdf.fr/example" target="_blank">Ejemplos de html2pdf</a></td>
    </tr>
</table>

<?php echo $html ?>

<form  action="<?php echo $_SERVER['PHP_SELF'?>" method="POST">
<table>
  <tr>
    <td>Mostrar PDF sin CSS</td>
    <td><input name="PDF_1" type="submit" value="CREAR" /></td>
  </tr>
  <tr>
    <td>Mostrar PDF con CSS</td>
    <td><input name="PDF_2" type="submit" value="CREAR" /></td>
  </tr>
  <tr>
    <td>Mostrar PDF con CSS sin definir el nombre</td>
    <td><input name="PDF_3" type="submit" value="CREAR" /></td>
  </tr>
  <tr>
    <td>Mostrar PDF con CSS y cambiando el formato de la hoja</td>
    <td><input name="PDF_4" type="submit" value="CREAR" /></td>
  </tr>
  <tr>
    <td>Guardar y abrir PDF sin CSS</td>
    <td><input name="PDF_5" type="submit" value="CREAR" /></td>
  </tr>
  <tr>
    <td>Guardar y abrir PDF con CSS sin definir el nombre</td>
    <td><input name="PDF_6" type="submit" value="CREAR" /></td>
  </tr>
  <tr>
    <td>Guardar en otro directorio y abrir PDF con CSS</td>
    <td><input name="PDF_7" type="submit" value="CREAR" /></td>
  </tr>  
  
</table>

</form>

</body>
</html>
style.css
Código HTML:
Ver original
  1. body{
  2. font:12px Arial, Tahoma, Verdana, Helvetica, sans-serif;
  3. background-color:#BECEDC;
  4. color:#000;
  5. }
  6.  
  7. a h1{
  8. font-size:35px;
  9. color:#FFF;
  10. }
  11.  
  12. h2{
  13. color:#FC0;
  14. font-size:15px;
  15. }
  16.  
  17. table{
  18. width:100%;
  19. height:auto;
  20. margin:10px 0 10px 0;
  21. border-collapse:collapse;
  22. text-align:center;
  23. background-color:#365985;
  24. color:#FFF;
  25. }
  26.  
  27. table td,th{
  28. border:1px solid black;
  29. }
  30.  
  31. table th{
  32. color:#FC0;
  33. }
  34.  
  35. .menu{
  36. background-color:#69C;
  37. color:#FFF;
  38. }
  39.  
  40. .menu a{
  41. color:#FFF;
  42. }

Imagen de index.php


Imagen del pdf sin css


Imagen del pdf con css


En esencia es lo mismo, y como verán no es complicado generar pdf con una librería u otra.
Si quieren usar el resto de opciones que trae html2 sólo tienen que modificarlo a su gusto.
__________________
Pensaba que internet era una gran biblioteca de sabiduría, hasta que comprendí que un libro no puede tener mil páginas llenas de faltas de ortografía... :(
  #2 (permalink)  
Antiguo 08/06/2011, 07:38
Avatar de stramin  
Fecha de Ingreso: marzo-2008
Ubicación: Cubil felino
Mensajes: 1.652
Antigüedad: 16 años, 1 mes
Puntos: 336
Respuesta: Aporte/ejemplo crear pdf haciendo clic con html2pdf

Excelente aporte nuevamente.

se ve que ambos métodos logran el mismo resultado, interesante destacar que ninguno de los 2 métodos consigue cambiar el formato del texto con CSS.

dompdf solo tiene unas pocas fuentes incluidas (según dice su manual solo 3), al parecer html2pdf puede usar todas las instaladas (aunque en su manual también aparecen 3).

pero es comprensible, hay que recordar que el PDF se genera en el servidor y por lo tanto no hay forma de saber como se verá realmente la página en el navegador del cliente, por lo tanto solo se puede crear una "suposición" de como se verá o debería verse la página en el cliente solo en base al código HTML.
__________________
El objetivo de este foro es orientar al usuario como un favor y no como una obligación.

Yo soy de los que dan puntos por aporte :D

Última edición por GatorV; 08/06/2011 a las 08:58
  #3 (permalink)  
Antiguo 08/06/2011, 08:19
Avatar de Ximenitaa  
Fecha de Ingreso: abril-2011
Ubicación: Mexico
Mensajes: 208
Antigüedad: 13 años
Puntos: 43
Respuesta: Aporte/ejemplo crear pdf haciendo clic con html2pdf



Compañero: excelente, excelentismo, mis respetos para ti, se nota que sabes muy bien php, muy buena aportacion, muchas gracias por dedicar tu tiempo tratando de explicarnos esas librerias, porque efectivamente habiamos batallado, y con esto me doy cuenta que me falta mucho por estudiar, que realmente con los pocos 3 meses que empece php, me ha dado una vision muy diferente y una gran idea de todo lo que se puede realizar, y personas como tu hacen que uno se esfuerze y motive mas para aprender ...

Talvez cuando inicie php no sabia ni que hacer, pero con los manuales que he leido me han ayudado bastante y no se diga de ustedes....

G R A C I A S ....
__________________
❤(。◕‿◕)❤ . . . Ten un dia .... GeNiAl.... !!!! . . . ❤(◕‿◕。)❤

¿Que dia es hoy? . . . Hoy, hoy, es definitivamente un dia PERFECTO !!
  #4 (permalink)  
Antiguo 08/06/2011, 13:35
 
Fecha de Ingreso: agosto-2010
Ubicación: Tenerife
Mensajes: 893
Antigüedad: 13 años, 8 meses
Puntos: 202
Respuesta: Aporte/ejemplo crear pdf haciendo clic con html2pdf

Cita:
Iniciado por stramin Ver Mensaje
se ve que ambos métodos logran el mismo resultado, interesante destacar que ninguno de los 2 métodos consigue cambiar el formato del texto con CSS.
Sí, la verdad. También es una pena que se hayan quedado con las propiedades del CSS 2.1. Muchos usuarios que usan estas u otras librerías ven cosas mal en sus pdf (acaban tirándose de los pelos) y es porque las propiedades de su hoja de estilo son de CSS3
__________________
Pensaba que internet era una gran biblioteca de sabiduría, hasta que comprendí que un libro no puede tener mil páginas llenas de faltas de ortografía... :(
  #5 (permalink)  
Antiguo 08/06/2011, 13:41
 
Fecha de Ingreso: agosto-2010
Ubicación: Tenerife
Mensajes: 893
Antigüedad: 13 años, 8 meses
Puntos: 202
Respuesta: Aporte/ejemplo crear pdf haciendo clic con html2pdf

Cita:
Iniciado por Ximenitaa Ver Mensaje


Compañero: excelente, excelentismo, mis respetos para ti, se nota que sabes muy bien php

[...]

y con esto me doy cuenta que me falta mucho por estudiar, que realmente con los pocos 3 meses que empece php

G R A C I A S ....
Gracias pero con todos mis respetos, aún estoy aprendiendo.
Lo cierto es que no hay día que no aprenda algo nuevo de php y se me sigue cayendo la baba por como programan algunos usuarios de este foro.

Tres meses es poco tiempo yo cuando pasé de los .NET a PHP no entendía ni que era un $_POST[]. Todos empezamos alguna vez desde 0.
__________________
Pensaba que internet era una gran biblioteca de sabiduría, hasta que comprendí que un libro no puede tener mil páginas llenas de faltas de ortografía... :(
  #6 (permalink)  
Antiguo 08/06/2011, 15:04
Avatar de stramin  
Fecha de Ingreso: marzo-2008
Ubicación: Cubil felino
Mensajes: 1.652
Antigüedad: 16 años, 1 mes
Puntos: 336
Respuesta: Aporte/ejemplo crear pdf haciendo clic con html2pdf

Cita:
Iniciado por IEKK Ver Mensaje
Gracias pero con todos mis respetos, aún estoy aprendiendo.
lo que se destaca por sobretodo, es tu interés por ayudar a la gente, no importa si estas aprendiendo, el hecho de que quieras aportar, al menos para mi, es incluso más importante que saberlo todo.

en el foro tenemos mucha gente solo con ganas de sobrarse y desmotivar al resto sin aportar.

justamente ahora estoy usando dompdf y aprovechando algunas cosas que pones.

no se por que no me deja poner rutas relativas para las imágenes, tienen que ser absolutas (http://www.ruta_absolita...)
__________________
El objetivo de este foro es orientar al usuario como un favor y no como una obligación.

Yo soy de los que dan puntos por aporte :D
  #7 (permalink)  
Antiguo 08/06/2011, 16:49
Avatar de Ximenitaa  
Fecha de Ingreso: abril-2011
Ubicación: Mexico
Mensajes: 208
Antigüedad: 13 años
Puntos: 43
Respuesta: Aporte/ejemplo crear pdf haciendo clic con html2pdf

Hola !!

exactamente todos pasamos por eso, un inicio donde no sabemos nada, ni siquiera un post como tu dices, yo no sabia ni que se usaba un servidor je je , pero pues es poco a poco, y aunque no se mucho aun de php, con lo que leo y veo que a alguien le hace falta esa informacion con mucho gusto se la proporciono, al menos un granito les aporto, creo que stramin y bullan9ebrio saben perfectamente eso, que aunque poco pero trato de ayudarles y tambien personas como dice stramin tu interes por ayudar a lagente, es mucho mas importante que saberlo todo.... y ello motiva a que personas nuevas hagan el intento de ayudar, incluso los que llevamos poco en php .......

Saludos !!!
__________________
❤(。◕‿◕)❤ . . . Ten un dia .... GeNiAl.... !!!! . . . ❤(◕‿◕。)❤

¿Que dia es hoy? . . . Hoy, hoy, es definitivamente un dia PERFECTO !!
  #8 (permalink)  
Antiguo 11/06/2011, 19:55
 
Fecha de Ingreso: junio-2011
Ubicación: Venezuela
Mensajes: 53
Antigüedad: 12 años, 10 meses
Puntos: 1
Respuesta: Aporte/ejemplo crear pdf haciendo clic con html2pdf

Lo utilice pero me da este error TCPDF ERROR: Some data has already been output, can't send PDF file.

Última edición por jmc11jj; 11/06/2011 a las 20:01
  #9 (permalink)  
Antiguo 13/06/2011, 07:30
Avatar de stramin  
Fecha de Ingreso: marzo-2008
Ubicación: Cubil felino
Mensajes: 1.652
Antigüedad: 16 años, 1 mes
Puntos: 336
Respuesta: Aporte/ejemplo crear pdf haciendo clic con html2pdf

dice que ya enviaste una salida, por lo tanto se cambió el cabezal y no puede mostrarse el archivo como PDF si no HTML.
__________________
El objetivo de este foro es orientar al usuario como un favor y no como una obligación.

Yo soy de los que dan puntos por aporte :D
  #10 (permalink)  
Antiguo 19/07/2011, 14:27
 
Fecha de Ingreso: julio-2011
Ubicación: en el norte
Mensajes: 1
Antigüedad: 12 años, 9 meses
Puntos: 0
Respuesta: Aporte/ejemplo crear pdf haciendo clic con html2pdf

podria alguien explicar un poco mejor como funciona este ejemplo

Última edición por viraul; 20/07/2011 a las 13:23
  #11 (permalink)  
Antiguo 24/08/2011, 03:09
 
Fecha de Ingreso: febrero-2008
Ubicación: Euskal Herria
Mensajes: 130
Antigüedad: 16 años, 1 mes
Puntos: 1
Respuesta: Aporte/ejemplo crear pdf haciendo clic con html2pdf

segui los pasos que dice IEKK. El index.php me aparece bien con todos los botones, pero cuando le doy al boton crear se queda un tiempo cargando y despues se queda la pantalla en blanco y no me genera el pdf. Sabeis porque puede ser?
  #12 (permalink)  
Antiguo 26/08/2011, 14:09
 
Fecha de Ingreso: agosto-2010
Ubicación: Tenerife
Mensajes: 893
Antigüedad: 13 años, 8 meses
Puntos: 202
Respuesta: Aporte/ejemplo crear pdf haciendo clic con html2pdf

Comprueba si tienes algún error en tu código, es decir lo que envías a "imprimir" Que estén todos los tags cerrados, como los <div> etc. Si hay errores no te generará el pdf correctamente.

También puede ser referente a la memoria, aunque en dicho caso debería mostrarte un error salvo que los estés ocultando.

Código PHP:
ini_set("memory_limit","128M"); 
O bien son ambas cosas.
Un saludo.
__________________
Pensaba que internet era una gran biblioteca de sabiduría, hasta que comprendí que un libro no puede tener mil páginas llenas de faltas de ortografía... :(
  #13 (permalink)  
Antiguo 28/08/2011, 12:00
 
Fecha de Ingreso: enero-2011
Ubicación: Puebla
Mensajes: 9
Antigüedad: 13 años, 3 meses
Puntos: 0
Respuesta: Aporte/ejemplo crear pdf haciendo clic con html2pdf

Hola felicidades por tan buen aporte. Estaba probando dompdf pero con tu ejemplo mejor usare html2pdf.
Habra una forma de que en lugar de formar el html en el mismo archivo lo tengas en un archivo aparte. Por ejemplo:
Código PHP:
Ver original
  1. $html = "miarchivo.php"; // archivo html o php donde carga consultas de la BD
  #14 (permalink)  
Antiguo 26/09/2011, 08:40
Avatar de stuart_david3  
Fecha de Ingreso: agosto-2011
Mensajes: 215
Antigüedad: 12 años, 7 meses
Puntos: 1
Respuesta: Aporte/ejemplo crear pdf haciendo clic con html2pdf

Vaya!!! Excelente aporte, oye disculpa IEKK has utilizado el "fpdf"?? Yo lo utilice y pues tuve un problema que es este:

http://www.forosdelweb.com/f18/problema-cargar-muchos-registros-pdf-con-php-946537/

Si existeiera alguna solución te lo agradecería demasiadoooooo!!! Bueno pues una solución que me dieron fue utilizar el DOMPDF y vi tu aporte del tema, pero me incline más por el html2pdf (también tuyo), en tu opinión cuál me recomiendas?? Y una última cosa... este error que me arroja a que se deberá??

Fatal error: Uncaught <span style="color: #AA0000; font-weight: bold;">ERROR n°6</span><br>Fichero : C:\xampp\htdocs\Html2Pdf\html2pdf\html2pdf.class.p hp<br>LÃ*nea : 1319<br><br>Imposible cargar la imagen <b>http://demo.html2pdf.fr/examples/res/logo.gif</b> thrown in C:\xampp\htdocs\Html2Pdf\html2pdf\html2pdf.class.p hp on line 1319

La línea del error que me marca es esta:

Código PHP:
Ver original
  1. if ($this->_testIsImage) {
  2.                     throw new HTML2PDF_exception(6, $src); // <----Esta mera 1319
  3.                 }


Y ese error me lo arroja al querer crear el PDF...

Bueno disculpa tantas molestias pero he estado mucho tiempo en lo mismo de la generación del PDF y simplemente ya estoy algo desesperado... De antemano muchas gracias!!!...

Última edición por stuart_david3; 26/09/2011 a las 08:50
  #15 (permalink)  
Antiguo 14/02/2012, 15:39
 
Fecha de Ingreso: febrero-2012
Mensajes: 1
Antigüedad: 12 años, 2 meses
Puntos: 0
Respuesta: Aporte/ejemplo crear pdf haciendo clic con html2pdf

stuart_david3
el error estaá en la imagen que deseas cargar, sea de la base de datos o si la lees desde un directorio, revisa la ruta y extensión.

Etiquetas: html2pdf, pdf
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Tema Cerrado

SíEste tema le ha gustado a 11 personas




La zona horaria es GMT -6. Ahora son las 02:10.