2010-04-04 17 views
10

Chciałbym utworzyć/zmodyfikować tytuł dokumentu PDF za pomocą programu pypdf. Wygląda na to, że tytuł jest tylko do odczytu. Czy istnieje sposób dostępu do tych metadanych r/w?Zmień metadane pliku pdf na pypdf

Jeśli odpowiedź jest pozytywna, należy docenić fragment kodu.

Dzięki

Odpowiedz

8

można manipulować tytuł z pyPDF (rodzaj). Natknąłem się na to stanowisko na listingu ReportLab-users:

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

Można również użyć pypdf. http://pybrary.net/pyPdf/

To nie pozwoli edytować metadane per se, ale pozwoli Ci odczytać jeden lub więcej plik PDF (s) i pluć je się, ewentualnie z nowym metadanych.

Oto odpowiedni kod:

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

Przy konstruowaniu PdfFileReader, trzeba przekazać obiekt plikopodobny, a nie ciąg/filename (przynajmniej z pyPdf 1,13) –

+4

[PyPDF2] (http : //mstamy2.github.io/PyPDF2/) (który prawdopodobnie zastąpił pyPDF) ma natywną metodę, która robi to dla ciebie: 'output.addMetadata ({'/ Title': 'title'})' – gellej