0

我有一个可填写的 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!!!
4

0 回答 0