[英]Change metadata of pdf file with pypdf2
我想將元數據鍵值對添加到 pdf 文件的元數據中。
我找到了一個幾年前的答案,但我認為這很復雜。 我想今天有一個更簡單的方法: https : //stackoverflow.com/a/3257340/633961
我沒有和pypdf2結婚,如果有更簡單的方法,那我就走這條路?
當問題明確要求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()
你可以使用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 自定義屬性
在 Python 中編輯 PDF 元數據有多種方法,但一種方法優於其他方法。
我將首先討論其他看起來正確但有副作用的方法。 如果您沒有足夠的時間並使用正確的方法,請跳到本文末尾。
弱點是沒有維護包。
from pdfrw import PdfReader, PdfWriter, PdfDict
if __name__ == '__main__':
pdf_reader = PdfReader('old.pdf')
metadata = PdfDict(Author='Someone', Title='PDF in Python')
pdf_reader.Info.update(metadata)
PdfWriter().write('new.pdf', pdf_reader)
pdfrw 可以很容易地完成,而不會丟失非顯示信息,例如書簽。
PyPDF2 比 pdfrw 支持更多的 PDF 功能,包括解密和更多類型的解壓。
弱點是 PDF 不保留大綱(書簽)。
import pprint
from PyPDF2 import PdfFileReader, PdfFileWriter
if __name__ == '__main__':
file_in = open('old.pdf', 'rb')
pdf_reader = PdfFileReader(file_in)
metadata = pdf_reader.getDocumentInfo()
pprint.pprint(metadata)
pdf_writer = PdfFileWriter()
pdf_writer.appendPagesFromReader(pdf_reader)
pdf_writer.addMetadata({
'/Author': 'Someone',
'/Title': 'PDF in Python'
})
file_out = open('new.pdf', 'wb')
pdf_writer.write(file_out)
file_in.close()
file_out.close()
使用PdfFileWriter
創建一個新的 PDF,並通過appendPagesFromReader()
獲取舊內容,然后addMetadata()
。
似乎我們不能直接修改 PDF 元數據,所以我們添加所有頁面和元數據,然后寫出一個新文件。
在 Python 中編輯 PDF 元數據的正確方法。
import pprint
from PyPDF2 import PdfFileReader, PdfFileMerger
if __name__ == '__main__':
file_in = open('old.pdf', 'rb')
pdf_reader = PdfFileReader(file_in)
metadata = pdf_reader.getDocumentInfo()
pprint.pprint(metadata)
pdf_merger = PdfFileMerger()
pdf_merger.append(file_in)
pdf_merger.addMetadata({
'/Author': 'Someone',
'/Title': 'PDF in Python'
})
file_out = open('new.pdf', 'wb')
pdf_merger.write(file_out)
file_in.close()
file_out.close()
使用PdfFileMerger
通過append()
連接頁面。
append(fileobj, bookmark=None, pages=None, import_bookmarks=True)
建立在 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,您將附加與原始文件相同的空白頁。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.