iText更改复选框外观状态

时间:2015-07-10 14:54:11

标签: pdf checkbox itext state appearance

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

有没有人这样做过或者知道怎么做?

例如:我有一个名为“复选框”的复选框字段,外观状态为“是”。我希望它“开启”。

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

没有影响,设置属性似乎也不正确。

2 个答案:

答案 0 :(得分:0)

我是否正确理解你想要设置出口状态?外观状态对应于/ AS键,其值为/ Off或/ Yes。您使用的值必须与您为自己定义的外观词典对应,而您可以省略/ 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"));

答案 1 :(得分:0)

我能用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

希望它也可以帮助别人。