4 votos

¿Puedo editar/crear el índice de un PDF con un programa gratuito?

Tengo un PDF con una serie de piezas. Me gustaría crear una tabla de contenidos para navegar por el PDF con facilidad. Me gustaría hacer esto en un Mac con freeware. (Un programa de línea de comandos sería genial).

¿Es eso posible? Preguntas similares han sido preguntó antes pero, por lo que veo, la mejor respuesta dada ha sido PDFOutliner que no es un programa gratuito.

7voto

Petro Gordiyevich Puntos 21

He encontrado Servidor PDFtk y Herramientas de línea de comandos de Coherent PDF tienen una amplia gama de utilidades de línea de comandos para PDF.

He utilizado ambas herramientas de forma intermitente, pero nunca he necesitado hacer ningún trabajo de COT. La sección de marcadores en el programa Coherent Página de ejemplos de uso parece que puede ser un enfoque para experimentar:

6. Marcadores

cpdf -list-bookmarks in.pdf

Enumerar los marcadores en in.pdf. Esto produciría:

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

Añadir marcadores en la misma forma desde un archivo preparado bookmarks.txt a in.pdf, escribiendo a out.pdf.

1voto

benwiggy Puntos 8

Aquí hay un script que se ejecutará en MacOS para producir una TOC rudimentaria. Tendrás que introducir tus propios valores para el archivo de entrada y el de salida, así como el número de página y la etiqueta de cada entrada.

#!/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)

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X