栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

表单字段的Python Django PDF展平

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

表单字段的Python Django PDF展平

解决方案非常简单,有疑问时请阅读文档( 第552/978页 ):

https://www.adobe.com/content/dam/acom/en/devnet/pdf/pdfs/pdf_reference_archives/PDFReference.pdf

我要做的就是将字段标志的位位置更改为1,使字段变为ReadOnly,如下所示:

from io import BytesIOimport PyPDF2from django.http import HttpResponsefrom PyPDF2.generic import BooleanObject, NameObject, IndirectObject, NumberObjectdef pdf(request):    template = 'templates/template.pdf'    outfile = "templates/test.pdf"    input_stream = open(template, "rb")    pdf_reader = PyPDF2.PdfFileReader(input_stream, strict=False)    if "/AcroForm" in pdf_reader.trailer["/Root"]:        pdf_reader.trailer["/Root"]["/AcroForm"].update( {NameObject("/NeedAppearances"): BooleanObject(True)})    pdf_writer = PyPDF2.PdfFileWriter()    set_need_appearances_writer(pdf_writer)    if "/AcroForm" in pdf_writer._root_object:        # Acro form is form field, set needs appearances to fix printing issues        pdf_writer._root_object["/AcroForm"].update( {NameObject("/NeedAppearances"): BooleanObject(True)})    data_dict = {        'first_name': 'Johnn',        'last_name': 'Smithn',        'email': 'mail@mail.comn',        'phone': '889-998-9967n',        'company': 'Amazing Inc.n',        'job_title': 'Devn',        'street': '123 Main Wayn',        'city': 'Johannesburgn',        'state': 'New Mexicon',        'zip': 96705,        'country': 'USAn',        'topic': 'Who cares...n'    }    pdf_writer.addPage(pdf_reader.getPage(0))    page = pdf_writer.getPage(0)    pdf_writer.updatePageFormFieldValues(page, data_dict)    for j in range(0, len(page['/Annots'])):        writer_annot = page['/Annots'][j].getObject()        for field in data_dict: # -----------------------------------------------------BOOYAH! if writer_annot.get('/T') == field:     writer_annot.update({         NameObject("/Ff"): NumberObject(1)     })  # -----------------------------------------------------    output_stream = BytesIO()    pdf_writer.write(output_stream)    response = HttpResponse(output_stream.getvalue(), content_type='application/pdf')    response['Content-Disposition'] = 'inline; filename="completed.pdf"'    input_stream.close()    return responsedef set_need_appearances_writer(writer):    try:        catalog = writer._root_object        # get the AcroForm tree and add "/NeedAppearances attribute        if "/AcroForm" not in catalog: writer._root_object.update({     NameObject("/AcroForm"): IndirectObject(len(writer._objects), 0, writer)})        need_appearances = NameObject("/NeedAppearances")        writer._root_object["/AcroForm"][need_appearances] = BooleanObject(True)    except Exception as e:        print('set_need_appearances_writer() catch : ', repr(e))    return writer


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/637025.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号