【问题标题】:Convert ODT to doc/rtf format in java在java中将ODT转换为doc/rtf格式
【发布时间】:2015-07-17 22:57:06
【问题描述】:

我有一个应用程序可以踢出各种格式的各种文档。这是它的主要目的。我对大多数非 excel 文档都使用了 japser,现在我意识到我可能犯了一个错误! (我买不起 Aspose !)。我在 Windows 环境中操作。

基本上许多文档都是以 odt 和 doc 格式生成的。 Word 版本的要求是 doc,以便与最大数量的用户(我的组织之外)兼容。

为此,我以 rtf 格式导出到 doc 后缀文件。到目前为止一切顺利,除了表格被导出为文本输入框而不是表格,并且用户非常不高兴他们不能在单元格之间进行制表符(我们在测试中错过了这一点)。这似乎无法简单地在报告配置中解决。 rtf 导出根本不会将表导出为表。

我考虑过保存为 docx 并使用 poi 转换为 doc,但这似乎并不那么简单

  • xwpf 和 hwpf 之间缺少接口。
  • jasper 导出到 docx 中似乎存在一个错误,它将边距设置为 0 并导致打印警告。可能是可以克服的,但由于这是一个快速而肮脏的修复想法,它开始看起来比这样一个凌乱的解决方案付出更多的努力。

这让我有了将 odt 文件转换为 doc 的想法。我已经快速浏览了 jodconverter,但似乎很久没有人对此做过任何事情,我不相信这是要走的路(我也不确定它是否与 OpenOffice 4.1 兼容,这就是我已经下载了,虽然我想我可以退出那个?)。

所以这个问题的主要部分是 - 是否有一种相当简单的方法可以在 java 代码中将 odt 转换为 doc/rtf(我真的不希望将文档发送到外部转换站点的开销)。我想对于任何严肃的 Jasper 大师来说都有一个问题 - 有没有办法将表格导出为 rtf/doc 格式,并将表格作为表格对象而不是相邻文本输入框的集合?

我已尝试将其完整地列出,如果有点冗长,我深表歉意。非常感谢任何帮助(解决方案越简单越好!)。

【问题讨论】:

  • odt-to-docx 转换可以在纯 XML 级别(XSLT + jar:file: URI FileSystem)上完成。这将需要一些可怕的维护(XML 和 XSLT)。但似乎比过大的依赖更可靠。但后来有人想知道为什么 docx 一代如此缺乏。
  • 是的,最初该规范是针对 docx 的,但我对 XSLT/XSL-FO 还是很陌生,因为我对这些技术还很陌生,而且我的盘子已经够多了。不过,我现在开始希望自己能咬紧牙关!
  • 使用 XSLT 进行开发非常耗时(小步骤,有时令人费解),因此很难做出选择。另一方面,它提供了。
  • 我已经准备好转到 docx,所以我现在要离开这个问题(!)。我只是想指出 Jasper 中的边距错误是我的错,而不是 Jasper 错误(不再是),以供将来参考。我已将我的 jasper eclipse 插件更新到最新版本,但我的应用程序本身中的 jar 没有更新(doh!)。

标签: java jasper-reports apache-poi odt


【解决方案1】:

您可以尝试JODConverter,它在 ODT 和 DOC(X) 之间进行转换,但是关于这个库的文档很少,并且不再维护。

根据小文档有(herehere),这里有一个将odt转换为doc文件的小例子(你需要在本地安装OpenOffice或LibreOffice)

OfficeManager officeManager = new DefaultOfficeManagerConfiguration().setOfficeHome(new File("<path to office home>")).buildOfficeManager();
officeManager.start();

OfficeDocumentConverter converter = new OfficeDocumentConverter(officeManager);
converter.convert(new File("test.odt"), new File("test.doc"));

officeManager.stop();

&lt;path to office home&gt; 必须替换为 LibreOffice 或 OpenOffice 主目录的路径(包含soffice.bin 文件的目录)。

【讨论】:

  • 谢谢。我曾考虑过 jodconverter(如前所述),但似乎很久没有人接触过它,以至于我对将它添加到新应用程序中有点谨慎。如果没有其他解决方案出现,那么这可能是我唯一能做的事情。因为我不能在一两个星期内解决这个问题,所以如果没有人想出一个奇迹般的解决方案,我会暂时把这个问题打开一段时间,然后将其标记为一个好的答案!再次感谢。
猜你喜欢
  • 2011-04-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多