web-dev-qa-db-fra.com

Existe-t-il un outil en ligne de commande pour convertir les fichiers html en pdf?

Je voudrais installer un outil de ligne de commande dans une image Docker afin de convertir rapidement des fichiers * html en fichiers * pdf.

Je suis surpris qu'il n'y ait pas d'outil Unix pour faire quelque chose comme ça.

20
EB2127

pandoc est un excellent outil en ligne de commande pour la conversion de format de fichier.

L'inconvénient est pour PDF, vous aurez besoin de LaTeX. L'utilisation est

pandoc test.html -t latex -o test.pdf

Si vous n'avez pas installé LaTeX, alors je recommande htmldoc .


Cité de Création d'un PDF

Par défaut, pandoc utilise LaTeX pour créer le PDF, ce qui nécessite l'installation d'un moteur LaTeX.

Pandoc peut également utiliser ConTeXt, pdfroff ou l'un des moteurs HTML/CSS vers PDF suivants pour créer un PDF: wkhtmltopdf, weasyprint ou prince. Pour ce faire, spécifiez un fichier de sortie avec une extension .pdf, comme précédemment, mais ajoutez l'option --pdf-engine ou -t context, -t html ou -t ms à la ligne de commande (-t html par défaut est - -pdf-engine = wkhtmltopdf).

27

Vous pouvez également essayer wkhtmltopdf , l'utilisation et l'installation sont assez simples.

15
guitarman

weasyprint est une option. Un inconvénient possible est que vous aurez besoin de python sur votre machine.

Installer:

pip install weasyprint

Convertir:

weasyprint in.html out.pdf
6
shiftas

J'utilise avec succès la branche 1.8 de HTMLDOC depuis des années. Je l'ai mis dans un système commercial qui a depuis généré des centaines de milliers de rapports depuis 2003.

Ce n'est pas super polyvalent, mais il est très efficace et fiable. Il est limité à un ensemble de base de polices postscript.

Il ne prend pas en charge CSS, mais utilise à la place une directive de commentaire HTML spéciale définie pour contrôler PDF aspects spécifiques.

Le code source n'est pas trop difficile à lire et à modifier si vous devez ajouter des fonctionnalités personnalisées, si vous êtes à l'aise avec C. Il est compilé avec GCC ou Visual Studio, selon votre plate-forme cible.

Notez que le HTML n'a pas besoin d'être dans un fichier. Vous pouvez le générer dynamiquement à partir d'une URL, php ou aspx etc. Vous pouvez également le connecter à votre serveur Web pour générer un fichier PDF PDF dynamiquement.

Dans mon cas d'utilisation, il génère un fichier PDF à partir d'une page asp qui est ensuite attaché à un e-mail, au lieu d'envoyer le HTML à l'imprimante et à la machine à bourrer les lettres; c'est une sorte de spouleur d'impression .

1
birdwes

Il existe également un programme html2ps, et vous pouvez ensuite facilement convertir le fichier PostScript en pdf. Je l'ai utilisé il y a plusieurs années, et l'IIRC a fait du très bon travail sur un gros manuel.

1
jamesqf

PhantomJS peut faire le travail pour vous. Il a une fonctionnalité de ligne de commande et fonctionne hors de la boîte. Vous devrez écrire une simple fonction Javascript pour lui dire quoi faire. Le site dispose d'un guide de démarrage rapide et de nombreux articles en ligne peuvent vous aider. L'utilisation est généralement la suivante:

phantomjs configFile.js htmlFile.html output.pdf

Voici un exemple de script pour générer un portrait A4 PDF tiré de ici , enregistrez-le sous votre fichier configFile.js

var page = require('webpage').create(),
    system = require('system'),
    fs = require('fs');

page.paperSize = {
    format: 'A4',
    orientation: 'portrait',
    margin: {
        top: "1.5cm",
        bottom: "1cm"
    },
    footer: {
        height: "1cm",
        contents: phantom.callback(function (pageNum, numPages) {
            return '' +
                '<div style="margin: 0 1cm 0 1cm; font-size: 0.65em">' +
                '   <div style="color: #888; padding:20px 20px 0 10px; border-top: 1px solid #ccc;">' +
                '       <span>REPORT FOOTER</span> ' +
                '       <span style="float:right">' + pageNum + ' / ' + numPages + '</span>' +
                '   </div>' +
                '</div>';
        })
    }
};

page.settings.dpi = "96";

page.content = fs.read(system.args[1]);

var output = system.args[2];

window.setTimeout(function () {
    page.render(output, {format: 'pdf'});
    phantom.exit(0);
}, 2000);
1
The Betpet