始终选中Itext复选框

时间:2013-08-03 14:46:56

标签: java checkbox itext

我正在使用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)在代码中,但仍然会选中复选框。我查看了文档,在我看来它应该以这种方式工作。我不明白什么?

3 个答案:

答案 0 :(得分:0)

首先:

  • 您在Nabble上发布了相同的问题,这不是iText认可的网站。有关详细信息,请参阅http://lowagie.com/nabble
  • 由于您没有订阅官方邮件列表,我不得不手动批准您的问题。现在我看到你在这里发布了同样的问题。交叉发布通常不会在社区中受到赞赏。

关于你的问题,我在这里回答: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)

尝试使用复选框而不是单选按钮,因为您只有一个