Conversion de fichiers HTML en PDF [fermé]


128

J'ai besoin de générer automatiquement un fichier PDF à partir d'un document HTML (X) existant. Les fichiers d'entrée (rapports) utilisent une mise en page plutôt simple, basée sur des tableaux, donc la prise en charge de trucs JavaScript / CSS vraiment sophistiqués n'est probablement pas nécessaire.

Comme je suis habitué à travailler en Java, une solution qui peut facilement être utilisée 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 qui est faisable, mais qui ne produit pas une sortie de bonne qualité (du moins prête à l' emploi ) consiste à utiliser CSS2XSLFO et Apache FOP pour créer les fichiers PDF. Le problème que j'ai rencontré était que, bien que les attributs CSS soient bien convertis, la mise en page du tableau est assez foirée, avec du texte sortant de la cellule du tableau.

J'ai également jeté un coup d'œil à Jrex, une API Java permettant d'utiliser le moteur de rendu Gecko.

Existe-t-il peut-être un moyen de récupérer la page rendue à partir du moteur de rendu d'Internet Explorer et de l'envoyer automatiquement à un outil d'impression PDF? Je n'ai aucune expérience de 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?


3
J'ai récemment créé un docbag de bibliothèque Java qui peut convertir du xhtml en documents pdf. La version actuelle n'est pas quelque chose d'avancé, mais si vos modèles xhtml sont simples, cette bibliothèque peut être utile.
Jakub Torbicki

Je pense que la solution consiste à utiliser les capacités des navigateurs pour effectuer la traduction. Voir stackoverflow.com/q/25574082/39998
David Hofmann

Je suis coincé avec la génération de pdf à partir d'un html qui contient des lettres cyrilliques. Tout va bien sauf les lettres cyrilliques qui sont omises. Quelqu'un qui a ce genre de problème?
Kristijan Iliev du

@krisiliev: J'ai eu des problèmes similaires, et pour autant que je me souvienne, la police utilisée était très importante. La plupart des polices ne prennent pas en charge les caractères UTF8 complets, mais les éléments suivants devraient: 'font-family: Arial Unicode MS;' (CSS). Assurez-vous également d'utiliser le bon encodage (je conseillerais de toujours utiliser UTF-8)
panschk

Réponses:


73

Le projet de rendu Flying Saucer XHTML prend en charge la sortie de XHTML au format PDF. Jetez un œil à un exemple ici .


20
Le vrai problème avec Flying Sauser est qu'il utilise itext pour rendre le PDF, qui est une bibliothèque sous licence AGPL v3
David Hofmann

11
La version d'itext utilisée par Flying Saucer est la 2.0.8 qui était disponible sous LGPL. Seuls les numéros de version 5 ou supérieurs sont sur la licence la plus restrictive. stackoverflow.com/questions/2692000/…
Gary

8
Je dirais que le vrai problème avec Flying Saucer est qu'il nécessite un document XML bien formé et valide. Il est facile de briser involontairement le rendu PDF en incluant quelque chose comme une esperluette dans votre HTML, ou un code javascript qui rend votre HTML rendu non XHTML strict. Bien que cela puisse être atténué avec des tests automatisés ou un processus impliquant une validation XML.
SteveT

3
@LateralFractal Autant que je sache, Flying Saucer 9.0.8 (la dernière version, je pense) utilise iText 2.1.7, qui est la dernière version iText avec une licence permissive --- LGPL. mvnrepository.com/artifact/org.xhtmlrenderer/flying-saucer-pdf/…
Jonathan Crosmer

2
@JonathanCrosmer Ouais. Il existe deux packages FlyingSaucer pour PDF, un pour iText v2 et un pour iText v5. En supposant que les deux ont des fonctionnalités égales; le risque AGPL peut être écarté.
LateralFractal

49

Avez-vous essayé WKHTMLTOPDF ?

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

Nous avons mis en place un petit tutoriel ici

MODIFIER (2017):

Si c'était pour construire quelque chose aujourd'hui, je n'irais plus dans cette voie.
Mais utiliserait plutôt http://pdfkit.org/ .
Probablement le dépouillant de toutes ses dépendances nodejs, pour l'exécuter dans le navigateur.


16
Pour une conversion html-page-pdf, c'est mieux que tout ce que j'ai vu, gratuit ou commercial.
MGOwen

Fonctionne-t-il sur un non Mac OS?
Eran Medan

1
@Eran, nous l'utilisons sous Linux. Je pense qu'il y a aussi une version Windows
Mic

1
@Mic Oui, il existe également une version Windows.
Viccari

testé sur Windows XP (version 0.9.9) et fonctionne très bien. En outre, ne nécessite pas de droits d'administrateur sur la machine pour l'installation.
Christopher Mahan

44

Découvrez iText ; c'est une boîte à outils Java PDF pure qui prend en charge la lecture de données à partir de HTML. Je l'ai utilisé récemment dans un projet lorsque je devais extraire du contenu de notre CMS et l'exporter sous forme de fichiers PDF, et tout était plutôt simple. La prise en charge des balises CSS et de style est assez limitée, mais elle rend les tableaux sans aucun problème (je n'ai jamais réussi à définir la largeur de la colonne).

