Posso modificare / creare un sommario PDF con freeware?

0

Ho un PDF con un numero di parti. Vorrei creare un sommario per navigare con facilità nel PDF. Mi piacerebbe fare su un Mac questo con freeware. (Un programma da riga di comando sarebbe fantastico.)

È possibile? Domande simili sono state poste prima , ma fino a ora come posso dire, la risposta migliore è stata PDFOutliner , che non è freeware.

    
posta Alex Roberts 10.05.2016 - 21:44
fonte

2 risposte

2

Ho trovato PDFtk Server e Gli strumenti della riga di comando PDF coerenti hanno una vasta gamma di utilità per la riga di comando PDF.

Ho usato entrambi gli strumenti on e off, ma non ho mai avuto bisogno di fare alcun lavoro di TOC. La sezione Segnalibri nella pagina degli esempi di utilizzo di Coherent sembra un approccio da provare:

6. Preferiti

cpdf -list-bookmarks in.pdf

Elenca i segnalibri in.pdf. Questo produrrebbe:

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

Aggiungi i segnalibri nello stesso formato da un file di file bookmarks.txt a in.pdf, scrivendo a out.pdf.

    
risposta data 10.05.2016 - 22:32
fonte
0

Ecco uno script Python che verrà eseguito su MacOS per produrre un sommario rudimentale. Dovrai inserire i tuoi valori per il file di input e il nome file di output e il numero di pagina e l'etichetta per ciascuna voce.

#!/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)
    
risposta data 10.01.2019 - 23:18
fonte

Leggi altre domande sui tag