添加以下AcroForm选项时遇到以下问题template_pdf.Root.AcroForm.update(pdfrw.PdfDict(NeedAppearances=pdfrw.PdfObject('true')))
文本将在表单上正常显示,但不显示复选标记,下图显示了一个示例。
但是,如果我取出选项本身,复选标记会显示完全正常,但文本不会。
下图是一个例子
我理解这是完全正常的,因为NeedAppearances
需要启用以在文本框中显示文本。但我不明白为什么该选项会改变复选框的可见性。
编码
import pdfrw
from datetime import date
TEMPLATE_PATH = 'sample-form.pdf'
OUTPUT_PATH = 'starter_form.pdf'
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)
template_pdf.Root.AcroForm.update(pdfrw.PdfDict(NeedAppearances=pdfrw.PdfObject('true')))
for page in template_pdf.pages:
annotations = page[ANNOT_KEY]
for annotation in annotations:
if annotation[SUBTYPE_KEY] == WIDGET_SUBTYPE_KEY:
if annotation[ANNOT_FIELD_KEY]:
key = annotation[ANNOT_FIELD_KEY][1:-1]
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)
def fill_starter_checklist(data):
today = date.today()
data_dict = {
'field_nrt': data['nrt_persona'],
'field_raoSocial': data['rao_social'],
'check_periodeLiquidacioJuliol': True if data['question_9'] == True else False,
'0': data['numZero'],
}
return fill_pdf(TEMPLATE_PATH, OUTPUT_PATH, data_dict)
starter_checklist = {
'nrt_persona': 'This is NRT',
'rao_social': 'TestString',
'question_9': True,
'numZero':'2',
}
if __name__ == '__main__':
fill_starter_checklist(starter_checklist)
如果您想下载表格,可以从以下链接下载政府表格
您必须单击 IGI 选项卡,然后单击表格910的PDF 图标。