一、需求说明:
根据业务需要,需要在服务器端生成可动态配置的PDF文档,方便数据可视化查看。
二、解决方案:
iText+FreeMarker+JFreeChart生成可动态配置的PDF文档
iText有很强大的PDF处理能力,但是样式和排版不好控制,直接写PDF文档,数据的动态渲染很麻烦。
FreeMarker能配置动态的html模板,正好解决了样式、动态渲染和排版问题。
JFreeChart有这方便的画图API,能画出简单的折线、柱状和饼图,基本能满足需要。
三、实现功能:
能动态配置PDF文档内容
能动态配置中文字体显示
设置自定义的页眉页脚信息
能动态生成业务图片
完成PDF的分页和图片的嵌入
四、主要代码结构说明:
component包:PDF生成的组件 对外提供的是PDFKit工具类和HeaderFooterBuilder接口,其中PDFKit负责PDF的生成,HeaderFooterBuilder负责自定义页眉页脚信息。
builder包:负责PDF模板之外的额外信息填写,这里主要是页眉页脚的定制。
chart包:JFreeChart的画图工具包,目前只有一个线形图。
test包:测试工具类
util包:FreeMarker等工具类。
五、关键代码说明:
模板配置
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/> <meta http-equiv="Content-Style-Type" content="text/css"/> <title></title> <style type="text/css"> body { font-family: pingfang sc light; } .center{ text-align: center; width: 100%; } </style></head><body><!--第一页开始--><div class="page" > <div class="center"><p>${templateName}</p></div> <div><p>iText官网:${ITEXTUrl}</p></div> <div><p>FreeMarker官网:${freeMarkerUrl}</p></div> <div><p>JFreeChart教程:${JFreeChartUrl}</p></div> <div>列表值:</div> <div> <#list scores as item> <div><p>${item}</p></div> </#list> </div></div><!--第一页结束--><!---分页标记--><span ></span><!--第二页开始--><div class="page"> <div>第二页开始了</div> <!--外部链接--> <p>百度图标</p> <div> <img src="${imageUrl}" alt="百度图标" width="270" height="129"/> </div> <!--动态生成的图片--> <p>气温变化对比图</p> <div> <img src="${picUrl}" alt="我的图片" width="500" height="270"/> </div></div><!--第二页结束--></body></html>
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
软考中级精品资料免费领
- 历年真题答案解析
- 备考技巧名师总结
- 高频考点精准押题
- 资料下载
- 历年真题
193.9 KB下载数265
191.63 KB下载数245
143.91 KB下载数1148
183.71 KB下载数642
644.84 KB下载数2756
相关文章
发现更多好内容- Java 中创建新文件的文件锁定策略有哪些?(Java createnewfile的文件锁定策略)
- Java 是否支持容器编排?全面解析与实践指南(contain java是否支持容器编排)
- Java 如何通过调用方法来输出数据?(java怎么调用方法输出数据)
- uncomtrade数据库支持的格式大全
- Java OGNL 表达式的解析原理究竟是什么?(java ognl表达式的解析原理是什么 )
- Java泛型中的 extends 操作符对性能有哪些影响?(Java泛型extends的性能影响如何)
- 如何掌握 Java 图形化界面设计原则?(java图形化界面设计原则)
- 在 Java 中如何获取栈顶元素?(java怎么获取栈顶元素)
- 软考高级考试可以自己选批次吗?
- Java 中如何获取字符数组中的字符?(java字符数组怎么获取字符)