2014-11-07 2 views
1

Я пытаюсь изменить размер существующей кнопки PDF. Я хочу изменить ярлык с «Печать» на «Печать с поправками».iText: изменение размера кнопки влияет на метку

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?

+0

FYI: изменение, которое было сделано для решения вашей проблемы, теперь выпущено: http://itextpdf.com/changelog/554 –

ответ

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.

0

Попробуйте что-то вроде:

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

или:

Try использовать setMaximumSize() методу

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

Спасибо за ввод, но кнопка, с которой я имею дело, - это объект iText PushbuttonField. –

+0

Я уверен, что вы все еще можете использовать setMaximumSize() no? – Zee

Смежные вопросы