Как избежать того, чтобы определенный контент размещался отдельно на странице с iText7? - PullRequest
0 голосов
/ 24 января 2019

В конце последней страницы я хочу напечатать подпись.Существуют ситуации, когда длина документа делает подпись и только подпись будет напечатана на следующей странице.Нехорошо иметь целую страницу с единственной подписью, в то время как весь отчет находится на предыдущих страницах.

Кто-нибудь сталкивался с этими проблемами раньше и нашел рабочее решение?

Заранее спасибо,

Тоутудакис Михаил

1 Ответ

0 голосов
/ 24 января 2019

Что касается вашего второго вопроса, пожалуйста, рассмотрите возможность использования setKeepTogether или setKeepWithNext методов.

Давайте рассмотрим любой из подходов:

1) setKeepTogether был разработан, чтобы сохранитьдети контейнера вместе как можно больше.Это означает, что iText не будет разбивать контейнер и переместит весь контейнер на сетевую страницу, если контейнер не может быть размещен и там.

        for (int i = 0; i < 28; i++) {
        doc.add(new Paragraph("\n"));
    }

    Div div = new Div();
    div.add(new Paragraph("Please, keep me with the next element").setKeepWithNext(true));
    div.add(new Paragraph("I don't want to be alone!"));

    div.setKeepTogether(true);

    doc.add(div);

Результат pdf выглядит следующим образом (обратите внимание, что тамдостаточно места для параграфа «пожалуйста» на первой странице): enter image description here

2) setKeepWithNext предназначен для сохранения конца первого элемента и началаего следующий брат на том же месте.(!) Обратите внимание, что это будет работать только для элементов высокого уровня, то есть элементов, добавленных к корневому элементу.

        for (int i = 0; i < 28; i++) {
        doc.add(new Paragraph("\n"));
    }

    doc.add(new Paragraph("Please, keep me with the next element").setKeepWithNext(true));
    doc.add(new Paragraph("I don't want to be alone!"));

Результат тот же.

Что касается вашего первого вопроса,Я действительно хочу увидеть, что вы написали.Я верю, что используя события, вы сможете достичь желаемого.Пожалуйста, обратите внимание на следующие образцы iText: https://github.com/itext/i7js-examples/tree/develop/src/test/java/com/itextpdf/samples/sandbox/events и https://github.com/itext/i7js-examples/blob/develop/src/test/java/com/itextpdf/samples/sandbox/events/VariableHeader.java в частности.

Также для более разумного макета я могу предложить вам использовать Canvas (и, следовательно, высокий уровеньapi), а не PdfCanvas (как в упомянутых образцах).Тем не менее, это похоже на другой вопрос.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...