[[Vorlage(Getestet, bionic)]] {{{#!vorlage Wissen [:Pakete installieren: Installation von Programmen] [:Paketinstallation_DEB: Ein einzelnes Paket installieren] [:Packprogramme: Archive entpacken] [:sudo: Root-Rechte] [:Terminal: Ein Terminal verwenden] [:Editor: Einen Editor verwenden] }}} [[Inhaltsverzeichnis(1)]] [[Bild(Wiki/Icons/terminal.png, 48, align=left)]] [https://0x2a.at/site/projects/djvu2pdf/ djvu2pdf] {en} ist ein kleines Kommandozeilenprogramm, um aus [:DjVu:]-Dateien [:PDF:]s zu erstellen. Es verwendet [http://djvu.sourceforge.net/doc/man/djvudump.html djvudump] {en} und [http://djvu.sourceforge.net/doc/man/ddjvu.html ddjvu] {en} aus dem [http://djvu.sourceforge.net/ djvu-libre-Projekt] {en} zum Auslesen und Konvertieren der DjVu-Daten, sowie ggf. [:Ghostscript:] zum Zusammensetzen einzelner PDF-Dateien. Optional werden in der [#Textebenen-sichern 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] {{{#!vorlage Paketinstallation djvulibre-bin, universe ghostscript ocrodjvu, optional zur Übertragung von Texterkennung exactimage, universe, optional zur Übertragung von Texterkennung }}} Das Programm selbst ist nicht in den Quellen vorhanden, es lässt sich aber ein '''.deb'''-Paket von der [https://0x2a.at/site/projects/djvu2pdf/ Projektseite] {en} 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] [[Vorlage(Fremd, Software, "")]] = Benutzung = djvu2pdf ist ein reines Kommandozeilenwerkzeug, das Skript wird im Terminal[5] mit folgender Syntax aufgerufen {{{#!vorlage Befehl djvu2pdf [OPTION(EN)] DATEINAME(N).djvu }}} djvu2pdf konvertiert die angegebene DjVu-Datei in eine entsprechende '''DATEINAME.pdf'''. Es gibt nur sehr wenige Optionen. == Optionen == {{{#!vorlage Tabelle 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 [https://www-user.tu-chemnitz.de/~heha/hs/terminal/terminal.htm#3.5 Steuersequenzen] {de} 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 [wikipedia:HOCR_(Standard):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 [:ExactImage#hoccr2pdf: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 [:18.04: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 [wikipedia:Portable_Anymap:`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 [:xsane2OCRmyPDF:] 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. = Links = * [https://0x2a.at/site/projects/djvu2pdf/ Projektseite] {en} * [:DjVu:] {Übersicht} Übersichtsartikel * [https://www.djvu-pdf.com/?language=de Onlinekonverter] {de}, mit dem kostenlose Konvertierungen durchgeführt werden können, bei denen auch die Textlage erhalten bleibt #tag: Grafik, Multimedia, Büro, Kommunikation, OCR, djvu, PDF