Crear PDF desde un HTML (mPDF)

La creación de PDF desde HTML gracias a PHP ha sido un problema para muchos programadores, puesto que existen pocos códigos que realicen esto y de todos esos códigos el 90% no servirán por una razón u otra (no coloca bien los DIV, no tiene soporte CSS…)

Así que después de estar buscando y buscando en Kaira y después de probar unos 10 programas de esta índole, nos hemos decantado por mPDF, que es por mucho el mejor de todos.

¿Cómo conseguirlo?:
Pues en la web del autor, es código libre así que no tendréis problemas para descargarlo. Esto ya es opcional pero si vais a realizar un uso comercial de este producto lo mínimo es hacer una pequeña donación para que así sigan programándolo y actualizándolo.

¿Por qué este es mejor que el resto?
Principalmente porque hemos probado la mayoría que existen en el mercado y este tiene muchos factores que hace que sea mucho mejor:
– Por que tiene actualizaciones.
– Por que funciona perfectamente DIV y CSS.
– Es el único que soporta CSS3 y funciona perfectamente atributos como border-radius, box-shadow…

¿Cómo genero el PDF?
Si vuestro proyecto va a ser muy grande, quizás necesitéis configurar como nosotros el archivo de configuración. Si es para ir probando no tendréis problemas tal y como viene configurado. El código para generar el PDF que usamos nosotros es el siguiente:

include(“../MPDF/mpdf.php”);
$mpdf=new mPDF(”);

// La variable $html es vuestro código que queréis pasar a PDF
$html = utf8_encode($html);

//==============================================================
if ($_REQUEST[‘html’]) { echo $html; exit; }

$mpdf->WriteHTML($html);

// SALIDA
$mpdf->Output(‘nombre.pdf’,’D’); exit;

 

Tenemos que recordar que mPDF solamente funciona con UTF8 por lo que si existe algo que no sea UTF8 nos saltará error (a no ser que lo configuremos para que siga adelante), por eso nosotros formateamos el texto con el utf8_encode().

Como veréis el Output() tiene dos opciones, la segunda opción, aunque es opcional recomendamos que añadáis la D. Puesto que así mandará la cabecera (Force-Download) para que el archivo salga para descargar.

