使用iText7

时间:2018-02-09 15:55:35

标签: java itext7

以下是在表格中创建单选按钮的代码

public class RadioButtonRender extends CellRenderer {
    protected String name;
    protected String[] value;

    public RadioButtonRender(Cell modelElement, String name, String[] value) {
        super(modelElement);
        this.name = name;
        this.value = value;
    }

    @Override
    public void draw(DrawContext drawContext) {

        PdfAcroForm form = PdfAcroForm.getAcroForm(drawContext.getDocument(), true);
        PdfButtonFormField group = PdfFormField.createRadioGroup(drawContext.getDocument(), "", "");

        float x = getOccupiedAreaBBox().getLeft();
        float y = (getOccupiedAreaBBox().getTop() + getOccupiedAreaBBox().getBottom()) / 2;

        System.out.println(x + "      " + y);
        for (int i = 0; i < this.value.length; i++) {
            Rectangle rect = new Rectangle(x, y, 10, 10);
            PdfFormField.createRadioButton(drawContext.getDocument(), rect, group,
                    this.value[i]);         
        }

        form.addField(group);
    }
} 

这是我调用RadioButtonRender并将该单元格添加到表中的代码,但不知道单选按钮没有添加到表中但是复选框,文本字段工作正常

    cell.setNextRenderer(
                        new RadioButtonRender(cell, entry.getString(), values.toArray(new String[values.size()])));
   table.addCell(cell);

我确定我没有在列表中发送任何空值,所以这可能不是问题。

1 个答案:

答案 0 :(得分:0)

您没有看到结果的主要原因是您没有设置无线电组的名称及其值。无线电组管理其子单选按钮的状态,这应该具有初始值。它也必须有一个名字。

将创建广播组的行更改为

PdfButtonFormField group = PdfFormField.createRadioGroup(drawContext.getDocument(), "fieldName", this.value[0]);

您将看到现在选择了一个单选按钮(显示黑色圆圈)。请注意,传递值不是必需的,但如果您没有传递初始值,则最初不会选择单选按钮。

此外,for循环内的坐标与循环i变量无关,您可以将所有单选按钮一个绘制在另一个上面。

最后,您可能希望在按钮附近绘制一些内容以指示其值。例如。您可以将该内容添加到单元格中并调用super.draw(drawContext);