Tengo un documento HTML (no XHTML) que funciona bien en Firefox 3 e IE 7. Utiliza CSS bastante básico para diseñarlo y funciona bien en HTML.
Ahora estoy buscando una forma de convertirlo a PDF. Yo he tratado:
- DOMPDF : tuvo grandes problemas con las tablas. Facturé mis grandes tablas anidadas y me ayudó (antes de que solo consumiera hasta 128M de memoria y luego muriera, ese es mi límite de memoria en php.ini), pero hace un desastre completo de tablas y parece que no se obtiene imágenes Las tablas eran simplemente cosas básicas con algunos estilos de borde para agregar algunas líneas en varios puntos;
- HTML2PDF y HTML2PS : en realidad tuve mejor suerte con esto. Representaba algunas de las imágenes (todas las imágenes son URL de Google Chart) y el formato de la tabla era mucho mejor, pero parecía tener un problema de complejidad que aún no había descubierto 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, por lo que debe 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 se ejecute como mínimo en Linux e idealmente se ejecuta a pedido a través de PHP en el servidor web.
¿Qué me estoy perdiendo o cómo puedo resolver este problema?
@import
,@media
y@screen
reglas, y se cargará de estilo externas. También viene incluido con todo lo necesario para que funcione, aunque hay cosas que puede instalar para obtener un mejor rendimiento que las bibliotecas predeterminadas. code.google.com/p/dompdfchrome --headless --print-to-pdf="path/to/pdf" https://your_url
como la herramienta de generación de html a pdf más rica, rápida y fácil crbug.com/603559, ya que admite la mayoría de las características html que los desarrolladores confían en el desarrollo web y no succionan scripts complejos como la mayoría de los otros bibliotecas y herramientas hacen.Respuestas:
Importante: Tenga en cuenta que esta respuesta fue escrita en 2009 y que podría no ser la solución más rentable hoy en 2019. Las alternativas en línea son mejores hoy en día que en aquel entonces.
Aquí hay algunos servicios en línea que puede usar:
Echa un vistazo a PrinceXML .
Definitivamente es el mejor conversor de HTML / CSS a PDF que existe, aunque no es gratuito (pero bueno, su programación podría no ser gratuita tampoco, así que si le ahorra 10 horas de trabajo, estará libre en casa (ya que también necesita tenga en cuenta que las soluciones alternativas requerirán que configure un servidor dedicado con el software adecuado)
Oh sí, ¿mencioné que esta es la primera (y probablemente la única) solución HTML2PDF que funciona con ACID2 completo ?
Muestras PrinceXML
fuente
Echa un vistazo a
wkhtmltopdf
. Es de código abierto, basado en webkit y gratuito.Escribimos un pequeño tutorial aquí .
EDITAR (2017):
Si fuera para construir algo hoy, ya no seguiría ese camino.
Pero usaría http://pdfkit.org/ en su lugar.
Probablemente despojándolo de todas sus dependencias de nodejs, para ejecutar en el navegador.
fuente
Después de un poco de investigación y tirones generales, la solución parece ser HTML2PDF . DOMPDF hizo un trabajo terrible con tablas, bordes e incluso diseños moderadamente complejos y htmldoc parece razonablemente robusto pero es casi completamente ignorante de CSS y no quiero volver a hacer el diseño HTML sin CSS solo para ese programa.
HTML2PDF parecía el más prometedor, pero seguía teniendo este extraño error sobre argumentos de referencia nulos para node_type. Finalmente encontré la solución a esto. Básicamente, PHP 5.1.x funcionó bien con regex reemplaza (preg_replace_ *) en cadenas de cualquier tamaño. PHP 5.2.1 introdujo una directiva de configuración php.ini llamada pcre.backtrack_limit . Lo que hace este parámetro de configuración es limitar la longitud de la cadena para la que se realiza la coincidencia. Por qué se introdujo esto, no lo sé. El valor predeterminado fue elegido como 100,000. ¿Por qué un valor tan bajo? De nuevo, no tengo idea.
Se generó un error en PHP 5.2.1 para esto , que todavía está abierto casi dos años después .
Lo horrible de esto es que cuando se supera el límite, el reemplazo falla en silencio . Al menos, si se hubiera generado y registrado un error, tendría alguna indicación de lo que sucedió, por qué y qué cambiar para solucionarlo. Pero no.
Así que tengo un archivo HTML de 70k para convertirlo en PDF. Requiere la siguiente configuración de php.ini:
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 por qué llegué a este problema es que html2pdf realiza una conversión a xhtml como parte del proceso. Quizás eso me apoderó (aunque casi el 50% de hinchazón parece extraño). En cualquier caso, lo anterior funcionó.
Ahora, html2pdf es un gran recurso. Mi archivo de 70k tarda aproximadamente 5 minutos y al menos 500-600M de RAM para crear un archivo PDF de 35 páginas. Desafortunadamente, no es lo suficientemente rápido (para lejos) para una descarga en tiempo real 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, eso es lo mejor que se me ocurrió.
fuente
¿Por qué no prueba mPDF versión 2.0 ? Lo usé para crear un documento PDF. Funciona bien.
Mientras tanto, mPDF está en la versión 5.7 y se mantiene activamente, en contraste con HTML2PS / HTML2PDF
Pero tenga en cuenta que la documentación puede ser realmente difícil de manejar. Por ejemplo, eche un vistazo a esta página: https://mpdf.github.io/ .
Se pueden realizar tareas muy básicas alrededor de html a pdf con esta biblioteca, pero las tareas más complejas llevarán algún tiempo leyendo y "entendiendo" la documentación.
fuente
mPDF error: IMAGE Error (http://www.example.com/folder/image.jpg): Error parsing image file - image type not recognised, and not supported by GD imagecreate
1) ¡usa MPDF !
a) extraer en
yourfolder
b) crear archivo.php en
yourfolder
y el inserto de tal código:c) abre file.php desde tu navegador
2) ¡Usa pdfToHtml !
1) extraiga pdftohtml.exe en su carpeta raíz:
2) dentro de esa carpeta, en el archivo anyfile.php , coloque este código (suponiendo que también haya una fuente example.pdf):
3) ingrese FinalFolder , y habrá los archivos convertidos (tantas páginas, como tenía el PDF fuente ...)
fuente
Checkout TCPDF . Tiene algunas funciones de HTML a PDF que pueden ser suficientes para lo que necesita. ¡También es gratis!
fuente
Solo para romper el hilo, probé DOMPDF y funcionó perfectamente. He usado
DIV
y otros elementos de nivel de bloque para posicionar todo, lo mantuve estrictamente CSS 2.1 y jugó muy bien.fuente
Sugiero DocRaptor (que utiliza
PrinceXML
como "motor")fuente
Ya se ha mencionado, pero me gustaría confirmar que mpdf es el conversor de HTML a PDF más fácil, potente y gratuito que existe. El cielo es realmente el límite. Incluso puede generar pdf de datos dinámicos generados por el usuario.
Por ejemplo, un cliente quería un sistema CMS para poder actualizar la lista de canciones de la música que tocaba en su club. Eso no fue un problema, pero también quería que los usuarios pudieran descargar un .pdf de la lista de reproducción, por lo que este archivo descargable también debía ser actualizado por el cms. Gracias a mpdf, con algunos bucles simples y variables intercaladas, pude hacer exactamente eso. Algo que pensé que me llevaría semanas, literalmente, me tomó minutos.
Excelente artículo que me ayudó a comenzar.
fuente
¡Buenas noticias! Snappy !!
Snappy es una biblioteca PHP5 de código abierto muy fácil , que permite la generación de miniaturas, instantáneas o PDF desde una página URL o HTML. Y ... usa el excelente wkhtmltopdf basado en webkit
¡Disfrutar! ^ _ ^
fuente
Bueno, si quieres encontrar una biblioteca perfecta de convertidor XHTML + CSS a PDF, olvídalo. Está lejos de ser posible. Porque es como encontrar un navegador perfecto (motor de renderizado XHTML + CSS). ¿Tenemos uno? IE o FF?
He tenido cierto éxito con DOMPDF. La cuestión es que debe modificar su código HTML + CSS para que funcione con la forma en que la biblioteca debe funcionar. Aparte de eso, tengo muy buenos resultados.
Vea abajo:
HTML original
Convertir HTML a PDF
fuente
El HTML2PDF y HTML2PS que se mencionó originalmente en la publicación de apertura hablaban de un paquete de 2009 con este enlace
Pero hay un mejor HTML2PDF
Está basado en TCPDF aunque está parcialmente en francés.
Puede tener encabezados o pies de página que se repitan en las páginas y que tengan números de página y páginas totales. Ver sus ejemplos . Lo he estado usando durante más de tres años y lo recomiendo.
fuente
Estoy usando fpdf para producir archivos PDF usando PHP. Me está funcionando bien hasta ahora para producir resultados simples.
fuente
Hay un tutorial sobre la zona de desarrollo de Zend sobre la generación de pdf desde php ( parte 1 , parte 2 ) sin ninguna biblioteca externa. Nunca implementé este tipo de solución, pero como todo es php, es posible que sea más flexible de implementar y depurar.
fuente
Intente obtener la última versión dompdf nocturna : estaba usando una versión anterior que era un terrible recurso y me llevó una eternidad renderizar mi pdf. Después de agarrar una noche desde aquí .
Solo tomó unos segundos generar el PDF, Y se renderizó tan bien como con PrinceXML / Docraptor . ¡Parece que han optimizado seriamente el código dompdf desde la última vez que lo usé!
fuente
La mención de Darryl Hein sobre TCPDF es probablemente una gran idea. El código de Nicola Asuni es bastante útil y poderoso. El único asesino es que si alguna vez planea fusionar archivos PDF con su PDF generado, no tiene esas características. Tendría que crear el PDF y luego combinarlo usando algo como PDFTK por Sid Steward (www.pdflabs.com/tools/pdftk-the-pdf-toolkit/).
fuente
En términos de costo, el uso de un servicio web (API) puede ser en muchos casos el enfoque más sensato. Además, al subcontratar este proceso, descarga su propia infraestructura / backend y, siempre que utilice un servicio de buena reputación, garantiza la compatibilidad con el ajuste de los estándares web, el tiempo de actividad, los tiempos de procesamiento cortos y la entrega rápida de contenido.
He realizado algunas investigaciones sobre la mayoría de los servicios web actualmente en el mercado, encuentre a continuación las API que creo que vale la pena mencionar en este hilo, en un orden basado en la relación precio / valor. Todos ellos ofrecen clases y paquetes PHP precompuestos.
Calidad:
Con el motor de alta calidad
PrinceXML
como columna vertebral, DocRaptor ofrece claramente la mejor calidad de PDF, devolviendo documentos PDF altamente pulidos y bien convertidos. Sin embargo, el servicio API pdflayer se acerca bastante aquí. Pdfcrowd no necesariamente puntúa con calidad, sino con velocidad de procesamiento.Costo:
pdflayer.com : como se indicó anteriormente, la opción más rentable aquí es pdflayer.com, que ofrece un plan de suscripción totalmente gratuito para 100 PDF mensuales y suscripciones premium que oscilan entre $ 9.99 y $ 119.99. El precio de 10,000 documentos PDF mensuales es de $ 39.99.
docraptor.com : ofrece un período de prueba gratuito de 7 días. Los planes de suscripción premium oscilan entre $ 15 y $ 2250. El precio de 10,000 documentos PDF mensuales es de ~ $ 300.00.
pdfcrowd.com - Ofrece 100 PDF una vez gratis. Los planes de suscripción premium oscilan entre $ 9 y $ 89. El precio de 10,000 documentos PDF mensuales es de ~ $ 49.00.
He usado los tres y se supone que este texto ayuda a cualquiera a decidir sin tener que pagar por todos ellos. Este texto no ha sido escrito para respaldar ningún producto y no tengo afiliación con ninguno de los productos.
fuente
Si tiene acceso a la línea de comando, es posible usar PhantomJS para crear
PDF
desdeURL
(remoto o local).Funciona muy bien y es una solución gratuita.
Eche un vistazo a este script de ejemplo creado para este problema exacto.
fuente
Esta pregunta ya es bastante antigua, pero no he visto a nadie mencionar CutyCapt, así que lo haré :)
CutyCapt
fuente
Recomiendo TCPDF o DOMPDF, en ese orden.
fuente
No creo que una clase php sea la mejor para renderizar una página xHtml con css.
¿Qué sucede cuando sale una nueva regla css? (pronto css 3.0 ...)
La mejor manera de representar una página html es, obviamente, un navegador. Firefox 3.0 puede 'imprimir' de forma nativa en formato pdf, torisugary desarrolló una extensión (impresión de línea de comandos) para usarlo. Aquí lo encontrarás.
De todos modos, todavía hay muchos problemas runninr firefox solo como un convertidor de pdf ...
Por el momento, creo que wkhtmltopdf es el mejor (que es el que usa el navegador Safari), rápido, rápido, increíble. Sí, código abierto también ... Dale un vistazo
fuente
Desarrollé una API pública para construir archivos PDF desde páginas web. Tiene una buena clase de cliente PHP que lo hace súper fácil de usar. Utiliza wkhtmltopdf para representar el PDF en la nube.
No hay necesidad de nada especial en el HTML. No hay necesidad de URLS absolutas en enlaces images / css / js. Funciona en localhost (máquina de desarrollo) también.
Actualmente, el servicio tiene puntos finales en 4 regiones de Azure: este de EE. UU., Oeste de EE. UU., Norte de la UE, sudeste asiático.
Es rápido, ya que utiliza un protocolo propietario para enviar el contenido de la página web a la API para la conversión a PDF.
Es confiable porque todos los puntos finales tienen equilibrio de carga.
Cuenta gratuita disponible para pruebas o bajo uso. Detalles en el sitio web:
https://rotativahq.com
fuente
Quizás pueda intentar usar Tidy antes de entregar el archivo al convertidor. Si uno de los procesadores se bloquea con algún problema de HTML (como una etiqueta no cerrada), podría ser útil.
fuente
El buen renderizado no significa nada. ¿Valida?
Todos los navegadores hacen todo lo posible para mostrar algo en la pantalla, sin importar cuán mala sea la entrada. Y, por supuesto, no hacen lo mismo. Si desea la misma representación que Firefox, puede usar su motor de representación. Hay generadores de pdf para ello. Sin embargo, es mucho trabajo.
fuente
Aunque ya se ofrecen muchas soluciones, recomiendo las dos siguientes:
Lo diferente de estas dos API de todas las soluciones mencionadas anteriormente es que, además de convertir HTML a PDF con CSS y JavaScript, también ofrece gestión de derechos de PDF, marca de agua y cifrado. Por lo tanto, es una solución todo en uno para aquellos que quieren comenzar a ejecutar.
Descargo de responsabilidad: trabajo para Kaiomi, una compañía que opera estos dos sitios web.
fuente
¿La conversión de HTML a PDF realmente tiene que ocurrir en el lado del servidor usando PHP?
Acabo de encontrarme con jsPDF , una solución del lado del cliente que usa HTML5 / JavaScript. El código con licencia MIT también está en GitHub .
fuente
TCPDF funciona bien, sin dependencias, es gratuito y está constantemente corregido. Tiene una velocidad razonable si el contenido HTML / CSS suministrado está bien formateado. Normalmente genero de 50 a 300 kB de entrada HTML (incluido CSS) y obtengo salida de PDF en 1-3 segundos con 10-15 páginas de PDF.
Recomiendo encarecidamente usar la biblioteca ordenada como formateador HTML bastante antes de enviar cualquier cosa a TCPDF.
fuente
He probado muchas bibliotecas diferentes para PHP. Todos los listados que he probado. En mi opinión, la biblioteca TCPDF es el mejor compromiso de rendimiento / usabilidad. Es muy simple de instalar y usar, también buen rendimiento en aplicaciones pequeñas y medianas. Si necesita un alto rendimiento y un documento PDF muy grande, use Zend_PDF módulo , ¡pero prepárese para la codificación!
fuente
API web
Si hay personas que siempre buscan este tipo de cosas, hay un servicio gratuito sitio web que le permite convertir el código html y las páginas a pdf. También hay una API (muy pequeña) que le permite obtener un archivo PDF de la URL.
Compruébalo aquí
fuente
no PHP , sino una biblioteca Java , que hace lo siguiente:
Se puede usar desde PHP a través de
system()
una llamada similar. Aunque requiere XML bien formado de lainput
.fuente