You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

使用PyPDF填充PDF可编辑字段后内容在Adobe Acrobat中不显示的问题

使用PyPDF填充PDF可编辑字段后内容在Adobe Acrobat中不显示的问题

我之前也碰到过一模一样的问题!这大概率是因为PyPDF处理表单字段的逻辑和Adobe Acrobat的渲染要求不匹配,尤其是你代码里用的_flatten()这个私有方法,它的行为并不稳定,很可能破坏了表单字段的外观关联——虽然字段值确实已经写入了(所以Google Drive能识别),但Adobe读不到用来渲染内容的外观流。

给你几个可行的解决方案,按优先级尝试:

1. 开启字段外观生成参数

update_page_form_field_values方法其实有个appearances参数,默认是关闭的。开启它会自动生成字段的外观流,这正是Adobe Acrobat需要用来渲染内容的关键。修改后的代码如下:

from PyPDF2 import PdfReader, PdfWriter

reader = PdfReader(rdp_modelo)
writer = PdfWriter()

for page in reader.pages:
    writer.add_page(page)

# 关键:添加appearances=True参数,生成字段外观
writer.update_page_form_field_values(
    writer.pages[0],
    dados_RDP,
    appearances=True
)

output_pdf_path = "rdp_preenchido.pdf"
with open(output_pdf_path, "wb") as output_pdf:
    writer.write(output_pdf)

记得去掉之前的writer._flatten()调用,私有方法尽量别碰,官方也不保证其兼容性。

2. 更新PyPDF到最新版本

旧版本的PyPDF在表单处理上有不少bug,先确保你用的是最新版:

pip install --upgrade PyPDF2

3. 换用更兼容的库(比如PyMuPDF)

如果上面的方法还是不行,试试PyMuPDF(fitz),它对PDF表单的处理更贴合Adobe的标准,兼容性更好。示例代码:

import fitz

# 打开PDF
doc = fitz.open(rdp_modelo)
page = doc[0]

# 遍历所有表单字段,匹配并填充值
for widget in page.widgets():
    if widget.field_name in dados_RDP:
        widget.field_value = dados_RDP[widget.field_name]
        widget.update()  # 强制更新字段外观

# 保存文件
doc.save("rdp_preenchido.pdf")
doc.close()

这个方法几乎能解决绝大多数Adobe不显示填充内容的问题,我自己遇到顽固表单的时候就用它。

备注:内容来源于stack exchange,提问作者João Weiss

火山引擎 最新活动