djvu2pdf

Dieser Artikel wurde für die folgenden Ubuntu-Versionen getestet:

Zum Verständnis dieses Artikels sind folgende Seiten hilfreich:

  1. Installation von Programmen

  2. Ein einzelnes Paket installieren

  3. Archive entpacken

  4. Root-Rechte

  5. Ein Terminal verwenden

  6. Einen Editor verwenden

Inhaltsverzeichnis
  1. Installation
  2. Benutzung
  3. Textebenen sichern
  4. Alternativen
  5. Links

Wiki/Icons/terminal.png djvu2pdf 🇬🇧 ist ein kleines Kommandozeilenprogramm, um aus DjVu-Dateien PDFs zu erstellen. Es verwendet djvudump 🇬🇧 und ddjvu 🇬🇧 aus dem djvu-libre-Projekt 🇬🇧 zum Auslesen und Konvertieren der DjVu-Daten, sowie ggf. Ghostscript zum Zusammensetzen einzelner PDF-Dateien. Optional werden in der modifizierten Version djvu2hocr (aus dem Programm ocrodjvu) sowie hocr2pdf (aus ExactImage) zur Übertragung von Textebenen in das PDF verwendet.

Installation

Voraussetzung zur Nutzung sind die Pakete[1]

Wiki/Vorlagen/Installbutton/button.png mit apturl

Paketliste zum Kopieren:

sudo apt-get install djvulibre-bin ghostscript ocrodjvu exactimage 

sudo aptitude install djvulibre-bin ghostscript ocrodjvu exactimage 

Das Programm selbst ist nicht in den Quellen vorhanden, es lässt sich aber ein .deb-Paket von der Projektseite 🇬🇧 beziehen und installieren[2]. Das Programm kann von dort auch als tar.gz-Archiv[3] bezogen werden. Daraus dann die djvu2pdf-Datei für systemweite Nutzung z.B. nach /usr/local/bin kopieren [4]

Hinweis!

Fremdsoftware kann das System gefährden.

Benutzung

djvu2pdf ist ein reines Kommandozeilenwerkzeug, das Skript wird im Terminal[5] mit folgender Syntax aufgerufen

djvu2pdf [OPTION(EN)] DATEINAME(N).djvu 

djvu2pdf konvertiert die angegebene DjVu-Datei in eine entsprechende DATEINAME.pdf. Es gibt nur sehr wenige Optionen.

Optionen

djvu2pdf-Optionen
Option Funktion
-h Hilfe
-v Versionsnummer
-s Zeigt Statusmeldungen zur Verarbeitung (ein wenig langsamer, da jede einzelne Seite ausgelesen getrennt und das Dokument dann wieder zusammengesetzt wird)
-c Im Terminal keine Steuersequenzen 🇩🇪 verwenden, um den Cursor zu bewegen (nur sinnvoll in Kombination mit -s)

Textebenen sichern

Bei eine Konvertierung gehen existierende Textebenen der DjVu-Dateien normalerweise verloren, da sie extra extrahiert, und wieder in die PDF-Dateien integriert werden müssten. Dieses Verhalten lässt sich mit einem modifizierten Skript aber in einem Durchlauf erledigen. Zu Einsatz kommt dazu das Programm djvu2hocr aus ocrodjvu, mit dem jeweils eine hOCR-Datei aus den einzelnen Seiten des DjVu-Dokuments extrahiert wird. ddjvu konvertiert dann statt in eine PDF-Datei in das .tiff-Format, aus diesen Daten werden dann mit hocr2pdf PDF-Dateien mit durchsuchbaren Textebenen erstellt. Da das momentan nur für einzelne Seiten möglich ist, müssen diese dann wieder zu Gesamt-PDF aneinandergehängt werden.

Diese Vorgehen ist unter Ubuntu 18.04 nicht mehr nötig; zumindest aus xsane2djvu erstellten .djvu-Dateien mit Textlage werden diese auch ohne die beschriebene Methode direkt in das PDF übertragen.

Quellcode bearbeiten

Für die Modifikation wird die Datei djvu2pdf in einem Editor[6] geöffnet. Die Zeile 174

            ddjvu -format=pdf -page $COUNT "$FILENAME" "$TEMP/$FILEBASE.${ZEROS}$COUNT.pdf" 2> /dev/null

wird durch Folgendes ersetzt:

## extract text and form a hOCR document
            djvu2hocr --title="" -p=$COUNT "$FILENAME" > "$TEMP/$FILEBASE.${ZEROS}$COUNT.hocr" 2> /dev/null

            ddjvu -format=tiff -page $COUNT "$FILENAME" "$TEMP/$FILEBASE.${ZEROS}$COUNT.tiff" 2> /dev/null
## combine tiff and hocr files
            hocr2pdf -i "$TEMP/$FILEBASE.${ZEROS}$COUNT.tiff" -o "$TEMP/$FILEBASE.${ZEROS}$COUNT.pdf" < "$TEMP/$FILEBASE.${ZEROS}$COUNT.hocr"  2> /dev/null     

