为什么iText form.getAppearanceStates(key)方法为Check Box字段返回不一致的值?

时间:2018-01-12 02:08:28

标签: java itext acrofields

我的PDF是使用Adobe Acrobat Standard DC创建的acroForm。

我使用Java iText 5填充了Chekcbox字段。 我不明白为什么,恕我直言,form.getAppearanceStates(key)方法返回此字段的不一致值。

String[] states = form.getAppearanceStates(key); 

为什么我发现它们不一致,因为值是: ["关闭","是"]

这些是默认值吗?每个表单创建软件都有不同的默认值吗?我为什么要问这个问题,因为我的软件可以用于以多种不同方式创建的文档。我试图在我的代码中解决所有情况。

我知道我可以在此字段的选项中更改导出值,但默认情况下将始终为"是"?并且默认未选中的值将始终为"关"?

恕我直言中的一致价值如下: [" On"," Off"] 要么 ["是","否"]

1 个答案:

答案 0 :(得分:1)

这种“不一致”基于PDF格式,规范强制将未经检查的状态命名为,同时可以自由选择已检查状态的名称,并在示例中使用作为已检查状态的名称:

  

关闭状态的外观是可选的,但如果存在,则应以关闭的名称存储在外观字典中。

     

...

     

示例1此示例显示了典型的复选框定义。

1 0 obj
<</Type /Annot
/Subtype /Widget
/Rect [100 100 120 120]
/FT /Btn
/T (Urgent)
/V /Yes
/AS /Yes
/AP <</N <</Yes 2 0 R /Off 3 0 R>>
>>
endobj

(ISO 32000-2:2017,第12.7.5.2.3节“复选框”)

关于你的问题,因此:

  

这些是默认值吗?每个表单创建软件都有不同的默认值吗?

一个复选框状态始终为关闭,可以自由选择已选中状态的名称,但可能会有许多表单将遵循上面的示例并使用。因此,期望经常找到,但随时准备处理任何事情。