Comment conserver les signets lors de la réorganisation des pages d'un fichier PDF avec des outils comme pdftk?

12

J'utilise pdftkpour réorganiser les pages d'un fichier pdf avec des signets / contours, mais après cela, le fichier de sortie a perdu les signets de l'original.

Ma commande est pdftk in.pdf cat 1-22 43 23-42 44-end output out.pdf.

Je me demandais comment je pouvais garder les signets tout en réorganisant les pages?

Tim
la source

Réponses:

10

Voici une solution de travail. Cependant, vous devrez l'ajuster en fonction de vos besoins.

Dans mon exemple, j'ai supprimé la première page d'un PDF, puis j'ai eu besoin de mettre à jour les signets pour pointer vers les emplacements corrects.

  1. supprimer la page 1 de in.pdf:

    pdftk A=in.pdf cat A2-end output temp.pdf
    
  2. créer un fichier in.info à partir de in.pdf:

    pdftk in.pdf dump_data > in.info
    
  3. in.info doit être corrigé dans mon cas, car je supprimerai une page.

    Ainsi, j'ai besoin de diminuer BookmarkPageNumber de un pour que les signets conduisent aux pages correctes.

    code php:

    $file = "in.info";
    $data = file_get_contents($file);
    
    foreach (explode("\n", $data) as $row) {
        $tmp = explode(": ", $row);
    
        if ($tmp[0] == "BookmarkPageNumber") {
            if ($tmp[1] != "1") $tmp[1]--;
            echo $tmp[0].": ".$tmp[1]."\n";
        } else {
            echo $row."\n";
        }
    }
    
  4. créer final out.pdf:

    pdftk temp.pdf update_info in2.info output out.pdf
    

testé en travaillant sur debian avec pdftk 2.01

Martin Olika
la source
1
A aussi fonctionné pour moi. Peut-être pourriez-vous ajouter un indice sur la façon d'exécuter votre script (aucune idée de comment ...) ou ajouter un script python:#!/usr/bin/python output = open('res.info','w') with open('temp.info','r') as f: for line in f: if line.startswith("BookmarkPageNumber"): output.write( "BookmarkPageNumber: "+ str(int(line.split()[1])+1)+"\n") else: output.write(line)
Vser
6

Vous devez le faire pdftk in.pdf dump_data > in.info, puis ajoutez le update_infoparamètre lors de la génération du out.pdf. Citant de man pdftk:

update_info <info data filename | - | PROMPT>

Modifie les métadonnées stockées dans un seul dictionnaire d'informations PDF pour correspondre au fichier de données d'entrée. Le fichier de données d'entrée utilise la même syntaxe que la sortie de dump_data. Les caractères non ASCII doivent être codés en tant qu'entités numériques XML. Cela ne change pas les métadonnées stockées dans le flux XMP du PDF, s'il en a un. Par exemple:

             pdftk in.pdf update_info in.info output out.pdf

  update_info_utf8 <info data filename | - | PROMPT>

Identique à update_info, sauf que l'entrée est codée en UTF-8.

Philomath
la source
Merci! Comment puis-je obtenir ce fichier "in.info"?
Tim
@Tim: édité. J'espère que c'est clair maintenant. Vous devez bien sûr utiliser dump_data_utf8pour update_info_utf8travailler.
Philomath
3
Merci! Ça ne marche toujours pas. Mes commandes sont en trois étapes: pdftk in.pdf dump_data > in.info, pdftk in.pdf cat 1-22 43 23-42 44-end output out.pdfet pdftk out.pdf update_info in.info output out1.pdfil n'y a toujours pas de signets dans out1.pdf. `
Tim
@Tim Je peux confirmer que cela ne fonctionne pas. Avez-vous trouvé une solution à cela par hasard?
Glutanimate
1
Mon survol rapide de Google suggère que les signets ne sont pas du tout traités.
vonbrand
5

En lisant attentivement la page de manuel , il indique que les update_infodonnées sont prises dans n'importe quel format dump_datagénéré. Cela devrait vraisemblablement être ajusté en fonction du brassage des pages. Cela ne semble pas impossible , mais pas automatiquement.

Le site PDFtk ne donne que les résultats ci-dessus et crée / modifie des signets. Tout ce que Google sait sur la question des signets en PDF et de la réorganisation, c'est les hits sur les opérations ci-dessus et les expositions lyriques sur les merveilles qu'ils proposent, et ce fil ;-).

Il semble donc que cela ne puisse pas être fait. Les commentaires suggèrent quelques possibilités, qui n'ont pas fonctionné lors de l'essai.

vonbrand
la source
1

"pdfmod" est un outil graphique simple qui permet de supprimer une ou des pages de mode d'un PDF existant. Il suffit de quelques clics. Il conserve également les informations sur le contenu et les liens croisés dans le pdf.

"pdftk" fonctionne bien et je l'utilisais depuis longtemps mais j'avais l'habitude de perdre du contenu après avoir supprimé une ou deux pages du pdf. Ces fichiers pdf qui sont testés dans "pdftk" et "pdfmod" sont créés depuis openoffice.

https://apps.fedoraproject.org/packages/pdfmod

abhijit
la source
pdfmodsemble mieux que pdftklorsqu'il s'agit de préserver les métadonnées. Un diff de exiftoolsortie montre que pdfmodpréserve les métadonnées, mais pdftkne conserve pas tout, même si vous utilisez dump_data_utf8& update_info_utf8.
user1338062