我正在尝试将文件附加到 PDF 文件,但遇到了一些问题。我不确定我是否做错了什么或者 PyPDF2 中是否存在错误。我为此使用 Python 3.10.2,并通过 pip 下载了 PyPDF2 的最新包。
这是我尝试使用的 3 个版本的代码,但每个版本都有自己的问题。
pdfFile = open("input.pdf", "rb")
reader = PdfReader(pdfFile)
writer = PdfWriter()
writer.clone_document_from_reader(reader) # this line is different
pdfFile.close()
with open("image.png", "rb") as file:
writer.add_attachment("image", file.read())
with open("output.pdf", "wb") as file:
writer.write(file)
pdfFile = open("input.pdf", "rb")
reader = PdfReader(pdfFile)
writer = PdfWriter()
writer.clone_reader_document_root(reader) # this line is different
writer.append_pages_from_reader(reader) # this line is different
pdfFile.close()
with open("image.png", "rb") as file:
writer.add_attachment("image", file.read())
with open("output.pdf", "wb") as file:
writer.write(file)
pdfFile = open("input.pdf", "rb")
reader = PdfReader(pdfFile)
writer = PdfWriter()
writer.append_pages_from_reader(reader) # this line is different
pdfFile.close()
with open("image.png", "rb") as file:
writer.add_attachment("image", file.read())
with open("output.pdf", "wb") as file:
writer.write(file)
有趣的是,如果我运行代码的第三个版本而不附加文件,我不会收到错误。然后它就像前两个版本一样工作。
升级到 PyPDF2 库的最新版本。从版本 3 开始,它现在称为 pypdf,并使用 3.9.1(截至 2023 年 6 月 09 日的最新版本),这应该会生成一个带有附件的工作 PDF(至少对我来说是这样)。
from pypdf import PdfReader, PdfWriter
reader = PdfReader("input.pdf")
writer = PdfWriter()
writer.append_pages_from_reader(reader)
with open("image.png", "rb") as file:
writer.add_attachment("image.png", file.read())
with open("output.pdf", "wb") as file:
writer.write(file)
希望有帮助!
编辑:在进一步测试中,即使使用最新版本的 pypdf,我在将文件附加到 pdf 时也遇到一些困难。 (虽然您抱怨的错误似乎已修复,但我偶尔会收到未正确附加的文件,即它们似乎已附加,但在 pdf 中单击时实际上不会打开)。
我已切换为使用 pikepdf 进行附加,并且运行良好。