En obtenant des métadonnées à partir de certains fichiers pdf avec des signets par pdftk
, j'observe le format des signets dans les métadonnées pdf. Je suppose donc qu'avec pdftk
, il est possible d'ajouter et de modifier les signets d'un fichier pdf.
Voici trois étapes que je suis:
- J'obtiens d'abord les métadonnées (y compris les signets, le cas échéant) d'un fichier pdf dans un fichier texte par
pdftk in.pdf dump_data > in.info
. J'ajoute ensuite des signets dans le fichier texte des métadonnées
in.info
, en le changeant deInfoKey: Creator InfoValue: PScript5.dll Version 5.2 InfoKey: Title InfoValue: SSReader Print. InfoKey: Producer InfoValue: Acrobat Distiller 7.0 (Windows) InfoKey: Author InfoValue: Administrator InfoKey: ModDate InfoValue: D:20050605073244+08'00' InfoKey: CreationDate InfoValue: D:20050605073244+08'00' PdfID0: 591a87c91dc76881fdf2ccf3811e72a5 PdfID1: 6b6ab11de8824e438e4f5eb1d85ec72 NumberOfPages: 400 PageLabelNewIndex: 1 PageLabelStart: 1 PageLabelNumStyle: DecimalArabicNumerals
à
InfoKey: Creator InfoValue: PScript5.dll Version 5.2 InfoKey: Title InfoValue: SSReader Print. InfoKey: Producer InfoValue: Acrobat Distiller 7.0 (Windows) InfoKey: Author InfoValue: Administrator InfoKey: ModDate InfoValue: D:20050605073244+08'00' InfoKey: CreationDate InfoValue: D:20050605073244+08'00' PdfID0: 591a87c91dc76881fdf2ccf3811e72a5 PdfID1: 6b6ab11de8824e438e4f5eb1d85ec72 NumberOfPages: 400 BookmarkBegin BookmarkTitle: Front cover BookmarkLevel: 1 BookmarkPageNumber: 1 BookmarkBegin BookmarkTitle: About the Author BookmarkLevel: 1 BookmarkPageNumber: 5 BookmarkBegin BookmarkTitle: Title page BookmarkLevel: 1 BookmarkPageNumber: 6 BookmarkBegin BookmarkTitle: Copyright page BookmarkLevel: 1 BookmarkPageNumber: 7 BookmarkBegin BookmarkTitle: Foreword BookmarkLevel: 1 PageLabelNewIndex: 1 PageLabelStart: 1 PageLabelNumStyle: DecimalArabicNumerals
- Ensuite, j'essaie de remettre les métadonnées éditées dans le fichier pdf par
pdftk in.pdf update_info in.info output out.pdf
.
Mais lorsque j'ouvre le nouveau fichier pdf out.pdf
dans evince ou adobe reader, il n'y a pas de signet dans le nouveau fichier pdf.
Si je reçois les métadonnées du nouveau fichier pdf out.pdf
par pdftk out.pdf dump_data > out.info
, il n'y aura pas de signets dans out.info
. Il semble que les signets n'aient pas été ajoutés avec succès.
Je me demandais s'il y avait des erreurs? Comment dois-je ajouter et modifier les signets d'un fichier pdf, pas nécessairement par pdftk?
Réponses:
Il me semble que depuis la version 1.45 (2012-12-06), pdftk autorise la modification des signets via la commande update_info:
via: http://www.pdflabs.com/docs/pdftk-version-history/
la source
BookmarkBegin
balises avant que chaque entrée de signet soit manquante.jPDFtweak (Java, donc fonctionne sur Unix / Linux) peut modifier les signets, mais je ne sais pas si vous pouvez écrire quoi que ce soit avec.
Pour les scripts, je suppose que votre seule option Unix / Linux native serait pdflatex avec le paquet pdfpages. Mais c'est une courbe d'apprentissage si vous n'êtes pas déjà un utilisateur de LaTeX.
EDIT: En fait, cela peut être possible avec ghostscript: Voir ici ou ici ou ici
la source
Si vous vous en tenez toujours à ces scripts Unix, alors
pdftk
gs
est acceptée.gs
script pour les fusionner avec pdfmarksJetez un œil à http://blog.tremily.us/posts/PDF_bookmarks_with_Ghostscript/ le script
pdf-merge.py
fait exactement ce que vous (ou moi) voulez.pdf-merge.py --output=merged.pdf input1.pdf input2.pdf
Quelques améliorations mineures pourraient être apportées à son script
Quoi qu'il en soit, cela devrait fonctionner
la source
pdftk est définitivement le bon outil (avec la bonne syntaxe):
la source
Caleb,
Pour autant que je comprends, les signets selon la spécification PDF ne peuvent pas être injectés via un outil de diagnostic comme
pdftk
. La mise à jour des métadonnées pour faire référence à des chapitres et des ancres de renvoi de signets qui n'existent pas ne fonctionnera certainement pas, cela peut même rendre votre PDF incohérent ou non ouvert.J'ai fini par utiliser les bibliothèques java + iText pour faire ce que vous proposez selon ce tutoriel , mais nous traitons des centaines de fichiers PDF quotidiennement, il fallait donc les automatiser. Si vous effectuez une opération ponctuelle, Adobe Acrobat devrait être en mesure de le faire.
la source
Pour résumer toutes ces bonnes réponses:
Il existe un projet bmconverter sur GitHub qui peut convertir différents formats de signets PDF. Il peut convertir la sortie pdftk au format jpdftweak, bien que si vous utilisez jpdftweak, vous n'aurez pas besoin de convertir la sortie pdftk en csv, car vous pouvez faire tout le travail à partir de jpdftweak.
Malheureusement, pdfmarks n'est pas pris en charge par le projet, mais heureusement, quelqu'un a publié un script dans les problèmes de bmconverter qui peut convertir la sortie de pdftk en pdfmarks. L'option batch ghostscript est donc une option
la source
pdftk
le format de signet est un peu fastidieux à écrire. Au lieu de cela , j'ai créé mon propre script en utilisantbash
,sed
,pdftk
etpython3
. Découvrez-le à ce repo: https://github.com/SiddharthPant/bookyAlors 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.puis utiliser mon script
cela crée automatiquement un pdf (
pdf_file_new.pdf
) qui contient mes signets.la source
Ajoutez juste
BookmarkBegin
avant chaque entrée de signet, comme dansla source
La redirection que vous avez utilisée à l'étape 1 empêchera update_info de fonctionner correctement. Vous devez plutôt spécifier le fichier de sortie sur pdftk:
Voir cette réponse à partir d'une question similaire: /programming//a/30308964/3158933
Les fichiers que j'ai créés à l'aide d'une redirection ont une taille de fichier légèrement plus grande et provoquent l'émission par pdftk d'un message "Avertissement: cas inattendu 1 dans LoadDataFile (); continuer" lors de l'exécution de la commande update_info.
la source