Batch-Konvertierung HTML nach PDF

wkhtmltopdf

Zur Konvertierung von Dateiformaten gibt es eine große Zahl von freier Software, die mehr oder weniger zuverlässig und layout-getreu arbeiten. Ich hatte unter anderem heute die Aufgabe eine grosse Menge an HTML-Dateien in PDF-Dokumente zu konvertieren. Ein sehr gutes Konvertierungsprogramm ist -> wkhtmltopdf , das QtWebKit verwendet und das man -> hier für sein Betriebssystem downloaden kann. Ich beschreibe hier die Installation und die Erstellung eines Scripts unter Ubuntu, um damit eine Batch-Konvertierung HTML nach PDF durchführen zu können.

Installation

Die einfachste Methode ist sich die Installationsdatei bei -> wkhtmltopdf herunter zu laden und mit dem Softwareinstaller gleich zu installieren. Wer lieber GitHub verwendet, findet die Software -> hier.

Konvertieren

Die Konvertierung eines HTML-Dokuments in ein PDF-Dokument ist simpel:

:~$ wkhtmltopdf /Pfad/zur/html-Datei.html /Pfad/zum/Speicherort/der/pdf-Datei.pdf

Als Parameter lassen sich Angaben zur Qualität, Papiergröße, Rändern, etc. angeben. Besonders interessant sind die Page Options, die beim Konvertieren von Web-Seiten verwendet werden können.

Batch-Konvertieren

Solange man mehrere HTML-Dokumente zusammen in nur ein einziges PDF-Dokument konvertieren möchte, genügt als Aufruf

:~$ wkhtmltopdf /Pfad/zur/den html-Dateien/*.html /Pfad/zum/Speicherort/der/Ausgabedatei.pdf

Hat man eine Vielzahl von Dateien, die in einzelne PDF-Dateien konvertiert werden sollen, hilft ein Script mit dem das Quellverzeichnis Datei für Datei ausgelesen wird. Im nachfolgenden Beispiel werden HTML-Dateien so konvertiert, dass sie im Header den Namen der zu konvertierenden Datei und im Footer eine Seitenangabe haben.

1
2
3
4
5
6
7
8
9
#!/bin/bash
ORGIFS=$IFS
IFS=$(echo -en "\n\b")
PFAD="/media/nas/share/html_files"
for FILE in $(ls $PFAD | egrep -i "2019.html$"); do
FILE=$(echo "${FILE}")
wkhtmltopdf $PFAD/${FILE} --footer-right "Page [page] of [toPage]" --header-right "File: [webpage]" --header-line --footer-line ~/pdf/${FILE}.pdf
done
IFS=$ORGIFS
Erklärung des Scripts
  1. Der Shebang oder Hash-Bang veranlasst Unix-Systeme, das folgende Programm mit den restlichen zeilen als Parameter auszuführen. Es wird also bash ausgeführt und die Zeilen 2 bis 15 werden danach von diesem Programm abgearbeitet.
  2. Der Inhalt des IFS wird in die Variablen SAVEIFS gerettet, da er in Zeile 3 geändert und am Ende des Scripts wieder auf den ursprünglichen Wert gesetzt werden soll. Dieser ursprüngliche Wert beträgt Space, Tab und NewLine.
  3. Der IFS wird auf CarrigeReturn (\r) und LineFeed (\n) gesetzt. Für dieses Script ist diese Änderung des IFS allerdings gar nicht notwendig und es soll damit nur die Verwenung gezeigt werden.
  4. Diese Zeile kennen wir bereits aus dem -> diesem Beispiel, bei dem auch ein Pfad in eine Variable geschrieben wurde.
  5. In Zeile 5 wird mit egrep nach Dateien gesucht, die mit 2019.html enden. Das wird durch das $-Zeichen am Ende ausgedrückt. Würde man z.B. nach 2019 am Beginn suchen, müsste ^2019 notiert werden. Eine Kurzübersicht zu RegEx findet man -> hier.
    Damit egrep die Dateinamen bekommt, werden sie mit ls $PFAD aufgelistet. Das Prinzip ist hier das gleiche wie in Zeile 10 und 11 aus -> diesem Beispiel.
    Die FOR-Schleife über Zeile 5 bis Zeile 8 liest einen Dateinamen nach dem anderen in die Variable FILE.
  6. Zeile 6 kürzt den Filenamen auf die ersten acht Zeichen und kopiert die Ausgabe von echo in die Variable NFILE.
  7. In Zeile 7 erfolgt der Aufruf des Programms wkhtmltopdf, um die Konvertierung durchzuführen. Der erste Parameter ist der Pfad und Dateiname der aktuell gefundenen Datei. Danach folgen Optionen zum Einfügen eines Seitenzählers, des Dateinamens oben rechts und von Trennlinien für Header und Footer. Am Ende wird der Ausgabepfad mit dem eben erzeugten neuen Dateinamen und der passenden Endung .pdf angegeben.

Das Programm wkhtmltopdf bietet noch wesentlich mehr Möglichkeiten, die in der ausführlichen (automatisch erstellten) Dokumentation -> hier zu finden sind. So lassen sich z.B. auch Webseiten problemlos als PDF-Dateien archivieren.

Weitere Beiträge:
-> Openbox als Prüfungsumgebung
-> SSH-Kommandos parallel an mehrere Rechner senden

Buy Me a Coffee at ko-fi.com

1 Comment

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.

Nobody is perfect
Einen Fehler gefunden?
Verbesserungsvorschläge, Lob oder Kritik?

Schreiben Sie mir mit dem -> Kontaktformular
oder per -> E-Mail.
DANKE!