用JODConverter和openoffice生成PDF文档时候的PAGESIZE设置问题
2013-11-03 01:35
1176 查看
生成PDF的方法有很多
其中一个方法就是JODConverter http://www.artofsolving.com/opensource/jodconverter 和openoffice
来生成。
一般的如何转换这里就不介绍了。可以看看其他文章。例如:http://nopainnogain.iteye.com/blog/819432
这里要说的是如果我们要转换的excel等的纸张大小不是默认的A4的情况下如何处理。
一般转换的时候会有部分代码是下面这样。
用上面的代码转换的时候,
无论输入文档的纸张定义成多大,都会被当成默认的A4来进行的转换,转换后的PDF也是A4的。
转换的具体过程,其实跟手动操作是一样的,openoffice打开要转换的文档,再点转换PDF按钮。
打开文档后,默认A4大小,我们调整纸张大小,转换后可以得到希望大小的PDF文件。
经过查看,其实转换PDF时候的参数设置里面并没有设置纸张大小的选择。所以只能从加载文档的地方想办法。
查看源代码OpenOfficeDocumentConverter的convert方法的源代码,可以看到其中调用到OpenOfficeDocumentConverter的下面的方法:
上面的方法主要三个内容:
loadDocument是加载office文档的,通过loadProperties传递的参数。支持的参数都定义在jar包里面的document-formats.xml里面了,没有 纸张设置的参数。
我们要做的只能增加几个参数。这个参数的具体内容需要查阅openoffice的文档。
因为loadDocument方法是private的,我们只能想别的办法,好在 refreshDocument不是private
我们可以新建一个class继承OpenOfficeDocumentConverter 并override refreshDocument方法。
如果是excel有多个sheet,上面的部分只会影响第一个sheet,其他sheet还会以A4的大小输出。
上面的代码在JODConverter v2.x下面测试通过。
其中一个方法就是JODConverter http://www.artofsolving.com/opensource/jodconverter 和openoffice
来生成。
一般的如何转换这里就不介绍了。可以看看其他文章。例如:http://nopainnogain.iteye.com/blog/819432
这里要说的是如果我们要转换的excel等的纸张大小不是默认的A4的情况下如何处理。
一般转换的时候会有部分代码是下面这样。
// convert DocumentConverter converter = new OpenOfficeDocumentConverter(connection); converter.convert(inputFile, outputFile);
用上面的代码转换的时候,
无论输入文档的纸张定义成多大,都会被当成默认的A4来进行的转换,转换后的PDF也是A4的。
转换的具体过程,其实跟手动操作是一样的,openoffice打开要转换的文档,再点转换PDF按钮。
打开文档后,默认A4大小,我们调整纸张大小,转换后可以得到希望大小的PDF文件。
经过查看,其实转换PDF时候的参数设置里面并没有设置纸张大小的选择。所以只能从加载文档的地方想办法。
查看源代码OpenOfficeDocumentConverter的convert方法的源代码,可以看到其中调用到OpenOfficeDocumentConverter的下面的方法:
private void loadAndExport(String inputUrl, Map/*<String,Object>*/ loadProperties, String outputUrl, Map/*<String,Object>*/ storeProperties)
上面的方法主要三个内容:
document = loadDocument(inputUrl, loadProperties); refreshDocument(document); storeDocument(document, outputUrl, storeProperties);
loadDocument是加载office文档的,通过loadProperties传递的参数。支持的参数都定义在jar包里面的document-formats.xml里面了,没有 纸张设置的参数。
我们要做的只能增加几个参数。这个参数的具体内容需要查阅openoffice的文档。
因为loadDocument方法是private的,我们只能想别的办法,好在 refreshDocument不是private
我们可以新建一个class继承OpenOfficeDocumentConverter 并override refreshDocument方法。
public final static Size A5, A4, A3; public final static Size B4, B5, B6; public final static Size KaoqinReport; static { A5 = new Size(14800, 21000); A4 = new Size(21000, 29700); A3 = new Size(29700, 42000); B4 = new Size(25000, 35300); B5 = new Size(17600, 25000); B6 = new Size(12500, 17600); KaoqinReport = new Size(25400, 27940); } /* * XComponent:xCalcComponent * * @seecom.artofsolving.jodconverter.openoffice.converter. * AbstractOpenOfficeDocumentConverter * #refreshDocument(com.sun.star.lang.XComponent) */ @Override protected void refreshDocument(XComponent document) { super.refreshDocument(document); // The default paper format and orientation is A4 and portrait. To // change paper orientation // re set page size XPrintable xPrintable = (XPrintable) UnoRuntime.queryInterface(XPrintable.class, document); PropertyValue[] printerDesc = new PropertyValue[2]; // Paper Orientation // printerDesc[0] = new PropertyValue(); // printerDesc[0].Name = "PaperOrientation"; // printerDesc[0].Value = PaperOrientation.PORTRAIT; // Paper Format printerDesc[0] = new PropertyValue(); printerDesc[0].Name = "PaperFormat"; printerDesc[0].Value = PaperFormat.USER; // Paper Size printerDesc[1] = new PropertyValue(); printerDesc[1].Name = "PaperSize"; printerDesc[1].Value = KaoqinReport; try { xPrintable.setPrinter(printerDesc); } catch (IllegalArgumentException e) { e.printStackTrace(); } }
如果是excel有多个sheet,上面的部分只会影响第一个sheet,其他sheet还会以A4的大小输出。
上面的代码在JODConverter v2.x下面测试通过。
相关文章推荐
- 利用 jodconverter 和openoffice 结合 把doc、ppt 等一系列文档转换成pdf
- freemarker生成pdf时候td中不换行的问题 生成pdf时模板中引入图片路径问题
- 使用jodconverter转换文档为PDF
- [转]解决每次从cmd进入sqlplus,都得重新设置pagesize、linesize的问题
- 仿百度文库方案[openoffice.org 3+swftools+flexpaper](三) 之 使用JODConverter将office文档转换为pdf
- 【解决问题】〖软件应用〗将PDF文件页面分割为多部分生成新文档的方法
- java_javadoc 生成项目文档(设置编码解决中文乱码问题)
- openOffice+jodConverter+jquery.media.js在线预览office、pdf、txt等文档
- 仿百度文库方案[openoffice.org 3+swftools+flexpaper](三) 之 使用JODConverter将office文档转换为pdf
- jodconverter纯文本文件转为pdf时中文问题解决方案
- 使用JODConverter转换文档为PDF
- 仿百度文库解决方案(三)- 利用JODConverter把文档转换成pdf格式
- Easy-UI 1.3 datagrid 分页大小pageSize设置在IE浏览器的文档模式为9下无效 且页面出现异常
- 用java写的jodconverter借用openoffice来转换office成pdf的示例代码
- ItextSharp生成PDF页脚设置问题
- (三)java实现文档的在线浏览-使用JODConverter将office文档转换为pdf
- Java iText 动态 生成 PDF 文档表格中文问题
- 创建生成word文档时候,iis出现无权限的问题{000209FF-0000-0000-C000-000000000046}
- JodConverter纯文本文件转PDF乱码问题
- 仿百度文库方案[openoffice.org 3+swftools+flexpaper](三) 之 使用JODConverter将office文档转换为pdf