需求
需要将多个html页面导出合并到同一个pdf文件中。
解决
在网上百度查询资料,找到代码
renderer.setDocumentFromString(htmlStrList.get(i));
renderer.layout();
renderer.writeNextDocument(i);
使用
//加载中文字体
ITextRenderer renderer = new ITextRenderer();
ITextFontResolver fontResolver = renderer.getFontResolver();
//simsun.ttc: 如果页面中包含中文,必须导入此字体文件,否则中文字体不显示
fontResolver.addFont(reportPath + FONT_PATH, BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
renderer.setDocumentFromString(htmlStrList.get(0));
renderer.layout();
OutputStream os = new FileOutputStream(savePath + filePath);
renderer.createPDF(os,false);
for (int i = 1; i < htmlStrList.size(); i++) {
renderer.setDocumentFromString(htmlStrList.get(i));
renderer.layout();
renderer.writeNextDocument(i);
}
renderer.finishPDF();
说明
htmlStrList
是导出的网页页面内容字符串列表,一个网页内容是其中的一项。页面内容使用Htmlutil导出renderer.createPDF(os,false);
false代表finish-false
,默认是true
,如果不输入,后面renderer.writeNextDocument(i);
会报错:“document没打开”。renderer.createPDF(os,false);
必须在renderer.writeNextDocument(i);
前面,不然会空指针错误。我一开始就是放前面,导致报错。
点进入查看源码,发现writeNextDocument()
方法中有一个变量_writer
,这个变量是在createPDF()
中实例化的。
参考:
https://www.codota.com/code/java/classes/org.xhtmlrenderer.pdf.ITextRenderer