2008-10-06 7 views
35

J'utilise htmldoc depuis un moment, mais j'ai rencontré des limitations assez sérieuses. J'ai besoin de la solution finale pour travailler sur une machine Linux. Je vais appeler cette bibliothèque/utilitaire/application à partir d'une application Perl, donc toutes les interfaces Perl seraient un bonus.Comment automatiser les conversions HTML vers PDF?

Répondre

8

PrinceXML est le meilleur que j'ai vu (il analyse le HTML standard ainsi que XML/XHTML). Comment est-ce le meilleur? Well, it passes the acid2 test que je pensais était sacrément impressionnant

Il est cependant assez cher

+2

J'ai eu le même problème. J'ai récemment évalué Prince XML et je peux garantir qu'il s'agit d'une application GRAVE. La vitesse et la qualité de la sortie sont tout simplement incroyables. – cletus

+0

Pourquoi payer des milliers de dollars quand un logiciel libre et open-source qui passe aussi le test Acid 2 est disponible? http://weasyprint.readthedocs.io WeasyPrint fortement recommandé. Des résultats phénoménaux. – FlorianB

2

Je ne prétendrai pas que c'est la "meilleure" solution mais c'est "une" solution que j'ai utilisée.

HTML Entrée ->HTML 2 PS ->PS 2 PDF -> PDF Sortie

1

Ce serait exagéré au total, mais vous pouvez télécharger et installer mirth. C'est un moteur de routage de message, mais il a la capacité de convertir html en pdf, de sorte que vous pouvez le configurer pour ramasser un fichier html dans un dossier, convertir en pdf, et déposer le pdf dans le même dossier ou autre. Comme je l'ai dit, overkill, un peu d'une courbe d'apprentissage, mais c'est gratuit, et Java, donc vous pouvez l'exécuter sur Linux si vous le souhaitez. Et tout ce que votre application Perl aurait à faire est de déposer le fichier html dans un fichier.

7

J'ai fait un peu de googling pour vous et est venu avec deux options. Il y en a peut-être plus, ma stratégie google consistait à essayer "webkit ligne de commande pdf" et "gecko ligne de commande pdf", cherchant essentiellement des programmes en ligne de commande qui intègrent les deux moteurs de rendu open source populaires dans les moteurs de rendu. Voici ce que j'ai trouvé:

Firefox command-line printer - sorties au format PDF et .png

wkpdf - tout cela est pour Mac, il est probablement assez portable.

53

Désolé pour déterrer ce vieux poste, mais il est sorti d'abord dans ma recherche pour le meilleur outil de conversion HTML/PDF. Sur Linux wkhtmltopdf est très bon (prend en compte CSS, entre autres) et GPL.

+0

Pour soutenir votre point, 1) fonctionne comme un charme 2) utilise le moteur de rendu webkit, et qt qui signifie qu'il peut bénéficier de mises à jour. Bien que le dernier RC ait été libéré fév. 2011. – kommradHomer

+0

excellent logiciel, merci – RockScience

+0

Pour mettre à jour sur le commentaire de @ kommradHomer, le projet est toujours actif; la dernière version stable a été publiée le mois dernier. Il est également disponible dans les dépôts officiels d'Ubuntu, mais au moment de l'écriture quelques versions derrière. – Arild

-1

Vous voudrez peut-être consulter 'Document Conversion Service' par Peernet (au http://www.peernet.com/conversion-software/batch-document-converter/). Cela s'exécute en tant que service sur un ordinateur Windows ou Windows Server. Il ouvre les documents HTML dans un navigateur Web, puis les imprime via un pilote d'impression pour créer des documents PDF, de sorte que le document PDF produit ressemble exactement à l'impression du document HTML depuis le navigateur.

1

Vous devriez jeter un oeil à http://phantomjs.org/

La conversion peut être fait par un petit script rasterize.js puis émission

phantomjs rasterize.js 'http://en.wikipedia.org/w/index.php?title=Jakarta&printable=yes' jakarta.pdf 
12

WeasyPrint produit de belles PDF avec du texte sélectionnable et hyperliens.

weasyprint input.html output.pdf 

Si vous utilisez wkhtmltopdf à la place, essayez les options suivantes:

wkhtmltopdf --margin-bottom 20mm --margin-top 20mm --minimum-font-size 16 ... 
+0

Cela devrait être la réponse choisie, c'est gratuit, open-source, et oui, les résultats sont phénoménaux! Hautement recommandé. – FlorianB

4

Il y a un nouveau mode sans tête depuis Chrome 59. Comme toutes les autres solutions vraiment du mal avec les nouveaux (ou pas si nouveau plus Les fonctionnalités CSS comme la flexbox, c'était dans mon cas la seule solution pour produire une sortie PDF correcte.Pour créer un fichier pdf à partir d'un fichier html local, utilisez la commande suivante: chrome --headless --disable-gpu --print-to-pdf file:///path/to/myfile.html.

Pour Mac OS, remplacer chrome par /Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome. Le seul inconvénient que j'ai remarqué jusqu'à présent est que (actuellement) vous ne pouvez pas passer le code HTML via stdin, mais créer un fichier temporaire n'est pas vraiment un problème.

Pour plus d'informations, voir https://developers.google.com/web/updates/2017/04/headless-chrome#create_a_pdf_dom

Mise à jour: Comme il se trouve, les gars chrome seront plus susceptibles de fournir une sorte de module de nœud pour cette tâche, qui finit par désapprouver le mode sans tête (https://bugs.chromium.org/p/chromium/issues/detail?id=719921). La meilleure solution serait d'utiliser l'approche basée sur les nœuds en utilisant le module marionnettiste tel que documenté sous https://developers.google.com/web/updates/2017/04/headless-chrome#node et d'imprimer la page via la commande Page.printToPDF, ce qui permet également une configuration supplémentaire.

Bien sûr, vous pouvez également vous connecter à la socket Web de la console de débogage à partir de n'importe quel environnement autre que le nœud (c'est-à-dire le script PHP).

Questions connexes