我想将元数据键值对添加到pdf文件的元数据中。
我找到了几年的答案,但我认为这是复杂的方法。我想今天有一种更简单的方法:https://stackoverflow.com/a/3257340/633961
我没有和pypdf2结婚,如果有更简单的方法,那我就这样走吧?
你可以使用pdfrw做到这一点
pip install pdfrw
然后跑
from pdfrw import PdfReader, PdfWriter
trailer = PdfReader("myfile.pdf")
trailer.Info.WhoAmI = "Tarun Lalwani"
PdfWriter("edited.pdf", trailer=trailer).write()
然后检查PDF自定义属性
当问题明确要求PyPDF2时,我很惊讶地发现没有PyPDF2的代码示例,所以这里是:
from PyPDF2 import PdfFileReader, PdfFileWriter
fin = open('source.pdf', 'rb')
reader = PdfFileReader(fin)
writer = PdfFileWriter()
writer.appendPagesFromReader(reader)
metadata = reader.getDocumentInfo()
writer.addMetadata(metadata)
# Write your custom metadata here:
writer.addMetadata({
'/Some': 'Example'
})
fout = open('result.pdf', 'wb')
writer.write(fout)
fin.close()
fout.close()
基于Cyril N.所说的,代码工作正常,但它创建了很多“垃圾”文件,因为现在你有原始文件和带元数据的文件。
我稍微更改了代码,因为我每天会在数百个文件上运行它,并且不想处理额外的清理:
from PyPDF2 import PdfFileReader, PdfFileWriter
fin = open('your_original.pdf', 'rb')
reader = PdfFileReader(fin)
writer = PdfFileWriter()
writer.appendPagesFromReader(reader)
metadata = reader.getDocumentInfo()
writer.addMetadata(metadata)
# Write your custom metadata here:
writer.addMetadata({
'/Title': 'this'
})
fout = open('your_original.pdf', 'ab') #ab is append binary; if you do wb, the file will append blank pages
writer.write(fout)
fin.close()
fout.close()
如果你想将它作为一个新文件,只需在fout中使用不同的pdf名称并保留ab。如果使用wb,则会追加与原始文件相同的空白页。