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.
Luís, te recomendaría utilizar la función html_entity_decode($texto,ENT_QUOTES,”UTF-8″); (http://php.net/manual/en/function.html-entity-decode.php) antes que utf8_encode() .
¿Cómo se comporta mPDF con las palabras con demasiadas tildes y con símbolos gráficos extraños como la Ñ o Ç?
Probaré esta librería a ver qué tal sale.
Saludos!
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é.
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.
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.
Hola, consulta… para la variable $html le puedo asignar un file_get_contents?
Funciona igual?
Sí, claro, no tendría que darte ningún problema
Como le pasas la vista ?? A la función ?? Trabajo con un frameworks, y no sé como pasarle la vista! =/
Ya lo hice! Pero tengo otro problema xD! Con las direcciones =/
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;
yo logre usarlo junto con Yii sin problema alguno
Definitivamente con mpdf no hay formas de solucionar el problema de la ñ o se puede cambiar la configuracion.
Gracias por su informacion
Hola Rick!
Tienes que configurarlo (desde el archivo de configuración) a UTF-8, así de sencillo, es como lo hemos hecho en Kaira
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
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.
Gracias por tu respuesta, ya busque en todo el config.php y que va no conseguí esa variable, sabrás cual es?
como puedo hacer para que me cargue el pdf en una nueva ventana
Es simple tendrás que cargar el mPDF en la nueva ventana en vez de la que se está ejecutando, por ejemplo con un ver PDF
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.
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!
alguien sabe como unir dos o mas archivos pdf en uno solo con mpdf..??
Creo que no se puede. mPDF es para generar PDF no se si tiene opción join.
y con esta libreria como le haria para que al momento de generar el PDF este se pueda enviar via PDF como Attachment
estuve probando mPDF y veo que tiene problemas con reconocer el codigo CSS, vaya, “interpretarlo”.
saludos !
Muchas gracias me esta solucionando la vida…
¿cómo hago para detectar el fin de una página? para que por ejemplo las firmas no me queden en una hoja vacía.
¿Dices que haya una firma en cada hoja?
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”}
‘;
Por favor, explicate más detalladamente. Gracias
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.
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??
Señores como puedo redireccionar a otra pagina despues de haber impreso el pdf?
Gracias por su ayuda.
Para decir que finaliza la pagina usa:
$pdf->pagebreak;
Luego, si continúan las paginas:
$pdf->AddPage();
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
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
hola,
tengo dos tablas y quisiera que cada una salga en un hoja distinta, como lo hago?
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
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 :/