Wie ist es möglich, DJVU in PDF umzuwandeln UND das Inhaltsverzeichnis beizubehalten?

9

Ich habe verschiedene 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 ungefähr 5000 TOC-Einträge enthält, die hierarchisch strukturiert sind, um Wörter schnell zu finden.

Irgendeine Idee, wie es möglich ist, die Inhaltsverzeichnisinformationen während der Konvertierung von DJVU in PDF beizubehalten?

user1198559
quelle

Antworten:

5

Update: user3124688 hat diesen Prozess im Skript dpsprep codiert .


Ich kenne keine Tools, die die Konvertierung für Sie durchführen. Sie sollten es sicherlich können, aber es könnte ein wenig Arbeit erfordern. Ich werde den grundlegenden Prozess skizzieren. Sie benötigen die Open Source-Befehlszeilenprogramme pdftkund djvused(Teil von DjVuLibre). Diese sind bei Ihrem Paketmanager (GNU / Linux) oder auf deren Websites (Windows, OS X) erhältlich.

  • Schritt 1: Konvertieren Sie den Dateitext

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

    Angenommen, die Dateien heißen filename.djvuund filename.pdf.

  • Schritt 2: DJVU-Gliederung extrahieren

    Geben Sie als Nächstes 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 folgendes 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
    

    Grundsätzlich müssen Sie nur ein Skript schreiben, um den SEXPR-Baum zu durchlaufen, die Ebene zu verfolgen und den Namen, die Seitenzahl und die Ebene jedes Eintrags im richtigen Format auszugeben.

  • Schritt 4: PDF-Metadaten extrahieren und in konvertierte Lesezeichen einfügen

    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 unterpdfmetadata.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 mit den aus der DJVU-Datei importierten Lesezeichen sein.

Pyrocrasty
quelle
3

Basierend auf dem sehr klaren Überblick, den Benutzer @pyrocrasty oben gegeben hat (danke!), Habe ich einen DJVU-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!

user3124688
quelle
Ich hatte eine DJVU-Datei mit nicht numerischem Text in den Feldern der Lesezeichen-Seitenzahlen, sodass der Parser sie nicht las. Ich ersetzte j.split('#')[1]mit (int(re.findall(r'\d+', j.split('#')[1])[0])+1)und es funktionierte großartig. Debian Jessie benötigt:sudo apt-get install pdftk djvulibre-bin python-pip ruby ruby-dev libmagickwand-dev; sudo pip install sexpdata; sudo gem install iconv pdfbeads