Java中的Word文档创建API

9
我想使用模板创建一个Word文档,替换一些变量(字段)并将其另存为新的Word文档。
我考虑使用Apache POI,http://poi.apache.org/ 它是否最适合此目的? 你能分享一下你对它的印象吗?

4
这里是链接:https://dev59.com/oXVC5IYBdhLWcg3wtzqs意思是:寻找用于创建Word文档的Java API的建议。 - JCasso
8个回答

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。我上面提供的链接并不是Jacob自己的网站,而是一个包含使用Jacob的“模板”配方的单个页面。该项目本身位于SourceForge上:http://sourceforge.net/projects/jacob-project/但人们声称,文档缺乏详细说明。
Jacob相对于其他所有解决方案具有优势,因为您正在处理“真正”的Word,因此您可以使用Word的所有功能。如果您的文档存在无法使用POI或通过RTF格式处理的详细方面,则这将是一种替代方案。

5
这显然太晚了,但自2013年以来,有一种更好、更灵活的解决方案来创建Word文档。我使用docx4j比POI更成功。请点击http://www.docx4java.org/trac/docx4j获取更多信息。

3

我不确定POI中的Word文档支持的确切状态,但根据POI网站上的信息,工作仍在进行中(无法确定具体含义)。因此,在这个时候,我不会使用POI,而是尝试生成RTF文档。为此,您可以:

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

我会选择iText。


3
如果您使用模板,不想从头创建Word文档,就可以使用POI作为解决方案。您打开模板并选择要替换的区域。
虽然他们说POI仍在发展过程中,但我目前在生产环境中使用它,它的表现非常良好。

我遇到的问题是:我的Word模板有一个需要编辑的页眉。据我所知,POI不允许我编辑页眉。 - Arthur Ronald
@Valentin Rocher,你没有遇到这种方法的一些问题吗,比如它并不总是有效? - fatiDev
请参考我的问题,链接在这里:http://stackoverflow.com/users/1619243/fatidev?tab=questions - fatiDev

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

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

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

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

PS:用户可能会注意到文件扩展名不是doc而是xml,并因此责怪您,但没关系...只需将其重命名为doc,Word将识别格式,每个人都会感到高兴;)


1

您应该研究一下Aspose.Words组件。他们最近开始提供该组件的Java版本。

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

该组件支持Word自动化、创建和高级功能,如邮件合并,无需在计算机上安装Microsoft Word实例。真正的好处是您能够在实际的Word文档环境中工作,而不必通过创建RTF等方式来进行妥协。

目前Java版本的功能不如.Net版本完整,但主要核心功能已经具备,并且他们正在努力推出一个功能相当的版本。

此外,如果您购买Java版本,您将获得一年免费升级/支持,以便随着新版本的发布而更新。


1

如果你正在处理docx文档,那么docx4j是一个选择。像POI一样,它是开源的。


1

恭喜你。我会在本周尝试它。 - Arthur Ronald

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接