37 thoughts on “Crear PDF desde un HTML (mPDF)”

    1. Si usas html_entity_decode() no te funcionará, estarás obligado a usar el utf8_encode().

      El mPDF te va a dar bastante errores si no usas el utf8_encode() para que no te ‘explote’ tendrás que configurar (nosotros lo hicimos) el archivo de configuración e indicar que si se produce un error continué.

  1. hola, en el programa PHP me imprime todo bien, pero la siguiente instruccion no se ejecuta y es la siguiente a
    mpdf->output()
    ir a otrapagina

    me muestra el pdf y ahi se queda y lo que necesito es generar el pdf que escoja la impresora y despues que no se quede, le puse una instruccion de regreso pero no la toma en cuenta, en otros lenguajes hacia un call(mpdf) y despues seguia con la instruccion siguiente, si le quitp el mpdf->output() ejecuta la siguiente linea sin problemas.

    gracias de antemano, espero que alguien me conteste.

    1. No se si te entendido muy bien ¿Lo que quieres hacer es que al hacer click no salga de la página en la que está?

      Si es eso, lo mejor sería usar el ForceDownload.

  2. Hola, consulta… para la variable $html le puedo asignar un file_get_contents?
    Funciona igual?

      1. asi me funciona perfecto en Symfony2

        $html = $this->renderView(‘migrarmigrarBundle:controllers:reportehtmlTOpdf.html.twig’,
        array( ’empresa’ => $nombre_empresa,
        ‘nit’ => $nit,
        ‘polizas’ => $polizas

        )
        );

        //$html = utf8_encode($html);

        $mpdf->WriteHTML($html);

        // SALIDA
        $mpdf->Output(‘informe.pdf’,’D’);

        return;

  3. Definitivamente con mpdf no hay formas de solucionar el problema de la ñ o se puede cambiar la configuracion.
    Gracias por su informacion

    1. Hola Rick!

      Tienes que configurarlo (desde el archivo de configuración) a UTF-8, así de sencillo, es como lo hemos hecho en Kaira :-)

      1. Hola en el archivo de configuración ya vi donde le colocas para que omita los errores de caracteres invalidos de UTF8

        ignore_invalid_utf8 lo pones en true y listo pero igual no salen las ñ y acentos, usando el utf8_encode inclusive no se caul seria el sitio en la configuración para solventar esto

        Gracias

        1. Hola Gustavo, no hay que irse tan lejos, en la configuración (creo que es en config.php) existe un apartado que pones en una variable ‘utf8’ y ya te va todo bien.

          Un saludo.

          1. Gracias por tu respuesta, ya busque en todo el config.php y que va no conseguí esa variable, sabrás cual es?

      1. Aunque se pueda hacer que tarde menos depurando el código lo más lógico es que si realmente lo necesitas para trabajar te cambies a un servidor o si es un VPS le pongas más procesador & RAM.

  4. Tengo el siguiente problema: cuando quiero utilizar WriteHTML($template) el archivo html que le paso para que escriba el pdf es muy grande (65 pág o mas, con una tabla con muchos campos), necesito que alguien me ayude para que no tarde tanto tiempo en hacer el pdf. Gracias!

  5. hola una consulta como hago para usar clausulas if en un reporte con mpdf
    ose algo como esto:
    $tipo_persona;
    $html’

    if($tipo_empresa==”1″)
    {echo”es persona juridica”;}
    else{echo”es persona natural”}

    ‘;

    1. Thanks for the tutorial. I’ve been known in the past to set up what I think is a ftniuioncng autoresponder only to head off on holiday and find out I was wrong. Nevermind, you learn from your mistakes.

  6. Hola!!!
    he creado un sistema de cotizacion de productos, cuando el cliente solicita mas de cinco productos para cotizar , el sistema convierte la informacion correctamente y descarga el pdf, pero no lo envia a traves del correo.

    Si la cotizacion es de menos de cinco productos , si envia el pdf por correo. como puedo resolver esto??

  7. Señores como puedo redireccionar a otra pagina despues de haber impreso el pdf?
    Gracias por su ayuda.

  8. Para decir que finaliza la pagina usa:
    $pdf->pagebreak;
    Luego, si continúan las paginas:
    $pdf->AddPage();

  9. Hola, yo solucioné el problema de las ñ y asentos, antes de imprimir el pdf verifique si el texto tiene caracteres especiales luego con php identifico el caracter y lo convierte a su forma html y listo, me imprime la ñ,
    ejemplo

    la palabra “ñandu2, el script php identifica el caracter ñ y lo convierte en ñ y listo, el texto queda ñandu y el pdf imprime ñandu

    Saludos

  10. Hola, yo solucioné el problema de las ñ y asentos, antes de imprimir el pdf verifique si el texto tiene caracteres especiales luego con php identifico el caracter y lo convierte a su forma html y listo, me imprime la ñ,
    ejemplo

    la palabra “ñandu2, el script php identifica el caracter ñ y lo convierte en &_ntilde; y listo, el texto queda &_ntilde;andu y el pdf imprime ñandu

    Saludos

  11. ayudaaaaaaaaaa
    me aparece este error y ya no se que hacer

    Parse error: syntax error, unexpected ‘)’, expecting ‘(‘ in /home/httpd/html/rrhh/sistemas/solicitud_hsa/pdf/mpdf60/mpdf.php on line 30492

  12. ayuda
    me sale este error
    Parse error: syntax error, unexpected ‘)’, expecting ‘(‘ in /home/httpd/html/rrhh/sistemas/solicitud_hsa/pdf/mpdf60/mpdf.php on line 30492

    no se que hacer :/

Leave a Reply

Your email address will not be published. Required fields are marked *