1629 votos

¿Convertir HTML + CSS a PDF con PHP?

Ok, ahora me estoy golpeando la cabeza contra una pared de ladrillos con este.

Tengo un documento HTML (no XHTML) que funciona bien en Firefox 3 y IE 7. Utiliza un CSS bastante básico para darle estilo y se muestra bien en HTML.

Ahora busco una forma de convertirlo a PDF. Lo he intentado:

  • DOMPDF tenía enormes problemas con las mesas. Factoricé mis grandes tablas anidadas y me ayudó (antes sólo consumía hasta 128M de memoria y luego se moría--ese es mi límite de memoria en PHP.ini) pero hace un completo desastre de tablas y parece que no obtiene imágenes. Las tablas eran sólo cosas básicas con algunos estilos de bordes para añadir algunas líneas en varios puntos;
  • HTML2PDF y HTML2PS : En realidad tuve mejor suerte con esto. Renderizó algunas de las imágenes (todas las imágenes son URLs de Google Chart) y el formato de la tabla fue mucho mejor, pero parecía tener algún problema de complejidad que aún no he resuelto y seguía muriendo con errores desconocidos de node_type(). No estoy seguro de a dónde ir desde aquí; y
  • Htmldoc Esto parece funcionar bien en HTML básico, pero casi no tiene soporte para CSS en absoluto, así que tienes que hacer todo en HTML (no me di cuenta de que todavía era 2001 en Htmldoc-land...) así que es inútil para mí.

Probé una aplicación de Windows llamada Html2Pdf Pilot que realmente hizo un trabajo bastante decente pero necesito algo que como mínimo se ejecute en Linux e idealmente se ejecute bajo demanda a través de PHP en el servidor web.

No puedo creer que esté tan atascado. ¿Me estoy perdiendo algo?

666voto

Mic Puntos 13418

Echa un vistazo a WKHTMLTOPDF . Es de código abierto, basado en webkit y gratuito.

Escribimos un pequeño tutorial aquí.

550voto

SchizoDuckie Puntos 6420

Echa un vistazo a PrinceXML .

Es definitivamente el mejor convertidor de HTML/CSS a PDF que existe, aunque no es gratuito (Pero oye, tu programación tampoco es gratuita, así que si te ahorra 10 horas de trabajo, eres libre en casa).

Oh sí, ¿mencioné que esta es la primera (y probablemente la única) solución HTML2PDF que hace completo ACIDO2 !?

Muestras de PrinceXML

150voto

cletus Puntos 276888

Después de algunas investigaciones y de un tirón de pelo general, la solución parece ser HTML2PDF . DOMPDF hizo un terrible trabajo con las tablas, los bordes e incluso la disposición moderadamente compleja y htmldoc parece razonablemente robusto pero es casi completamente CSS-ignorante y no quiero volver a hacer el diseño HTML sin CSS sólo para ese programa.

HTML2PDF parecía el más prometedor pero seguía teniendo este extraño error sobre los argumentos de referencia nula a node_type. Finalmente encontré la solución a esto. Básicamente, PHP 5.1.x funcionó bien con los reemplazos de regex (preg_replace_*) en cadenas de cualquier tamaño. PHP 5.2.1 introdujo una directiva de configuración de PHP.ini llamada pcre.backtrack_limit . Lo que hace este parámetro de configuración es limitar la longitud de la cadena para la cual se hace la comparación. No sé por qué se introdujo esto. El valor por defecto fue elegido como 100.000. ¿Por qué un valor tan bajo? De nuevo, ni idea.

A se planteó un error contra PHP 5.2.1 para este que todavía está abierto casi dos años después .

Lo que es horrible de esto es que cuando se excede el límite, el reemplazo sólo falla silenciosamente . Al menos si un error se hubiera planteado y registrado tendrías alguna indicación de lo que pasó, por qué y qué cambiar para arreglarlo. Pero no.

Así que tengo un archivo HTML de 70k para convertirlo en PDF. Requiere la siguiente configuración de PHP.ini:

  • pcre.backtrack_limit = 2000000; # probablemente más de lo que necesito pero está bien
  • límite_de_memoria = 1024M; # sí, un gigabyte y
  • Tiempo_de_ejecución_máximo = 600; # sí, 10 minutos .

Ahora el lector astuto puede haber notado que mi archivo HTML es más pequeño que 100k. La única razón por la que puedo adivinar el porqué de este problema es que html2pdf hace una conversión a xhtml como parte del proceso. Tal vez eso me llevó a mí (aunque casi el 50% de hinchazón parece extraño). En cualquier caso, lo anterior funcionó.

Ahora, html2pdf es un acaparador de recursos. Mi archivo de 70k toma aproximadamente 5 minutos y al menos 500-600M de RAM para crear un archivo PDF de 35 páginas. No es lo suficientemente rápido (por mucho) para una descarga en tiempo real, desafortunadamente, y el uso de la memoria pone la relación de uso de la memoria en el orden de 1000 a 1 (600M de RAM para un archivo de 70k), lo cual es completamente ridículo.

Desafortunadamente, es lo mejor que se me ha ocurrido.

125voto

Karthick Puntos 281

¿Por qué no intentas mPDF versión 2.0 ? Lo usé para crear un documento en PDF. Funciona bien.

Mientras tanto, mPDF está en la versión 5.7 y se mantiene activamente, en contraste con HTML2PS/HTML2PDF

36voto

Somnath Muluk Puntos 10173

Si tu intención es crear un PDF desde PHP, pdflib te ayudará.

De lo contrario, si quieres convertir una página HTML en PDF a través de PHP, encontrarás un pequeño problema fuera de aquí.

Así que, las opciones que conozco son:

DOMPDF : Clase de PHP que envuelve el HTML y construye el PDF. Funciona bien, personalizable (si conoces PHP), basado en pdflib, si recuerdo bien incluso acepta algo de CSS. Malas noticias: lento cuando el HTML es grande o muy complejo.

HTML2PS Igual que el DOMPDF, pero éste se convierte primero en .ps (ghostscript), y luego en el formato que necesites (pdf, jpg, png). Para mí esto es un poco mejor que el DOMPDF, pero tiene el mismo problema de velocidad . Tiene mejor soporte para el CSS.

Esas dos son clases de PHP, pero si puedes instalar algún software en el servidor, y acceder a él a través de passthru() o system() mira esto también:

wkhtmltopdf basado en webkit (envoltorio de safari), es realmente rápido y poderoso parece ser el mejor (atm) para convertir sobre la marcha páginas html a pdf, tomando sólo 2 segundos para un documento xHTML de 3 páginas con CSS2. Es un proyecto reciente, de todos modos, la página de google.code se actualiza a menudo.

htmldoc Este es un tanque, a menudo se estrella. El proyecto parece haber muerto en 2007, pero de todos modos si no necesitas compatibilidad con CSS esto podría funcionar para ti.

tcpdf - esta es una versión mejorada y mantenida del fpdf. Características principales del tpdf y también tiene un mejor tiempo de ejecución con gran rendimiento. Para un tutorial detallado sobre el uso de las dos clases de generación de PDF más populares: TCPDF y FPDF, por favor siga este enlace

Vea estos mensajes también.

  1. Convertir HTML en un archivo PHP en un archivo PDF
  2. ¿El mejor generador de pdf en PHP, mpdf o fpdf?
  3. ¿Exportar un html a PDF en PHP?
  4. ¿Escribiendo HTML con variables PHP en un archivo PDF?
  5. ¿Cómo convertir html en pdf con PHP?
  6. Herramienta para exportar html como pdf

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X