я спрашиваю это: Удалите свойства первой и последней строк в документе Itext7.
и если я это сделаю:
PdfWriter pdfWriter = new PdfWriter(dest);
PdfDocument pdfDoc = new PdfDocument(pdfWriter);
Div div = new Div();
Document doc = new Document(pdfDoc, PageSize.A5);
doc.setMargins(0,0,0,36);
for (int i = 0; i <50 ; i++) {
ListItem listItem = new ListItem();
String s= "hello "+i;
Paragraph p = new Paragraph();
for (int j = 0; j <s.length() ; j++) {
p.add("HELLO " +I);
}
LayoutResult result = div.createRendererSubTree().setParent(doc.getRenderer()).layout(new LayoutContext(new LayoutArea(0,PageSize.A5)));
List<IRenderer> childRendererParagraph = result.getSplitRenderer().getChildRenderers();
childRendererParagraph содержит абзацы только с первой страницы. И я не знаю, сколько страниц должно быть в pdf.
Как я упоминал в ответе на ваш предыдущий вопрос,
split renderer represent the part of the content which iText can place on the area, overflow - the content which overflows.
Поэтому, если вы хотите разместить остальную часть контента, вы можете выполнить ту же операцию (layout
) на своем overflowRenderer
.
Код выглядит следующим образом:
LayoutResult firstPageResult = div.createRendererSubTree().setParent(doc.getRenderer()).layout(new LayoutContext(new LayoutArea(0, PageSize.A5)));
LayoutResult secondPageResult = firstPageResult.getOverflowRenderer().layout(new LayoutContext(new LayoutArea(1, PageSize.A5)));
Как только содержимое будет полностью размещено, overflowRenderer будет нулевым.
но это проблема. Мне нужно получить полный контент.
Не могли бы вы еще раз объяснить, чего вы пытаетесь достичь?
я читаю текст из файла и устанавливаю TextTise на какое-то слово (случайное). И если текст с textRise в первой или последней строке я удаляю свойство textrise.
@heavywar «После того, как содержимое будет полностью размещено, overflowRenderer будет нулевым». - "но это проблема. Мне нужно получить полный контент." - затем просто повторяйте это снова и снова в цикле, пока OverflowRenderer
не станет null
, то есть пока не будет обработан весь контент.
@mkl, если я устанавливаю поле сверху, LayoutResult не работает должным образом, childRenderers неверны. Две страницы начинаются с «привет 22» ibb.co/sVvhC4C, а в pdf две страницы начинаются с «привет 20», pdf: ibb.co/WtWcJMb
Эмуляция макета работает точно так же, как и реальный макет (Документ#добавить). Возможно, вы не учитываете некоторые свойства при эмуляции.
Для какого элемента вы устанавливаете верхнее поле?
Только для документирования
Но вы не используете экземпляр Document
во время эмуляции. Итак, как вы ожидаете, что iText обработает его? :) Почему бы вам не установить маржу для экземпляра Div
, который вы используете для эмуляции макета?
Я старался. я делаю это: div.setMargins(0,0,36,36); doc.setMargins(0,0,36,36); и это не работает. ibb.co/3WrRw61 . PDF: ibb.co/71Q5c19
Как только содержимое будет полностью размещено, overflowRenderer будет нулевым.