0

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

4

3 回答 3

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 年就在 2011 年的邮件列表中报告了这个问题。如果您需要其他样式的补丁 iText,或者使用 Mark 描述的解决方法。

更新: 2 年后,他们似乎在最新的iText 版本 5.4.3中解决了这个问题(cp。Michaël Demey 的变化)

于 2013-08-05T11:23:53.810 回答
0

首先这个:

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

至于你的问题,我已经在这里回答了:http: //article.gmane.org/gmane.comp.java.lib.itext.general/65407

底线:我根据您的代码制作了一个简短、自包含、正确(可编译)的示例,并执行了它。我无法重现您报告的问题。也许没有问题。也许以前版本的 iText 中存在问题,现已修复。

我还读到您在发送代码时将文本颜色设置为白色。我不明白:这没有意义!您的 PDF 将有一个交互式字段,但人们将永远无法看到它是否已被选中...

如果您不在乎,如果您只想显示一个复选框,那么使用交互式字段就过分了。您应该使用复选框字符,例如来自 ZapfDingbats 字体。

如果您使用的是 iText 的 AGPL 版本,请告诉我可以找到您的代码的 URL(如您所知,AGPL 要求使用 AGPL 软件的代码也以 AGPL 的形式分发)。

于 2013-08-04T10:31:01.843 回答
-1

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

于 2013-08-03T15:33:13.533 回答