Spaces:
Running
Running
import pdfrw | |
import io | |
import base64 | |
ANNOT_KEY = '/Annots' | |
ANNOT_FIELD_KEY = '/T' | |
ANNOT_RECT_KEY = '/Rect' | |
SUBTYPE_KEY = '/Subtype' | |
WIDGET_SUBTYPE_KEY = '/Widget' | |
def write_fillable_pdf(input_pdf_path, output_pdf_path, data_dict): | |
"""填写pdf模板并输出新的pdf""" | |
template_pdf = pdfrw.PdfReader(input_pdf_path) | |
pdf_pages = len(template_pdf.pages) | |
template_pdf.Root.AcroForm.update(pdfrw.PdfDict(NeedAppearances=pdfrw.PdfObject('true'))) | |
for pagenum in range(pdf_pages): | |
annotations = template_pdf.pages[pagenum][ANNOT_KEY] | |
if annotations is None: | |
continue | |
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(): | |
annotation.update( | |
pdfrw.PdfDict(V='{}'.format(data_dict[key])) | |
) | |
pdf_stream = io.BytesIO() | |
pdfrw.PdfWriter().write(pdf_stream, template_pdf) | |
base64.b64encode(pdf_stream.getvalue()) | |
data_dict = { | |
'name': '宋有哲', | |
"conference": "世界教育者大会" | |
} | |
INVOICE_TEMPLATE_PATH = "src/assets/GuestPage.pdf" | |
INVOICE_OUTPUT_PATH = 'output/output.pdf' | |
if __name__ == '__main__': | |
write_fillable_pdf(INVOICE_TEMPLATE_PATH, INVOICE_OUTPUT_PATH, data_dict) | |