如何向页面添加 HTML 页眉和页脚?

2024-05-14

如何使用 itext 从 html 源添加标题到 pdf?

目前,我们已经扩展了 PdfPageEventHelper 并重写了这些方法。工作正常,但当我到达 2 个以上页面时,它会抛出 RuntimeWorkerException。

 @Override
    void onStartPage(PdfWriter writer, Document document) {
        InputStream is = new ByteArrayInputStream(header?.getBytes());
        XMLWorkerHelper.getInstance().parseXHtml(writer, document, is);
    }

    @Override
    void onEndPage(PdfWriter writer, Document document) {
        InputStream is = new ByteArrayInputStream(footer?.getBytes());
        XMLWorkerHelper.getInstance().parseXHtml(writer, document, is);

    }

It is 禁止的添加内容onStartPage()事件一般。这是禁止的将内容添加到document对象在onEndPage()。您应该在中添加页眉和页脚onEndPage()方法使用PdfWriter, NOT文档。另外:一遍又一遍地解析 HTML 会浪费大量的 CPU。

请看一下Html页眉页脚 http://itextpdf.com/events/HtmlHeaderFooter例子。

它有两个 HTML 片段,一个用于页眉,一个用于页脚。

public static final String HEADER =
    "<table width=\"100%\" border=\"0\"><tr><td>Header</td><td align=\"right\">Some title</td></tr></table>";
public static final String FOOTER =
    "<table width=\"100%\" border=\"0\"><tr><td>Footer</td><td align=\"right\">Some title</td></tr></table>";

请注意,有比使用 HTML 更好的方法来描述页眉和页脚,但也许这是您的要求之一,所以我不会问您为什么不使用中解释的任何方法官方文档 http://pages.itextpdf.com/ebook-stackoverflow-questions.html。顺便说一下:解决问题所需的所有信息也可以在其中找到免费电子书 http://pages.itextpdf.com/ebook-stackoverflow-questions.html所以你可能想下载它......

我们将在页面事件中仅读取这些 HTML 片段一次,然后我们将在每个页面上一遍又一遍地渲染这些元素:

public class HeaderFooter extends PdfPageEventHelper {
    protected ElementList header;
    protected ElementList footer;
    public HeaderFooter() throws IOException {
        header = XMLWorkerHelper.parseToElementList(HEADER, null);
        footer = XMLWorkerHelper.parseToElementList(FOOTER, null);
    }
    @Override
    public void onEndPage(PdfWriter writer, Document document) {
        try {
            ColumnText ct = new ColumnText(writer.getDirectContent());
            ct.setSimpleColumn(new Rectangle(36, 832, 559, 810));
            for (Element e : header) {
                ct.addElement(e);
            }
            ct.go();
            ct.setSimpleColumn(new Rectangle(36, 10, 559, 32));
            for (Element e : footer) {
                ct.addElement(e);
            }
            ct.go();
        } catch (DocumentException de) {
            throw new ExceptionConverter(de);
        }
    }
}

你看到我们用来添加的机制了吗?Element从 XML Worker 获取对象?我们创建一个ColumnText将写入的对象直接内容 of the writer(使用document是禁止的)。我们定义一个Rectangle我们使用go()来渲染元素。

结果显示在html_header_footer.pdf http://itextpdf.com/sites/default/files/html_header_footer.pdf.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何向页面添加 HTML 页眉和页脚? 的相关文章

随机推荐