【问题标题】:Word document creation API in JavaJava中的Word文档创建API
【发布时间】:2014-09-19 03:42:08
【问题描述】:

我想使用模板创建一个word文档,替换一些变量(字段)并将其保存为一个新的word文档。

我在考虑使用 Apache POI,http://poi.apache.org/ 是否最适合此目的? 你能分享一下你的印象吗?

【问题讨论】:

标签: java ms-word apache-poi


【解决方案1】:

我以前使用过 POI,它当然可以生成 Word 文档。但魔鬼在细节中。

Word 具有数千个功能:您可以将编号列表从 #13 开始并带有负缩进放入一个表格的两个连接单元格中,该表格包含在另一个表格中,而另一个表格本身就是项目符号列表的一部分……您明白了。当 POI 文档说它们是一项正在进行的工作时,这反映了试图赶上(对我们而言,未记录的)Word 规范的永恒状态。

POI 很好地支持具有相当“正常”的一组使用功能的文档,其接口和方法合理且一致,但有时需要一些工作。但正如 Pascal 所说,RTF 也支持具有不太过分的功能集的文档。 我几乎没有“做”RTF 的经验,但它可能比使用 POI 简单一些。

如果您在一个环境中工作或为坚持将您生成的文档为 .DOC 而不是 .RTF 的客户工作,那么 POI 几乎是您唯一的选择,除非您可以引入一个使用将 RTF 转换为 DOC 的办公自动化位。

更新:与此同时,我还有一些想法。

几乎可以在任何平台上使用 POI 或创建 RTF 文档。例如,在我的工作中,所有执行此类处理的服务器都运行 Linux。

但是,如果您的程序可能在 Windows 下运行,还有另一种选择:Jacob http://www.land-of-kain.de/docs/jacob/

Jacob 是 Java 的 COM 接口;它本质上允许您“远程控制”Windows 程序,例如 Word 和 Excel。我在上面链接到的文档不是 Jacob 自己的网站,而是指向一个包含使用 Jacob 的“千篇一律”食谱的页面。该项目本身在 SourceForge 上:http://sourceforge.net/projects/jacob-project/ 但人们声称,这是正确的,文档有点缺乏。

Jacob 优于您处理“真实”Word 的所有其他解决方案,因此您可以使用 Word 的所有功能。如果您的文档的某些细节方面无法使用 POI 或通过 RTF 格式处理,这将是一种替代方法。

【讨论】:

    【解决方案2】:

    这显然为时已晚,但自 2013 年以来,word 文档创建有了更好、更灵活的解决方案。

    http://www.docx4java.org/trac/docx4j

    我使用 docx4j 比使用 POI 更幸运。

    【讨论】:

      【解决方案3】:

      如果您使用模板,并且不想从头开始创建 word 文档,据我所知,POI 是一个很好的解决方案。您打开模板并选择要替换的区域。

      他们说 POI 仍然是开发环境,但我一直在生产环境中使用它,目前效果很好。

      【讨论】:

      • 我遇到的问题是:我的单词模板有一个需要编辑的标题。据我所知,POI 不允许我编辑标题。
      • @Valentin Rocher ,你没有遇到这种方法的一些问题,比如这不是一直有效
      【解决方案4】:

      我不确定 POI 中 Word 文档支持的确切状态,但根据 POI 网站,工作仍在进行中(无法准确说出这意味着什么)。所以,此时,我不会使用 POI,而是尝试生成 RTF 文档。为此,您可以:

      • 使用RTFTemplate,这是一个 RTF 到 RTF 引擎,可以生成 RTF 文档作为 RTF 模型和数据合并的结果。
      • 使用iText,它主要是PDF 生成器,但也可以使用generate RTF
      • 构建您自己的自定义解决方案(但我不会这样做)。

      我会选择 iText。

      【讨论】:

        【解决方案5】:

        我知道这个问题有点老了,但我认为很多人仍然可以通过搜索引擎找到这个问题,所以我在这里发布了另一种可能性来做你想做的事:

        如果唯一的目标是拥有一个 Word 模板并替换其中的某些值,您可以考虑将 Word 模板保存为单个 xml(不是 docx),然后使用简单的 Java 处理它,而无需任何框架。如果您想做更多事情(例如创建列表或表格),您还可以考虑在加载像 POI 这样的框架之前了解 xml 格式并编写自己的帮助程序。

        以下是有关如何执行此操作的示例: http://dev-notes.com/code.php?q=10

        这是快速版本,如果你想要更好的版本,你可以尝试使用 XML 处理器。

        PS:用户可能会注意到文件扩展名不是 doc 而是 xml,他们可能会为此责备你,但没关系...只需将其重命名为 doc,word 将识别格式,每个人都会再次高兴 ;)

        【讨论】:

          【解决方案6】:

          您应该查看 Aspose.Words 组件。他们最近开始提供该组件的 Java 版本。

          查看以下链接:Aspose.Word for Java

          这支持 Word 自动化、创建和高级功能,例如邮件合并,而不需要机器上的 Microsoft Word 实例。真正的好处是您能够在实际的 Word 文档的上下文中工作,而不必通过创建 RTF 等来妥协。

          Java 版本目前的功能不如 .Net 版本,但主要的核心功能已经存在,并且他们正在努力尽快推出功能等效的版本。

          此外,如果您购买 Java 版本,您将在创建新版本时获得一年免费升级/支持。

          【讨论】:

            【解决方案7】:

            如果您正在使用 docx 文档,则可以选择 docx4j。与 POI 一样,它是开源的。

            【讨论】:

              【解决方案8】:

              我创建并使用了这个:http://code.google.com/p/java2word

              【讨论】:

              • 恭喜。这周我会试试的。
              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2018-09-16
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多