Das Skript dann wieder unter djvu2pdf abspeichern, für die systemweite Verwendung in /usr/local/bin (Rootrechte[4] erforderlich). Jetzt wird mit Verwendung der -s-Option automatisch die vorhandene Textebene aus dem DjVu in das PDF-Dokument mit übernommen.

Gegenüber der Version ohne Texterkennungsrettung sind die entstehenden Dateien allgemein wesentlich kleiner, was vermutlich aus "effektiveren" PDF-Erstellung von ExactImage gegenüber ddjvu resultiert. Andere Bild-Format sind für die Verarbeitung möglich (z.B. für schwarzweiße Vorlagen pbm als Format im ddjvu-Aufruf), die resultierende Dateigröße kann dadurch noch etwas weiter reduziert werden.

Für schwierige Vorlagen (farbige Schrift, verschachtelter Aufbau) kann der Umweg über xsane2djvu und djvu2pdf eine sinnvolle Variante zu der direkten "Sandwich"-Methode zur PDF-Erstellung darstellen, da die Texterkennung von ocrodjvu bei solchen Vorlagen erfahrungsgemäß besser sind, und die Textlagen "passgenauer" ausfallen.

Probleme

Die Erstellung der Textebene scheitert immer dann, wenn im Dokument "Wasserzeichen" im Hintergrund mit Schrift vorhanden sind, oder sich die "Bounding Boxes" der Wörter überlappen. Wenn die automatische Löschung der Temporärdateien deaktiviert wird (im Skript die Zeilen rm -rf "$TEMP"/* >/dev/null 2>&1 und rm -rf "$TEMP" >/dev/null 2>&1 auskommentieren und/oder stattdessen etwas wie echo "removing disabled" einfügen), kann man sich die entstandenen hOCR-Dateien aus dem Verzeichnis /tmp/djvu2pdf.nnnnn in einem Editor genauer anschauen, und die überdimensionierte Box des ersten Text-Eintrages entfernen. Die Kombination via hocr2pdf muss dann allerdings ebenfalls "händisch" erfolgen, natürlich auch das Zusammenführen der PDF-Dateien.

Die Verwendung der djvu2hocr-Optinonen --css führt ebenfalls dazu, dass die dort gemachte Angabe von hocr2pdf fehlinterprertiert und als übergroße Textangabe die restliche Passung verschiebt; ähnliches gilt, wenn die --title-Option Text beinhaltet, oder (wenn nicht gesetzt) der Standardtitel "DjVu hidden text layer" verwendet wird. Daher muss die Option zwar gesetzt werden, aber leer bleiben (in den Änderungen so umgesetzt)!

Eine Korrektur der OCR-Ergebnisse ist nicht vorgesehen. Eine - wenn auch beschwerliche - Möglichkeit besteht aber darin, die .hocr-Dateien in einem Editor[6] zu bearbeiten; allerdings lassen sich die eigentlichen Textstrings nur mühsam finden.

Alternativen

Ein Programm zur direkte Umwandlung von DjVu-Dateien in PDFs mit Textlagen ist momentan nicht vorhanden. Erstellt werden können PDF-Dateien mit Textlage z.B. durch pdfsandwich (Konvertierung bestehender PDFs), oder xsane2sandwich und gscan2pdf direkt aus gescannten Vorlagen.

In gscan2pdf oder DjView lassen sich DjVu-Dateien öffnen und dann als PDF abspeichern. Die Dateien müssen dann aber erneut mit einer Textebene versehen werden, weil die existierende Textlage nicht übernommen wird. Die Erkennung bezieht sich dann auch nicht auf die bitonale Lage der DjVu-Datei (das beherrscht zumindest gscan2pdf nicht) sondern muss aus dem extrahierten Bild komplett neu erstellt werden (und das führt ggf. zu Qualitätseinbußen bei schwierigen Vorlagen, siehe oben). Bei guten schwarzweißen DjVu-Vorlagen kann das Ergebnis aber sogar besser (und kleiner) sein, die Textpassung ist bei gscan2pdf erfahrungsgemäß sehr gut.

Möglich ist auch ein anderes zweischrittiges Vorgehen: Umwandeln der DjVu-Datei in ein PDF ohne Textebene, diese dann mit OCRmyPDF in ein durchsuchbares PDF/A-Format überführen. Die Textebenenpassung ist hervorragend, die Dateigrößen ebenfalls akzeptabel.

Mit Paperwork können indirekt ebenfalls gute hOCR-Vorlagen erstellt werden, ein direkter Export als PDF mit Textlage ist auch möglich.

Den umgekehrten Weg gehen pdf2djvu und DjVuDigital, wobei nur ersteres ein Übertragung vorhandenen Metadaten aus PDFs, wie Text, Inhaltsverzeichnis etc., in das DjVu-Dokument ermöglicht.