2010-04-04 14 views
10

Mi piacerebbe creare/modificare il titolo di un documento pdf usando pypdf. Sembra che il titolo sia di sola lettura. C'è un modo per accedere a questi metadati r/w?Modifica metadati del file pdf con pypdf

Se la risposta è positiva, un pezzo di codice sarebbe apprezzato.

Grazie

risposta

8

È possibile manipolare il titolo con pyPDF (o quasi). Mi sono imbattuto in questo post su lista ReportLab utenti:

http://two.pairlist.net/pipermail/reportlab-users/2009-November/009033.html

È anche possibile utilizzare pypdf. http://pybrary.net/pyPdf/

Questo non ti consente di modificare i metadati per sé, ma vi permetterà di leggere uno o più file pdf (s) e li sputare indietro fuori, possibilmente con nuovi metadati.

Ecco il codice rilevante:

from pyPdf import PdfFileWriter, PdfFileReader 
from pyPdf.generic import NameObject, createStringObject 

OUTPUT = 'output.pdf' 
INPUTS = ['test1.pdf', 'test2.pdf', 'test3.pdf'] 

# There is no interface through pyPDF with which to set this other then getting 
# your hands dirty like so: 
infoDict = output._info.getObject() 
infoDict.update({ 
    NameObject('/Title'): createStringObject(u'title'), 
    NameObject('/Author'): createStringObject(u'author'), 
    NameObject('/Subject'): createStringObject(u'subject'), 
    NameObject('/Creator'): createStringObject(u'a script') 
}) 

inputs = [PdfFileReader(i) for i in INPUTS] 
for input in inputs: 
    for page in range(input.getNumPages()): 
     output.addPage(input.getPage(page)) 

outputStream = file(OUTPUT, 'wb') 
output.write(outputStream) 
outputStream.close() 
+0

Quando si costruisce un PdfFileReader, è necessario passare un oggetto simile a file, non è una stringa/filename (almeno con pyPdf 1.13) –

+4

[PyPDF2] (http : //mstamy2.github.io/PyPDF2/) (che sembra aver sostituito pyPDF) ha un metodo nativo che fa questo per voi: 'output.addMetadata ({'/ Title': 'title'})' – gellej