带有值的itext填充复选框

时间:2017-03-15 20:02:28

标签: .net vb.net pdf uitextfield

在此PDF文件PDF File LINK

我有一个看起来像这样的字段

enter image description here

通过获取表单字段列表,我得到了名称,我认为该字段的名称是VrPr4。现在,当我尝试用某个值填充该字段时。示例想要像这样检查第一个框

     pdfFormFields.SetField("VrPr4", "1")
    'pdfFormFields.SetField("VrPr4", "Yes")
    'pdfFormFields.SetField("VrPr4", "ON")

Checkbox not checked

这不是我想要的输出。我需要这样的输出

enter image description here

1 个答案:

答案 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")

一个得到

Result of simple pdfFormFields.SetField("VrPr4", "No")

这还不是你想要的,但至少选择已经可见了。

使用JavaScript的“启用阅读器”文档

有问题的PDF是一个所谓的启用Reader的文档。这意味着它使用Adobe的私钥使用使用权签名进行签名。此外,它包含JavaScript更改表单字段外观。

如果对于这样的文档,您使签名无效,则可能从根本上改变文档的反应和出现的方式。

不使该签名无效的第一步是使用追加模式中的PdfStamper;在此模式下,原始PDF将按原样复制(因此签名仍然正确地标记其字节范围),并且更改将作为“增量更新”附加。

如果您的文档使用追加模式(使用四参数PdfStamper构造函数并将布尔第四参数设置为true)并打开结果Adobe Reader,一个得到:

Result of append-mode pdfFormFields.SetField("VrPr4", "No")