python给定一个pdf模版填充参数
所以 有以下三种方案 1 死磕pdfkit 替换了所有的文件和静态文件打印出来还是空白我tmd 该页面用的还是jsf技术保存的xml文件 emmmmmm。3.最直接的用selenuim打开静态文件生成pdf。pdfkit这个库太无语了 只支持标准的html打印。2 用工具生成一个pdf模版然后往下填充代码参数。需要根据不同的html生成pdf 但是由于。
·
需要根据不同的html生成pdf 但是由于pdfkit这个库太无语了 只支持标准的html打印
所以 有以下三种方案 1 死磕pdfkit 替换了所有的文件和静态文件打印出来还是空白我tmd 该页面用的还是jsf技术保存的xml文件 emmmmmm
2 用工具生成一个pdf模版然后往下填充代码参数
3.最直接的用selenuim打开静态文件生成pdf
#!/usr/bin/env python
# -*- coding:utf-8 -*-
#! /usr/bin/python
import io
import pdfrw
ANNOT_KEY = '/Annots'
ANNOT_FIELD_KEY = '/T'
ANNOT_RECT_KEY = '/Rect'
SUBTYPE_KEY = '/Subtype'
WIDGET_SUBTYPE_KEY = '/Widget'
INVOICE_TEMPLATE_PATH = r'/Users/kyz/Desktop/spiders/singapore_spider/test/33.pdf'
INVOICE_OUTPUT_PATH = r'/Users/kyz/Desktop/spiders/singapore_spider/test/21.pdf'
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():
print(key)
annotation.update( pdfrw.PdfDict(V='{}'.format(data_dict[key])))
annotation.update( pdfrw.PdfDict(V='{}'.format(data_dict[key]),Ff=1))
pdfrw.PdfWriter().write(output_pdf_path, template_pdf)
data_dict = {
'Name': 'WU NAN',
'RecNo': 'BEJ652619SA13452022',
'submitTime': '11/12/2022 11:42:47',
}
if __name__ == '__main__':
write_fillable_pdf(INVOICE_TEMPLATE_PATH,INVOICE_OUTPUT_PATH, data_dict)
更多推荐
所有评论(0)