最近的项目需要实现PDF下载功能,但由于没有这方面的经验,在网上查找相关资料花了很长时间。 经过整理,我发现有几个框架可以实现这一功能。
1 .支持开放源码框架
还支持iText、生成PDF文档、将XML和Html文件转换为PDF文件;
生成和合并Apache PDFBox、PDF文档;
支持docx4j、docx文档生成和转换为PDF格式。
2 .实现方案
经过比较,采用了FreeMarker docx4j Apache PDFBox的方案:
七喜依存
org.apache.pdfbox
pdf盒
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
快速强森
1.2.47
步骤
创建与pdf文档对应的word(Docx )
将word文档另存为xml文件
另存为xml
将xml文件创建为freemarker模板(ftl )文件
创建模板文件
4将数据和ftl文件组装为xml文本
Map map=new HashMap (;
map.put('name )、'清脆的大白);
map.put (地址,)北京市朝阳区);
map.put(email,) xiaoming@abc.com);
字符串写入器=new string writer (;
bufferedwriterwriter=newbufferedwriter (字符串写入器;
template.process(map,writer );
string xmlstr=string writer.tostring (;
使用docx4j将xml文本作为word文档对象加载
bytearrayinputstreamin=newbytearrayinputstream (xmlstr.getbytes );
wordprocessingmlpackagewordmlpackage=wordprocessingmlpackage.load (in;
使用docx4j将word文档导出为pdf文档
stringoutputfilepath='/users/Xiaoming /简历. pdf ';
DOCx4j.topdf(wordmlpackage,newfileoutputstream ) new file (output file path );
使用Apache PDFbox将多个pdf文档合并在一起
字符串文件夹名称='/users/Xiaoming/pdfs ';
string destpath='/users/Xiaoming/all.pdf ';
pdfmergerutilitymergepdf=newpdfmergerutility (;
string [ ] files in folder=getfiles (foldername;
Arrays.sort(filesinfolder,new Comparator ) )
@Override
公共int比较(String o2,String o2 ) {
returnO1.comPareto(O2;
}
);
for(intI=0; i filesInFolder.length; I ) {
merge pdf.addsource (foldername file.separatorfilesinfolder [ I ];
}
merge pdf.setdestinationfilename (destpath );
merge pdf.merge documents (memoryusagesetting.setupmainmemoryonly );
希望以上是正文的全部内容,对大家的学习有帮助。 另外,我希望你支持很多编剧。