Lesezeichen zu PDF hinzufügen und bearbeiten

22

Indem ich Metadaten aus einigen PDF-Dateien mit Lesezeichen von abrufe pdftk, beobachte ich das Format von Lesezeichen in PDF-Metadaten. Ich vermute also pdftk, dass es mit möglich ist, Lesezeichen einer PDF-Datei hinzuzufügen und zu bearbeiten.

Hier sind drei Schritte, denen ich folge:

  1. Ich bekomme zuerst die Metadaten (einschließlich Lesezeichen, falls vorhanden) von einer PDF-Datei in eine Textdatei von pdftk in.pdf dump_data > in.info.
  2. Als nächstes füge ich einige Lesezeichen in die Metadatentextdatei ein in.infound ändere sie von

    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
    PageLabelNewIndex: 1
    PageLabelStart: 1
    PageLabelNumStyle: DecimalArabicNumerals
    

    zu

    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
    
  3. Dann versuche ich, die bearbeiteten Metadaten wieder in die PDF-Datei von zu setzen pdftk in.pdf update_info in.info output out.pdf.

Wenn ich die neue PDF-Datei out.pdfin Evince oder Adobe Reader öffne, enthält die neue PDF-Datei kein Lesezeichen.

Wenn ich die Metadaten aus der neuen PDF-Datei out.pdfvon bekomme pdftk out.pdf dump_data > out.info, gibt es keine Lesezeichen in out.info. Es sieht so aus, als ob die Lesezeichen nicht erfolgreich hinzugefügt wurden.

Ich habe mich gefragt, ob es Fehler gibt. Wie kann ich Lesezeichen einer PDF-Datei hinzufügen und bearbeiten, nicht unbedingt von pdftk?

Tim
quelle
1
Dieses kleine grafische Tool hat für mich funktioniert. (PDF Mod 0.9.1) apps.fedoraproject.org/packages/pdfmod
abhijit

Antworten:

12

Es sieht für mich so aus, als ob pdftk ab Version 1.45 (06.12.2012) das Ändern von Lesezeichen über den Befehl update_info zulässt:

Sie können jetzt die Lesezeichen einer PDF-Datei mit update_info hinzufügen oder ändern.

via: http://www.pdflabs.com/docs/pdftk-version-history/

user37186
quelle
3
Das hat bei mir sehr gut funktioniert. Das sollte man in der Eingabedatei oberhalb der BookmarkBeginTags hinzufügen, bevor jeder Lesezeicheneintrag fehlt.
Danielp
4

jPDFtweak (Java, läuft also unter Unix / Linux) kann Lesezeichen ändern, aber ich weiß nicht, ob Sie irgendetwas damit schreiben können.

Für die Skripterstellung würde ich vermuten, dass Ihre einzige native Unix / Linux-Option pdflatex mit dem pdfpages-Paket ist. Aber das ist eine Lernkurve, wenn Sie noch kein LaTeX-Benutzer sind.

EDIT: Eigentlich ist es mit Ghostscript möglich: Siehe hier oder hier oder hier

schäbig
quelle
4

Wenn Sie sich immer noch an diese Unix-Skripte halten, dann

  1. Lesezeichendaten extrahieren, von denen ein Speicherauszug erstellt wurde pdftk
  2. Schreiben Sie ein zusätzliches Skript, um abgelegte Lesezeichen in das pdfmarks-Format zu konvertieren. Dieser Ghostscript-Befehl gswird akzeptiert.
  3. verwenden gs Skript, um sie mit pdfmarks zusammenzuführen

Schauen Sie sich das Skript unter http://blog.tremily.us/posts/PDF_bookmarks_with_Ghostscript/ anpdf-merge.py macht genau das, was Sie (oder ich) wollen.

pdf-merge.py --output=merged.pdf input1.pdf input2.pdf

In seinem Skript könnten einige kleinere Verbesserungen vorgenommen werden

  1. Unicode-Handling
  2. Lesezeichendateien ausgeben, damit die Benutzer sie auch anpassen können

