最近一个项目,客户要求输出到XLS文件,等开发的差不多了之后,希望还能输出到PDF,真是。。。
当然现在开源软件,这么多,这都不算啥,主要的大路有两条:
一,直接通过itext或者PDFbox之类的,重新再实现一遍,当然这个比较费力,这里不再叙述了。
二,通过输出的XLS文件,直接转到PDF,这个比较的省力,稍微调查了下,方法有很多,我们主要介绍这条大路。
稍微列举一下,
1,使用Office的SDK套件,2007以后的EXCEL Object(12.0+?)应该可以直接保存成PDF。
微软的东西,优势嘛,肯定是一致性了,和你Office通过另存生成的PDF因为调用的模块一样,显然输出的结果也是一样一样的。劣势,微软的东西,微软依存,Linux,java什么的基本没戏,而且微软官方声明Office的SDK设计基于用户交互,所以用它开发服务端微软自己也不推荐,因为比如遇到密码弹个对话框出来的现象是一定的。
2,使用OpenOffice的功能
首先本地或者局域网安装有OpenOffice或者LibreOffice,其实是一套东西。其实这个转换就是调用OpenOffice的功能。使用一个叫jodconverter的JAR包,虽然已经停止维护了,但是还是能正常工作,其实这个JAR就是启动一下OpenOffice并且把操作对象文件通过一个端口传送到OpenOffice处理。
实现方法:
public static void method2() {
DefaultOfficeManagerConfiguration config = new DefaultOfficeManagerConfiguration();
//config.setOfficeHome("C:\\Program Files (x86)\\OpenOffice 4");
config.setOfficeHome("C:\\Program Files (x86)\\LibreOffice 5");
config.setPortNumber(8100);
OfficeManager officeManager = config.buildOfficeManager();
officeManager.start();
OfficeDocumentConverter converter = new OfficeDocumentConverter(officeManager);
converter.convert(new File(strInFilePath), new File(strOutFilePath2));
officeManager.stop();
}
3,使用第三方的Java库类
http://www.aspose.com/
用试用版测试了一下,这个实现起来比较简单,且效果和Office一致。
正在评估购买,一个开发者Linsence大概999美元,考虑到公司开发一套的成本,似乎价格很合理。可以商业部署。
具体实现就两行
String strInFilePath = "D://Demo.xlsx";
String strOutFilePath1 = "D://Demo1.pdf";
workbook = new Workbook(strInFilePath);
workbook.save(strOutFilePath1);