我正在使用Itext创建一个pdf,我无法取消选中该复选框。这是我的代码:
RadioCheckField bt = new RadioCheckField(writer, new Rectangle(300, 300, 400, 400),
"check1", "Yes");
bt.setCheckType(RadioCheckField.TYPE_CHECK);
bt.setBorderWidth(BaseField.BORDER_WIDTH_THICK);
bt.setBorderColor(BaseColor.BLACK);
bt.setBackgroundColor(BaseColor.WHITE);
bt.setChecked(false);
PdfFormField ck = bt.getCheckField();
writer.addAnnotation(ck);
您可以看到bt.setChecked(false)
在代码中,但仍然会选中复选框。我查看了文档,在我看来它应该以这种方式工作。我不明白什么?
答案 0 :(得分:0)
首先:
关于你的问题,我在这里回答:http://article.gmane.org/gmane.comp.java.lib.itext.general/65407
底线:我根据您的代码制作了Short, Self Contained, Correct (Compilable), Example并执行了它。我无法重现您报告的问题。也许没有问题。也许在以前版本的iText中存在问题,现在已经修复了。
我还读到您将代码的文本颜色设置为白色。我不明白:那没有意义!您的PDF将具有交互式字段,但人们永远无法看到它是否已经过检查......
如果你不在乎,如果你想要的只是显示一个复选框,那么使用交互式字段是过度的。您应该使用复选框字符,例如来自ZapfDingbats字体。
如果您使用的是iTPL的AGPL版本,请告诉我我可以找到您的代码的URL(如您所知,AGPL要求使用AGPL软件的代码也作为AGPL分发)。
答案 1 :(得分:0)
尝试以下方式,对我而言,它正在发挥作用:
public void addRadioGroup() throws Exception{
if(!this.doc.isOpen()){
this.doc.open();
}
PdfFormField radioGroup = PdfFormField.createRadioButton(this.writer, false);
radioGroup.setFieldName("numbers");
for(int i=0;i<3;i++){
Rectangle rect = new Rectangle(130+(40*i), 430, 160+(40*i), 455);
this.addRadioButtonKid(radioGroup, rect,String.valueOf(i));
}
this.writer.addAnnotation(radioGroup);
}
private void addRadioButtonKid(PdfFormField radio, Rectangle rect, String onValue) throws Exception{
RadioCheckField bt = new RadioCheckField(this.writer, rect, null, onValue);
bt.setBorderWidth(BaseField.BORDER_WIDTH_THICK);
bt.setBorderColor(Color.BLACK);
bt.setBackgroundColor(Color.WHITE);
bt.setCheckType(RadioCheckField.TYPE_CROSS);
bt.setChecked(false);
PdfFormField ck = bt.getCheckField();
ck.setPlaceInPage(1);
radio.addKid(ck);
}
我遇到的唯一问题是默认的“检查样式”没有改变。用户在2011年在mailinglist上报告了此问题。如果您需要自己的其他样式补丁iText或使用Mark描述的解决方法。
更新:2年后他们似乎已经解决了最新问题iText version 5.4.3(cp.MichaëlDemey的变化)
答案 2 :(得分:-1)
尝试使用复选框而不是单选按钮,因为您只有一个