Konvertieren von djvu in pdf UND Erhalt des Inhaltsverzeichnisses, wie ist es möglich?

3347
user1198559

Ich habe mehrere Online- und Offline-Tools ausprobiert, aber die Inhaltsverzeichnisinformationen (TOC) wurden während der Konvertierung nicht beibehalten.

Ich möchte ein finnisches Wörterbuch mit 5000 Seiten konvertieren, das im Djvu-Format vorliegt und etwa 5000 TOC-Einträge enthält, die hierarchisch strukturiert sind, um Wörter schnell zu finden.

Irgendeine Idee, wie es möglich ist, die TOC-Informationen während der Konvertierung von DJVU in PDF zu erhalten?

8

2 Antworten auf die Frage

3
pyrocrasty

Update: Benutzer3124688 hat diesen Vorgang im Skript dpsprep verschlüsselt .


Ich kenne keine Tools, die die Konvertierung für Sie erledigen. Sie sollten dies sicherlich tun können, aber es kann etwas Arbeit kosten. Ich werde den grundlegenden Prozess beschreiben. Sie benötigen die Open Source-Befehlszeilen-Dienstprogramme pdftkund djvused(Teil von DjVuLibre). Diese sind bei Ihrem Paketmanager (GNU / Linux) oder deren Websites (Windows, OS X) verfügbar.

  • Schritt 1: Konvertieren Sie den Dateitext

    Verwenden Sie zunächst ein beliebiges Werkzeug, um die DJVU-Datei in ein PDF (ohne Lesezeichen) zu konvertieren.

    Angenommen, die Dateien werden aufgerufen filename.djvuund filename.pdf.

  • Schritt 2: Extrahieren Sie die DJVU-Kontur

    Als nächstes geben Sie die DJVU-Gliederungsdaten wie folgt in eine Datei aus:

    djvused "filename.djvu" -e 'print-outline' > bmarks.out 

    Dies ist eine Datei, in der die Lesezeichen der DJVU-Dokumente in einem serialisierten Baumformat aufgelistet sind. Tatsächlich ist es nur ein SEXPR und kann leicht analysiert werden. Das Format ist wie folgt:

    file ::= (bookmarks <bookmark>*) bookmark ::= (name page <bookmark>*) name ::= "<character>*" page ::= "#<digit>+" 

    Zum Beispiel:

    (bookmarks ("bmark1" "#1") ("bmark2" "#5" ("bmark2subbmark1" "#6") ("bmark2subbmark2" "#7")) ("bmark3" "#9" ...)) 
  • Schritt 3: Konvertieren Sie die DJVU-Gliederung in das PDF-Metadatenformat

    Jetzt müssen wir diese Lesezeichen in das für PDF-Metadaten erforderliche Format konvertieren. Diese Datei hat das Format:

    file ::= <entry>* entry ::= BookmarkBegin BookmarkTitle: <title> BookmarkLevel: <number> BookmarkPageNumber: <number> title ::= <character>* 

    So würde unser Beispiel werden:

     BookmarkBegin BookmarkTitle: bmark1 BookmarkLevel: 1 BookmarkPageNumber: 1 BookmarkBegin BookmarkTitle: bmark2 BookmarkLevel: 1 BookmarkPageNumber: 5 BookmarkBegin BookmarkTitle: bmark2subbmark1 BookmarkLevel: 2 BookmarkPageNumber: 6 BookmarkBegin BookmarkTitle: bmark2subbmark2 BookmarkLevel: 2 BookmarkPageNumber: 7 BookmarkBegin BookmarkTitle: bmark3 BookmarkLevel: 1 BookmarkPageNumber: 9 

    Im Grunde müssen Sie lediglich ein Skript schreiben, um durch den SEXPR-Baum zu navigieren, den Pegel zu verfolgen und den Namen, die Seitennummer und den Pegel jedes Eintrags im richtigen Format auszugeben.

  • Schritt 4: Extrahieren Sie PDF-Metadaten und Spleiße in konvertierte Lesezeichen

    Sobald Sie die konvertierte Liste erhalten haben, geben Sie die PDF-Metadaten aus Ihrer konvertierten PDF-Datei aus:

    pdftk "filename.pdf" dump_data > pdfmetadata.out 

    Öffnen Sie nun die Datei und suchen Sie die Zeile, die beginnt: NumberOfPages:

    Fügen Sie die konvertierten Lesezeichen nach dieser Zeile ein. Speichern Sie die neue Datei alspdfmetadata.in

  • Schritt 5: PDF mit Lesezeichen erstellen

    Jetzt können wir eine neue PDF-Datei erstellen, die diese Metadaten enthält:

    pdftk "filename.pdf" update_info "pdfmetadata.in" output out.pdf 

    Die Datei out.pdfsollte eine Kopie Ihrer PDF- Datei sein, deren Lesezeichen aus der DJVU-Datei importiert wurden.

1
user3124688

Basierend auf der oben beschriebenen sehr klaren Gliederung von Benutzer @pyrocrasty (Danke!), Habe ich einen DJVU-zu-PDF-Konverter implementiert, der sowohl OCR-Text als auch die Lesezeichenstruktur beibehält. Sie finden es hier:

https://github.com/kcroker/dpsprep

Danksagungen für die OCR-Daten gehen an @zetah in den Ubuntu-Foren!

Ich hatte eine DJVU-Datei mit nicht numerischem Text in den Feldern für die Lesezeichen-Seitennummer, sodass der Parser sie nicht lesen konnte. Ich habe `j.split ('#') [1]` durch `(int (re.findall (r '\ d +'), j.split ('#') [1]) [0]) + 1)` ersetzt und es hat super funktioniert. Debian Jessie brauchte: sudo apt-get install pdftk djvulibre-bin python-pip ruby ​​ruby-dev libmagickwand-dev; sudo pip install sexpdata; sudo gem install iconv pdfbeads` vor 7 Jahren 0