gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:42:31 27 4
gpt4 key购买 nike

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

}

最佳答案

一般禁止onStartPage()事件中添加内容。 禁止onEndPage() 中向document 对象添加内容。您应该使用 PdfWriteronEndPage() 方法中添加页眉和页脚,不是 文档。另外:一遍又一遍地解析 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, 559, 32));
for (Element e : footer) {
ct.addElement(e);
}
ct.go();
} catch (DocumentException de) {
throw new ExceptionConverter(de);
}
}
}

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

结果显示在 html_header_footer.pdf 中。

关于java - 如何向页面添加 HTML 页眉和页脚?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33394158/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com