Convertire djvu in pdf E preservare il sommario, come è possibile?


9

Ho provato diversi strumenti online e offline ma le informazioni sul sommario (TOC) non sono state conservate durante la conversione.

Vorrei convertire un dizionario finlandese di 5000 pagine che è in formato djvu e ha circa 5000 voci TOC strutturate gerarchicamente per trovare rapidamente le parole.

Qualche idea su come è possibile conservare le informazioni TOC durante la conversione da DJVU a PDF?

Risposte:


5

aggiornamento: user3124688 ha codificato questo processo nello script dpsprep .


Non conosco strumenti che possano fare la conversione per te. Dovresti sicuramente essere in grado di farlo, ma potrebbe richiedere un po 'di lavoro. Descriverò il processo di base. Avrai bisogno delle utility della riga di comando open source pdftke djvused(parte di DjVuLibre). Questi sono disponibili dal gestore dei pacchetti (GNU / Linux) o dai loro siti Web (Windows, OS X).

  • passaggio 1: converti il ​​testo del file

    Innanzitutto, utilizza qualsiasi strumento per convertire il file DJVU in PDF (senza segnalibri).

    Supponiamo che i file vengano chiamati filename.djvue filename.pdf.

  • passaggio 2: estrarre il contorno DJVU

    Successivamente, emetti i dati di struttura di DJVU in un file, in questo modo:

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

    Questo è un file che elenca i segnalibri dei documenti DJVU in un formato ad albero serializzato. In realtà è solo un SEXPR e può essere facilmente analizzato. Il formato è il seguente:

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

    Per esempio:

    (bookmarks
      ("bmark1"
        "#1")
      ("bmark2"
        "#5"
        ("bmark2subbmark1"
          "#6")
        ("bmark2subbmark2"
          "#7"))
      ("bmark3"
        "#9"
        ...))
    
  • passaggio 3: converti il ​​profilo DJVU in formato metadati PDF

    Ora, dobbiamo convertire questi segnalibri nel formato richiesto dai metadati PDF. Questo file ha il formato:

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

    Quindi il nostro esempio diventerebbe:

     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
    

    Fondamentalmente, devi solo scrivere uno script per percorrere l'albero SEXPR, tenere traccia del livello e generare il nome, il numero di pagina e il livello di ogni voce in cui si trova, nel formato corretto.

  • passaggio 4: estrarre i metadati PDF e giuntare nei segnalibri convertiti

    Una volta ottenuto l'elenco convertito, emetti i metadati PDF dal tuo file PDF convertito:

    pdftk "filename.pdf" dump_data > pdfmetadata.out
    

    Ora, apri il file e trova la riga che inizia: NumberOfPages:

    inserire i segnalibri convertiti dopo questa riga. Salva il nuovo file comepdfmetadata.in

  • passaggio 5: creare PDF con segnalibri

    Ora possiamo creare un nuovo file PDF che incorpora questi metadati:

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

    Il file out.pdfdovrebbe essere una copia del tuo PDF con i segnalibri importati dal file DJVU.


3

Sulla base del profilo molto chiaro sopra fornito dall'utente @pyrocrasty (grazie!), Ho implementato un convertitore da DJVU a PDF che conserva sia il testo OCR che la struttura dei segnalibri. Puoi trovarlo qui:

https://github.com/kcroker/dpsprep

I riconoscimenti per i dati OCR vanno a @zetah sui forum di Ubuntu!


Avevo un file DJVU con testo non numerico nei campi dei numeri di pagina dei segnalibri, quindi il parser non li ha letti. Ho sostituito j.split('#')[1]con (int(re.findall(r'\d+', j.split('#')[1])[0])+1)e ha funzionato grande. Debian Jessie aveva bisogno di:sudo apt-get install pdftk djvulibre-bin python-pip ruby ruby-dev libmagickwand-dev; sudo pip install sexpdata; sudo gem install iconv pdfbeads
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.