我正在使用iText分析pdf表单,并允许用户更改现场字段和其他字段。 我可以通过在AcroFields上调用getAppearanceStates(fieldname)来显示复选框的可能值。但我找不到改变外观状态的方法。
有没有人这样做过或者知道怎么做?
例如:我有一个名为“复选框”的复选框字段,外观状态为“是”。我希望它“开启”。
acroFields.setField("checkbox", "on", "on")
没有影响,设置属性似乎也不正确。
答案 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 。
希望它也可以帮助别人。