Показывать номера страниц в PDF с помощью ITEXT - PullRequest
3 голосов
/ 19 апреля 2011

Мы используем Itext для создания PDF-файлов в нашем веб-приложении. PDF-файлы создаются правильно.

Мне нужно показать некоторую информацию об авторских правах в нижнем колонтитуле вместе с номерами страниц. Мне нужно показать информацию об авторских правах слева внизу, а номера страниц справа внизу.

Я просмотрел Google и некоторые статьи, используя их, я мог бы добавить нижний колонтитул внизу. Но этот нижний колонтитул отображает только авторские права с правой стороны внизу.

Как мне добавить к этому номера страниц с помощью Itext?

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

    static class HeaderFooter extends PdfPageEventHelper {
    public void onEndPage(PdfWriter writer, Document document) {
        Rectangle rect = writer.getBoxSize("footer");
        BaseFont bf_times;
        try {
            bf_times = BaseFont.createFont(BaseFont.TIMES_ROMAN, "Cp1252",
                    false);
            Font font = new Font(bf_times, 9);
            ColumnText.showTextAligned(writer.getDirectContent(),
                    Element.ALIGN_LEFT, new Phrase("Copyright 2011",
                            font), (rect.getLeft() + rect.getRight()) / 2,
                    rect.getBottom() - 18, 0);
        } catch (DocumentException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

Также ниже приведен код, который используется для отображения номеров страниц. Я не могу объединить оба этих параметра для одновременного отображения номеров страниц и информации об авторских правах.

ColumnText.showTextAligned(writer.getDirectContent(),
    Element.ALIGN_RIGHT,
    new Phrase(String.format("%d", writer.getPageNumber()),
            font), (rect.getLeft() + rect.getRight()) / 2,
    rect.getBottom() - 18, 0);

1 Ответ

6 голосов
/ 19 апреля 2011

Функция showTextAligned принимает следующие параметры.

public static void showTextAligned(PdfContentByte canvas,
                                   int alignment,
                                   Phrase phrase,
                                   float x,
                                   float y,
                                   float rotation)

В вашем примере вы устанавливаете значения x для обоих элементов на одно и то же значение, поэтому вы можете писать один фрагмент текста поверх другого. Попробуйте настроить свои значения x, чтобы увидеть, поможет ли это.

В частности, попробуйте установить блок кода номера страницы так, чтобы он выровнялся по правой стороне нижнего колонтитула.

ColumnText.showTextAligned(writer.getDirectContent(),
    Element.ALIGN_RIGHT,
    new Phrase(String.format("%d", writer.getPageNumber()),
            font),  rect.getRight(),
    rect.getBottom() - 18, 0);

Кроме того, вы можете использовать PDFStamper для добавления верхних и нижних колонтитулов в фактический документ PDF. Иногда это может быть более простой подход. В книге iText in Action есть несколько примеров этого. Вот пример кода для одного из них.

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