You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Python(PyPDF2)填充PDF表单时无法选中复选框的问题求助

我在尝试自动填充以下PDF表单:Temporal.pdf,该文件可通过ilovepdf解密后操作。

目前我填充文本字段没有任何问题,但始终无法操作复选框字段:大量/Btn类型字段带有/Kids属性,这些子项均为IndirectObject类型的复选框对象;同时部分无/Kids属性的普通复选框我也无法选中/修改,相关示例如下。

实现代码

from PyPDF2 import PdfFileReader, PdfFileWriter
from PyPDF2.generic import BooleanObject, NameObject, IndirectObject
from collections import OrderedDict

def set_need_appearances_writer(writer: PdfFileWriter):
    # 相关规则参考PDF规范12.7.2、7.7.2章节
    try:
        catalog = writer._root_object
        # 获取AcroForm树节点
        if "/AcroForm" not in catalog:
            writer._root_object.update({
                NameObject("/AcroForm"): IndirectObject(len(writer._objects), 0, writer)
            })

        need_appearances = NameObject("/NeedAppearances")
        writer._root_object["/AcroForm"][need_appearances] = BooleanObject(True)
        return writer

    except Exception as e:
        print('set_need_appearances_writer() 捕获异常: ', repr(e))
        return writer

reader = PdfFileReader("TEMPORAL COMPLETO12 de mayo_unlocked.pdf")
writer = PdfFileWriter()

set_need_appearances_writer(writer)

page = reader.pages[0]

writer.addPage(page)

# Texto4字段填充正常,复选框填充无效
writer.updatePageFormFieldValues(
    writer.getPage(0), {'BOTON_TIPOJORNADA': '/1',
                        'BOTON_JORN': '/S',
                        'Texto4': 'Texto4'
                        }
)
with open("filled-out.pdf", "wb") as output_stream:
    writer.write(output_stream)
reader.stream.close()

我手动修改PDF复选框状态后读取字段,结果如下:

reader.getFields()

# 选中其中一个复选框时的输出
[...]

'BOTON_JORN': {'/FT': '/Btn',
  '/Kids': [IndirectObject(160, 0),
   IndirectObject(162, 0),
   IndirectObject(167, 0),
   IndirectObject(172, 0)],
  '/T': 'BOTON_JORN',
  '/Ff': 49152,
  '/V': '/S'},

# 选中另一个复选框时的输出
[...]

'BOTON_JORN': {'/FT': '/Btn',
  '/Kids': [IndirectObject(160, 0),
   IndirectObject(162, 0),
   IndirectObject(167, 0),
   IndirectObject(172, 0)],
  '/T': 'BOTON_JORN',
  '/Ff': 49152,
  '/V': '/D'},

另有一个无/Kids属性的普通复选框TEXTOCasilla de verificación25也无法选中/修改,该复选框选中时/V值为/S#ED,字段属性如下:

'TEXTOCasilla de verificación25': {'/FT': '/Btn',
  '/T': 'TEXTOCasilla de verificación25',
  '/V': '/S#ED'},

希望能得到相关解决方案建议。


内容的提问来源于stack exchange,提问作者Luisón

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.02 01:27:33