JAVA项目--对于PDF生成如何进行技术选型

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格式模板,不同格式模板通过不同的工具进行转化;本人通过试验也比较了不同方式的优劣,具体内容如下:

项目Gitee地址

该项目主要介绍内容(代码绘制PDF+模板法生成PDF)

  1. itextpdf(CreatePdf)
    不太推荐需要在代码内部编写PDF格式,如果要使用,建议写个基类,将同一版本 或者同一类型的公共方法写入,差异化的抽象,一个模板一个子类,子类使用@Component命名,使用反射的方式获取模板子类。
  2. xhtmlrenderer(PdfUtil)
    对于大部分PDF场景都还是非常方便简单的,可以模板可以让前端先使用HTML制作,调整好格式和样式后,再改名为ftl后缀。
  3. freemarker(FreemarkerUtils)
    对于没有使用宏、函数等word、excel,需要按模板动态生成word、excel、html,只需要一个freemarker,先将word、excel、html等另存为xml,即可使用模板动态生成文件,目前xlsx是不支持的,
  4. PdfTemplate(PdfTemplateUtils)
    对于不会HTML的制作,熟悉itextpdf的,完全可以使用PdfTemplate,该方法其实就是将itextpdf中PDF的元素使用xml的方式表现,即ftl模板即是使用itextpdf中PDF的元素构成,再使用itextpdf对ftl文本逆解析
  5. xdocreport
    xdocreport确实很强大,主要是操作word,如动态插入数字、汉字、图片,也可以通过指令形式去执行程序输出结果,在复杂word动态生成上功能很强大,但是对word版本要求高,word操作要熟练。(实际使用会遇到特别多的坑,诸如:依赖问题、word各种格式问题,只支持docx、只支持office2003以上版本,宏、函数等转PDF,PDF根本无法打开、或打开缺少内容,只能说得把官方文档先看几遍,用输了,后面会很高效)

对于PDF复杂度不高,项目涉及功能少的,可以使用代码绘制方式(itextpdf、openpdf等),对于PDF复杂度尚可,拥有较强HTML/XML开发的可以使用xhtmlrenderer,对于需要以word为原型,且复杂度较高的,推荐使用xdocreport

创建PDF的不同方式以及开源资源:

  1. itextpdf
    特点:将PDF各元素对象化,通过定义PDF各对象的属性,达到手动构建PDF的效果
    缺点:代码量大,方法不够简洁,最初需不断调试才能确定格式和样式是否满足
    优点:灵活性高,对简单PDF,频繁变动格式或数据的可快速实现。
    适用于复杂度不高,使用依赖于使用者的熟练度
  2. dynamicreports
    属于itextpdf的优化版本吧!支持了各种文件格式导出,适用于同一数据需要以不同文件导出,不过网上使用教程以及问题处理资料较少。
  3. DynamicJasper
    它使得JasperReports的创建看起来不太难设计。动态Jasper同时确定列、列宽(自动宽度)、组、变量、字体、图表、交叉标签、子报告(也可以是动态的)、页面大小等。在运行期间。
  4. pdfbox
    同itextpdf ,其下IronPDF是将PDF标签拓展到HTML标签。
  5. ApacheFOP
    ApacheFOP被称为格式化对象处理器。这个Java应用程序用于读取格式化对象(FO)树,并确保指定的输出具有结果页面。PDF(重要的输出格式)和其他一些格式,如PS、PCL、AFP、XML(区域树表示)、Print、AWT和PNG,以及在较小程度上,RTF和TXT都是为该应用程序而设计的。Java培训课程有关于java库的使用,还有实操项目巩固你所学的知识,让你拥有一定的项目经验,在以后找工作时,比别人更有竞争力
    数据对象XML化,通过对模板(xml模板,比如excel转xml,转化后需修改字体、遍历、条件等位置)使用类似于itext
  6. xdocreport
    超级强大,可以将不同的文件格式转化为PDF以及其他格式 ,同时也具备xhtmlrenderer转PDF的功能
    (注:Linux可能会有字体问题,可通过导入字体,刷新内存字体,重启服务解决)
  7. xhtmlrenderer
    适用于使用HTML标签的模板转PDF,后端使用超级方便,但是复杂PDF需要较强的HTML功底,使用简单易上手,网上资料多
  8. OpenPDF
    同itextpdf
  9. easypdf
    基于pdfbox二次封装,更强大了
    以上 5、6、7是通过模板生成PDF,其他都是需要熟悉该功能包,使用好里面的方法

模板库:

  1. freemarker
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值