เพิ่มและแก้ไขบุ๊คมาร์คเป็น pdf


22

โดยการรับเมตาดาต้าจากไฟล์ PDF บางไฟล์ที่มีบุ๊กมาร์กโดยpdftkฉันสังเกตรูปแบบของบุ๊กมาร์กในเมตาดาต้าของ PDF ดังนั้นฉันเดาว่าด้วยpdftkมันเป็นไปได้ที่จะเพิ่มและแก้ไขบุ๊กมาร์กของไฟล์ pdf

นี่คือสามขั้นตอนที่ฉันทำตาม:

  1. ฉันได้รับในตอนแรกเมตาดาต้า (รวมบุ๊กถ้ามี) จากไฟล์ PDF pdftk in.pdf dump_data > in.infoเป็นไฟล์ข้อความโดย
  2. ต่อไปฉันเพิ่มบุ๊กมาร์กบางส่วนลงในไฟล์ข้อความเมทาดาทาin.infoเปลี่ยนจาก

    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
    

    ไปยัง

    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. จากนั้นผมก็พยายามที่จะนำข้อมูลเมตากลับไปแก้ไขไฟล์ PDF pdftk in.pdf update_info in.info output out.pdfโดย

แต่เมื่อฉันเปิดไฟล์ pdf ใหม่out.pdfใน evince หรือ adobe reader ไม่มีบุ๊กมาร์กในไฟล์ pdf ใหม่

ถ้าฉันได้รับข้อมูลเมตาจากไฟล์ PDF ที่ใหม่out.pdfโดยจะมีบุ๊กไม่มีpdftk out.pdf dump_data > out.info out.infoดูเหมือนว่าบุ๊คมาร์คไม่ได้รับการเพิ่มเข้ามาอย่างประสบความสำเร็จ

ฉันสงสัยว่ามีข้อผิดพลาดบางอย่าง? ฉันจะเพิ่มและแก้ไขบุ๊กมาร์กของไฟล์ pdf ได้อย่างไรโดยไม่จำเป็นต้องใช้ pdftk


1
เครื่องมือกราฟิกขนาดเล็กนี้ทำงานสำหรับฉัน (PDF Mod 0.9.1) apps.fedoraproject.org/packages/pdfmod
abhijit

คำตอบ:


12

ดูเหมือนว่าฉันจะชอบจากรุ่น 1.45 (2012-12-06), pdftk ไม่อนุญาตให้แก้ไขบุ๊กมาร์กผ่านคำสั่ง update_info:

ตอนนี้คุณสามารถเพิ่มหรือเปลี่ยนแปลงที่คั่นหน้าของ PDF โดยใช้ update_info

ผ่าน: http://www.pdflabs.com/docs/pdftk-version-history/


3
มันใช้งานได้ดีมากสำหรับฉัน หนึ่งควรเพิ่มที่ในไฟล์อินพุตด้านบนBookmarkBeginแท็กก่อนที่รายการบุ๊กมาร์กแต่ละครั้งจะหายไป
danielp

4

jPDFtweak (Java ดังนั้นการเรียกใช้บน Unix / Linux) สามารถแก้ไขบุ๊กมาร์ก แต่ฉันไม่รู้ว่าคุณสามารถเขียนสคริปต์อะไรได้บ้าง

สำหรับการเขียนสคริปต์ฉันเดาว่าตัวเลือก Unix / Linux ดั้งเดิมของคุณจะเป็น pdflatex พร้อมแพ็คเกจ pdfpages แต่นั่นเป็นช่วงการเรียนรู้หากคุณยังไม่ได้เป็นผู้ใช้ LaTeX

แก้ไข: จริงๆแล้วมันอาจเป็นไปได้กับ ghostscript: ดูที่นี่หรือที่นี่หรือ ที่นี่


4

หากคุณยังคงติดอยู่กับสคริปต์ยูนิกซ์เหล่านั้น

  1. แยกข้อมูลบุ๊คมาร์คที่ทิ้งจาก pdftk
  2. เขียนสคริปต์พิเศษหนึ่งรายการเพื่อแปลงข้อมูลบุ๊กมาร์กที่ถูกทิ้งเป็นรูปแบบ pdfmarks ซึ่งgsยอมรับคำสั่ง ghostscript
  3. ใช้gsสคริปต์เพื่อรวมเข้ากับ pdfmarks

ลองดูที่http://blog.tremily.us/posts/PDF_bookmarks_with_Ghostscript/สคริปต์pdf-merge.pyทำในสิ่งที่คุณต้องการ (หรือฉัน)

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