La création d'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 StringReader(html));
doc.close();

9
C'est AGPL, semble encore pire que GPL, vous devez être open source même si vous ne faites que servir le PDF et iText est côté serveur.
Eran Medan

10
@Eran, utilisez simplement la dernière version non AGPL (com.lowagie: itext: 2.1.7 dans Maven).
Nowaker

1
HTMLWorker est obsolète dans les nouvelles versions d'IText au profit de XMLWorker; cependant le support CSS est médiocre dans les deux cas (voir demo.itextsupport.com/xmlworker/itextdoc/… ) et n'était pas adapté à mes besoins. Au contraire Flying Saucer était parfait.
Pino

Vous pouvez utiliser la version LGPL qui se trouve sur github.com/albfernandez/itext2
Vladimir Rozhkov


3

Existe-t-il peut-être un moyen de récupérer la page rendue à partir du moteur de rendu d'Internet Explorer et de l'envoyer automatiquement à un outil d'impression PDF?

Voici comment ActivePDF fonctionne , ce qui signifie que vous savez ce que vous obtiendrez et qu'il a en fait un support de style raisonnable.

C'est aussi l'un des rares packages que j'ai trouvés (en regardant il y a quelques années) qui prend en charge 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 existe actuellement une nouvelle version en version bêta qui est censée être bien meilleure, mais je n'ai pas vraiment eu l'occasion de l'essayer, donc je ne sais pas à quel point il s'agit d'une amélioration.


Merci pour la réponse utile. Je ne pense pas qu'ActivePDF soit vraiment adapté à cause du prix, mais il est bon de savoir que quelque chose comme ça existe.
panschk

API HTML vers PDF de GrabzIt : grabz.it/html-to-pdf-image-api.aspx Fonctionne de la même manière qu'il rend le HTML dans un navigateur, puis crée le PDF, ce qui garantit des conversions PDF beaucoup plus précises.
user1474090

2

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

Consultez cette réponse pour plus d'informations.


Cela ne ressemble pas à une solution très évolutive si l'on a besoin de convertir des pages à la volée en pdf en parallèle. Si quelques requêtes aboutissent à une conversion en utilisant FF, votre serveur aura perdu quelques GIG de mémoire juste pour servir quelques pages converties. Cela ouvrirait votre serveur à un DOS.
mP.

Mieux mais similaire: github.com/ariya/phantomjs/wiki/Screen-Capture (selon we-love-php.blogspot.com/2012/12/ ... le pdf contient du texte réel, non rastérisé)
nafg

0

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 être d'installer un pilote d'impression PDF comme PDFCreator et d'imprimer simplement la page sur cette sortie.


En quoi est-ce une solution Java? Ceci est un pilote d'impression Windows.
Gris

L'OP mentionnait explicitement Windows. Et je suppose qu'il existe des pilotes similaires pour d'autres systèmes. L'OP n'a mentionné Java que comme une solution possible ...
PhiLho

0

Amyuni WebkitPDF peut être utilisé avec JNI pour une solution Windows uniquement. Il s'agit d'une bibliothèque de conversion HTML vers PDF / XAML, gratuite pour un usage commercial et non commercial.

Si les fichiers de sortie ne sont pas nécessaires immédiatement, pour une meilleure évolutivité, il peut être préférable d'avoir une file d'attente et quelques processus d'arrière-plan prenant des éléments à partir de là, les convertissant et les stockant ensuite sur la base de données ou le système de fichiers.

la clause de non-responsabilité habituelle s'applique

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.