วิธีการเก็บรักษาบุ๊คมาร์คเมื่อจัดเรียงหน้าของไฟล์ PDF ด้วยเครื่องมือเช่น pdftk?


12

ฉันใช้pdftkเพื่อจัดเรียงหน้าใหม่ของไฟล์ pdf ด้วยบุ๊กมาร์ก / โครงร่าง แต่หลังจากนั้นไฟล์เอาต์พุตจะสูญเสียบุ๊กมาร์กของต้นฉบับ

pdftk in.pdf cat 1-22 43 23-42 44-end output out.pdfคำสั่งของฉันคือ

ฉันสงสัยว่าฉันจะเก็บบุ๊คมาร์คในขณะที่จัดเรียงหน้าเว็บใหม่ได้อย่างไร

คำตอบ:


10

นี่คือวิธีแก้ปัญหาการทำงาน อย่างไรก็ตามคุณจะต้องปรับให้เหมาะกับความต้องการของคุณ

ในตัวอย่างของฉันฉันลบหน้าแรกของ PDF จากนั้นฉันจำเป็นต้องอัปเดตบุ๊กมาร์กเพื่อชี้ไปยังตำแหน่งที่ถูกต้อง

  1. ลบหน้า 1 จาก in.pdf:

    pdftk A=in.pdf cat A2-end output temp.pdf
    
  2. สร้างไฟล์ in.info จาก in.pdf:

    pdftk in.pdf dump_data > in.info
    
  3. in.info ต้องได้รับการแก้ไขในกรณีของฉันเนื่องจากฉันจะลบหน้า

    ดังนั้นฉันต้องลด BookmarkPageNumber ทีละบุ๊กมาร์กเพื่อนำไปสู่หน้าที่ถูกต้อง

    รหัส php:

    $file = "in.info";
    $data = file_get_contents($file);
    
    foreach (explode("\n", $data) as $row) {
        $tmp = explode(": ", $row);
    
        if ($tmp[0] == "BookmarkPageNumber") {
            if ($tmp[1] != "1") $tmp[1]--;
            echo $tmp[0].": ".$tmp[1]."\n";
        } else {
            echo $row."\n";
        }
    }
    
  4. สร้างไฟล์ out.pdf สุดท้าย:

    pdftk temp.pdf update_info in2.info output out.pdf
    

ทดสอบการทำงานกับเดเบียนโดยใช้ pdftk 2.01


1
ทำงานให้ฉันด้วย บางทีคุณสามารถเพิ่มคำใบ้เกี่ยวกับวิธีรันสคริปต์ของคุณ (ไม่ทราบวิธี ... ) หรือเพิ่มสคริปต์ไพ ธ อน:#!/usr/bin/python output = open('res.info','w') with open('temp.info','r') as f: for line in f: if line.startswith("BookmarkPageNumber"): output.write( "BookmarkPageNumber: "+ str(int(line.split()[1])+1)+"\n") else: output.write(line)
Vser

6

ที่คุณต้องทำpdftk in.pdf dump_data > in.infoแล้วเพิ่มพารามิเตอร์เมื่อสร้างupdate_info out.pdfข้อความจากman pdftk:

update_info <info data filename | - | PROMPT>

เปลี่ยนข้อมูลเมตาที่เก็บไว้ในพจนานุกรมข้อมูลของ PDF เดียวเพื่อให้ตรงกับไฟล์ข้อมูลอินพุต ไฟล์ข้อมูลอินพุตใช้ไวยากรณ์เดียวกับ out‐ put จาก dump_data อักขระที่ไม่ใช่ ASCII ควรเข้ารหัสเป็นเอนทิตีตัวเลข XML สิ่งนี้จะไม่เปลี่ยนข้อมูลเมตาที่เก็บไว้ในสตรีม XMP ของ PDF หากมีอยู่ ตัวอย่างเช่น:

             pdftk in.pdf update_info in.info output out.pdf

  update_info_utf8 <info data filename | - | PROMPT>

เหมือนกับ update_info ยกเว้นอินพุตถูกเข้ารหัสเป็น UTF-8


ขอบคุณ! ฉันจะรับไฟล์ "in.info" นี้ได้อย่างไร?
ทิม

@Tim: แก้ไขแล้ว ฉันหวังว่ามันชัดเจนตอนนี้ คุณต้องใช้dump_data_utf8เพื่อupdate_info_utf8การทำงานแน่นอน
Philomath

3
ขอบคุณ! มันยังไม่ทำงาน คำสั่งของฉันอยู่ในสามขั้นตอนpdftk in.pdf dump_data > in.info, pdftk in.pdf cat 1-22 43 23-42 44-end output out.pdfและยังมีบุ๊กไม่มีpdftk out.pdf update_info in.info output out1.pdf out1.pdf`
ทิม

@Tim ฉันสามารถยืนยันได้ว่านี่ไม่ได้ผลแน่นอน คุณพบวิธีการแก้ปัญหานี้โดยบังเอิญหรือไม่?
Glutanimate

1
Google trawling คร่าวๆของฉันแสดงว่าบุ๊คมาร์คไม่ได้รับการจัดการเลย
vonbrand

5

การอ่านman manด้วยความระมัดระวังกล่าวว่าupdate_infoจะนำข้อมูลในรูปแบบใดก็ตามที่dump_dataสร้างขึ้น ที่น่าจะต้องมีการปรับตามหน้าสับ ไม่ฟังไม่ได้แต่เป็นไปโดยอัตโนมัติ

เว็บไซต์ pdftkเพียง แต่ช่วยให้ตีข้างต้นและการสร้าง / แก้ไขบุ๊กเป็นผล Google ทุกคนรู้เกี่ยวกับเรื่องของบุ๊กมาร์กในรูปแบบ PDF และการจัดระเบียบใหม่เป็นที่นิยมในการดำเนินงานข้างต้นและการแสดงโคลงสั้น ๆ เกี่ยวกับสิ่งที่พวกเขาเสนอและสิ่งนี้ ;-)

ดังนั้นดูเหมือนว่ามันจะไม่สามารถทำได้ ความคิดเห็นแสดงถึงความเป็นไปได้บางอย่างซึ่งไม่ได้ผลเมื่อพยายาม


1

"pdfmod" เป็นเครื่องมือกราฟิกที่ช่วยให้สามารถลบหนึ่งหรือหน้าโหมดจาก PDF ที่มีอยู่ มันเป็นเรื่องของการคลิกเพียงไม่กี่ นอกจากนี้ยังเก็บรักษาข้อมูลเนื้อหาและการเชื่อมโยงข้ามใน PDF

"pdftk" ทำงานได้ดีและฉันใช้งานมานาน แต่ฉันเคยสูญเสียเนื้อหาหลังจากลบหนึ่งหรือสองหน้าออกจาก pdf ไฟล์ pdf เหล่านั้นซึ่งถูกทดสอบใน "pdftk" และ "pdfmod" ถูกสร้างขึ้นจาก openoffice

https://apps.fedoraproject.org/packages/pdfmod


pdfmodดูเหมือนจะดีกว่าpdftkเมื่อมันมาถึงการรักษาเมตาดาต้า ต่างของexiftoolการแสดงผลลัพธ์ที่pdfmodจะเก็บรักษาข้อมูลเมตา แต่pdftkไม่ได้รักษาทุกอย่างแม้กระทั่งถ้าคุณใช้งานdump_data_utf8 update_info_utf8
user1338062
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.