Conversion de djvu en pdf ET préservation de la table des matières, comment est-ce possible?

9

J'ai essayé plusieurs outils en ligne et hors ligne mais les informations de la table des matières (TOC) n'ont pas été conservées pendant la conversion.

Je voudrais convertir un dictionnaire finlandais de 5000 pages qui est au format djvu et a environ 5000 entrées de table des matières structurées de manière hiérarchique pour trouver rapidement des mots.

Une idée comment est-il possible de conserver les informations de la table des matières pendant la conversion de DJVU en PDF?

user1198559
la source

Réponses:

5

mise à jour: user3124688 a codé ce processus dans le script dpsprep .


Je ne connais aucun outil qui fera la conversion pour vous. Vous devriez certainement pouvoir le faire, mais cela pourrait prendre un peu de travail. Je vais décrire le processus de base. Vous aurez besoin des utilitaires de ligne de commande open source pdftket djvused(faisant partie de DjVuLibre). Ceux-ci sont disponibles auprès de votre gestionnaire de paquets (GNU / Linux) ou de leurs sites Web (Windows, OS X).

  • étape 1: convertir le texte du fichier

    Tout d'abord, utilisez n'importe quel outil pour convertir le fichier DJVU en PDF (sans signets).

    Supposons que les fichiers soient appelés filename.djvuet filename.pdf.

  • étape 2: extraire le contour DJVU

    Ensuite, sortez les données de contour DJVU dans un fichier, comme ceci:

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

    Il s'agit d'un fichier répertoriant les signets des documents DJVU dans un format d'arborescence sérialisé. En fait, ce n'est qu'un SEXPR et peut être facilement analysé. Le format est le suivant:

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

    Par exemple:

    (bookmarks
      ("bmark1"
        "#1")
      ("bmark2"
        "#5"
        ("bmark2subbmark1"
          "#6")
        ("bmark2subbmark2"
          "#7"))
      ("bmark3"
        "#9"
        ...))
    
  • étape 3: convertir le plan DJVU au format de métadonnées PDF

    Maintenant, nous devons convertir ces signets au format requis par les métadonnées PDF. Ce fichier a un format:

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

    Notre exemple deviendrait donc:

     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
    

    Fondamentalement, il vous suffit d'écrire un script pour parcourir l'arborescence SEXPR, en gardant une trace du niveau et en sortie le nom, le numéro de page et le niveau de chaque entrée à laquelle il s'agit, au format correct.

  • étape 4: extraire les métadonnées PDF et les épisser dans des signets convertis

    Une fois que vous avez la liste convertie, sortez les métadonnées PDF à partir de votre fichier PDF converti:

    pdftk "filename.pdf" dump_data > pdfmetadata.out
    

    Maintenant, ouvrez le fichier et recherchez la ligne qui commence: NumberOfPages:

    insérez les signets convertis après cette ligne. Enregistrez le nouveau fichier souspdfmetadata.in

  • étape 5: créer un PDF avec des signets

    Nous pouvons maintenant créer un nouveau fichier PDF incorporant ces métadonnées:

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

    Le fichier out.pdfdoit être une copie de votre PDF avec les signets importés du fichier DJVU.

pyrocrastie
la source
3

Sur la base du schéma très clair donné ci-dessus par l'utilisateur @pyrocrasty (merci!), J'ai implémenté un convertisseur DJVU en PDF qui préserve à la fois le texte OCR et la structure des signets. Vous pouvez le trouver ici:

https://github.com/kcroker/dpsprep

Remerciements pour les données OCR aller à @zetah sur les forums Ubuntu!

user3124688
la source
J'avais un fichier DJVU avec du texte non numérique dans les champs de numéro de page de signet, donc l'analyseur ne les a pas lus. J'ai remplacé j.split('#')[1]par (int(re.findall(r'\d+', j.split('#')[1])[0])+1)et cela a très bien fonctionné. Debian Jessie avait besoin de:sudo apt-get install pdftk djvulibre-bin python-pip ruby ruby-dev libmagickwand-dev; sudo pip install sexpdata; sudo gem install iconv pdfbeads