Причина проблемы в том, что ColumnText.showTextAligned
использует экземпляр ColumnText
с прямоугольником столбца высотой всего три единицы.
Код ColumnText
предназначен для вывода одной строки текста по своему усмотрению.высота (обычно превышающая 3 единицы) в любом случае в таком случае.Скорее всего, это хак, чтобы заставить ColumnText.showTextAligned
работать на одну строку текста.
К сожалению, код ColumnText
в то же время сокращает изображения порциями до этой доступной высоты столбца в 3 единицы, делая ихчуть больше, чем грязные пятнышки или, наоборот, даже отбрасывает их.
Поэтому для фраз, содержащих куски изображения, не следует использовать удобные методы ColumnText.showTextAligned
, а вместо этого явно использовать экземпляр ColumnText
с разумным прямоугольником столбца.высота, например, заменить
ColumnText.showTextAligned(writer.getDirectContent(), Element.ALIGN_RIGHT, header, rect.getRight(),
rect.getTop()-30, 0);
на
ColumnText ct = new ColumnText(writer.getDirectContent());
ct.setSimpleColumn(header, rect.getLeft(), rect.getTop(30), rect.getRight(), rect.getTop(), 2, Element.ALIGN_RIGHT);
try {
ct.go();
} catch (DocumentException e) {
throw new ExceptionConverter(e);
}
( AddHeaderImage метод прослушивания событий страницы onEndPage
)
В конце концов, это не так уж и удобно, и больше влияет на детали макета ...