Java中的Word文档创建API

时间:2010-01-02 08:57:32

标签: java ms-word apache-poi

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

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

8 个答案:

答案 0 :(得分:9)

之前我曾与POI合作过,它肯定能够生成Word文档。但是魔鬼在细节中。

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

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

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

更新:我在此期间还有更多想法。

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

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

Jacob是Java的COM接口;它基本上允许您“远程控制”Windows程序,如Word和Excel。我上面链接的文件不是雅各布自己的网站,而是单页的“千篇一律”使用雅各布的食谱。该项目本身位于SourceForge上:http://sourceforge.net/projects/jacob-project/但人们声称,正确地说文档有点缺乏。

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

答案 1 :(得分:4)

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

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

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

答案 2 :(得分:3)

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

他们说POI仍处于发展阶段,但我一直在生产环境中使用它,目前效果还不错。

答案 3 :(得分:2)

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

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

我会选择iText。

答案 4 :(得分:2)

我知道这个问题有点陈旧,但我想很多人仍然会在搜索引擎中找到这个问题,所以我发布了另一种可能性来做你想做的事情:

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

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

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

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

答案 5 :(得分:1)

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

请参阅以下链接:Aspose.Word for Java

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

Java版本目前并不像.Net版本那样功能齐全,但主要核心功能就在那里,他们很快就会努力推出功能相当的版本。

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

答案 6 :(得分:1)

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

答案 7 :(得分:1)