Фактическая проблема не в выравнивании (во время которого возникает исключение в 7.1.4; это исключение больше не возникает в текущем 7.1.5-SNAPSHOT), уже установка значения не выполняется (как в 7.1.4, так и в 7.1 .5-SNAPSHOT на данный момент); Вы можете проверить это, выполнив код без строки acroForm.flattenFields()
и проверив вывод.
На самом деле текущая реализация PdfFormField.regenerateField()
(которая вызывается при установке значения поля), по-видимому, не поддерживает поля с несколькими виджетами, в частности в контексте полей с кнопками (но также и для других типов полей) он предполагает объединение абстрактного объекта поля формы и его виджета (что возможно только для полей с одним виджетом) как при извлечении из него информации, так и при добавлении к ней сгенерированного внешнего вида.
Таким образом, ваш вариант использования
Поле кнопки появляется в документе несколько раз. Я хотел бы установить изображение один раз на уровне поля, чтобы оно появлялось при каждом появлении поля.
еще не поддерживается iText 7, по крайней мере, не в текущей версии 7.1.5-SNAPSHOT.
Обходной путь должен был бы заменить
button.setImage("src/test/resources/my_image.png");
от
ImageData img = ImageDataFactory.create("src/test/resources/my_image.png");
PdfImageXObject imgXObj = new PdfImageXObject(img);
List<PdfWidgetAnnotation> widgets = button.getWidgets();
for (PdfWidgetAnnotation widget : widgets) {
Rectangle rectangle = widget.getRectangle().toRectangle();
PdfFormXObject xObject = new PdfFormXObject(rectangle);
PdfCanvas canvas = new PdfCanvas(xObject, pdfDocument);
canvas.addXObject(imgXObj, rectangle.getWidth(), 0, 0, rectangle.getHeight(), rectangle.getLeft(), rectangle.getBottom());
widget.setNormalAppearance(xObject.getPdfObject());
}
( SetButtonImage test testSetImageToButtonWithManyVisualizationsWorkAround
)
Используя текущий 7.1.5-SNAPSHOT, это работает, включая выравнивание.
Осторожно, это не идеальное исправление отсутствующей поддержки кнопок для нескольких виджетов, код игнорирует некоторые настройки (например, границы кнопки и ширину полосы вокруг изображения) и, возможно, растягивает изображение неожиданно путь. Кроме того, он проверен только на вашем примере PDF. Таким образом, он действительно может служить временным решением проблемы.