2

We use xhtml to pdf with good success, but a new requirement came up to have headers and page count on every page. We are using newset release of Flying Saucer.

I followed example here: http://today.java.net/pub/a/today/2007/06/26/generating-pdfs-with-flying-saucer-and-itext.html#page-specific-features

...but this would not work. The header would be top left on first page.

If I use the r7 version, headers and page numbering works perfectly, but none of the passed in html is rendered, whilst in r8 the headers\ page numbers are ignored, but the html is rendered perfectly. xHTML used for tests is copied from url above.

I know I must be missing something very simple, if anyone has any ideas\ comments, I would be very grateful to hear.

4

2 回答 2

2

我认为他们在 r8 中更改了此功能....请尝试使用此方法:

https://gist.github.com/626264

于 2011-07-08T19:22:10.503 回答
1

我们使用相同的方法,一切正常,但是我决定不使用飞碟内置的页眉/页脚,并PdfStamper在生成 PDF 后使用 a 添加它们,效果很好,这里有一个例子。

    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 */);

希望你觉得这很有帮助。

于 2011-07-08T14:13:47.823 回答