ABRIR HTML A PDF
DESCRIPCIÓN GENERAL
Open HTML to PDF es una biblioteca puramente Java para representar un subconjunto razonable de XML/XHTML bien formado (e incluso algo de HTML5) utilizando CSS 2.1 (y estándares posteriores) para diseño y formato, salida a PDF o imágenes.
Utilice esta biblioteca para generar documentos PDF atractivos. Pero tenga en cuenta que no puede utilizar HTML5+ moderno en este motor y esperar un gran resultado. Debe diseñar especialmente el documento HTML para esta biblioteca y utilizar su función CSS extendida como la n.° 31 o la n.° 32 para obtener buenos resultados. Evite elementos flotantes cerca de los saltos de página y utilice diseños de tablas.
EMPEZANDO
- Guía de integración: obtenga artefactos y código de Maven para comenzar.
- 1.0.10 Sandbox en línea: ¡ahora con registros!
- Plantillas para Openhtmltopdf: plantillas con licencia del MIT que funcionan con este proyecto. Actualizado el 21 de septiembre de 2021.
- Documento de presentación - PDF
- Wiki de documentación
- Guía de autor de plantillas - PDF - EN DEPRECADO - Prefiero wiki - Mover información a wiki
- Proyecto de muestra: Pretty Resume Generator
DIFERENCIAS CON PLATILLO VOLADOR
- Utiliza PDFBOX, bien mantenido y de código abierto (compatible con LGPL), como biblioteca de PDF, en lugar de iText.
- Soporte adecuado para generar archivos PDF accesibles (Sección 508, PDF/UA, WCAG 2.0).
- Soporte adecuado para generar archivos PDF compatibles con los estándares PDF/A.
- El nuevo renderizador más rápido significa que este proyecto puede ser varias veces más rápido para documentos muy grandes.
- Mejor soporte para transformaciones CSS3.
- Pruebas de regresión visual automática de archivos PDF, con muchas pruebas de un extremo a otro.
- Posibilidad de insertar páginas para contenido cortado.
- Complementos integrados para SVG y MathML.
- Soporte de reserva de fuentes.
- Soporte limitado para RTL y documentos bidireccionales.
- En el lado negativo, no hay soporte para fuentes OpenType.
- Soporte de notas a pie de página.
- Mucho más. Consulte el registro de cambios a continuación.
LICENCIA
Open HTML to PDF se distribuye bajo LGPL. Open HTML to PDF tiene la licencia pública general reducida GNU, versión 2.1 o posterior, disponible en http://www.gnu.org/copyleft/lesser.html. Puede utilizar Open HTML to PDF de cualquier forma y para cualquier propósito que desee, siempre y cuando respete los términos de la licencia. Se incluye una copia de la licencia LGPL como licencia-lgpl-2.1.txt o licencia-lgpl-3.txt en nuestras distribuciones y en nuestro árbol de fuentes.
Una excepción a esto es el módulo de prueba pdf-a, que tiene la licencia GPL. Este módulo no se distribuye a Maven Central y es solo para pruebas.
Open HTML to PDF utiliza un par de paquetes FOSS para realizar el trabajo. Puede encontrar una lista de estos en el gráfico de dependencia.
CRÉDITOS
Abrir HTML a PDF está basado en Flying-saucer. El crédito es para los contribuyentes de ese proyecto. También se utilizará el código de neoFlyingSaucer.
Preguntas frecuentes
- OPEN HTML TO PDF se prueba con OpenJDK 8, 11 y 17 (acceso anticipado). Requiere al menos Java 8 para ejecutarse.
- No, no puedes usarlo en Android.
- Debería poder utilizarlo en Google App Engine (entorno Java 8 o superior). Cuéntanos tu experiencia.
-
No se implementan columnas fluidas. Implementado en RC12. - No, no es un navegador web. Específicamente, no ejecuta JavaScript ni implementa muchos estándares modernos, como el diseño flexible y de cuadrícula.
CASOS DE PRUEBA
Los casos de prueba, fallidos o que funcionen son bienvenidos, colóquelos en /openhtmltopdf-examples/src/main/resources/testcases/
y ejecútelos desde /openhtmltopdf-examples/src/main/java/com/openhtmltopdf/testcases/TestcaseRunner.java
.
REGISTRO DE CAMBIOS
cabeza - 1.0.11-INSTANTÁNEA
- Ver registro de confirmación.
1.0.10 (2021-13 de septiembre)
NOTA : Después de esta versión, se eliminará el antiguo renderizador lento. El modo rápido ha sido el predeterminado (desde 1.0.5), por lo que solo tiene que verificar su código si llama al método useSlowMode
, que se eliminará.
- #551 SEGURIDAD Corrija el bucle casi infinito para contenido muy anidado con
page-break-inside: avoid
restricciones. Gracias por persistir en @ swillis12 y depurar @syjer. - #729 SEGURIDAD Actualice xmlgraphics-commons (usado en renderizado SVG) para evitar CVE. Gracias @electrofLy.
- #711 Soporte de notas al pie (beta). Consulte la documentación a pie de página en wiki. Gracias por solicitarlo a @a-leithner y @slumki.
- #761 Propiedad CSS para deshabilitar los biseles en los bordes para evitar efectos desagradables de suavizado, especialmente en las celdas de la tabla. Consulte la propiedad -fs-border-rendering en wiki. Gracias por proporcionarnos una muestra @gandboy91.
- #103 Muestra el nombre de la clase de excepción y el mensaje de forma predeterminada para los mensajes de registro con una excepción asociada.
- #711 (mixto) Mejor boxeo para el contenido
::before
y ::after
. Ahora debería poder definir correctamente un borde alrededor del pseudocontenido. - #738 Compatibilidad con elementos adicionales en PDF/UA, incluidos arte, parte, secta, sección, título y cita en bloque. Gracias @AndreasJacobsen.
- #736 Nuevo ejemplo del uso de un mutador dom para implementar contenido no compatible, como atributos de etiquetas de fuente. Gracias por solicitar @mgabhishek06kodur.
- #707 Se corrigió la regresión donde a los documentos PDF/UA que no eran compatibles con PDF/A les faltaban metadatos Dublin Core. Gracias @mgm-rwagner, @syjer.
- #732 Permitir que se coloque el elemento
table
. Gracias @fcorneli. - #727 Permitir el uso de un número de página inicial para
page
y contadores pages
. Gracias por las relaciones públicas @fanthos.
1.0.9 (2021-18 de junio)
COMUNICADO DE SEGURIDAD : Este lanzamiento se adelantó debido a lanzamientos de seguridad de las dependencias de PDFBOX y Batik.
- #722 Actualizar PDFBOX (a 2.0.24): evita CVE en versiones anteriores y PDFBoxGraphics2D. Muchas gracias @rototor.
- #678 Actualizar la versión Batik a 1.14 (CVE-2020-11987): nuevamente, se recomienda encarecidamente evitar SVG y XML que no sean de confianza. Gracias @rototor.
- #716 Reemplace las llamadas
println
no autorizadas con llamadas de registro. Gracias @syjer por las relaciones públicas, @tfo por informar. - #708 Permitir la propiedad CSS SVG
shape-rendering
. Gracias @syjer por las relaciones públicas, @RAlfoeldi por informar. - #703 Eliminar llamadas a métodos obsoletos en la biblioteca estándar JRE. Puede cambiar la clase de lector XML. Implementado por @danfickle.
- #702 Establecer tiempos de espera para los controladores HTTP/HTTPS predeterminados. Gracias por informar @gengzi.
- 162228 Coloque enlaces a imágenes rasterizadas en SVG a través del solucionador de URL.
- #694 Corregir el tamaño de papel B3 incorrecto. ¡Gracias @lfintalan por informar con el número de línea!
- ab48fd No registre una fuente faltante más de una vez.
NOTA: Los CVE de PDFBOX se relacionan con la carga de archivos PDF que no son de confianza en PDFBOX y, por lo tanto, este proyecto no se ve directamente afectado. Sin embargo, no es una buena idea tener CVE en su classpath.
1.0.8 (2021-22 de marzo)
LIBERACIÓN DE SEGURIDAD
- #675 Actualice PDFBOX a 2.0.23 para evitar CVE. Gracias por informar @ Samuel3.
NOTA: Estos CVE se relacionan con la carga de archivos PDF que no son de confianza en PDFBOX y, por lo tanto, este proyecto no se ve directamente afectado. Sin embargo, no es una buena idea tener CVE en su classpath.
1.0.7 (2021-19 de marzo)
- #650 Soporte para múltiples imágenes de fondo en un solo elemento. Gracias por solicitar @baedorf.
- #669 Admite fuentes alternativas. Gracias por solicitar a @asu2 y ayudar a @draco1023.
- #640 Implemente la incrustación de archivos a través del atributo de descarga en los enlaces. Gracias por las relaciones públicas originales @syjer y por solicitar a @lindamarieb y @vader.
- #666 API para obtener la posición y más inferior del contenido renderizado para poder posicionar el contenido de seguimiento con otras herramientas. Gracias por la revisión exhaustiva de PR @stechio y por la solicitud de @DSW-AK.
- #664 Soporte mejorado para los estándares PDF/A y PDF/UA. Gracias por las relaciones públicas @qligier.
- #653 La solución para elementos de bloque en línea con un índice z o transformación se generaba dos veces. Gracias por informar @hannes123bsi.
- #655 Diseño correcto de listas ordenadas en dirección RTL. Gracias por las relaciones públicas @johnnyaug.
- #658 Implementar la función
target-text
para la propiedad content
. Gracias por las relaciones públicas @BenjaminVega. - #647 Se corrigió la condición de carrera al configurar el registrador en entornos de subprocesos múltiples. Gracias por las relaciones públicas @syjer.
- #638 Capacidad para conectar el control de recursos externos según el tipo de recurso y la URL. Gracias por las relaciones públicas originales @syjer.
- #628 Utilice métodos mejorados de incrustación de imágenes desde PDF-BOX. Gracias por PR @rototor y su trabajo en PDF-BOX implementando esto.
- #627 Se corrigió la regresión donde un estilo de fuente nulo causaba NPE. Gracias por las relaciones públicas @rototor.
- #338 Implementar un grupo de botones de opción de solo lectura. Gracias por investigar, informar y paciencia @ThoSchCon, @aleks-shbln, @dmitry-weirdo, @syjer y @paulito-bandito.
1.0.6 (2020-diciembre-22)
IMPORTANTE: #615 Esta es una versión de corrección de errores para un problema de bucle sin fin cuando se usa una palabra de ruptura con elementos flotantes con un margen superior/inferior.
- #624 Actualice PDFBOX a 2.0.22 y pdfbox-graphics2d a 0.30. Gracias @rototor.
- #467 Evitar la posibilidad de un bucle de importación de CSS.
- #621 Permitir espacios en las uris de datos. Gracias @syjer.
1.0.5 (2020-30-noviembre)
SEGURIDAD: #609 Actualiza el renderizador Apache Batik SVG a la última versión para evitar problemas de seguridad. Si está utilizando este proyecto para representar SVG que no son de confianza (se desaconseja), debe actualizarlo de inmediato. Muchas gracias @halvorbmundal.
IMPORTANTE: El renderizador rápido ahora es el predeterminado en preparación para eliminar el antiguo renderizador lento. Para utilizar temporalmente el renderizador lento, puede llamar al método obsoleto builder.useSlowMode()
(solo salida en PDF).
IMPORTANTE: #543 Esta versión permanece en PDFBOX versión 2.0.20 debido a un error con espacios sin separación en la versión 2.0.21. Asegúrese de que la versión 2.0.21 no esté en su classpath. Este error se solucionó en la próxima versión 2.0.22.
- #544 Código para crear un sitio web para plantillas PDF prediseñadas en formato thymeleaf y XHTML sin formato. Consulte el sitio web de plantillas para obtener una vista previa de las plantillas.
- #533 Complemento de código de barras. Relaciones públicas muy útiles proporcionadas por @syjer. Documentos del complemento de código de barras.
- #521 Mover la salida de imagen Java2D a un renderizador rápido y mejoras generales. Documentos de salida de imágenes Java2D.
- 9ffd0e #568 Filtre los caracteres problemáticos que son visibles en algunas fuentes pero que no deben tener guiones suaves. Gracias @StephanSchrader.
- #587 Solución para espacios en blanco: ahora cortar cortando en lugar de envolver. Gracias @vipcxj por finalmente solucionarlo a través de relaciones públicas.
- #577 Agregar complemento de cajón de PDF en primer plano (útil especialmente para marcas de agua). Gracias @rototor por las relaciones públicas y @ sillen102 por persistir.
- #566 Cambie el nombre
baseUri
arg a baseDocumentUri
y mejore javadoc para evitar confusiones. Gracias por informar a @NehalDamania. - 801780 Actualice la dependencia de prueba junit a 4.13.1 para evitar advertencias del escáner de seguridad (el problema de seguridad específico no afectó a esta biblioteca).
- #553 Solución para ContentLimitContainer que causaba NPE cuando se usaban márgenes negativos. Gracias por informar @adilxoxo.
- #552 Optimice el formateador de registros para el registro de julio. Gracias por las impresionantes relaciones públicas @syjer.
- #542 Mejorar la ubicación de la decoración de la lista. Gracias por las relaciones públicas @syjer y por informar a @mndzielski.
- #458 Corrección de decoraciones de lista que se muestran (recortan) en el área del margen de la página.
- #525 Eliminar esquemas/DTD no utilizados. Reduce significativamente el tamaño del frasco. Gracias por las relaciones públicas @syjer.
- #592 Permitir valores unitarios (px, cm, em, etc.) en los atributos de ancho/alto de imágenes SVG vinculadas. Gracias @DanielWulfert.
- #594 #458 Solución para más contenido repetitivo y bloqueo de PDF/UA. Gracias @ThomHurks, @fungc.
- #599 Se corrige RuntimeException que ocurre en InlineText.setSubstring. Gracias @LAlves91.
- #605 Corrección para que la justificación funcione con parejas sustitutas. Gracias @EmanuelCozariz.
- #601 Mover CI a acciones de Github. Gracias @syjer.
- #597 Generalizar el soporte de uri de datos. Gracias @syjer, @ Leostat86.
- #613 Permita agregar fuentes para SVG, MathML como archivos en lugar de flujos de entrada para evitar errores de JDK. Gracias @syjer, @sureshkumar-ramalingam, @olayinkasf.
1.0.4 (25 de julio de 2020)
- b88538 Corrección del bucle sin fin al utilizar
word-wrap: break-word
. Gracias por informar, probar e investigar @swarl. Gracias por las pruebas y la depuración @rototor y @syjer. - #492 Muchas pruebas del algoritmo de salto de línea para evitar futuros bucles interminables. Por @danfickle.
- #515 Pase los estilos CSS del documento que se aplican al elemento SVG a la implementación de SVG. Gracias por solicitar y contribuir @amckain92.
- #514 CORRECCIÓN: Coloque correctamente los cuadros al justificar líneas rtl. Gracias por informar y probar @lzhy1101.
- #512 #507 #502 Código de limpieza que incluye la eliminación de código no utilizado, genéricos, etc. Gracias por las relaciones públicas @syjer.
- #489 Amplia revisión del registro, incluido el consumidor de diagnóstico por ejecución. Muchas gracias @syjer, mucho trabajo en este PR. Consulte la página de registro en wiki para obtener más información.
- #501 Actualice PDFBOX a 2.0.20 y PDFBox-Graphics2D a 0.26. Gracias por las relaciones públicas @rototor.
- #490 Solución para NPE cuando falla la decodificación de la URL de datos de la imagen. Gracias por las relaciones públicas @syjer y por informar a @AlexisCothenet.
- #516 Agregue metadatos del paquete OSGI a MANIFEST.MF. Gracias por solicitar e investigar @zspitzer.
1.0.3 (25 de mayo de 2020)
- IMPORTANTE : esta versión contiene correcciones para dos errores que pueden provocar bucles interminables/denegación de servicio al utilizar
word-wrap: break-word
. Si está utilizando esta función, actualícela lo antes posible. - #483 Corrección del error de bucle sin fin con
word-wrap: break-word
y guiones suaves. Gracias @rototor por las relaciones públicas, @syjer por el análisis y @swarl por informar. - #466 Corrección del error de bucle sin fin con
word-wrap: break-word
y ancho cero. Gracias @syjer por el análisis y @AlexisCothenet por informar. - El complemento SVG #486 ahora puede proporcionar una lista de protocolos permitidos para recursos externos y se utilizará cualquier solucionador de uri/controlador de flujo configurado. Gracias @syjer por las relaciones públicas y @ieugen por informar.
- #480 Solución para formas de enlaces devueltas desde cajones de objetos personalizados. Gracias @rototor por las relaciones públicas y @hbergmey por informar.
- #485 Implementar soporte para uris de datos SVG. Gracias @syjer por las relaciones públicas y @adrianrodfer por informar.
- #470 Permitir enlaces
mailto:
o cualquier otro enlace válido. Gracias @syjer por las relaciones públicas y @mndzielski por informar. - #464 Respete la propiedad CSS
direction
. Gracias @AnanasPizza por informar. - #460 Cambie la clase de excepción lanzada a
IOException
más específica. Gracias por las relaciones públicas @leonorader. - #459 Implementar la unidad CSS
rem
. Gracias a @leonorader por informar. - #211 Las imágenes ahora se pueden usar en la propiedad
content
CSS. Gracias por solicitarlo a @Kuhlware. - #445 Solución para no recoger valores de atributos en documentos convertidos de Jsoup. Gracias por informar @testinfected.
- #450 Solo salida Java2D: posibilidad de agregar fuentes mediante código. Además, las fuentes del entorno ya no se utilizarán de forma predeterminada. Para utilizar fuentes de entorno:
builder.useEnvironmentFonts(true)
.
1.0.2 (2020-febrero-25)
- SEGURIDAD Se eliminó el adaptador Log4J 1.x porque tenía CVE-2019-17571 sin una versión actualizada disponible.
- #448 Implementar soporte
linear-gradient
para la propiedad background-image
. Por @danfickle. Solicitado por @rja907. - #429 Revisión importante del
word-wrap: break-word
. Ahora una palabra no se dividirá a menos que sea demasiado grande para una línea por sí sola. Por @danfickle. Gracias por informar y probar @mndzielski. - #433 No justifique las líneas que terminen con la etiqueta
<br/>
. Gracias por informar @fcorneli. - #440 Elimine los espacios en blanco finales para el texto alineado a la derecha para evitar una apariencia irregular. Gracias por informar a @AnanasPizza.
- #446 Busque el atributo lang en los elementos ancestros cuando utilice el selector
lang()
. Gracias por informar y localizar el error @fungc. - #430 Utilice la ruta relativa para obtener licencias en archivos jar de origen en lugar de la ruta absoluta. Gracias por informar a @gabro y arreglarlo a través de PR @syjer.
- #417 Mantenga la relación de aspecto de las imágenes con propiedades de ancho/alto, así como propiedades de ancho/alto mínimo/máximo. Gracias por informar y base para solucionarlo @swarl.
- #423 Permitir que se especifiquen múltiples fuentes de fuentes con etiquetas
format
. Utilice únicamente format(truetype)
. Gracias por solicitar a @MichaelZaleskovsky y la base para la implementación @syjer. - #415 Evite la excepción de conversión de clase si el usuario intenta hacer flotar la celda de la tabla. Gracias por informar a @dmartineau99 y PR @syjer.
- #421 Evite la NPE cuando el texto justificado se mezcle con contenido injustificable. Gracias por informar a @Megingjard y PR @syjer.
- PDFBOX actualizado 2.0.17 a 2.0.19.
1.0.1 (2019-18-noviembre)
- #413 Maneje problemas de formulario, como la falta de nombre en el elemento de entrada, sin generar un NPE. Gracias @syjer por las relaciones públicas y @mmatecki por informar.
- #412 Agregue elementos de nivel de bloque HTML como
section
al CSS predeterminado. Gracias @syjer. - #339 Retire el módulo convertidor de JSoup a DOM. Gracias @kewilson.
- 0cd098 Corrección del soporte de espaciado entre letras en la última línea del bloque con espacio al final. También mejoras de rendimiento y refactorización. Por @danfickle.
- #410 Corrección de la configuración incorrecta de negrita en los contadores de elementos de la lista. Gracias @syjer por arreglar las relaciones públicas (¡y probarlas!) y a @acieplinski por informar.
- Wiki Configuraciones de justificación de texto configurables como parte de una revisión de justificación que también permite usar más espacio entre caracteres cuando no hay espacios en la línea. Por @danfickle. Confirmaciones enumeradas en el n.° 403.
- #403 Compatibilidad con guiones suaves. Los guiones suaves ahora se reemplazan por guiones duros cuando se usan como carácter de final de línea. Gracias @sbrunecker.
- #408 Solución para marcadores que no funcionan con analizadores HTML5 como JSoup. Gracias @syjer por investigar y arreglar y @Milchreis por informar.
- #404 Actualice Batik a 1.12 y xmlgraphics-common a 2.4 (ambos usados en el módulo SVG) para evitar CVE en uno o ambos. Gracias @avoiculet.
- #396 Representación mucho más rápida de cuadros utilizando propiedades de radio de borde. Gracias @mndzielski.
- #400 Soporte para atributos de
lang
y title
y etiqueta abbr
para archivos PDF accesibles. Gracias @Ignaciort91. - #394, #395 Actualice PDFBOX a 2.0.17 y pdfbox-graphics2d a 0.25. Gracias @cristan, @rototor.
- #384 Permitir al usuario proporcionar el proveedor de PDFont. Gracias @DSW-PS.
- #373 Se corrigió la regresión donde se proporcionan tanto el ancho máximo como el alto máximo para imágenes con ciertas relaciones de aspecto. Gracias @rototor.
- #380 Soporte mucho mejor para columnas fluidas, incluidos saltos de columna explícitos, contenido flotante y contenido anidado a nivel de bloque. Por @danfickle.
1.0.0 (23 de julio de 2019)
- #372 Soporte de tamaño muy mejorado para elementos
img
, svg
y math
. - #344 Utilice archivos PDF en la etiqueta
img
: <img src="some.pdf" page="1" alt="Some alt text" />
.
LANZAMIENTOS ANTIGUOS
Ver CHANGELOG.md.