最近项目中又遇到pdf导出的需求,以前一直都是用phantomjs-2.1.1-windows.exe插件做的pdf导出,运用插件优点是直接可以把html页面直接转换成pdf导出,缺点是它需要安装,windows、linux、mac等环境下需要的插件安装都不一样,中文字体还需要单独安装;查询了一些文档后就决定采用freemarker 与 ITextRenderer来实现了;偶然间在git看到了flying saucer项目;发现思路基本一致就在其基础上开发了(^_^) 。
freemarker 模板能很好的支持html、css样式;但是运用之前需要小小的学习一下freemarker ftl模板的一些固定语法,这对一般的开发者而言应该都没什么难度(^^)。
下面记录一下用到的方法与运用freemarker 与 ITextRenderer过程的一些坑
- ftl模板中中文字体显示
- ftl模板中静态资源引入
- ftl模板中img显示
@RequestMapping("/createPdf/{corpid}")
public ResponseEntity<byte[]> createPdf(@PathVariable(value="corpid")String corpid,HttpServletRequest request)
throws Exception {
Map<Object, Object> o = new HashMap<Object, Object>();
。。。。
//此处省略对o获取数据的过程
//获取ftl模板路径
String path = request.getSession().getServletContext().getRealPath("WEB-INF/views/page/favorable");
String uuid = UUID.randomUUID().toString().replace("-", "");
//设置图片路径,解决找不到图片问题
String imgUrl = request.getSession