0

添加以下AcroForm选项时遇到以下问题template_pdf.Root.AcroForm.update(pdfrw.PdfDict(NeedAppearances=pdfrw.PdfObject('true')))

文本将在表单上正常显示,但不显示复选标记,下图显示了一个示例。 NeedAppearance 设置为 true 的表单结果的图像

但是,如果我取出选项本身,复选标记会显示完全正常,但文本不会。

下图是一个例子

我理解这是完全正常的,因为NeedAppearances需要启用以在文本框中显示文本。但我不明白为什么该选项会改变复选框的可见性。

我个人认为这与 PDF 表单的格式有关,但我不确定。 不带选项的表单结果图像

编码

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 图标

政府表格页面

4

0 回答 0