Comment importer, exporter et modifier les signets d'un fichier pdf?

21

J'ai entendu dire que les signets d'un fichier pdf sont stockés en texte brut quelque part dans le fichier. Je me demandais s'il était possible d'importer et d'exporter des signets d'un fichier pdf vers et depuis un fichier texte, pour un traitement par lots?

Si oui, existe-t-il une description de la syntaxe de modification du fichier texte contenant les signets d'un fichier pdf?

J'espérais des solutions logicielles gratuites pour Ubuntu 10.10 et pour Windows 7.

Merci et salutations!

Tim
la source

Réponses:

22

Il existe une grande variété d'outils qui peuvent extraire des signets d'un pdf vers un fichier texte brut, et vice versa. Certains d'entre eux sont les suivants:

De plus, j'ai un script qui peut convertir entre les formats de plusieurs de ces outils: bmconverter.py .

Une autre façon très intéressante consiste à ajouter des signets à un pdf via pdflatex .

Michael Goerz
la source
13

Vous pouvez utiliser pdftkpour cela. Plus d'informations: Comment exporter et importer des signets PDF .

Exportez les signets PDF sur la ligne de commande comme ceci:

pdftk C:\Users\Sid\Desktop\doc.pdf dump_data output C:\Users\Sid\Desktop\doc_data.txt

Importez des signets PDF à partir d'un fichier de données comme celui-ci:

pdftk C:\Users\Sid\Desktop\doc.pdf update_info C:\Users\Sid\Desktop\doc_data.txt output C:\Users\Sid\Desktop\updated.pdf

pdftkle format de signet est un peu fastidieux à écrire. Au lieu de cela , j'ai créé mon propre script en utilisant bash, sed, pdftket python3. Découvrez-le à ce repo: https://github.com/SiddharthPant/booky

Alors maintenant, je peux créer un fichier texte ( bkmrks.txt) comme celui-ci qui ne prend que 5 minutes pour écrire, même pour un pdf de 1000 pages.

{
  Title1, 1
  Title2, 2
  {
    Subtitle1, 3
    Subtitle2, 4
    {
      SubSubtitle1, 5
      ...
    }
  }
}

puis utiliser mon script

./booky.sh pdf_file.pdf bkmrks.txt

cela crée automatiquement un pdf ( pdf_file_new.pdf) qui contient mes signets.

Cela va fonctionner dans les systèmes * nix si vous êtes à la place sur une machine Windows. Ensuite, installez d'abord python3et pdftkutilisez simplement le booky.pyfichier dans le référentiel pour convertir bkmrks.txtau pdftkformat compatible

python3 booky.py < bkmrks.txt > output.txt

puis utilisez la commande d'exportation pour générer un fichier de données sauvegardé. Supprimez les signets précédents de ce fichier et insérez le contenu à la output.txtplace à l'aide d'un simple copier-coller. Et puis réimportez ces données.

Pantalon Siddharth
la source
4

Si vous avez une version d'un document qui a des signets et que vous souhaitez les copier, une manière beaucoup plus simple consiste à utiliser PDF-XChange Viewer (j'ai utilisé la v2.5.211). Ouvrez le PDF contenant les signets (le PDF source), sélectionnez tous les signets dans le volet des signets, copiez-les à l'aide de Ctrl + C, ouvrez le PDF qui n'a pas les signets (le PDF cible) et collez-les (Ctrl + V) dans le volet des signets de ce PDF. PDF-Xchange Viewer préserve les propriétés des signets telles qu'elles étaient du PDF source (y compris toute mise en forme en gras / italique sur le texte du signet). Si, pour une raison quelconque, certaines sections du PDF cible sont inférieures ou supérieures en raison de révisions apportées au document, vous pouvez cliquer sur le signet à corriger, faites défiler jusqu'à l'endroit de la page où vous souhaitez que le signet s'ouvre, à droite- cliquez à nouveau sur le signet et cliquez sur "Définir la destination". Répétez cette dernière partie au besoin pour tout signet incriminé. Enregistrez le PDF cible lorsque vous avez terminé.

Cela a très bien fonctionné pour moi, était assez intuitif et j'ai terminé en quelques minutes. Dans mon scénario particulier, un collègue avait produit un très long document en utilisant Word pour Mac qui n'avait pas de signets. En raison de la longueur du document, je voulais des signets correspondant au contour du document. J'ai pu demander à Word pour Windows d'enregistrer le document au format PDF avec des signets, mais certaines différences de mise en forme entre Word pour Windows et Word pour Mac ont fait disparaître le nombre de pages (en particulier, il y avait des différences d'espace blanc autour des pieds de page et des différences dans l'espacement entre les chiffres et la légende). J'ai pu jouer avec les en-têtes et pieds de page et les tailles de figure pour obtenir la pagination correcte dans Word pour Windows, puis enregistré au format PDF avec des signets. Malheureusement,

Jason
la source
1
+1 pour PDF-Xchange. Le moins d'outils le plus
joyeux
1

