我正在使用iText来分析pdf表单,并允许用户更改现场字段和其他现有字段 . 我可以通过在AcroFields上调用getAppearanceStates(fieldname)来显示复选框的可能值 . 但我找不到改变外观状态的方法 .
有没有人做过这个或知道怎么做?
例如:我有一个名为“复选框”的复选框字段,外观状态为“是” . 我希望它“开启” .
acroFields.setField("checkbox", "on", "on")
没有影响,设置属性似乎也不正确 .
我是否正确理解您想要设置出口状态?外观状态对应于/ 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"));
我能用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 .
希望它也可以帮助别人 .
2 回答
我是否正确理解您想要设置出口状态?外观状态对应于/ AS键,其值为/ Off或/ Yes . 您使用的值必须与您为自己定义的外观词典对应,而您可以省略/ Off外观 . / Off外观的名称已修复,但您可以(至少最多为PDF 1.7)定义您自己的/ On(或/ Yes)外观...
使用iText设置外观状态:
我能用PdfDictionary解决它 . 我的解决方案如下:
我不太确定引用referenceOnAppearanceState后面隐藏了什么,但我不想更改它,我只是想要更改用于设置复选框的文本,所以我删除了它并添加了另一个PdfName .
希望它也可以帮助别人 .