Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用python pdfrw库编辑复选框并在可编辑pdf中保存更改?_Python_Python 3.x_Pdf_Checkbox_Pdfrw - Fatal编程技术网

如何使用python pdfrw库编辑复选框并在可编辑pdf中保存更改?

如何使用python pdfrw库编辑复选框并在可编辑pdf中保存更改?,python,python-3.x,pdf,checkbox,pdfrw,Python,Python 3.x,Pdf,Checkbox,Pdfrw,我正在尝试根据用户输入编辑可编辑pdf上的复选框。我可以使用pdfrw编辑文本字段,如下所示: #/usr/bin/python 导入操作系统 导入pdfrw 发票模板路径='INVOICE\u TEMPLATE.pdf' 发票\输出\路径='INVOICE.pdf' 注释键='/Annots' ANNOT_字段_键='/T' ANNOT_VAL_KEY='/V' ANNOT_RECT_KEY='/RECT' SUBTYPE_KEY='/SUBTYPE' 小部件\子类型\密钥='/WIDGET

我正在尝试根据用户输入编辑可编辑pdf上的复选框。我可以使用pdfrw编辑文本字段,如下所示:

#/usr/bin/python
导入操作系统
导入pdfrw
发票模板路径='INVOICE\u TEMPLATE.pdf'
发票\输出\路径='INVOICE.pdf'
注释键='/Annots'
ANNOT_字段_键='/T'
ANNOT_VAL_KEY='/V'
ANNOT_RECT_KEY='/RECT'
SUBTYPE_KEY='/SUBTYPE'
小部件\子类型\密钥='/WIDGET'
def写入可填充pdf(输入路径、输出路径、数据目录):
模板pdf=pdfrw.PdfReader(输入路径)
annotations=template\u pdf.pages[0][Annoto\u KEY]
对于注释中的注释:
如果注释[子类型\u键]==小部件\u子类型\u键:
如果注释[注释字段\键]:
key=注释[ANNOT\u FIELD\u key][1:-1]
如果输入数据目录键():
annotation.update(
pdfrw.PdfDict(AP=data_dict[key],V=data_dict[key])
)
pdfrw.PdfWriter().write(输出\ pdf \路径,模板\ pdf)
数据记录={
“业务名称1”:“博斯塔塔”,
“客户名称”:“company.io”,
“客户电子邮件”:joe@company.io',
“发票编号”:“102394”,
“发送日期”:“2018-02-13”,
‘到期日’:‘2018-03-13’,
“注意内容”:“谢谢你的业务,乔”,
“第1项”:“数据咨询服务”,
“项目1数量”:“10小时”,
“项目1价格”:“200美元/小时”,
“第1项金额”:“2000美元”,
“小计”:“2000美元”,
“税”:“0”,
“折扣”:“0”,
‘总数’:‘2000元’,
“业务名称2”:“博斯塔塔有限责任公司”,
“业务电子邮件地址”:hi@bostata.com',
‘商业电话号码’:‘(617)930-4294’
}
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
写入可填充的pdf(发票模板路径、发票输出路径、数据目录)

复选框为按钮类型(见参考手册表220)

此外,请参见“12.7.4.2.3复选框”一章

因此,应设置字段“外观流”
(/AS)
和“值”
(/V)

(更多信息,请参见“12.5.5外观流”章节。)

字段
/AS
需要设置为
pdfrw.PdfName

最后,Acroform字段
needAppearancess
可以设置为true,因此默认情况下所有字段都可见(参考手册表218)

完整代码:

导入操作系统
导入pdfrw
发票模板路径='INVOICE\u TEMPLATE.pdf'
发票输出路径='INVOICE\u OUTPUT.pdf'
ANNOT_KEY='/Annots'#页面内所有批注的键
ANNOT_FIELD_KEY='/T'#字段名称。i、 e.给定字段的ID
ANNOT_FORM_type='/FT'#表单类型(例如文本/按钮)
ANNOT_FORM_button='/Btn'#按钮ID,即复选框
文本框的ANNOT_FORM_text='/Tx'#ID
SUBTYPE_KEY='/SUBTYPE'
小部件\子类型\密钥='/WIDGET'
def写入可填充pdf(输入路径、输出路径、数据目录):
模板pdf=pdfrw.PdfReader(输入路径)
对于模板_pdf.pages中的页面:
如果页面[注释键]:
对于第[ANNOT_KEY]页中的注释:
如果注释[ANNOT_字段_键]和注释[SUBTYPE_键]==小部件_SUBTYPE_键:
key=注释[ANNOT_FIELD_key][1:-1]#删除括号
如果输入数据目录键():
如果注释[ANNOT\u FORM\u type]==ANNOT\u FORM\u按钮:
#按钮字段,即复选框
annotation.update(pdfrw.PdfDict(V=pdfrw.PdfName(data_dict[key]),AS=pdfrw.PdfName(data_dict[key]))
elif注释[ANNOT\u FORM\u type]==ANNOT\u FORM\u文本:
#常规文本字段
annotation.update(pdfrw.PdfDict(V=data\u dict[key],AP=data\u dict[key]))
template_pdf.Root.AcroForm.update(pdfrw.PdfDict(needAppearancess=pdfrw.PdfObject('true'))
pdfrw.PdfWriter().write(输出\ pdf \路径,模板\ pdf)
数据记录={
“第1项金额”:“123”,
'复选框1':'是',
'复选框2':'关闭'}
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
写入可填充pdf(发票模板路径、发票输出路径、数据目录)