【问题标题】:I tried To fill a pdf form by python but it's not workin我尝试通过 python 填写 pdf 表单,但它不工作
【发布时间】:2021-05-24 23:25:21
【问题描述】:

所以我尝试在 python 中使用 Sqlite 数据库填写 pdf 表单,但没有发生任何事情,输出文件为空。 这是我的代码(如果我确实写了不正确的东西或遗漏了一些东西,请不要犹豫谈论它):

import pdfrw
import sqlite3


pdf_template = "Fiche.pdf"
pdf_output = "FinaleFiche.pdf"

template_pdf = pdfrw.PdfReader(pdf_template)

ANNOT_KEY = '/Annots'
ANNOT_FIELD_KEY = '/T'
ANNOT_VAL_KEY = '/v'
ANNOT_RECT_KEY = '/Rect'
SUBTYPE_KEY = '/Subtype'
WIDGET_SUBTYPE_KEY = '/Widget'

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]

conn = sqlite3.connect('user_data.db')
cur = conn.cursor()
cur.execute('SELECT * FROM My_choice')
data = [item[0:6]for item in cur.fetchall()]
print(data)
conn.close()

def fill_pdf (input_pdf_path , output_pdf_path, data):
    template_pdf = pdfrw.PdfReader(input_pdf_path)
    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]
    template_pdf.Root.AcroForm.update(pdfrw.PdfDict(NeedAppearances=pdfrw.PdfObject("true")))
    pdfrw.PdfWriter().write(output_pdf_path,template_pdf)
fill_pdf(pdf_template,pdf_output,data)

【问题讨论】:

    标签: python sqlite pdfrw


    【解决方案1】:

    我看到您需要更新pdf中的数据:

    if key in data.keys():
        annotation.update(pdfrw.PdfDict(V='{}'.format(data[key])))
    

    您必须在此行之后添加代码以包含新数据:

    key = annotation[ANNOT_FIELD_KEY][1:-1]
    

    【讨论】:

      猜你喜欢
      • 2018-12-04
      • 2021-03-10
      • 2019-05-08
      • 1970-01-01
      • 1970-01-01
      • 2022-01-20
      • 2019-11-30
      • 2011-12-15
      • 2020-12-22
      相关资源
      最近更新 更多