我有一个可填写的 PDF,我正在尝试根据用户的选择预先填写一些动态信息。在表单中,需要检查一个字段才能使地址部分可以填写。
使用 PDFRW,我可以直观地选择复选框,但它不会触发使这些字段可写的复选框的“单击”。有没有办法使用pdfrw触发点击?
如果我单击呈现的 PDF 上的复选框,它会显示地址字段(并用正确的数据填写)但如果我不单击复选框,这些字段将显示为空并且没有可填充的框。
[![勾选但未启用][1]][1] [![手动点击后启用][2]][2]
这是我用来创建复选框的代码(当 export=/2 时,这是需要触发的复选框的导出值):
template_pdf = pdfrw.PdfReader(input_pdf_path)
for page in template_pdf.pages:
annotations = page[ANNOT_KEY]
for annotation in annotations:
if annotation['/Subtype'] == '/Widget':
parent = False
if not annotation['/T']:
parent = True
annotation = annotation['/Parent']
if annotation['/T']:
key = annotation['/T'].to_unicode()
print (key)
if key:
print(key)
if key in data_dict.keys():
if type(data_dict[key]) == bool:
value = 2
for each in annotation['/Kids']:
# determine the export value of each kid
keys = each['/AP']['/N'].keys()
print(each)
export = keys[0]
if export == '/2':
val_str = pdfrw.objects.pdfname.BasePdfName(export)
else:
val_str = pdfrw.objects.pdfname.BasePdfName('/Off')
each.update(pdfrw.PdfDict(AS=val_str))
annotation.update(pdfrw.PdfDict(AS=pdfrw.PdfName('On')))
else:
annotation.update(
pdfrw.PdfDict(V='{}'.format(data_dict[key]))
)
annotation.update(pdfrw.PdfDict(AP=''))
template_pdf.Root.AcroForm.update(pdfrw.PdfDict(NeedAppearances=pdfrw.PdfObject('true')))
pdfrw.PdfWriter().write(output_pdf_path, template_pdf)```
[1]: https://i.stack.imgur.com/DZ5OE.png
[2]: https://i.stack.imgur.com/uXCyt.png
Thanks!!!