iText 更改复选框外观状态

iText change a checkboxes appearance state

我正在使用 iText 分析 pdf 表单并允许用户更改现有字段的字段名和其他内容。 我可以通过在 AcroFields 上调用 getAppearanceStates(fieldname) 来显示复选框的可能值。但是我找不到改变外观状态的方法。

有没有人做过或知道怎么做?

例如:我有一个名称为 "checkbox" 的复选框字段,外观状态为 "yes"。我希望它是 "on".

acroFields.setField("checkbox", "on", "on")

没有影响,设置属性好像也不对。

我的理解是否正确,你想设置外观疼痛状态?外观状态对应于具有 /Off 或 /Yes 等值的 /AS 键。您使用的值必须与您为复选框定义的外观字典相对应,同时您可以省略 /Off 外观。 /Off 外观的名称是固定的,但您可以(至少达到 PDF 1.7)定义您自己的 /On(或 /Yes)外观...

使用 iText 设置外观状态:

Item item = acroFields.getFieldItem("checkbox");
PdfDictionary dict = item.getWidget(0);
dict.put(PdfName.AS, PdfName.Off);
//dict.put(PdfName.AS, new PdfName("Yes"));

我用 PdfDictionary 解决了这个问题。我的解决方案如下所示:

PdfDictionary appearanceDictionary = (PdfDictionary) acroFields.getFieldItem("checkbox").getWidget(0).get(PdfName.AP);
PdfDictionary appearanceStateDictionary = (PdfDictionary) appearanceDictionary.get(PdfName.N);
PdfName oldAppearanceState = new PdfName("yes);
PdfName newAppearanceState = new PdfName("on");

PdfObject referenceOnAppearanceState = appearanceStateDictionary.get(oldAppearanceState);
appearanceStateDictionary.remove(oldAppearanceState);
appearanceStateDictionary.put(newAppearanceState, referenceOnAppearanceState);

我不太确定参考 referenceOnAppearanceState 背后隐藏着什么,但我不想更改它,我只是想更改用于设置复选框已选中,所以我将其删除并添加了另一个 PdfName

希望它对其他人也有帮助。