La spécification pour les fichiers PDF est disponible sous forme de PDF téléchargeable gratuitement depuis Adobe - ou du moins c'était la dernière fois que j'ai vérifié. Cependant, la plupart des fichiers PDF contiennent la plupart des données compressibles compressées. Il était probablement une version de texte en clair de PDF il était une fois, et si c'est le cas, il sera toujours valide maintenant, mais obtenir un fichier sous cette forme peut être un problème.

Bien que je ne l'ai pas fait, une possibilité très probable (si vous êtes prêt à payer) est d'acheter Acrobat Pro et d'utiliser les capacités de script Javascript intégrées à cette application. Pour commencer ...

http://acrobatusers.com/tutorials/2008/10/auto_bookmark_creation

Ce didacticiel montre comment créer automatiquement des signets à l'aide de Javascript dans Acrobat 7.0 Pro (la version incluse dans Creative Suite CS2). Bien que cela devienne un peu vieux, la même technique devrait fonctionner correctement pour les versions plus récentes.

Les applications Adobe incluent une bibliothèque pour lire / écrire des fichiers texte en utilisant Javascript (quelque chose que Javascript n'a pas en standard), il est donc possible d'écrire vos propres scripts d'importation / exportation, bien que non triviaux pour rendre ces scripts robustes.

Steve314
la source
Merci! Existe-t-il une version Linux d'Acrobat Pro?
Tim
Désolé - j'en doute fort. AFAIK est un truc pour Mac ou Windows, et Adobe est peu susceptible de prendre en charge Linux à moins qu'un grand nombre de professionnels de la création (1) commencent à utiliser cette plate-forme, et (2) montrent qu'ils sont prêts à payer beaucoup pour des logiciels propriétaires plutôt que d'utiliser FOSS alternatives. Semble peu probable. Pour une solution gratuite, vous pouvez essayer une bibliothèque telle que blog.rubypdf.com/2007/12/12/… (pour Ruby). J'en sais encore moins à ce sujet - je viens de le trouver sur Google.
Steve314
1

Pour exporter des signets, je poursuis une approche différente qui nécessite l'utilisation de Microsoft OneNote:

J'ouvre le lecteur PDF (j'utilise la version gratuite de Foxit) avec la structure de signet visible, puis, dans OneNote, je demande de prendre un instantané et de sélectionner la structure de signet Foxit.

De retour à OneNote, je sélectionne l' option "Copier le texte de l'image" (dans le menu qui apparaît après un clic droit sur l'image de l'instantané), et je la colle sur le côté, pour corriger le retrait (généralement avec des puces).

C.Delgado
la source
1

HandyOutline. 1 glisser, 1 clic, c'est fait. https://sourceforge.net/projects/handyoutlinerfo/ . Gratuit. Retire les sous-signets. Ne nécessite aucun lecteur / éditeur PDF. Modifiez également, exportez tous les détails au format texte (copiez dans Word, écrivez une macro pour le ranger dans un document Word entièrement fonctionnel) ou XML, repaginez, importez au format PDF. Dev mérite des dons.

PDF-Xchange Editor (remplacé PDFViewer), signets dupliqués / manqués au hasard exportés en texte

JPDF a exigé Java, exporté les ordures de formatage, n'a pas pu le nettoyer pour obtenir uniquement les noms

PDFtk m'a donné mal à la tête en regardant les instructions

:-)

Piecevcake
la source
J'adore que celui-ci exporte vers XML, au lieu d'un format plus idiosyncrasique. L'interface glisser-déposer pour les exportations ne pourrait pas être plus simple également. Je souhaite seulement qu'il puisse en faire plusieurs à la fois.
Evan Donovan
0

J'ai trouvé une autre solution plutôt "stupide" pour copier tous les signets dans un PDF en tant que texte pour une utilisation ailleurs. Dans Acrobat Pro (pour Mac OS), il n’existe aucun moyen de sélectionner tous les signets et de les copier / coller dans un traitement de texte. Vous pouvez cependant exporter tout le PDF en tant que fichier HTML avec l'option "une seule page HTML + ajouter un cadre de navigation basé sur des signets". Ouvrez ensuite le code HTML dans un navigateur, sélectionnez tout le texte dans le cadre de navigation et copiez / collez-le dans un traitement de texte ...

Johan Morris
la source
0

Pour lire tous les signets d'un PDF vers un fichier texte, vous pouvez utiliser cette commande avec pdftk:

pdftk input.pdf dump_data output output.txt

J'ai ensuite utilisé regex sur Notepad ++ pour supprimer les parties supplémentaires. Ce que j'ai remplacé par une chaîne vide (dans l'ordre), puis je me suis retrouvé avec une liste de signets (n'oubliez pas de remplacer en utilisant regex dans votre éditeur de texte):

BookmarkLevel.*
BookmarkPageNumber.*
BookmarkBegin.*
\n\s+\n

Si vous souhaitez supprimer les numéros, remplacez cette expression:

BookmarkTitle: A8.\d.\d+\s
Le physicien quantique
la source