最近项目需要实现PDF下载的功能,由于没有这方面的经验,从网上花了很长时间才找到相关的资料。整理之后,发现有如下几个框架可以实现这个功能。
1. 开源框架支持
iText,生成PDF文档,还支持将XML、Html文件转化为PDF文件;
Apache PDFBox,生成、合并PDF文档;
docx4j,生成docx、pptx、xlsx文档,支持转换为PDF格式。
比较:
iText开源协议为AGPL,而其他两个框架协议均为Apache License v2.0。
使用PDFBox生成PDF就像画图似的,文字和图像根据页面坐标画上去的,需要根据字数手动换行。
docx4j用来生成docx文档,提供了将WORD文档转换为PDF文档的功能,并不能直接生成PDF文档。
2. 实现方案
—
格式复杂
格式简单
数据量大
docx4j+freemarker
docx4j或PDFBox
数据量小
docx4j
PDFBox
2.1 纯数据生成PDF
1.docx4j,适用于生成格式简单或格式复杂且数据量小的PDF文档;
2.Apache PDFBox,适用于生成格式简单且数据量小的PDF文档。
1.docx4j
docx4j是一个开源Java库,用于创建和操作Microsoft Open XML(Word docx,Powerpoint pptx和Excel xlsx)文件。它类似于Microsoft的OpenXML SDK,但适用于Java。docx4j使用JAXB来创建内存中的对象表示,程序员需要花时间了解JAXB和Open XML文件结构 。
// word对象
WordprocessingMLPackage wordMLPackage = WordprocessingMLPackage.createPackage();
// 文档主体
MainDocumentPart mainDocumentPart = wordMLPackage.getMainDocumentPart();
// 换行符
Br br = objectFactory.createBr();
// 段落
P p = objectFactory.createP();
// 段落设置
PPr ppr = objectFactory.createPPr();
// 文字位置
Jc j