感谢您阅读并可能提供帮助。
我阅读了 PDFrw PYthon 库并应用了几种解决方案来帮助我前进。不幸的是,我无法从所有页面中检索所有字段。
我想检索字段值以映射我的 data_dict,此数据是从 Excel 电子表格中获取的。以下代码输出即以下内容:
如您所见,它跳过了前两页,而肯定有表单字段!
我想阅读的 PDF 可以在这里找到。它来自荷兰政府,所以不用担心!https://download.belastingdienst.nl/belastingdienst/docs/verzoek_2021_lh_premie_volksverzeker_toepas_30_procent_regel_lh5981z11fol.pdf
printed in console:
在第 1 页上工作
在第 2 页上工作
工作在第 3 页
printing the value; (Begindatum woonperiode 1. Dag, 2 cijfers.)
printing key-value; d_C
printing the value; (Maand, 2 cijfers.)
这里是实际代码:
import os, sys, re
import pdfrw
folder_path = os.getcwd().replace('\\', '/') + '/output.pdf'
input_pdf_path = 'formulier.pdf'
data_dict = {}
ANNOT_KEY = '/Annots'
ANNOT_FIELD_KEY = '/T'
ANNOT_VAL_KEY = '/V'
ANNOT_RECT_KEY = '/Rect'
SUBTYPE_KEY = '/Subtype'
WIDGET_SUBTYPE_KEY = '/Widget'
def fill_pdf(input_pdf_path, output_pdf_path, data_dict):
template_pdf = pdfrw.PdfReader(input_pdf_path)
for x in template_pdf.Root.AcroForm:
print(f'element of acroform {x}')
c = 1
for page in template_pdf.pages:
print(f'{chr(10)} working on page {c}')
c += 1
annotations = page[ANNOT_KEY]
for annotation in annotations:
if annotation['/TU']:
value = annotation['/TU']
print(f'printing the value; {value}')
if annotation[SUBTYPE_KEY] == WIDGET_SUBTYPE_KEY:
if annotation[ANNOT_FIELD_KEY]:
key = annotation[ANNOT_FIELD_KEY][1:-1]
print(f'printing key-value; {key} ')
if key in data_dict.keys():
if type(data_dict[key]) == bool:
if data_dict[key] == True:
annotation.update(pdfrw.PdfDict(
AS=pdfrw.PdfName('Yes')))
else:
annotation.update(
pdfrw.PdfDict(V='{}'.format(data_dict[key]))
)
annotation.update(pdfrw.PdfDict(AP=''))
pdfrw.PdfWriter().write(output_pdf_path, template_pdf)
fill_pdf(input_pdf_path, folder_path, data_dict)