【问题标题】:Itext checkbox is always checked始终选中 Itext 复选框
【发布时间】:2013-08-05 19:23:53
【问题描述】:

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

【问题讨论】:

  • 我的解决方法是将文本颜色设置为白色bt.setTextColor(BaseColor.WHITE),这使得复选框看起来未选中。这完全是 hack,但我需要发布软件。

标签: java checkbox itext


【解决方案1】:

首先是这个:

  • 您在 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 字体。

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

【讨论】:

    【解决方案2】:

    尝试以下方法,对我来说它正在工作:

    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 年的 mailinglist 上报告了此问题。如果您需要其他样式的补丁 iText 或使用 Mark 描述的解决方法。

    更新:两年后,他们似乎在最新的iText version 5.4.3 中解决了这个问题(cp. the change of Michaël Demey)

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 2014-11-12
        • 2011-04-19
        • 1970-01-01
        • 1970-01-01
        • 2016-04-01
        • 1970-01-01
        • 2022-06-30
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多