为什么 PyPDF2.PdfFileWriter 忘记了我对文档所做的更改?

Why does PyPDF2.PdfFileWriter forget changes I made to a document?

我正在尝试修改 PDF 文件中的文本。文本可以在 TjBDC 类型的对象中。我找到了正确的对象,如果我在更改它们后直接读取它们,它们会显示更新后的值。

但是如果我将完整的页面传递给 PdfFileWriter,更改就会丢失。我可能正在更新一个副本而不是真实的对象。我检查了 id(),它是不同的。有人知道如何解决这个问题吗?

from PyPDF2 import PdfFileReader, PdfFileWriter
from PyPDF2.generic import TextStringObject, NameObject, ContentStream
from PyPDF2.utils import b_

reader = PdfFileReader("some.pdf")
writer = PdfFileWriter()

for page_idx in range(0, 1):

    # Get the current page and it's contents
    page = reader.getPage(page_idx)

    content_object = page["/Contents"].getObject()
    content = ContentStream(content_object, reader)

    for operands, operator in content.operations:

        if operator == b_("BDC"):

            operands[1][NameObject("/Contents")] = TextStringObject("xyz")

        if operator == b_("Tj"):

            operands[0] = TextStringObject("xyz")

    writer.addPage(page)


# Write the stream
with open("output.pdf", "wb") as fp:
    writer.write(fp)

解决方法是将正在迭代更改的ContentStream赋值给之后的页面,再传给PdfFileWriter:

page[NameObject('/Contents')] = content
writer.addPage(page)

我找到了阅读 this and this 的解决方案。