Короче говоря
Это поведение вызвано тем, что iText по умолчанию рассматривает изображения как нечто, что может перемещаться на следующую страницу, если на текущей странице недостаточно места для изображения.Вы можете переопределить этот эффект, установив для свойства StrictImageSequence
параметра PdfWriter
значение true
.В определенных обстоятельствах ваш двойник newPage
также выполняет свою работу.
Подробно
Плавающие изображения в iText
При добавлении изображения на страницу, iText сначала проверяет, есть лина странице осталось достаточно места для изображения.Если это не так, iText по умолчанию не сразу запускает новую страницу для размещения изображения, а просто сохраняет изображение в локальной переменной.Когда в конечном итоге новая страница создается по какой-либо другой причине, например, путем добавления достаточного количества текста для вызова переключения страниц или явного вызова newPage()
, сохраненное изображение немедленно добавляется на новую страницу в качестве первого содержимого.
Это предотвращает в основном пустые страницы в случае сочетания огромных изображений и текста.
Осторожно, поскольку для этого существует только одна переменная изображения, добавление еще одного неподходящего изображения приведет к генерации новой страницы.и рисование первого ожидающего изображения, тем не менее.
Ваш оригинальный случай
В случае вашего вывода
было добавлено изображение вверхук документу, когда предыдущая страница была еще актуальна.Он не подходит, поэтому он был сохранен в переменной.Затем ваш явный вызов newPage()
создал новую страницу, и изображение из переменной было добавлено в качестве первого содержимого на этой новой странице, и только после этого было нарисовано ваше «(Это группа B)», которым вы хотели быть первым содержимым..
Ваш обход
В случае обхода
, если я дважды вызываю documnet.newPage (), он работает
* 1036.*
еще одна новая страница генерируется после того, как изображение нарисовано в ходе первого newPage()
вызова.
С другой стороны, если для новой страницы нет сохраненного изображения, втораяnewPage()
игнорируется, поскольку iText по умолчанию подавляет пустые страницы.
Таким образом, ваш обходной путь может быть полезен в вашем случае.
Отключение плавающих изображений в iText
Однако более общим решением было бы полное подавление плавающих изображений в iText.Вы можете сделать это, установив для свойства PdfWriter
StrictImageSequence
значение true
:
writer.setStrictImageSequence(true);
В вашем случае это также может быть лучшим решением, особенно если вы в конечном итоге начнете добавлять дополнительный текст междуизображения в той же группе.