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

Joe*_*Joe 6 python pdf pdf-generation pypdf python-3.x

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

但如果我将完整的页面传递给 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)
Run Code Online (Sandbox Code Playgroud)

Joe*_*Joe 4

解决方案是ContentStream先将正在迭代和更改的 分配给页面,然后再将其传递给PdfFileWriter

page[NameObject('/Contents')] = content
writer.addPage(page)
Run Code Online (Sandbox Code Playgroud)

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