在此PDF文件PDF File LINK
上我有一个看起来像这样的字段
通过获取表单字段列表,我得到了名称,我认为该字段的名称是VrPr4
。现在,当我尝试用某个值填充该字段时。示例想要像这样检查第一个框
pdfFormFields.SetField("VrPr4", "1")
'pdfFormFields.SetField("VrPr4", "Yes")
'pdfFormFields.SetField("VrPr4", "ON")
这不是我想要的输出。我需要这样的输出
答案 0 :(得分:2)
这里有多个问题,一些在您的代码中,一些在PDF中:
VrPr4
你试过
pdfFormFields.SetField("VrPr4", "1")
'pdfFormFields.SetField("VrPr4", "Yes")
'pdfFormFields.SetField("VrPr4", "ON")
并且这些都没有导致任何字段可视化显示标记。原因是这些值“1”,“是”和“ON”都不是该字段的有效选择。您可以使用AcroFields
方法GetAppearanceStates
:
pdfFormFields.GetAppearanceStates("VrPr4")
它返回一系列可用外观的名称,因此,您可以使用字段的允许值:
/** Gets the list of appearance names. Use it to get the names allowed
* with radio and checkbox fields. If the /Opt key exists the values will
* also be included. The name 'Off' may also be valid
* even if not returned in the list.
*
* For Comboboxes it will return an array of display values. To extract the
* export values of a Combobox, please refer to {@link AcroFields#getListOptionExport(String)}
*
* @param fieldName the fully qualified field name
* @return the list of names or <CODE>null</CODE> if the field does not exist
*/
virtual public String[] GetAppearanceStates(String fieldName)
如果是您的字段,则返回[No, Off, 0]
。
使用
pdfFormFields.SetField("VrPr4", "No")
一个得到
这还不是你想要的,但至少选择已经可见了。
有问题的PDF是一个所谓的启用Reader的文档。这意味着它使用Adobe的私钥使用使用权签名进行签名。此外,它包含JavaScript更改表单字段外观。
如果对于这样的文档,您使签名无效,则可能从根本上改变文档的反应和出现的方式。
不使该签名无效的第一步是使用追加模式中的PdfStamper
;在此模式下,原始PDF将按原样复制(因此签名仍然正确地标记其字节范围),并且更改将作为“增量更新”附加。
如果您的文档使用追加模式(使用四参数PdfStamper
构造函数并将布尔第四参数设置为true
)并打开结果Adobe Reader,一个得到: