it-swarm.com.de

Gibt es ein Befehlszeilentool zum Konvertieren von HTML-Dateien in PDF?

Ich möchte ein Befehlszeilentool in einem Docker-Image installieren, um * HTML-Dateien schnell in * PDF-Dateien zu konvertieren.

Ich bin überrascht, dass es kein Unix-Tool gibt, um so etwas zu tun.

20
EB2127

pandoc ist ein großartiges Befehlszeilenprogramm für die Dateiformatkonvertierung.

Der Nachteil ist die PDF Ausgabe, Sie benötigen LaTeX. Die Verwendung ist

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

Wenn Sie LaTeX nicht installiert haben, empfehle ich htmldoc .


Zitiert von PDF erstellen

Standardmäßig verwendet pandoc LaTeX zum Erstellen der PDF-Datei, für die eine LaTeX-Engine installiert sein muss.

Alternativ kann pandoc ConTeXt, pdfroff oder eine der folgenden HTML/CSS-zu-PDF-Engines verwenden, um ein PDF zu erstellen: wkhtmltopdf, weasyprint oder prince. Geben Sie dazu wie zuvor eine Ausgabedatei mit der Erweiterung .pdf an, fügen Sie jedoch der Befehlszeile die Option --pdf-engine oder -t context, -t html oder -t ms hinzu (-t html ist standardmäßig - -pdf-engine = wkhtmltopdf).

27

Sie können auch versuchen wkhtmltopdf , Verwendung und Installation ist ziemlich einfach.

15
guitarman

weasyprint ist eine Option. Ein möglicher Nachteil ist, dass Sie python auf Ihrem Computer) benötigen.

Installieren:

pip install weasyprint

Konvertieren:

weasyprint in.html out.pdf
6
shiftas

Ich benutze den 1.8-Zweig von HTMLDOC seit Jahren erfolgreich. Ich habe es in ein kommerzielles System gestellt, das seit 2003 Hunderttausende von Berichten erstellt hat.

Es ist nicht sehr vielseitig, aber es ist sehr effizient und zuverlässig. Es ist auf einen grundlegenden Satz von Postscript-Schriftarten beschränkt.

CSS wird nicht unterstützt, sondern es wird eine spezielle HTML-Kommentaranweisung verwendet, um PDF spezifische Aspekte) zu steuern.

Der Quellcode ist nicht allzu schwer zu lesen und zu bearbeiten, wenn Sie benutzerdefinierte Funktionen hinzufügen müssen, wenn Sie mit C vertraut sind. Er wird je nach Zielplattform mit GCC oder Visual Studio kompiliert.

Beachten Sie, dass sich der HTML-Code nicht in einer Datei befinden muss. Sie können es dynamisch aus einer URL, PHP oder Aspx usw. generieren. Sie können es auch in Ihren Webserver einbinden, um eine PDF - Datei dynamisch zu generieren.

In meinem Anwendungsfall wird eine PDF - Datei von einer Asp-Seite generiert, die dann an eine E-Mail angehängt wird, anstatt den HTML-Code an den Drucker und die Brieffüllmaschine zu senden. Dies ist eine Art Druckspooler .

1
birdwes

Es gibt auch ein html2ps-Programm, und Sie können die PostScript-Datei dann problemlos in PDF konvertieren. Ich habe das vor einigen Jahren benutzt und IIRC hat bei einem großen Handbuch ziemlich gute Arbeit geleistet.

1
jamesqf

PhantomJS kann die Arbeit für Sie erledigen. Es verfügt über Befehlszeilenfunktionen und funktioniert sofort. Sie müssen eine einfache Javascript-Funktion schreiben, um anzugeben, was zu tun ist. Die Website enthält eine Kurzanleitung und es sind zahlreiche Artikel online verfügbar, die Sie unterstützen. Die Verwendung ist im Allgemeinen wie folgt:

phantomjs configFile.js htmlFile.html output.pdf

Hier ist ein Beispielskript zum Generieren eines A4-Porträts PDF aus hier , speichern Sie es als 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