前言
遇到需求把多个fremaker模板导出到同一个pdf中,中间设置分页;
参考
ITextRenderer将多个页面导在一个pdf中_Kyle_Ping的博客-CSDN博客
一、处理页面内容
List<String> htmlStrList = new ArrayList<>();
// 获取模板文件
Template template = cfg.getTemplate(ScalePrintTempleEnum.getNameByValue(scaleid), "UTF-8");
for (Map<String, Object> data : dataList) {
StringWriter writer = new StringWriter();
// 将数据输出到html中
template.process(data, writer);
writer.flush();
String html = writer.toString();
htmlStrList.add(html);
}
二、处理分页和合并
// 把html代码传入渲染器中
renderer.setDocumentFromString(htmlStrList.get(0));
// 设置模板中的图片路径 (这里的images在resources目录下) 模板中img标签src路径需要相对路径加图片名 如<img
// src="images/xh.jpg"/>
String url = PDFTemplateUtil.class.getClassLoader().getResource("images").toURI().toString();
renderer.getSharedContext().setBaseURL(url);
renderer.layout();
renderer.createPDF(out, false);
for (int i = 1; i < htmlStrList.size(); i++) {
renderer.setDocumentFromString(htmlStrList.get(i));
renderer.layout();
renderer.writeNextDocument(i);
}
renderer.finishPDF();
out.flush();
return (ByteArrayOutputStream) out;
总结
我这里是同一个模板导出得,可以多个不同模板只需要多次把模板获取放在循环中处理。这个作为笔记记录问题