微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何将HTML页眉和页脚添加到页面?

如何使用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,is);

    }

解决方法

一般来说,禁止在onStartPage()事件中添加内容.禁止在onEndPage()中向文档对象添加内容.您应该使用PdfWriter,NOT文档在onEndPage()方法添加页眉和页脚.另外:通过一遍又一遍地解析HTML,你浪费了大量的cpu.

请看一下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,但也许这是您的要求之一,所以我不会问你为什么不使用the official documentation中解释的任何方法.方式:在free ebook中也可以找到解决问题所需的所有信息,因此您可能需要下载它…

我们只会在页面事件中阅读这些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,32));
            for (Element e : footer) {
                ct.addElement(e);
            }
            ct.go();
        } catch (DocumentException de) {
            throw new ExceptionConverter(de);
        }
    }
}

您是否看到我们用于添加从XML Worker获取的Element对象的机制?我们创建一个ColumnText对象,该对象将写入编写器的直接内容(禁止使用该文档).我们定义一个Rectangle,我们使用go()来渲染元素.

结果显示html_header_footer.pdf.

原文地址:https://www.jb51.cc/html/232051.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