FreeMarker语言概述
FreeMarker是一个模板引擎,一个基于模板生成文本输出的通用工具,使用纯Java编写。
FreeMarker被设计用来生成HTML Web页面,特别是基于MVC模式的应用程序
虽然FreeMarker具有一些编程的能力,但通常由Java程序准备要显示的数据,由FreeMarker生成页面,通过模板显示准备的数据(如下图)
FreeMarker不是一个Web应用框架,而适合作为Web应用框架一个组件。
FreeMarker与容器无关,因为它并不知道HTTP或Servlet;FreeMarker同样可以应用于非Web应用程序环境。
FreeMarker更适合作为Model2框架(如Struts)的视图组件,你也可以在模板中使用JSP标记库。
FreeMarker是免费的。
生成PDF一般有HTML格式模板和XML格式模板,不同格式模板通过不同的工具进行转化;本人通过试验也比较了不同方式的优劣,具体内容如下:
该项目主要介绍内容(代码绘制PDF+模板法生成PDF)
- itextpdf(CreatePdf)
不太推荐需要在代码内部编写PDF格式,如果要使用,建议写个基类,将同一版本 或者同一类型的公共方法写入,差异化的抽象,一个模板一个子类,子类使用@Component命名,使用反射的方式获取模板子类。 - xhtmlrenderer(PdfUtil)
对于大部分PDF场景都还是非常方便简单的,可以模板可以让前端先使用HTML制作,调整好格式和样式后,再改名为ftl后缀。 - freemarker(FreemarkerUtils)
对于没有使用宏、函数等word、excel,需要按模板动态生成word、excel、html,只需要一个freemarker,先将word、excel、html等另存为xml,即可使用模板动态生成文件,目前xlsx是不支持的, - PdfTemplate(PdfTemplateUtils)
对于不会HTML的制作,熟悉itextpdf的,完全可以使用PdfTemplate,该方法其实就是将itextpdf中PDF的元素使用xml的方式表现,即ftl模板即是使用itextpdf中PDF的元素构成,再使用itextpdf对ftl文本逆解析 - xdocreport
xdocreport确实很强大,主要是操作word,如动态插入数字、汉字、图片,也可以通过指令形式去执行程序输出结果,在复杂word动态生成上功能很强大,但是对word版本要求高,word操作要熟练。(实际使用会遇到特别多的坑,诸如:依赖问题、word各种格式问题,只支持docx、只支持office2003以上版本,宏、函数等转PDF,PDF根本无法打开、或打开缺少内容,只能说得把官方文档先看几遍,用输了,后面会很高效)
对于PDF复杂度不高,项目涉及功能少的,可以使用代码绘制方式(itextpdf、openpdf等),对于PDF复杂度尚可,拥有较强HTML/XML开发的可以使用xhtmlrenderer,对于需要以word为原型,且复杂度较高的,推荐使用xdocreport
创建PDF的不同方式以及开源资源:
- itextpdf
特点:将PDF各元素对象化,通过定义PDF各对象的属性,达到手动构建PDF的效果
缺点:代码量大,方法不够简洁,最初需不断调试才能确定格式和样式是否满足
优点:灵活性高,对简单PDF,频繁变动格式或数据的可快速实现。
适用于复杂度不高,使用依赖于使用者的熟练度 - dynamicreports
属于itextpdf的优化版本吧!支持了各种文件格式导出,适用于同一数据需要以不同文件导出,不过网上使用教程以及问题处理资料较少。 - DynamicJasper
它使得JasperReports的创建看起来不太难设计。动态Jasper同时确定列、列宽(自动宽度)、组、变量、字体、图表、交叉标签、子报告(也可以是动态的)、页面大小等。在运行期间。 - pdfbox
同itextpdf ,其下IronPDF是将PDF标签拓展到HTML标签。 - ApacheFOP
ApacheFOP被称为格式化对象处理器。这个Java应用程序用于读取格式化对象(FO)树,并确保指定的输出具有结果页面。PDF(重要的输出格式)和其他一些格式,如PS、PCL、AFP、XML(区域树表示)、Print、AWT和PNG,以及在较小程度上,RTF和TXT都是为该应用程序而设计的。Java培训课程有关于java库的使用,还有实操项目巩固你所学的知识,让你拥有一定的项目经验,在以后找工作时,比别人更有竞争力
数据对象XML化,通过对模板(xml模板,比如excel转xml,转化后需修改字体、遍历、条件等位置)使用类似于itext - xdocreport
超级强大,可以将不同的文件格式转化为PDF以及其他格式 ,同时也具备xhtmlrenderer转PDF的功能
(注:Linux可能会有字体问题,可通过导入字体,刷新内存字体,重启服务解决) - xhtmlrenderer
适用于使用HTML标签的模板转PDF,后端使用超级方便,但是复杂PDF需要较强的HTML功底,使用简单易上手,网上资料多 - OpenPDF
同itextpdf - easypdf
基于pdfbox二次封装,更强大了
以上 5、6、7是通过模板生成PDF,其他都是需要熟悉该功能包,使用好里面的方法
模板库:
- freemarker