目录
Demo前置简述
实现功能:用户个人信息测试数据加上ftl模板得到html字符串,然后根据html字符串生成pdf文件
主要maven依赖:freemarker和itextpdf
api测试工具:apifox
生成pdf内容
项目结构
简单springboot demo。其中,
User类为个人信息实体,Education类为个人学历学位实体,simhei.ttf文件为生成pdf文件时所需要的字体文件,user_personal.ftl为个人信息对应的模板。
主要实现
Controller层
Service层
红框中的方法都是UserService中的私有方法。
getUser():模拟数据库操作,返回一个有完整测试数据的User;
getHtmlContent():将User序列化再反序列化后的得到的Map模型作为参数传入,执行ftl模板,输出html字符串形式;
setFont():设置生成pdf文件使用字体(如果不设置,最终生成的pdf文件中至少中文不会显示)。
然后,使用itextpdf的HtmlConverter.convertToPdf()方法,
最终,生成的pdf写入进了response响应体中。
api测试
通过apifox工具,快捷请求/user/export接口,如图(点击右下角箭头处的下载,即可下载生成的pdf文件)
当然,因为设置了响应头Content-disposition(其中filename*=UTF-8''是为了解决解决火狐浏览器中下载文件的中文乱码问题),
所以浏览器直接请求也可自动下载。
完整代码地址
https://gitee.com/dlqx/springboot-code-book中的export-pdf文件夹。