我正在尝试通过 Flask 向我的用户提供动态 PDF。他们填写表格以获得一些计算结果,但他们希望将值自动填充到 PDF 模板中,然后将其打印在纸上。
我让它在本地工作,只是将值填充到 PDF 模板中,但我不知道如何将它工作到我的 Flask 应用程序中。我在本地得到的是一个模板 PDF 文件、一个包含值的字典、一个将值填充到模板并将其写入新 PDF 文件的函数。当你用 Flask 托管它时,我希望它动态地为他们提供由函数创建的新 PDF,而不是将其写入文件。
我正在使用 pdfrw 库进行 pdf 修改,我意识到我可能需要使用 make_reponse 或 IO 或组合。只是不知道如何从 pdfrw 获取结果而不是文件。或者从哪里开始。
这是功能:
import os
import pdfrw
data_dict = #just a plain dict corresponding with the temp.pdf keys
PDF_TEMPLATE_PATH = 'temp.pdf'
PDF_OUT_PATH = 'out.pdf'
ANNOT_KEY = '/Annots'
ANNOT_FIELD_KEY = '/T'
ANNOT_VAL_KEY = '/V'
ANNOT_RECT_KEY = '/Rect'
SUBTYPE_KEY = '/Subtype'
WIDGET_SUBTYPE_KEY = '/Widget'
def write_fillable_pdf(input_pdf_path, output_pdf_path, data_dict):
template_pdf = pdfrw.PdfReader(input_pdf_path)
annotations = template_pdf.pages[0][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():
annotation.update(
pdfrw.PdfDict(V='{}'.format(data_dict[key]))
)
pdfrw.PdfWriter().write(output_pdf_path, template_pdf)
if __name__ == '__main__':
write_fillable_pdf(PDF_TEMPLATE_PATH, PDF_OUT_PATH, data_dict)
所以我想,我怎么得到这条线
pdfrw.PdfWriter().write(output_pdf_path, template_pdf)
能够与例如服务。make_reponse 或 IO 或可能?当我让它工作时,我将为此在烧瓶中的 /pdf 路线上制作一个按钮-href。
对不起,我对此很陌生,试图满足我的用户的愿望。
感谢您的任何指导或指导。