Auf jeden Fall sollte es funktionieren

LarryCai
quelle
Eine Gegenstimme! Vielen Dank! Ich freue mich auf dein Drehbuch!
Tim
Scheint, der Link funktioniert nicht. Kannst du das bitte reparieren?
Fish Monitor
4

pdftk ist definitiv das richtige Tool (mit der richtigen Syntax):

BookmarkBegin
BookmarkTitle: Chapter 1
BookmarkLevel: 1
BookmarkPageNumber: 1
BookmarkBegin
BookmarkTitle: Paragraph 1.1
BookmarkLevel: 2
BookmarkPageNumber: 1
carlo
quelle
2

Caleb,

Soweit ich weiß, können Lesezeichen gemäß der PDF-Spezifikation nicht über ein Diagnosetool wie das eingespritzt werden pdftk . Das Aktualisieren der Metadaten, um auf nicht vorhandene Kapitel und Lesezeichenanker zu verweisen, wird definitiv nicht funktionieren, es kann sogar dazu führen, dass Ihre PDF-Datei inkonsistent oder ungeöffnet ist.

Ich habe letztendlich Java + iText-Bibliotheken verwendet, um das zu tun, was Sie in diesem Tutorial vorgeschlagen haben , aber wir haben täglich mit Hunderten von PDFs zu tun , daher musste es automatisiert werden. Wenn Sie eine einmalige Aktion ausführen, sollte dies in Adobe Acrobat möglich sein.

r00fus
quelle
2

Um all diese guten Antworten zusammenzufassen:

Es gibt ein bmconverter-Projekt auf GitHub, das verschiedene PDF-Lesezeichenformate konvertieren kann. Es kann die pdftk-Ausgabe in das jpdftweak-Format konvertieren. Wenn Sie jedoch jpdftweak verwenden, müssen Sie die pdftk-Ausgabe nicht in csv konvertieren, da Sie alle Arbeiten in jpdftweak ausführen können.

Leider wird pdfmarks vom Projekt nicht unterstützt, aber zum Glück hat jemand ein Skript in bmconverter-Ausgaben gepostet , das die pdftk-Ausgabe in pdfmarks konvertieren kann. Ghostscript-Batch-Option ist also eine Option

Zetah
quelle
2

pdftkDas Lesezeichenformat ist etwas mühsam zu schreiben. Stattdessen habe ich mein eigenes Skript mit bash, sed, pdftkund python3. Schau es dir in diesem Repo an: https://github.com/SiddharthPant/booky

Jetzt kann ich eine solche Textdatei ( bkmrks.txt) erstellen , die selbst für ein 1000-Seiten-PDF-Dokument nur 5 Minuten benötigt.

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

und dann mein Skript verwenden

./booky.sh pdf_file.pdf bkmrks.txt

Dadurch wird automatisch ein pdf ( pdf_file_new.pdf) mit meinen Lesezeichen erstellt.

Siddharth Pant
quelle
1

Fügen Sie einfach BookmarkBeginvor jedem Lesezeicheneintrag wie in

BookmarkBegin
BookmarkTitle: Front cover
BookmarkLevel: 1
BookmarkPageNumber: 1
BookmarkBegin
    ⋮
Tofleplof
quelle
0

Die in Schritt 1 verwendete Umleitung führt dazu, dass update_info nicht richtig funktioniert. Sie müssen stattdessen die Ausgabedatei für pdftk angeben:

pdftk in.pdf dump_data output in.info

Siehe diese Antwort von einer ähnlichen Frage: /programming//a/30308964/3158933

Dateien, die ich mit einer Umleitung erstellt habe, haben eine etwas größere Dateigröße und führen dazu, dass pdftk beim Ausführen des Befehls update_info die Meldung "Warnung: Unerwarteter Fall 1 in LoadDataFile (); Fortsetzen" ausgibt.

Bartimäus
quelle