我有三段html,页眉、正文和页脚。我想把这三段放在一起转换为pdf文件,该怎么做
@humanhuman, 您可以将页眉、正文和页脚连接成一个文件或字符串,然后将结果转换为 PDF。 这是一个如何使用字符串完成此操作的示例。
String header ="<html><head><title>你好 Aspose.Words</title></head>";
String body = "<body><p>这是正文。</p></body>";
String footer = "</html>";
String html = header + body + footer;
InputStream htmlStream = new ByteArrayInputStream(html.getBytes("UTF-8"));
Document doc = new Document(htmlStream);
doc.save("out.pdf");
我的这三段html都是独立的完整的html,都是浏览器可以直接展示的页面文件。不能直接拼接在一起。这种情况有办法吗
@humanhuman, 您可以在转换为PDF之前使用“ Document.AppendDocument”来连接HTML文件:
Document mergedDoc = new Document("header.html");
Document body = new Document("body.html");
Document footer = new Document("footer.html");
mergedDoc.appendDocument(body, ImportFormatMode.USE_DESTINATION_STYLES);
mergedDoc.appendDocument(footer, ImportFormatMode.USE_DESTINATION_STYLES);
mergedDoc.save("out.pdf");
请参阅我们的文档以获取更多详细信息:
我们想要得结果是,能够在转换出来的pdf中的每一页都加上页眉页脚,直接拼接的方式并不好。
我们发现,先把html转换为word,并且使用方法insertHtml添加页眉页脚之后,生成的word是每一页都有页眉页脚,之后在转换为pdf,就达到了我们的效果,但是这个过程非常的慢,耗时很严重,
这是我想要的效果
out.pdf (206.6 KB)
这是我的代码
asposeHTML.zip (3.8 KB)
@humanhuman, 在您的代码示例中,您创建并保存了 2 个中间 DOCX 文件。 删除它会使代码在我的计算机上运行速度提高 ~20%。
com.aspose.words.Document htmlDoc = new com.aspose.words.Document(new ByteArrayInputStream(hh.getBody().getBytes("utf-8")));
DocumentBuilder builder = new DocumentBuilder(htmlDoc);
builder.moveToHeaderFooter(HeaderFooterType.HEADER_PRIMARY);
if (StringUtils.isNotBlank(hh.getHead())) {
builder.insertHtml(hh.getHead());
}
builder.moveToHeaderFooter(HeaderFooterType.FOOTER_PRIMARY);
if (StringUtils.isNotBlank(hh.getFoot())) {
builder.insertHtml(hh.getFoot());
}
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
htmlDoc.save(byteArrayOutputStream, SaveFormat.PDF);
return byteArrayOutputStream.toByteArray();