Tambahkan dan edit bookmark ke pdf

22

Dengan mendapatkan metadata dari beberapa file pdf dengan bookmark pdftk, saya mengamati format bookmark dalam pdf metadata. Jadi saya menduga bahwa dengan pdftk, dimungkinkan untuk menambah dan mengedit bookmark file pdf.

Berikut tiga langkah yang saya ikuti:

  1. Saya pertama-tama mendapatkan metadata (termasuk bookmark jika ada) dari file pdf ke dalam file teks oleh pdftk in.pdf dump_data > in.info.
  2. Selanjutnya saya menambahkan beberapa penanda ke file teks metadata in.info, mengubahnya dari

    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
    

    untuk

    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. Kemudian saya mencoba mengembalikan metadata yang sudah diedit ke file pdf pdftk in.pdf update_info in.info output out.pdf.

Tetapi ketika saya membuka file pdf baru out.pdfdi evince atau adobe reader, tidak ada bookmark di file pdf baru.

Jika saya mendapatkan metadata dari baru file pdf out.pdfoleh pdftk out.pdf dump_data > out.info, tidak akan ada bookmark di out.info. Sepertinya bookmark tidak berhasil ditambahkan.

Saya bertanya-tanya apakah ada beberapa kesalahan? Bagaimana saya harus menambah dan mengedit bookmark file pdf, tidak harus dengan pdftk?

Tim
sumber
1
Alat grafis kecil ini bekerja untuk saya. (PDF Mod 0.9.1) apps.fedoraproject.org/packages/pdfmod
abhijit

Jawaban:

12

Sepertinya dari versi 1.45 (2012-12-06), pdftk memungkinkan modifikasi bookmark melalui perintah update_info:

Anda sekarang dapat menambahkan atau mengubah bookmark PDF menggunakan update_info.

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

pengguna37186
sumber
3
Ini bekerja sangat baik untuk saya. Orang harus menambahkan itu di file input di atas BookmarkBegintag sebelum setiap entri bookmark hilang.
danielp
4

jPDFtweak (Java, jadi berjalan di Unix / Linux) dapat mengubah bookmark, tapi saya tidak tahu apakah Anda bisa skrip apa pun dengan itu.

Untuk skrip, saya kira satu-satunya pilihan Unix / Linux asli Anda akan pdflatex dengan paket pdfpages. Tapi itu kurva belajar jika Anda belum menjadi pengguna LaTeX.

EDIT: Sebenarnya mungkin dengan ghostscript: Lihat di sini atau di sini atau di sini

luar biasa
sumber
4

Jika Anda tetap menggunakan skrip unix itu, maka

  1. ekstrak data bookmark yang dibuang dari pdftk
  2. tulis satu skrip tambahan untuk mengonversi data bookmark yang dibuang ke format pdf, yang perintah ghostscript gsditerima.
  3. gunakan gsskrip untuk menggabungkannya dengan pdfmarks

Lihatlah http://blog.tremily.us/posts/PDF_bookmarks_with_Ghostscript/ skrip pdf-merge.pymelakukan persis apa yang Anda (atau saya) inginkan.

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

Beberapa perbaikan kecil dapat dilakukan dalam skripnya

  1. penanganan unicode
  2. output file bookmark, sehingga orang dapat menyesuaikannya juga

Bagaimanapun, itu harus bekerja

larrycai
sumber
Satu suara positif! Terima kasih! Saya menantikan naskah Anda!
Tim
Tampaknya tautannya tidak berfungsi. Bisakah Anda memperbaikinya?
Fish Monitor
4

pdftk jelas merupakan alat yang tepat (dengan sintaks yang tepat):

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

Caleb,

Sejauh yang saya mengerti, bookmark sesuai spesifikasi PDF tidak dapat disuntikkan melalui alat diagnostik seperti pdftk. Memperbarui metadata untuk merujuk ke bab dan penanda jangkar pendaratan yang tidak ada pasti tidak akan berfungsi, bahkan mungkin membuat PDF Anda tidak konsisten atau tidak dapat dibuka.

Saya akhirnya menggunakan pustaka java + iText untuk melakukan apa yang Anda sarankan sesuai tutorial ini , tapi kami berhadapan dengan ratusan pdf setiap hari, jadi itu perlu otomatis. Jika Anda melakukan sekali saja, Adobe Acrobat harus dapat melakukan ini.

r00fus
sumber
2

Untuk meringkas semua jawaban yang baik ini:

Ada proyek bmconverter di GitHub yang dapat mengonversi berbagai format bookmark PDF. Itu dapat mengkonversi output pdftk ke format jpdftweak, meskipun jika Anda akan menggunakan jpdftweak maka Anda tidak perlu mengkonversi output pdftk ke csv, karena Anda dapat melakukan semua pekerjaan dari dalam jpdftweak.

Sayangnya pdfmarks tidak didukung oleh proyek, tetapi untungnya seseorang memposting skrip dalam masalah bmconverter yang dapat mengubah output pdftk ke pdfmarks. Jadi opsi batch ghostscript adalah opsi

zetah
sumber
2

pdftkFormat bookmark agak membosankan untuk ditulis. Sebaliknya saya membuat naskah saya sendiri menggunakan bash, sed, pdftkdan python3. Lihat di repo ini: https://github.com/SiddharthPant/booky

Jadi sekarang saya dapat membuat file teks ( bkmrks.txt) seperti ini yang hanya membutuhkan 5 menit untuk menulis bahkan untuk pdf 1000 halaman.

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

dan kemudian gunakan skrip saya

./booky.sh pdf_file.pdf bkmrks.txt

ini secara otomatis membuat pdf ( pdf_file_new.pdf) yang memiliki bookmark saya di dalamnya.

Siddharth Pant
sumber
1

Cukup tambahkan BookmarkBeginsebelum setiap entri bookmark, seperti pada

BookmarkBegin
BookmarkTitle: Front cover
BookmarkLevel: 1
BookmarkPageNumber: 1
BookmarkBegin
    ⋮
tofleplof
sumber
0

Arahan ulang yang Anda gunakan pada langkah 1 akan menyebabkan update_info tidak berfungsi dengan benar. Anda perlu menentukan file output ke pdftk sebagai gantinya:

pdftk in.pdf dump_data output in.info

Lihat jawaban ini dari pertanyaan serupa: /programming//a/30308964/3158933

File yang saya buat menggunakan redirect memiliki ukuran file yang sedikit lebih besar dan menyebabkan pdftk mengeluarkan pesan "Peringatan: tak terduga 1 di LoadDataFile (); melanjutkan" saat menjalankan perintah update_info.

Bartimeus
sumber