web-dev-qa-db-fra.com

Utiliser iText pour convertir HTML en PDF

Est-ce que quelqu'un sait s'il est possible de convertir une page HTML (url) en un PDF en utilisant iText?

Si la réponse est "non", c'est bien aussi, car j'arrêterai de perdre mon temps à essayer de le résoudre et je dépenserai juste de l'argent pour l'un des nombreux composants que je sais :)

Merci d'avance pour vos réponses!

41
Mark

Je pense que c'est exactement ce que vous cherchiez

http://today.Java.net/pub/a/today/2007/06/26/generating-pdfs-with-flying-saucer-and-itext.html

http://code.google.com/p/flying-saucer

L'objectif principal de Flying Saucer est de rendre XHTML et CSS 2.1 conformes aux spécifications à l'écran en tant que composant Swing. Bien qu'il ait été initialement conçu pour intégrer du balisage dans des applications de bureau (des choses comme l'iTunes Music Store), Flying Saucer a également été étendu à iText. Cela rend très facile le rendu du XHTML en PDF, ainsi qu'en images et à l'écran. Flying Saucer nécessite Java 1.4 ou supérieur.

29
opensas

J'ai fini par utiliser ABCPdf de webSupergoo. Cela fonctionne très bien et pour environ 350 $, cela m'a fait gagner des heures et des heures sur la base de vos commentaires ci-dessus. Merci encore Daniel et Bratch pour vos commentaires.

6
Mark

La façon la plus simple de procéder consiste à utiliser pdfHTML. Il s'agit d'un module complémentaire iText7 qui convertit HTML5 (+ CSS3) en syntaxe pdf.

Le code est assez simple:

    HtmlConverter.convertToPdf(
        "<b>This text should be written in bold.</b>",       // html to be converted
        new PdfWriter(
            new File("C://users/mark/documents/output.pdf")  // destination file
        )
    );

Pour en savoir plus, allez sur http://itextpdf.com/itext7/pdfHTML

3
Joris Schellekens

La réponse à votre question est en fait double. Tout d'abord, vous devez spécifier ce que vous avez l'intention de faire avec le HTML rendu: enregistrez-le dans un nouveau fichier PDF, ou utilisez-le dans un autre contexte de rendu (c.-à-d. Ajoutez-le à un autre document que vous génèrent).

Le premier est relativement facile à réaliser en utilisant le framework Flying Saucer, qui peut être trouvé ici: https://github.com/flyingsaucerproject/flyingsaucer

Ce dernier est en fait un problème beaucoup plus complet qui doit être catégorisé davantage. En utilisant iText, vous ne pourrez pas (trivialement, au moins) combiner des éléments iText (c'est-à-dire Paragraph, Phrase, Chunk et ainsi de suite) avec le code HTML généré. Vous pouvez vous en sortir en utilisant la méthode ContentByteaddTemplate et en générant le code HTML de ce modèle.

Si vous souhaitez par contre tamponner le code HTML généré avec quelque chose comme des filigranes, des dates ou similaires, vous pouvez le faire en utilisant iText.

Donc, conclusion: vous ne pouvez pas intégrer trivialement le HTML rendu dans d'autres contextes de génération de PDF, mais vous pouvez rendre le HTML directement dans un document vierge PDF.

1
Jes