python下的pdf操作,pypdf2为不二之选,除了...这个:
用这段代码(网上一把把的)来填充pdf中的form field,表单域
# -*- coding: UTF-8 -*- from PyPDF2 import PdfFileWriter, PdfFileReader infile = "mb2.pdf" outfile = "c.pdf" pdf = PdfFileReader(open(infile, "rb"), strict=False) pdf2 = PdfFileWriter() field_dictionary = {'idnumber':'11ddas111','now_year':'2018-2-1','name':'好的'} pdf2.addPage(pdf.getPage(0)) pdf2.updatePageFormFieldValues(pdf2.getPage(0), field_dictionary) outputStream = open(outfile, "wb") pdf2.write(outputStream)
结果产生的pdf,用acrobat reader打开时不显示表单域的内容,只有在鼠标点击后才能显示,失去焦点后再次消失,只有重新copy paste之后才能显示:
当鼠标点击后会显示:
网上遇到类似情况的也不少:
https://stackoverflow.com/questions/47369740/pypdf2-appends-the-same-file-over-and-over 修改fields 提及,pypdf2 表单域不能在acrobat reader中显示,,不能填充cb和rb:
PyPdf2 seems to be the best option despite all the bugs python packages have for pdfs such as fields not showing in acroreader and being unable to fill checkboxes or radio buttons.
There does appear to be a bug (with pdfs generally? maybe) where the pdf file is not redrawn. If one clicks on the field one can see the new text that PyPDF2 entered however one then has to manually copy and paste in order to see that change permanently.
最终在这个issue里找到了解决方案:
https://github.com/mstamy2/PyPDF2/issues/355
and thanks this great guy (https://github.com/ademidun) 给出了参考:
Okay, I think I have figured it out. If you read section 12.7.2 (page 431) of the PDF 1.7 specification, you will see that you need to set the NeedAppearances flag of the Acroform.
ok,我们不生产代码,只做代码的搬运工:D
如下是解决方案:
# -*- coding: UTF-8 -*- from PyPDF2 import PdfFileWriter, PdfFileReader from PyPDF2.generic import BooleanObject, NameObject, IndirectObject def set_need_appearances_writer(writer): # See 12.7.2 and 7.7.2 for more information: http://www.adobe.com/content/dam/acom/en/devnet/acrobat/pdfs/PDF32000_2008.pdf try: catalog = writer._root_object # get the AcroForm tree 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) return writer except Exception as e: print('set_need_appearances_writer() catch : ', repr(e)) return writer infile = "mb2.pdf" outfile = "c.pdf" pdf = PdfFileReader(open(infile, "rb"), strict=False) if "/AcroForm" in pdf.trailer["/Root"]: pdf.trailer["/Root"]["/AcroForm"].update( {NameObject("/NeedAppearances"): BooleanObject(True)}) pdf2 = PdfFileWriter() set_need_appearances_writer(pdf2) if "/AcroForm" in pdf2._root_object: pdf2._root_object["/AcroForm"].update( {NameObject("/NeedAppearances"): BooleanObject(True)}) field_dictionary = {'idnumber':'11ddas111','now_year':'2018-2-1','name':'好的'} pdf2.addPage(pdf.getPage(0)) pdf2.updatePageFormFieldValues(pdf2.getPage(0), field_dictionary) outputStream = open(outfile, "wb") pdf2.write(outputStream)
相关推荐
2. **填充表单域** 填充已创建的表单域通常包括以下步骤: - 为每个表单域设置文本,如`textBox.setText("刘兴")`,这适用于文本框 - 对于复选框和单选按钮,可以设置其状态,如`checkBoxField.setChecked(true)...
2. **解析JSON数据**:在成功获取数据后,`success`回调函数中的`data`参数就是JSON对象,我们可以解析它以获取需要的属性。 3. **遍历表单元素**:接下来,遍历HTML表单中的所有元素,通常使用`$('form').find('...
在网页设计中,表单(Form)是用户与网站交互的重要元素,用于收集用户输入的信息。"漂亮的form表单"这个主题关注的是如何创建既美观又功能强大的表单,以提高用户体验并提升网站的整体视觉效果。下面将详细介绍关于...
在这个例子中,`"fieldName1"`和`"fieldName2"`是PDF表单中的字段名称,你需要根据实际表单结构替换。`BaseFont.IDENTITY_H`参数用于告诉ITextSharp保持字符的原始宽度,这对于中文字符非常重要。 最后,需要注意的...
itextpdf 再创将pdf格式文件的时候中文不显示或者乱码问题的解决 其实目前最新版本的itexpdf即使加了asian的辅助包也不能解决中文不显示问题 因为自己试过 可能方式不对 这个绝对显示 显示不了的 分不要
【JavaBean与Web Form表单自动装配】是Web开发中常用的一种技术,特别是在使用像Struts2这样的MVC框架时,能够极大地简化数据绑定的过程。这个过程的核心是将用户在Web表单中填写的数据自动地映射到JavaBean对象的...
在网页开发中,表单(Form)是用户与网站交互的重要组成部分,用于收集用户输入的信息。原生JavaScript作为Web开发的基础,提供了丰富的API和方法来处理表单元素,如input和select。本主题将深入探讨如何使用原生...
解决办法是在form上或input上添加autoComplete=”off”这个属性。 form表单的属性如下所示: 但是这个解决方案在谷歌和火狐上均有bug,下面来一个一个解决。 1.’autocomplete=”off”‘在Chrome中不起作用解决方案 ...
**jQuery.formautofill 表单填充控件详解** 在Web开发中,处理表单数据的填充是一项常见的任务。为了提高开发效率和用户体验,开发者们经常寻找自动化解决方案,以简化表单字段的赋值过程。这里我们要介绍的是...
2. **PDF域填充**: PDF域填充是指在已有的PDF模板上填充数据,例如填写表单或证书。EasyPDFUtil支持这一功能,允许开发者传入一个包含键值对的Map对象,键代表PDF模板上的域名,值是填充的内容。调用相应方法后,...
Django Form允许自定义验证规则,通过在Form类中定义`clean_<field_name>`方法。这个方法会在所有字段验证通过后执行,可以用来检查更复杂或跨字段的验证逻辑。 4. **错误处理** 当表单数据未通过验证时,Django...
3. 创建填充对象:使用`PdfStamper`或`PdfCopyFields`类,这两个类都提供了填充表单域的功能。 4. 填充数据:通过`AcroFields`接口,你可以获取到PDF中的表单域,并设置其值。例如,`acroFields.setField("field...
`formfield_for_dbfield`函数正是这样一个工具,它允许我们在Django的Admin模型中自定义字段的表单字段。本实例将详细讲解如何利用`formfield_for_dbfield`实现过滤下拉表单的选择项。 首先,确保你的环境是Django ...
内含联系方式,不懂用可以问我!多次修改后已无瑕疵,用它实现当页面刷新的时候自动提交表单数据,目前我把它运用在领取某论坛每日登录礼包这种繁琐的小事中,你还可以运用到更有价值的地方去。
ASP.NET编程知识 - ASP.NET中实现Form表单字段值自动填充到操作模型中 ASP.NET是一个功能强大的Web应用程序开发框架,它提供了许多便捷的功能来提高开发效率和质量。在ASP.NET中,实现Form表单字段值自动填充到...
本篇文章将深入探讨如何使用C#实现POST方式提交Form表单,这对于网络应用程序的开发至关重要,因为它允许我们向服务器发送数据,比如登录、注册、提交表单等操作。 1. **HTTP POST方法**: HTTP协议提供了两种主要...
在VB(Visual Basic)编程环境中,我们可以利用图形绘制功能创建各种视觉效果,其中包括显示不同填充颜色及填充效果的圆。这个程序的目的是通过鼠标点击事件,动态地在窗体上生成具有不同填充颜色和填充样式的圆形,...
4. **填充表单**:通过`AcroFields.setField()`方法填充特定的表单字段,传入字段名和相应的值。 5. **保存修改**:创建一个`PdfStamper`对象,将修改应用到PDF上,并使用`PdfStamper.close()`方法保存更改。 **...
### 基于可行域的图案填充...综上所述,基于可行域的图案填充方法为解决复杂形状填充问题提供了一种有效的新途径。通过合理的数学建模和高效的填充策略,该方法不仅能够满足高性能的要求,还能适应广泛的填充应用场景。
### CAD VBA填充图案和面域坐标解析 #### 一、概述 在计算机辅助设计(CAD)领域,尤其是AutoCAD的应用中,对于图形元素的精确处理尤为重要。填充图案(AcDbHatch)和面域(AcDbRegion)是常见的CAD元素,它们常被...