iText:按钮调整大小会影响标签

时间:2014-11-07 15:03:40

标签: java itext

我正在尝试调整现有PDF按钮的大小。我想将标签从“打印”修改为“打印修改”。

PushbuttonField button = form.getNewPushbuttonFromField("HoldButton");
Rectangle box = button.getBox();
box.setRight(box.getRight() + 72);  // Increase width by 1"
button.setBox(box);
button.setText("Print Amended");
form.replacePushbuttonField("HoldButton", button.getField());

上面的代码成功更改了标签,但没有更改大小。最终结果是一个宽度没有变化的按钮,标签“Print Amended”被压缩在一起。

是否可以调整iText中现有按钮的大小?

2 个答案:

答案 0 :(得分:2)

我尝试了你的例子,我很惊讶我可以重现你的问题。

我查看了iText代码,我发现明确禁止更改/T值。这是有道理的:如果您想要替换现有按钮,则不想更改其名称。

但是,出于某种原因,我们还明确禁止更改/Rect值。请参阅AcroFields类的代码:

for (Object element : button.getKeys()) {
    PdfName key = (PdfName)element;
    if (key.equals(PdfName.T) || key.equals(PdfName.RECT))
        continue;
    if (key.equals(PdfName.FF))
        values.put(key, button.get(key));
    else
        widgets.put(key, button.get(key));
    merged.put(key, button.get(key));
    markUsed(values);
    markUsed(widgets);
}

我不确定为什么在编写此代码时我们做出了这个决定。如果我删除|| key.equals(PdfName.RECT),那么您的代码将按预期工作。

由于我们故意排除更改按钮的尺寸,我怀疑这是一个错误还是我们故意在那里添加了代码。阅读您的要求,我倾向于从官方源代码中删除|| key.equals(PdfName.RECT)

PS:我知道这并没有回答你的问题,但它确实解释了为什么你的代码尽管它看起来完全没问题仍然无法正常工作。正如我解释的那样:我真的很惊讶它不起作用,因为我负责iText代码...

PS 2:我已更改官方trunk中的代码。

答案 1 :(得分:0)

尝试类似:

newButton1 = new JButton("Print Amended") {
            {
                setSize(150, 75);
                setMaximumSize(getSize());
            }
        };

或:

尝试使用setMaximumSize()方法

button.setMaximumSize(new Dimension(100,100));