การปรับปรุงเล็กน้อยสามารถทำได้ในสคริปต์ของเขา

  1. การจัดการ Unicode
  2. เอาท์พุทไฟล์คั่นหน้าเพื่อให้ผู้คนสามารถปรับได้เช่นกัน

อย่างไรก็ตามมันควรจะทำงาน


หนึ่งโหวต! ขอบคุณ! ฉันรอคอยสคริปต์ของคุณ!
ทิม

ดูเหมือนว่าลิงก์ไม่ทำงาน คุณช่วยแก้ไขได้มั้ย
Fish Monitor

4

pdftk เป็นเครื่องมือที่เหมาะสมแน่นอน (ด้วยไวยากรณ์ที่ถูกต้อง):

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

2

คาเลบ

เท่าที่ผมเข้าใจบุ๊กตามสเปครูปแบบไฟล์ PDF pdftkไม่สามารถฉีดผ่านทางเครื่องมือการวินิจฉัยเช่น การอัปเดตข้อมูลเมตาเพื่ออ้างถึงบทต่างๆและจุดยึดที่เชื่อมโยงไปถึงที่คั่นหน้าที่ไม่มีอยู่จะไม่ทำงานแน่นอนมันอาจทำให้ PDF ของคุณไม่สอดคล้องกันหรือเปิดไม่ได้

ฉันลงเอยด้วยการใช้ไลบรารี java + iText เพื่อทำสิ่งที่คุณแนะนำตามแบบฝึกหัดนี้แต่เราจัดการกับไฟล์ PDF หลายร้อยรายการต่อวันดังนั้นจึงจำเป็นต้องเป็นแบบอัตโนมัติ หากคุณทำเพียงครั้งเดียว Adobe Acrobat ควรจะทำเช่นนี้ได้


2

เพื่อสรุปคำตอบที่ดีทั้งหมดนี้:

มีโครงการ bmconverterบน GitHub ที่สามารถแปลงรูปแบบบุ๊คมาร์ค PDF ได้หลายแบบ มันสามารถแปลงเอาต์พุต pdftk ไปเป็นรูปแบบ jpdftweak แม้ว่าคุณจะใช้ jpdftweak คุณก็ไม่จำเป็นต้องแปลงเอาต์พุต pdftk เป็น csv เนื่องจากคุณสามารถทำงานทั้งหมดจากภายใน jpdftweak

น่าเสียดายที่ pdfmarks ไม่ได้รับการสนับสนุนจากโครงการ แต่โชคดีที่มีคนโพสต์สคริปต์ในปัญหา bmconverterที่สามารถแปลงเอาต์พุต pdftk เป็น pdfmarks ดังนั้นตัวเลือกชุดผีเป็นตัวเลือก


2

pdftkรูปแบบบุ๊กมาร์กค่อนข้างน่าเบื่อเล็กน้อยในการเขียน แต่ฉันสร้างสคริปต์ของตัวเองโดยใช้bash, sed, และpdftk python3ลองดูได้ที่ repo นี้: https://github.com/SiddharthPant/booky

ดังนั้นตอนนี้ฉันสามารถสร้างไฟล์ข้อความ ( bkmrks.txt) เช่นนี้ซึ่งใช้เวลาเพียง 5 นาทีในการเขียนแม้แต่ไฟล์ PDF 1,000 หน้า

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

แล้วใช้สคริปต์ของฉัน

./booky.sh pdf_file.pdf bkmrks.txt

สิ่งนี้จะสร้าง pdf ( pdf_file_new.pdf) ที่มีบุ๊กมาร์กของฉันอยู่โดยอัตโนมัติ


1

เพียงเพิ่มBookmarkBeginก่อนรายการคั่นหน้าแต่ละรายการเช่นเดียวกับใน

BookmarkBegin
BookmarkTitle: Front cover
BookmarkLevel: 1
BookmarkPageNumber: 1
BookmarkBegin
    ⋮

0

การเปลี่ยนเส้นทางที่คุณใช้ในขั้นตอนที่ 1 จะทำให้ update_info ทำงานไม่ถูกต้อง คุณต้องระบุไฟล์ที่ส่งออกไปยัง pdftk แทน:

pdftk in.pdf dump_data output in.info

ดูคำตอบนี้จากคำถามที่คล้ายกัน: /programming//a/30308964/3158933

ไฟล์ที่ฉันสร้างขึ้นโดยใช้การเปลี่ยนเส้นทางมีขนาดไฟล์ใหญ่ขึ้นเล็กน้อยและทำให้ pdftk ออกข้อความ "คำเตือน: กรณีที่ไม่คาดคิด 1 ใน LoadDataFile (); ดำเนินการต่อ" เมื่อเรียกใช้คำสั่ง update_info

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.