Conversión de archivos HTML a PDF [cerrado]

128

Necesito generar automáticamente un archivo PDF a partir de un documento HTML (X) existente. Los archivos de entrada (informes) usan un diseño bastante simple, basado en tablas, por lo que probablemente no sea necesario el soporte para cosas realmente sofisticadas de JavaScript / CSS.

Como estoy acostumbrado a trabajar en Java, es preferible una solución que pueda usarse fácilmente en un proyecto java. Sin embargo, solo necesita trabajar en sistemas Windows.

Una forma de hacerlo que sea factible, pero que no produzca resultados de buena calidad (al menos listos para usar) es usar CSS2XSLFO y Apache FOP para crear los archivos PDF. El problema que encontré fue que, si bien los atributos CSS se convierten muy bien, el diseño de la tabla está bastante desordenado y el texto sale de la celda de la tabla.

También eché un vistazo rápido a Jrex, una API de Java para usar el motor de renderizado Gecko.

¿Hay alguna manera de tomar la página renderizada del motor de renderizado de Internet Explorer y enviarla automáticamente a una herramienta de impresora PDF? No tengo experiencia en programación OLE en Windows, así que no tengo idea de qué es posible y qué no.

¿Tienes una idea?

panschk
fuente
3
Recientemente he creado un docbag de la biblioteca Java que puede convertir xhtml a documentos pdf. La versión actual no es nada avanzada, pero si sus plantillas xhtml son simples, esta biblioteca puede ser útil.
Jakub Torbicki
Creo que el camino a seguir es utilizar las capacidades de los navegadores para hacer la traducción. Ver stackoverflow.com/q/25574082/39998
David Hofmann
Estoy atascado con la generación de pdf desde un html que contiene letras cirílicas. Todo está bien, excepto las letras cirílicas que se omiten. ¿Alguien que tiene este problema?
Kristijan Iliev
@krisiliev: Tuve problemas similares y, por lo que puedo recordar, la fuente utilizada fue muy importante. La mayoría de las fuentes no admiten caracteres UTF8 completos, pero lo siguiente debería ser: 'font-family: Arial Unicode MS;' (CSS) También asegúrese de usar la codificación correcta (recomendaría usar siempre UTF-8)
panschk
2
este enlace
Mateen

Respuestas:

73

El proyecto de renderizador Flying Saucer XHTML es compatible con la salida de XHTML a PDF. Echa un vistazo a un ejemplo aquí .

marca
fuente
20
El verdadero problema con Flying Sauser es que usa itext para renderizar PDF, que es una biblioteca con licencia AGPL v3
David Hofmann
11
La versión de itext utilizada por Flying Saucer es 2.0.8 que estaba disponible bajo LGPL. Solo los números de versión 5 o superiores están en la licencia más restrictiva. stackoverflow.com/questions/2692000/…
Gary
8
Yo diría que el verdadero problema con Flying Saucer es que requiere un documento XML válido y bien formado. Es fácil romper involuntariamente el renderizado de PDF al incluir algo como un ampersand en su HTML, o algún código javascript que hace que su HTML renderizado no sea XHTML estricto. Aunque esto se puede mitigar con pruebas automatizadas o algún proceso que implique validación XML.
SteveT
3
@LateralFractal Hasta donde puedo decir, Flying Saucer 9.0.8 (creo que la última versión) usa iText 2.1.7, que es la última versión de iText con una licencia permisiva --- LGPL. mvnrepository.com/artifact/org.xhtmlrenderer/flying-saucer-pdf/…
Jonathan Crosmer el
2
@JonathanCrosmer Sí. Hay dos paquetes FlyingSaucer para PDF, uno para iText v2 y otro para iText v5. Asumiendo que ambos tienen la misma funcionalidad; El riesgo de AGPL puede pasarse por alto.
LateralFractal
49

¿Intentaste con WKHTMLTOPDF? ?

Es una sencilla utilidad de shell, una implementación de código abierto de WebKit. Ambos son gratis.

Hemos establecido un pequeño tutorial aquí.

EDITAR (2017):

Si fuera para construir algo hoy, ya no seguiría esa ruta.
Pero usaría http://pdfkit.org/ en su lugar.
Probablemente despojándolo de todas sus dependencias de nodejs, para ejecutar en el navegador.

Micrófono
fuente
16
Para una conversión directa de página html a pdf, esto es mejor que cualquier otra cosa que haya visto, gratis o comercial.
MGOwen
¿Funciona en un sistema operativo no Mac?
Eran Medan
1
@Eran, lo usamos en Linux. Creo que también hay una versión de Windows
Mic
1
@ Mic Sí, también hay una versión de Windows.
Viccari
probado en Windows XP (versión 0.9.9) y funciona muy bien. Además, no requiere derechos de administrador en la máquina para instalar.
Christopher Mahan
44

