ฉันสามารถแก้ไข / สร้างสารบัญของ PDF ด้วยฟรีแวร์ได้หรือไม่


0

ฉันมี PDF พร้อมชิ้นส่วนจำนวนหนึ่ง ฉันต้องการสร้างสารบัญเพื่อนำทาง PDF อย่างง่ายดาย ฉันต้องการที่จะทำบน Mac นี้ด้วยฟรีแวร์ (โปรแกรมบรรทัดคำสั่งจะดีมาก)

เป็นไปได้ไหม เคยถามคำถามที่คล้ายกันมาก่อนแต่เท่าที่ฉันจะบอกได้คำตอบที่ดีที่สุดคือPDFOutlinerซึ่งไม่ใช่ฟรีแวร์

คำตอบ:


3

ฉันพบเซิร์ฟเวอร์ PDFtkและเครื่องมือบรรทัดคำสั่ง PDF ที่สอดคล้องกันมียูทิลิตี้บรรทัดคำสั่ง PDF ที่หลากหลาย

ฉันใช้ทั้งเครื่องมือเปิดและปิด แต่ไม่จำเป็นต้องใช้งาน TOC ใด ๆ เลย ส่วนบุ๊กมาร์กในหน้าตัวอย่างการใช้งานของ Coherent ดูเหมือนว่าอาจเป็นวิธีการทดสอบ:

6. คั่นหน้า

cpdf -list-bookmarks in.pdf

รายการที่คั่นหน้าใน in.pdf สิ่งนี้จะผลิต:

0 "Part 1" 1 open
1 "Part 1A" 2
2 "Part 1B" 3
0 "Part 2" 4
1 "Part 2a" 5

cpdf -add-bookmarks bookmarks.txt in.pdf -o out.pdf

เพิ่มบุ๊กมาร์กในรูปแบบเดียวกันจากไฟล์บุ๊กมาร์กที่เตรียมไว้. txt เป็น in.pdf, เขียนไปยัง out.pdf


1
นั่นคือสิ่งที่ฉันกำลังมองหา เนื่องจากcpdf -add-bookmarksเขียนทับสารบัญเก่าของ PDF ดูเหมือนว่าจะแก้ไขบุ๊กมาร์กโดยใช้cpdfวิธีการเดินทางคือ: (1) cpdf -list-bookmarks in.pdf > out.txt; (2) แก้ไขout.txt; cpdf -add-bookmarks...(3)
Alex Roberts

0

นี่คือสคริปต์ python ที่จะทำงานบน MacOS เพื่อสร้าง TOC พื้นฐาน คุณจะต้องป้อนค่าของคุณเองสำหรับไฟล์อินพุตและชื่อไฟล์เอาต์พุตและหมายเลขหน้าและเลเบลสำหรับแต่ละรายการ

#!/usr/bin/python
# -*- coding: utf-8 -*-

# CREATE PDF OUTLINES v.1.0 : Add a simple list of Bookmarks to a PDF.

from Foundation import  NSURL, NSString
import Quartz as Quartz
import sys

# You will need to change these filepaths to a local test pdf and an output file.
infile = "/path/to/file.pdf"
outfile = '/path/to/output.pdf'

def getOutline(page, label):
    myPage = myPDF.pageAtIndex_(page)
    pageSize = myPage.boundsForBox_(Quartz.kCGPDFMediaBox)
    x = 0
    y = Quartz.CGRectGetMaxY(pageSize)
    pagePoint = Quartz.CGPointMake(x,y)
    myDestination = Quartz.PDFDestination.alloc().initWithPage_atPoint_(myPage, pagePoint)
    myLabel = NSString.stringWithString_(label)
    myOutline = Quartz.PDFOutline.alloc().init()
    myOutline.setLabel_(myLabel)
    myOutline.setDestination_(myDestination)
    return myOutline

pdfURL = NSURL.fileURLWithPath_(infile)
myPDF = Quartz.PDFDocument.alloc().initWithURL_(pdfURL)
if myPDF:
    # Create Outlines. Add the Page Index (from 0) and label in pairs here:
    myTableOfContents = [
        (0, 'Page 1'), 
        (1, 'Page 2'),
        (2, 'Page 3')
        ]
    allMyOutlines = []
    for index, outline in myTableOfContents:
        allMyOutlines.append(getOutline(index, outline))

    rootOutline = Quartz.PDFOutline.alloc().init()
    for index, value in enumerate(allMyOutlines):
        rootOutline.insertChild_atIndex_(value, index)
    myPDF.setOutlineRoot_(rootOutline)
    myPDF.writeToFile_(outfile)
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.