9

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

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

4

8 回答 8

9

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

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

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

如果您在一个环境中工作或为坚持您生成的文档.DOC不是.RTF. .

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

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

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

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

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

于 2010-01-02T10:47:18.240 回答
4

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

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

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

于 2014-09-18T19:42:08.873 回答
3

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

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

于 2010-01-02T10:23:44.220 回答
2

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

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

我会选择 iText。

于 2010-01-02T09:38:22.777 回答
2

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

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

这是一个如何做到这一点的例子: http ://dev-notes.com/code.php?q=10

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

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

于 2011-10-12T10:43:19.137 回答
1

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

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

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

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

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

于 2010-01-02T11:28:20.180 回答
1

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

于 2010-01-02T20:43:41.353 回答
1

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

于 2010-07-26T07:07:18.177 回答