OUVRIR LE HTML AU PDF
APERÇU
Open HTML to PDF est une bibliothèque purement Java permettant de restituer un sous-ensemble raisonnable de XML/XHTML bien formé (et même du HTML5) en utilisant CSS 2.1 (et les normes ultérieures) pour la mise en page et le formatage, la sortie au format PDF ou des images.
Utilisez cette bibliothèque pour générer de jolis documents PDF. Mais sachez que vous ne pouvez pas lancer du HTML5+ moderne sur ce moteur et vous attendre à un excellent résultat. Vous devez créer spécialement le document HTML pour cette bibliothèque et utiliser sa fonctionnalité CSS étendue comme #31 ou #32 pour obtenir de bons résultats. Évitez les flotteurs à proximité des sauts de page et utilisez des dispositions de tableau.
COMMENCER
- Guide d'intégration - obtenez les artefacts et le code Maven pour commencer.
- 1.0.10 Online Sandbox - Maintenant avec les journaux !
- Modèles pour Openhtmltopdf - Modèles sous licence MIT qui fonctionnent avec ce projet. Mis à jour le 2021-09-21.
- Document de présentation - PDF
- Wiki de documentation
- Guide de l'auteur de modèles - PDF - DÉCONSEILLÉ - Préférer le wiki - Déplacement des informations vers le wiki
- Exemple de projet – Joli générateur de CV
DIFFÉRENCES AVEC LA SOUCOUPE VOLANTE
- Utilise PDFBOX, bien entretenu et open source (compatible LGPL), comme bibliothèque PDF, plutôt qu'iText.
- Prise en charge appropriée pour générer des PDF accessibles (Section 508, PDF/UA, WCAG 2.0).
- Prise en charge appropriée pour générer des PDF conformes aux normes PDF/A.
- Un nouveau moteur de rendu plus rapide signifie que ce projet peut être plusieurs fois plus rapide pour des documents très volumineux.
- Meilleure prise en charge des transformations CSS3.
- Tests de régression visuelle automatique des PDF, avec de nombreux tests de bout en bout.
- Possibilité d'insérer des pages pour le contenu coupé.
- Plugins intégrés pour SVG et MathML.
- Prise en charge des polices de secours.
- Prise en charge limitée des documents RTL et bidirectionnels.
- Du côté négatif, pas de support pour les polices OpenType.
- Prise en charge des notes de bas de page.
- Bien plus. Voir le journal des modifications ci-dessous.
LICENCE
Open HTML to PDF est distribué sous LGPL. Open HTML to PDF lui-même est sous licence GNU Lesser General Public License, version 2.1 ou ultérieure, disponible sur http://www.gnu.org/copyleft/lesser.html. Vous pouvez utiliser Open HTML to PDF de n'importe quelle manière et à n'importe quelle fin, à condition de respecter les termes de la licence. Une copie de la licence LGPL est incluse sous licence-lgpl-2.1.txt ou licence-lgpl-3.txt dans nos distributions et dans notre arborescence des sources.
Une exception à cette règle est le module de test pdf-a, qui est sous licence GPL. Ce module n'est pas distribué sur Maven Central et est uniquement destiné aux tests.
Open HTML to PDF utilise quelques packages FOSS pour faire le travail. Une liste de ceux-ci peut être trouvée dans le graphique des dépendances.
CRÉDITS
Open HTML to PDF est basé sur Flying-soucoupe. Le mérite revient aux contributeurs de ce projet. Le code sera également utilisé depuis neoFlyingSaucer
FAQ
- OPEN HTML TO PDF est testé avec OpenJDK 8, 11 et 17 (accès anticipé). Il nécessite au moins Java 8 pour fonctionner.
- Non, vous ne pouvez pas l'utiliser sur Android.
- Vous devriez pouvoir l'utiliser sur Google App Engine (environnement Java 8 ou supérieur). Faites-nous part de votre expérience.
-
Les colonnes fluides ne sont pas implémentées. Implémenté dans RC12. - Non, ce n'est pas un navigateur Web. Plus précisément, il n'exécute pas Javascript et n'implémente pas de nombreuses normes modernes telles que la disposition flexible et en grille.
CAS DE TEST
Les cas de test, qui échouent ou qui fonctionnent, sont les bienvenus, veuillez les placer dans /openhtmltopdf-examples/src/main/resources/testcases/
et exécutez-les depuis /openhtmltopdf-examples/src/main/java/com/openhtmltopdf/testcases/TestcaseRunner.java
.
JOURNAL DES CHANGEMENTS
tête - 1.0.11-INSTANTANÉ
- Voir le journal de validation.
1.0.10 (2021-septembre-13)
REMARQUE : après cette version, l'ancien moteur de rendu lent sera supprimé. Le mode rapide est la valeur par défaut (depuis la version 1.0.5), vous n'avez donc qu'à vérifier votre code si vous appelez la méthode useSlowMode
qui sera supprimée.
- #551 SÉCURITÉ Correction d'une boucle quasi infinie pour le contenu très profondément imbriqué avec
page-break-inside: avoid
les contraintes. Merci d'avoir persisté @swillis12 et débogué @syjer. - #729 SÉCURITÉ Mettez à niveau xmlgraphics-commons (utilisé dans le rendu SVG) pour éviter CVE. Merci @electrofLy.
- #711 Prise en charge des notes de bas de page (bêta). Voir la documentation des notes de bas de page sur le wiki. Merci d'avoir demandé @a-leithner et @slumki.
- #761 Propriété CSS pour désactiver les biseaux sur les bordures afin d'éviter les effets d'anticrénelage laids, en particulier sur les cellules du tableau. Voir la propriété -fs-border-rendering sur wiki. Merci d'avoir fourni un échantillon @gandboy91.
- #103 Afficher le nom de la classe d'exception et le message par défaut pour les messages de journal avec une exception associée.
- #711 (mixte) Meilleure boxe pour le contenu
::before
et ::after
. Devrait maintenant être capable de définir correctement une bordure autour du pseudo-contenu. - #738 Prise en charge d'éléments supplémentaires dans PDF/UA, notamment l'art, la partie, la secte, la section, la légende et la citation. Merci @AndreasJacobsen.
- #736 Nouvel exemple d'utilisation d'un mutateur dom pour implémenter du contenu non pris en charge tel que les attributs de balise de police. Merci d'avoir demandé @mgabhishek06kodur.
- #707 Correction de la régression où les documents PDF/UA qui n'étaient pas également conformes au PDF/A manquaient de métadonnées Dublin Core. Merci @mgm-rwagner, @syjer.
- #732 Autoriser le positionnement de l'élément
table
. Merci @fcorneli. - #727 Autoriser l'utilisation d'un numéro de page initial pour les compteurs
page
et pages
. Merci pour les relations publiques @fanthos.
1.0.9 (2021-juin-18)
VERSION DE SÉCURITÉ : Cette version a été avancée en raison des versions de sécurité des dépendances PDFBOX et Batik.
- #722 Mettre à niveau PDFBOX (vers 2.0.24) - évite les CVE dans les versions antérieures et PDFBoxGraphics2D. Merci beaucoup @rototor.
- #678 Mettre à niveau la version Batik vers 1.14 (CVE-2020-11987) - Encore une fois, il est fortement conseillé d'éviter les SVG et XML non fiables. Merci @rototor.
- #716 Remplacez les appels
println
malveillants par des appels de journal. Merci @syjer pour les relations publiques, @tfo pour le reportage. - #708 Autoriser la propriété CSS SVG
shape-rendering
. Merci @syjer pour les relations publiques, @RAlfoeldi pour le reportage. - #703 Supprimez les appels aux appels de méthodes obsolètes dans la bibliothèque standard JRE. Peut changer la classe du lecteur XML. Implémenté par @danfickle.
- #702 Définissez des délais d'attente pour les gestionnaires HTTP/HTTPS par défaut. Merci d'avoir signalé @gengzi.
- 162228 Placez des liens vers des images raster dans des fichiers SVG via le résolveur d'URL.
- #694 Correction du format de papier B3 incorrect. Merci @lfintalan pour le rapport avec le numéro de ligne !
- ab48fd Ne consignez pas une police manquante plus d'une fois.
REMARQUE : les CVE de PDFBOX concernent le chargement de fichiers PDF non fiables dans PDFBOX et ce projet n'est donc pas directement affecté. Cependant, ce n'est pas une bonne idée d'avoir des CVE sur votre chemin de classe.
1.0.8 (2021-mars-22)
DÉCHARGE DE SÉCURITÉ
- #675 Mettez à jour PDFBOX vers 2.0.23 pour éviter les CVE. Merci d'avoir signalé @Samuel3.
REMARQUE : Ces CVE concernent le chargement de PDF non fiables dans PDFBOX et ce projet n'est donc pas directement affecté. Cependant, ce n'est pas une bonne idée d'avoir des CVE sur votre chemin de classe.
1.0.7 (2021-mars-19)
- #650 Prise en charge de plusieurs images d'arrière-plan sur un seul élément. Merci d'avoir demandé @baedorf.
- #669 Prise en charge des polices de secours. Merci d'avoir demandé @asu2 et d'avoir aidé @draco1023.
- #640 Implémentez l'intégration de fichiers via l'attribut de téléchargement sur les liens. Merci pour les relations publiques originales @syjer et pour avoir demandé @lindamarieb et @vader.
- API #666 pour obtenir la position la plus basse du contenu rendu afin de pouvoir suivre le contenu avec d'autres outils. Merci pour l'examen approfondi de PR @stechio et pour la demande de @DSW-AK.
- #664 Prise en charge améliorée des normes PDF/A et PDF/UA. Merci pour les relations publiques @qligier.
- #653 Le correctif pour les éléments de bloc en ligne avec un z-index ou une transformation était affiché deux fois. Merci d'avoir signalé @hannes123bsi.
- #655 Disposition correcte des listes ordonnées dans le sens RTL. Merci pour les relations publiques @johnnyaug.
- #658 Implémentez la fonction
target-text
pour la propriété content
. Merci pour les relations publiques @BenjaminVega. - #647 Correction des conditions de concurrence lors de la configuration de l'enregistreur dans des environnements multithread. Merci pour les relations publiques @syjer.
- #638 Possibilité de plug-in de contrôle de ressources externes en fonction du type de ressource et de l'URL. Merci pour les relations publiques originales @syjer.
- #628 Utilisez les méthodes améliorées d'intégration d'images de PDF-BOX. Merci pour PR @rototor et votre travail dans PDF-BOX pour la mise en œuvre.
- #627 Correction de la régression où un style de police nul provoquait NPE. Merci pour PR @rototor.
- #338 Implémenter un groupe de boutons radio en lecture seule. Merci pour votre enquête, vos rapports et votre patience @ThoSchCon, @aleks-shbln, @dmitry-weirdo, @syjer et @paulito-bandito.
1.0.6 (2020-décembre-22)
IMPORTANT : #615 Il s'agit d'une version de correction de bug pour un problème de boucle sans fin lors de l'utilisation de break-word avec des éléments flottants avec une marge haut/bas.
- #624 Mettez à jour PDFBOX vers 2.0.22 et pdfbox-graphics2d vers 0.30. Merci @rototor.
- #467 Empêcher la possibilité d'une boucle d'importation CSS.
- #621 Autoriser les espaces dans les URIS de données. Merci @syjer.
1.0.5 (2020-novembre-30)
SÉCURITÉ : #609 Met à jour le moteur de rendu Apache Batik SVG vers la dernière version pour éviter les problèmes de sécurité. Si vous utilisez ce projet pour restituer des SVG non fiables (déconseillé), vous devez mettre à jour immédiatement. Merci beaucoup @halvorbmundal.
IMPORTANT : le moteur de rendu rapide est désormais la valeur par défaut en préparation de la suppression de l'ancien moteur de rendu lent. Pour utiliser temporairement le moteur de rendu lent, vous pouvez appeler la méthode obsolète builder.useSlowMode()
(sortie PDF uniquement).
IMPORTANT : #543 Cette version reste sur PDFBOX version 2.0.20 en raison d'un bug avec les espaces insécables dans la version 2.0.21. Veuillez vous assurer que la version 2.0.21 n'est pas sur votre chemin de classe. Ce bug a été corrigé dans la prochaine version 2.0.22.
- #544 Code pour créer un site Web pour des modèles PDF pré-enregistrés au format thymeleaf et XHTML brut. Consultez le site Web des modèles pour prévisualiser les modèles.
- #533 Plugin de codes-barres. PR très utile fourni par @syjer. Documentation sur le plugin de codes-barres.
- #521 Déplacez la sortie d'image Java2D vers un rendu rapide et des améliorations générales. Documents de sortie d'image Java2D.
- 9ffd0e #568 Filtrez les caractères problématiques qui sont visibles dans certaines polices mais ne doivent pas être tels que les traits d'union doux. Merci @StephanSchrader.
- #587 Correctif pour les espaces blancs : nowrap coupe au lieu de s'enrouler. Merci @vipcxj d'avoir enfin corrigé via PR.
- #577 Ajoutez un plugin de tiroir PDF au premier plan (utile en particulier pour les filigranes). Merci @rototor pour les relations publiques et @sillen102 pour sa persistance.
- #566 Renommez
baseUri
arg en baseDocumentUri
et améliorez javadoc pour éviter toute confusion. Merci d'avoir signalé @NehalDamania. - 801780 Mettez à jour la dépendance du test Junit vers 4.13.1 pour éviter les avertissements du scanner de sécurité (le problème de sécurité spécifique n'a pas eu d'impact sur cette bibliothèque).
- #553 Correctif pour ContentLimitContainer provoquant des NPE lorsque des marges négatives sont utilisées. Merci d'avoir signalé @adilxoxo.
- #552 Optimisez le formateur de journal pour la journalisation juillet. Merci pour l'impressionnant PR @syjer.
- #542 Améliorer le placement de la décoration de liste. Merci pour les relations publiques @syjer et le reportage @mndzielski.
- #458 Correction des décorations de liste affichées (coupées) dans la zone de marge de la page.
- #525 Supprimez les schémas/DTD inutilisés. Réduit considérablement la taille du pot. Merci pour les relations publiques @syjer.
- #592 Autoriser les valeurs d'unité (px, cm, em, etc.) dans les attributs largeur/hauteur des images SVG liées. Merci @DanielWulfert.
- #594 #458 Correction d'un contenu plus répétitif et d'un crash PDF/UA. Merci @ThomHurks, @fungc.
- #599 Correction de RuntimeException se produisant sur InlineText.setSubstring. Merci @LAlves91.
- #605 Correction pour faire fonctionner la justification avec des paires de substitution. Merci @EmanuelCozariz.
- #601 Déplacer CI vers les actions Github. Merci @syjer.
- #597 Généraliser la prise en charge des uri de données. Merci @syjer, @Leostat86.
- #613 Autoriser l'ajout de polices pour SVG, MathML sous forme de fichiers au lieu de flux d'entrée pour éviter les bugs du JDK. Merci @syjer, @sureshkumar-ramalingam, @olayinkasf.
1.0.4 (2020-juillet-25)
- b88538 Correction d'une boucle sans fin lors de l'utilisation
word-wrap: break-word
. Merci d'avoir signalé, testé et étudié @swarl. Merci pour les tests et le débogage @rototor et @syjer. - #492 De nombreux tests sur l'algorithme de saut de ligne pour éviter de futures boucles sans fin. Par @danfickle.
- #515 Transmettez les styles CSS de document appliqués à l'élément SVG à l'implémentation SVG. Merci d'avoir demandé et contribué @amckain92.
- #514 CORRECTIF : Positionner correctement les cases lors de la justification des lignes rtl. Merci pour le signalement et les tests @lzhy1101.
- #512 #507 #502 Code de nettoyage, y compris la suppression du code inutilisé, des génériques, etc. Merci pour les PR @syjer.
- #489 Révision complète de la journalisation, y compris le consommateur de diagnostic par exécution. Un grand merci @syjer, beaucoup de travail dans ce PR. Voir la page de journalisation sur le wiki pour plus d'informations.
- #501 Mettez à niveau PDFBOX vers 2.0.20 et PDFBox-Graphics2D vers 0.26. Merci pour les relations publiques @rototor.
- #490 Correctif pour NPE lors de l'échec du décodage de l'URL des données d'image. Merci pour les relations publiques @syjer et le reportage @AlexisCothenet.
- #516 Ajoutez les métadonnées du bundle OSGI aux MANIFEST.MF. Merci d'avoir demandé et enquêté sur @zspitzer.
1.0.3 (2020-mai-25)
- IMPORTANT : cette version contient des correctifs pour deux bogues qui peuvent entraîner des boucles sans fin/un déni de service lors de l'utilisation
word-wrap: break-word
. Si vous utilisez cette fonctionnalité, veuillez effectuer la mise à niveau rapidement. - #483 Correction d'un bug de boucle sans fin avec
word-wrap: break-word
et traits d'union souples. Merci @rototor pour les relations publiques, @syjer pour l'analyse et @swarl pour le reporting. - #466 Correction d'un bug de boucle sans fin avec
word-wrap: break-word
et boîtes de largeur nulle. Merci @syjer pour l'analyse et @AlexisCothenet pour le rapport. - Le plugin SVG #486 peut désormais fournir une liste de protocoles autorisés pour les ressources externes et tous les gestionnaires de résolution/flux d'uri configurés seront utilisés. Merci @syjer pour les relations publiques et @ieugen pour le reportage.
- #480 Correction des formes de lien renvoyées par les tiroirs d'objets personnalisés. Merci @rototor pour les relations publiques et @hbergmey pour le rapport.
- #485 Implémenter la prise en charge des URIS de données SVG. Merci @syjer pour les relations publiques et @adrianrodfer pour le reportage.
- #470 Autoriser
mailto:
liens ou tout autre lien valide. Merci @syjer pour les relations publiques et @mndzielski pour le reportage. - #464 Honorez la propriété CSS
direction
. Merci @AnanasPizza pour le rapport. - #460 Remplacez la classe d'exception levée par
IOException
plus spécifique. Merci pour les relations publiques @leonorader. - #459 Implémentez l'unité CSS
rem
. Merci à @leonorader pour le rapport. - #211 Les images peuvent désormais être utilisées dans la propriété
content
CSS. Merci d'avoir demandé @Kuhlware. - #445 Correction du problème de non-récupération des valeurs d'attribut dans les documents convertis en Jsoup. Merci d'avoir signalé @testinfected.
- #450 Sortie Java2D uniquement : possibilité d'ajouter des polices via du code. De plus, les polices d'environnement ne seront plus utilisées par défaut. Pour utiliser les polices d'environnement :
builder.useEnvironmentFonts(true)
.
1.0.2 (2020-février-25)
- SÉCURITÉ Suppression de l'adaptateur Log4J 1.x car il contenait CVE-2019-17571 et aucune version mise à jour n'est disponible.
- #448 Implémentez la prise en charge
linear-gradient
pour la propriété background-image
. Par @danfickle. Demandé par @rja907. - #429 Refonte majeure du
word-wrap: break-word
. Désormais, un mot ne sera coupé que s'il est trop gros pour une ligne seule. Par @danfickle. Merci d'avoir signalé et testé @mndzielski. - #433 Ne justifiez pas les lignes se terminant par la balise
<br/>
. Merci d'avoir signalé @fcorneli. - #440 Supprimez l'espace blanc de fin pour le texte aligné à droite afin d'éviter une apparence irrégulière. Merci d'avoir signalé @AnanasPizza.
- #446 Recherchez l'attribut lang sur les éléments ancêtres lorsque vous utilisez le sélecteur
lang()
. Merci d'avoir signalé et traqué le bug @fungc. - #430 Utilisez le chemin relatif pour obtenir la licence dans les fichiers JAR source au lieu du chemin absolu. Merci d'avoir signalé @gabro et corrigé via PR @syjer.
- #417 Conservez les proportions des images avec les propriétés de largeur/hauteur ainsi que les propriétés de largeur/hauteur min/max. Merci pour le rapport et la base du correctif @swarl.
- #423 Autoriser la spécification de plusieurs sources de polices avec des balises
format
. Utilisez uniquement format(truetype)
. Merci d'avoir demandé @MichaelZaleskovsky et la base de mise en œuvre @syjer. - #415 Évitez l'exception de conversion de classe si l'utilisateur essaie de faire flotter une cellule du tableau. Merci d'avoir signalé @dmartineau99 et PR @syjer.
- #421 Évitez les NPE lorsque le texte justifié est mélangé à du contenu injustifiable. Merci d'avoir signalé @Megingjard et PR @syjer.
- Mise à jour de PDFBOX 2.0.17 vers 2.0.19.
1.0.1 (2019-novembre-18)
- #413 Gérez les problèmes de formulaire tels que l'absence de nom sur l'élément d'entrée sans lancer de NPE. Merci @syjer pour les relations publiques et @mmatecki pour le rapport.
- #412 Ajoutez des éléments de niveau bloc HTML en tant que
section
au CSS par défaut. Merci @syjer. - #339 Supprimez le module de conversion JSoup vers DOM. Merci @kewilson.
- 0cd098 Correction de la prise en charge de l'espacement des lettres sur la dernière ligne du bloc avec un espace de fin. Également des améliorations de performances et une refactorisation. Par @danfickle.
- #410 Correction d'un mauvais réglage du gras sur les compteurs d'éléments de liste. Merci @syjer pour le correctif de relations publiques (et le test !) et @acieplinski pour le rapport.
- Wiki Paramètres de justification de texte configurables dans le cadre d'une refonte de la justification qui permet également d'utiliser plus d'espace entre les caractères lorsqu'il n'y a pas d'espaces sur la ligne. Par @danfickle. Commits répertoriés dans #403.
- #403 Prise en charge des traits d'union souples. Les traits d'union souples sont désormais remplacés par des traits d'union durs lorsqu'ils sont utilisés comme caractère de fin de ligne. Merci @sbrunecker.
- #408 Correction des signets qui ne fonctionnent pas avec les analyseurs HTML5 tels que JSoup. Merci @syjer pour l'enquête et la correction et @Milchreis pour le rapport.
- #404 Mettez à niveau Batik vers 1.12 et xmlgraphics-common vers 2.4 (tous deux utilisés dans le module SVG) pour éviter le CVE dans l'un ou les deux. Merci @avoiculet.
- #396 Rendu beaucoup plus rapide des boîtes en utilisant les propriétés border-radius. Merci @mndzielski.
- #400 Prise en charge des attributs
lang
et title
et de la balise abbr
pour les PDF accessibles. Merci @Ignaciort91. - #394, #395 Mettez à niveau PDFBOX vers 2.0.17 et pdfbox-graphics2d vers 0.25. Merci @cristan, @rototor.
- #384 Autoriser l'utilisateur à fournir le fournisseur PDFont. Merci @DSW-PS.
- #373 Correction de la régression où la largeur maximale et la hauteur maximale sont fournies pour les images avec certains rapports d'aspect. Merci @rototor.
- #380 Prise en charge bien meilleure des colonnes fluides, y compris les sauts de colonnes explicites, le contenu flottant et le contenu imbriqué au niveau des blocs. Par @danfickle.
1.0.0 (2019-juillet-23)
- # 372 Prise en charge du dimensionnement considérablement améliorée pour les éléments
img
, svg
et math
. - #344 Utilisez les PDF dans la balise
img
: <img src="some.pdf" page="1" alt="Some alt text" />
.
ANCIENNES VERSIONS
Afficher CHANGELOG.md.