Java 生成PDF文档的示例代码

网友投稿 457 2023-01-24


Java 生成PDF文档的示例代码

最近项目需要实现PDF下载的功能,由于没有这方面的经验,从网上花了很长时间查找了相关的资料。整理之后,发现有几个框架可以实现这个功能。

1. 开源框架支持

iText,生成PDF文档,还支持将XML、Html文件转化为PDF文件;

Apache PDFBox,生成、合并PDF文档;

docx4j,生成docx文档,支持转换为PDF格式。

2. 实现方案

比较了一番后,采用了FreeMarker+docx4j+Apache PDFBox的方案:

maven依赖

org.apache.pdfbox

pdfbox

2.0.11

org.docx4j

docx4j

3.3.7

org.apache.xmlgraphics

batik-util

1.10

org.docx4j

docx4j-export-fo

3.3.6

dom4j

dom4j

1.6.1

net.coobird

thumbnailator

0.4.8

com.alibaba

fastjson

1.2.47

步骤

1 把pdf文档对应的word(docx)制作出来

2 把word文档另存为xml文件

另存为xml

3 将xml文件制作为freemarker模版(ftl)文件

制作模版文件

4 将数据和ftl文件组mQlpU装为xml文本

Map map = new HashMap<>();

map.put("name", "小明");

map.put("address", "北京市朝阳区");

map.put("email", "xiaoming@abc.com");

StringWriter stringWriter = new StringWriter();

BufferedWriter writer = new BufferedWriter(stringWriter);

template.process(map, writer);

String xmlStr = stringWriter.toString();

5 使用docx4j将xml文本加载为word文档对象

ByteArrayInputStream in = new ByteArrayInputStream(xmlStr.getBytes());

WordprocessingMLPackage wordMLPackage = WordprocessingMLPackage.load(in);

6 使用docx4j将word文档转存为pdf文档

String outputfilepath = "/Users/xiaoming/简历.pdf";

Docx4J.toPDF(wordMLPackage, new FileOutputStream(new File(outputfilepath)));

7 使用Apache PDFbox将多个pdf文档合为一个

String folderName = "/Users/xiaoming/pdfs";

String destPath = "/Users/xiaoming/all.pdf";

PDFMergerUtility mergePdf = new PDFMergerUtility();

String[] filesInFolder = getFiles(folderName);

Arrays.sormQlpUt(filesInFolder, new Comparator() {

@Override

public int compare(String o1, String o2) {

return o1.compareTo(o2);

}

});

for (int i = 0; i < filesInFolder.length; i++) {

mergePdf.addSource(folderName + File.separator + filesInFolder[i ]);

}

mergePdf.setDestinationFileName(destPath);

mergePdf.mergeDocuments(MemoryUsageSetting.setupMainMemoryOnly());


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Redisson分布式锁源码解析
下一篇:怎么无密码连接共享文件夹(怎么无密码连接共享文件夹呢)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~