Echa un vistazo a iText ; Es un kit de herramientas PDF de Java puro que tiene soporte para leer datos de HTML. Lo usé recientemente en un proyecto cuando necesitaba extraer contenido de nuestro CMS y exportarlo como archivos PDF, y todo fue bastante sencillo. El soporte para CSS y etiquetas de estilo es bastante limitado, pero representa tablas sin ningún problema (aunque nunca logré establecer el ancho de columna).

Crear un PDF a partir de HTML es algo como esto:

Document doc = new Document(PageSize.A4);
PdfWriter.getInstance(doc, out);
doc.open();
HTMLWorker hw = new HTMLWorker(doc);
hw.parse(new StringReader(html));
doc.close();
fred-o
fuente
9
Es AGPL, parece incluso peor que GPL, debe ser de código abierto incluso si solo sirve el PDF e iText es del lado del servidor.
Eran Medan
10
@Eran, solo usa la última versión que no sea AGPL (com.lowagie: itext: 2.1.7 en Maven).
Nowaker
1
HTMLWorker está en desuso en las versiones más recientes de IText a favor de XMLWorker; sin embargo, el soporte de CSS es deficiente en ambos casos (ver demo.itextsupport.com/xmlworker/itextdoc/… ) y no fue adecuado para mis necesidades. Por el contrario, Flying Saucer fue perfecto.
Pino
Puede usar la versión LGPL que se puede encontrar en github.com/albfernandez/itext2
Vladimir Rozhkov
4

Si tienes la financiación, nada supera a Prince XML como muestra este video

Ólafur Waage
fuente
1
Si está buscando una alternativa más barata para Prince, pruebe DocRaptor.com. Utiliza Prince como motor.
Julie
Y si quieres más barato, pero con más opciones, prueba htm2pdf.co.uk : utiliza webkit y usuarios WYSIWIG reales
user1914292
3

¿Hay alguna manera de tomar la página renderizada del motor de renderizado de Internet Explorer y enviarla automáticamente a una herramienta de impresora PDF?

Así es como ActivePDF funciona , lo cual es bueno significa que sabe lo que obtendrá, y en realidad tiene un soporte de estilo razonable.

También es uno de los pocos paquetes que encontré (cuando busqué hace unos años) que realmente admite los diversos comandos CSS de salto de página.


Desafortunadamente, el software ActivePDF es muy frustrante, ya que tiene que iniciar el navegador IE en segundo plano para las conversiones, puede ser bastante lento y tampoco es particularmente estable.

Actualmente hay una nueva versión en Beta que se supone que es mucho mejor, pero en realidad no he tenido la oportunidad de probarla, así que no sé cuánto mejora.

Peter Boughton
fuente
Gracias por la útil respuesta. No creo que ActivePDF sea realmente adecuado por el precio, pero es bueno saber que existe algo así.
panschk
Grabz Es la API de HTML a PDF: grabz.it/html-to-pdf-image-api.aspx Funciona de la misma manera que renderiza el HTML en un navegador y luego crea el PDF, lo que garantiza que haya conversiones de PDF mucho más precisas.
user1474090
2

Puede usar un Firefox sin cabeza con una extensión. Es bastante molesto comenzar a correr, pero produce buenos resultados.

Mira esta respuesta para más información.

rojoca
fuente
No suena como una solución muy escalable si uno necesita convertir páginas sobre la marcha a pdf en paralelo. Si llegan algunas solicitudes que resultan en una conversión usando FF, su servidor habrá perdido algunos GIG de memoria solo para servir algunas páginas convertidas. Esto abriría su servidor a un DOS.
mP.
Mejor pero similar: github.com/ariya/phantomjs/wiki/Screen-Capture (según we-love-php.blogspot.com/2012/12/… el pdf tiene texto real, no rasterizado)
nafg
0

Si observa la barra lateral de su pregunta, verá muchas preguntas relacionadas ...

En su contexto, el método más simple podría ser instalar un controlador de impresión PDF como PDFCreator e imprimir la página a esta salida.

PhiLho
fuente
¿Cómo es esta una solución Java? Este es un controlador de impresión de Windows.
Gray
El OP mencionó explícitamente Windows. Y supongo que hay controladores similares para otros sistemas. El OP solo mencionó Java como una posible solución ...
PhiLho
0

Amyuni WebkitPDF podría usarse con JNI para una solución exclusiva de Windows. Esta es una biblioteca de conversión de HTML a PDF / XAML, gratuita para uso comercial y no comercial.

Si los archivos de salida no se necesitan de inmediato, para una mejor escalabilidad puede ser mejor tener una cola y algunos procesos en segundo plano que toman elementos de allí, los convierten y almacenan en la base de datos o el sistema de archivos.

se aplica el descargo de responsabilidad habitual

yms
fuente