Conversion de fichiers HTML au format PDF

Je dois générer automatiquement un fichier PDF à partir d’un document (X) HTML existant. Les fichiers d’entrée (rapports) utilisent une présentation plutôt simple basée sur une table, de sorte que la prise en charge de fonctionnalités JavaScript / CSS vraiment fantaisistes n’est probablement pas nécessaire.

Comme je suis habitué à travailler en Java, une solution facilement utilisable dans un projet Java est préférable. Cependant, il ne doit fonctionner que sur les systèmes Windows.

Une façon de le faire est réalisable, mais ne produit pas une sortie de bonne qualité (du moins prête à l’ emploi ), c’est en utilisant CSS2XSLFO et Apache FOP pour créer les fichiers PDF. Le problème que j’ai rencontré était que, bien que les atsortingbuts CSS soient bien convertis, la mise en page de la table est assez gâchée, le texte sortant de la cellule du tableau.

J’ai également jeté un coup d’œil sur Jrex, une API Java pour l’utilisation du moteur de rendu Gecko.

Existe-t-il un moyen de saisir la page rendue à partir du moteur de rendu d’Internet Explorer et de l’envoyer automatiquement à un outil PDF-Printer? Je n’ai aucune expérience dans la programmation OLE sous Windows, donc je n’ai aucune idée de ce qui est possible et de ce qui ne l’est pas.

Avez-vous une idée?

EDIT : Le truc FlyingSaucer / iText semble très prometteur. Je vais essayer d’y aller avec ça.

Merci pour toutes les réponses

Le projet de rendu XHTML Flying Saucer prend en charge la sortie XHTML au format PDF. Regardez un exemple ici .

Avez-vous essayé WKHTMLTOPDF ?

C’est un utilitaire shell simple, une implémentation open source de WebKit. Les deux sont gratuits

Nous avons mis en place un petit tutoriel ici

EDIT (2017):

Si c’était pour construire quelque chose aujourd’hui, je n’irais plus dans cette voie.
Mais utiliserait plutôt http://pdfkit.org/ à la place.
Peut-être le dépouiller de toutes ses dépendances nodejs, à exécuter dans le navigateur.

Découvrez iText ; Il s’agit d’une boîte à outils Java pure qui prend en charge la lecture de données à partir de HTML. Je l’ai utilisé récemment dans un projet lorsque j’avais besoin d’extraire du contenu de notre CMS et de l’exporter sous forme de fichiers PDF, et tout cela était assez simple. Le support des balises CSS et de style est assez limité, mais il rend les tables sans aucun problème (je n’ai jamais réussi à définir la largeur de la colonne).

Créer un PDF à partir de HTML ressemble à ceci:

Document doc = new Document(PageSize.A4); PdfWriter.getInstance(doc, out); doc.open(); HTMLWorker hw = new HTMLWorker(doc); hw.parse(new SsortingngReader(html)); doc.close(); 

Si vous avez le financement, rien ne vaut Prince XML comme le montre cette vidéo.

Existe-t-il un moyen de saisir la page rendue à partir du moteur de rendu d’Internet Explorer et de l’envoyer automatiquement à un outil PDF-Printer?

Voilà comment ActivePDF fonctionne, ce qui signifie que vous savez ce que vous obtiendrez et que vous bénéficiez d’un support de style raisonnable.

C’est aussi l’un des rares paquets que j’ai trouvé (il y a quelques années) qui supporte les différentes commandes CSS de saut de page.

Malheureusement, le logiciel ActivePDF est très frustrant – puisqu’il doit lancer le navigateur IE en arrière-plan pour les conversions, il peut être assez lent et il n’est pas particulièrement stable non plus.

Il y a une nouvelle version actuellement en bêta qui est censée être bien meilleure, mais je n’ai pas encore eu l’occasion de l’essayer, alors je ne sais pas à quel point c’est une amélioration.

Vous pouvez utiliser un firefox sans tête avec une extension. C’est assez ennuyeux de courir mais ça donne de bons résultats.

Découvrez cette réponse pour plus d’informations.

Amyuni WebkitPDF pourrait être utilisé avec JNI pour une solution Windows uniquement. Ceci est une bibliothèque de conversion HTML vers PDF / XAML, gratuite pour une utilisation commerciale et non commerciale.

Si les fichiers de sortie ne sont pas nécessaires immédiatement, pour une meilleure évolutivité, il est préférable d’avoir une file d’attente et quelques processus d’arrière-plan qui en extraient, les convertissent et les stockent ensuite dans la firebase database ou le système de fichiers.

avertissement habituel s’applique

Si vous regardez la barre latérale de votre question, vous verrez de nombreuses questions connexes …

Dans votre contexte, la méthode la plus simple pourrait consister à installer un pilote d’impression PDF tel que PDFCreator et à imprimer la page sur cette sortie.