iText Flying Saucer pdf заголовки и игнорирование HTML - PullRequest
2 голосов
/ 08 июля 2011

Мы успешно используем xhtml для pdf, но появилось новое требование - иметь заголовки и количество страниц на каждой странице.Мы используем новую версию Flying Saucer.

Я следовал примеру здесь: http://today.java.net/pub/a/today/2007/06/26/generating-pdfs-with-flying-saucer-and-itext.html#page-specific-features

... но это не сработает.Заголовок будет наверху слева на первой странице.

Если я использую версию r7, заголовки и нумерация страниц работают отлично, но ни одна из переданных в html не отображается, в то время как в r8 игнорируются заголовки \ номера страниц, но HTML отображается отлично.xHTML, используемый для тестов, скопирован с URL выше.

Я знаю, что, должно быть, упускаю что-то очень простое, если у кого-то есть какие-либо идеи \ комментарии, я был бы очень рад услышать.

Ответы [ 2 ]

2 голосов
/ 08 июля 2011

Я думаю, что они изменили эту функциональность в r8 .... попробуйте этот метод вместо:

https://gist.github.com/626264

1 голос
/ 08 июля 2011

Мы используем один и тот же метод, и все работает отлично, однако я решил не использовать встроенные верхние / нижние колонтитулы летающей тарелки и использовать PdfStamper для добавления их после создания PDF, это работает довольно хорошоНапример.

    public void modifyPdf(PdfStamper stamper) {
        this.reader = stamper.getReader();

        PdfContentByte under = null;

        PdfPTable header = null;
        PdfPTable footer = null;

        final int total = this.reader.getNumberOfPages();
        for (int page = 1; page <= total; page++) {
            under = stamper.getUnderContent(page);

            final PdfDocument doc = under.getPdfDocument();
            final Rectangle rect = this.reader.getPageSizeWithRotation(page);

            header = ... //build your header
            footer = ... // build your footer

            final float x = 0;

            //write header to PDF
            if (header != null) {
                float y = (rect.getTop() - 0);
                header.writeSelectedRows(0, -1, x, y, under);
            }

            //write footer to PDF
            if (footer != null) {
                float y = (rect.getBottom() + 20);
                footer.writeSelectedRows(0, -1, x, y, under);
            }
        }
    }

Вы можете создать свой штамп как:

        final PdfReader reader = new PdfReader(/*your pdf file*/);
        final PdfStamper stamper = new PdfStamper(reader, /* output */);

Надеюсь, вы найдете это полезным.

...