Ubah metadata file pdf dengan pypdf

Saya ingin membuat/memodifikasi judul dokumen pdf menggunakan pypdf. Tampaknya judulnya hanya bisa dibaca. Apakah ada cara untuk mengakses metadata ini r/w?

Jika jawaban positif, sepotong kode akan dihargai.

Terima kasih


person Baudouin Tamines    schedule 04.04.2010    source sumber


Jawaban (1)


Anda dapat memanipulasi judul dengan pyPDF (semacamnya). Saya menemukan posting ini di daftar pengguna laporan:

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

Anda juga dapat menggunakan pypdf. http://pybrary.net/pyPdf/

Ini tidak memungkinkan Anda mengedit metadata itu sendiri, tetapi memungkinkan Anda membaca satu atau lebih file pdf dan mengeluarkannya kembali, mungkin dengan metadata baru.

Inilah kode yang relevan:

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()
person Mark Lavin    schedule 15.07.2010
comment
Saat membuat PdfFileReader, Anda harus meneruskan objek seperti file, bukan string/nama file (setidaknya dengan pyPdf 1.13) - person Joe Germuska; 18.11.2013
comment
PyPDF2 (yang tampaknya telah menggantikan pyPDF) memiliki metode asli yang melakukan ini untuk Anda: output.addMetadata({'/Title': 'title'}) - person gellej; 01.07.2014