iText Flying Saucer pdf标题并忽略html

时间:2011-07-08 13:48:32

标签: java flying-saucer

我们使用xhtml到pdf取得了很好的成功,但是每个页面都有一个新的要求,即头文件和页面数量。我们正在使用新版飞碟。

我在这里按照示例:http://today.java.net/pub/a/today/2007/06/26/generating-pdfs-with-flying-saucer-and-itext.html#page-specific-features

......但这不起作用。标题将在第一页的左上角。

如果我使用r7版本,标题和页面编号工作正常,但是没有传递的html被渲染,而在r8中,header \ page编号被忽略,但html被完美呈现。用于测试的xHTML是从上面的url复制的。

我知道我必须遗漏一些非常简单的事情,如果有人有任何想法或评论,我将非常感激听到。

2 个答案:

答案 0 :(得分:2)

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

https://gist.github.com/626264

答案 1 :(得分:1)

我们使用相同的方法,一切都很完美,但我决定不使用飞碟的内置页眉/页脚,并在生成PDF后使用PdfStamper添加它们,它运行得很好,这是一个例子。

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

希望您觉得这很有帮助。