112

我有一个新的应用程序,我将在其中生成一个包含表格、图表、目录和文本的 Word 文档。为此使用什么好的 API?你有多确定它支持图表、ToCs 和表格?使用它们有哪些隐藏的陷阱?

一些澄清:

  • 我无法输出 PDF,他们需要 Word 文档。
  • 他们使用的是 MS Word 2003(或 2007),而不是 OpenOffice
  • 应用程序在 *nix app-server 上运行

如果我可以从模板文档开始,然后用表格、图表等填充一些空格,那就太好了。

编辑:以下几个很好的答案,就我目前的情况而言,每个都有自己的缺点。很难从他们那里选出一个“最终答案”。想我会把它打开,并希望能创造出更好的解决方案。

编辑:OpenOffice UNO 项目似乎确实最接近我的要求。虽然 POI 肯定更主流,但它对于我想要的来说太不成熟了。

4

16 回答 16

56

2007 年,我的项目成功地使用 OpenOffice.org 的通用网络对象(UNO) 接口从 Java Web 应用程序(Struts/JSP 框架)以编程方式生成 MS-Word 兼容文档 (*.doc) 以及相应的 PDF 文档。

OpenOffice UNO 还允许您构建与 MS-Office 兼容的图表、电子表格、演示文稿等。我们能够动态构建复杂的 Word 文档,包括图表和表格。

我们通过使用带有书签插入的模板 MS-Word 文档来简化流程,软件在其中插入内容,但是,您可以完全从头开始构建文档。目标是让软件生成报告文档,最终用户可以共享和进一步调整,然后将其转换为 PDF 以进行最终交付和存档。

如果您希望用户使用 OpenOffice 而不是 MS-Office,您可以选择以 OpenOffice 格式生成文档。在我们的例子中,用户想要使用 MS-Office 工具。

UNO 包含在 OpenOffice 套件中。我们只是将我们的 Java 应用程序链接到套件中与 UNO 相关的库。OpenOffice 软件开发工具包(SDK) 包含示例应用程序和 UNO 开发人员指南。

我还没有调查过最新的 OpenOffice UNO 是否可以生成 MS-Office 2007 Open XML 文档格式。

OpenOffice UNO 的重要之处在于:

  1. 它是免费软件
  2. 它支持多种语言(例如 Visual Basic、Java、C++ 等)。
  3. 它与平台无关(Windows、Linux、Unix 等)。

以下是一些有用的网站:

于 2008-11-02T16:05:55.173 回答
30

我认为Apache POI可以完成这项工作。一个可能的问题取决于您的目标用途,这可能是由于 HWPF 仍处于早期开发阶段。

HWPF 是一组 API,用于使用(仅)Java 读取和写入 Microsoft Word 97(-XP) 文档。

于 2008-10-14T23:17:05.230 回答
9

你可以使用这个: http ://code.google.com/p/java2word

我实现了这个名为 Java2Word 的 API。只需几行代码,您就可以生成一个 Microsoft Word 文档。

例如。:

IDocument myDoc = new Document2004();
myDoc.getBody().addEle(new Heading1("Heading01"));
myDoc.getBody().addEle(new Paragraph("This is a paragraph...")

有一些示例如何使用。基本上你需要一个 jar 文件。如果您需要任何进一步的信息,请告诉我如何设置它。

*我写这个是因为我们在一个项目中有一个真正的必要性。更多在我的博客:

http://leonardo-pinho.blogspot.com/2010/07/java2word-word-document-generator-from.html *

欢呼莱昂纳多

编辑:链接中的项目移至https://github.com/leonardoanalista/java2word

于 2010-07-26T03:22:35.000 回答
5

试试 Aspose.Words for Java,它可以在任何安装了 Java 的操作系统上运行。

如果您需要 MS Word 输出格式,它会将文档输出为 DOC、DOCX 或 RTF。所有的支持都一样好。

使用此 API,您可以从头开始创建文档,从节点开始并设置它们的格式属性。您还可以使用 DocumentBuilder 提供更高级别的方法,例如创建表格行、插入字段等。或者您可以在现有的预先创建的文档之间复制/加入/移动部分,比如您想组装一份合同,只需抓取并复制来自多个文档的片段和 Aspose.Words 将在生成的文档中正确地合并样式、列表格式等。

您将能够使用 Aspose.Words 插入 TOC 字段,但从今天开始,在 Microsoft Word 中打开文档时,TOC 字段将需要更新字段。但是,我们将在 2010 年初发布对 TOC 字段的全面支持。例如,它将像 MS Word 那样构建完整的 TOC。

我在 Aspose.Words 团队。

于 2009-12-21T21:59:55.357 回答
4

试试Aspose.Words for java。

Aspose.Words for Java 是一个用于 Java 的高级(商业)类库,使您能够直接在 Java 应用程序中执行大量文档处理任务。

Aspose.Words for Java 支持 DOC、OOXML、RTF、HTML 和 OpenDocument 格式。使用 Aspose.Words,您可以在不使用 Microsoft Word 的情况下生成、修改和转换文档。

于 2008-12-08T10:57:50.297 回答
4

它只被简单地提到过一次,所以我想提到 docx4j 库,因为我在 docx4j 上取得的成功比其他任何事情都多。Apache POI 对 Word 文档的支持不是很好。此外,与 Aspose.Words 不同的是,docx4j 是一个开源库。

唯一的缺点是使用 docx4j 您必须创建 Office Open XML (docx) 格式文档,而不是基于 OLE2 (doc) 格式的文档。这是 Word 2007 的默认格式,但 Word 2003 和更早版本的用户需要安装兼容包。

于 2010-02-08T01:17:51.147 回答
3

我使用Aspose.Words在 .NET 中进行邮件合并。我相信他们也有 Java 版本。

于 2008-10-14T23:26:46.753 回答
2

您可以使用像JACOB这样的 Java COM 桥接器。如果它来自客户端,另一种选择是使用 Javascript。

于 2008-10-14T23:17:21.500 回答
2

有一个名为 JODConverter 的工具,它可以连接到开放式办公室以公开其文件格式转换器,还有可以发布到的 web 应用程序(位于 tomcat 中)和命令行工具的版本。我一直在使用 html 并成功转换为 .doc 和 pdf,它在一个相当大的项目中,还没有上线,但我想我会使用它。 http://sourceforge.net/projects/jodconverter/

于 2009-02-09T19:11:34.127 回答
1

我过去开发过纯 XML 的 word 文件。我使用了 .NET,但语言应该无关紧要,因为它是真正的 XML。这不是最容易做的事情(几年前有一个项目需要它。)这些只适用于 Word 2007 或更高版本 - 但您所需要的只是描述每个标签功能的 Microsoft 白皮书。您可以像使用 Word 一样使用标签完成您想要的所有操作(当然一开始会更痛苦。)

于 2008-10-14T23:27:33.290 回答
1

docx4j或 poi,两者都是 ASL v2

@wondersofcomputing:iText 实际上是免费和开源的

于 2009-03-27T02:52:58.553 回答
1

iText真的很容易使用。

如果您需要 doc 文件,您可以从命令行调用abiword(免费轻量级多操作系统文本处理器),它有几个转换格式转换选项。

于 2009-05-04T16:06:20.343 回答
1

经过一番研究,我发现了 iText,一个 PDF 和 RTF 文件创建 API。我想我可以使用 RTF 生成创建一个 Doc 可读文件,然后可以使用 Doc 进行编辑并重新保存。

有人对以这种方式使用的 iText 有任何经验吗?

Bill,从编程的角度来看,POI 和 iText API 非常相似。我过去曾使用过这两种方法,发现它们都易于使用且有据可查。

使用 iText,您可以获得能够在格式(RTF 和 PDF)之间切换的优势,只需对代码进行少量更改。如果我没记错的话,内容是使用相同的调用布局的,然后使用几行代码设置为 PDF 或 RTF。

但是,我相信 RTF 中的格式与 DOC 相比是有限的。我不知道您是否能够毫不费力地实现您正在寻找的高级功能(表格、内联图像),如果有的话。

鉴于您所说的 HWPF 没有足够的功能来满足您的需求(我只处理了 POI 的 Excel 方面),您最好的选择可能是说服那些认为 PDF 是这项工作的最佳技术的权力

于 2009-05-04T16:24:20.843 回答
0

还有另一种可能性,因为这是一个网络应用程序。

我能够渲染一个将 MIME 类型设置为“application/msword”的 HTML 页面,这导致浏览器生成 Word,它很好地导入了 html,允许编辑和保存,就像我输出一个真正的 Word 文档一样。

表格工作正常,但我还没有开始工作的图像。它可能就像 HTML 中的一个标签一样简单,或者我可能必须流式传输包含二进制图像数据的响应的单独部分,或者我还没有想出的其他方法。:)

于 2008-10-15T22:20:31.457 回答
0

尽管这比请求晚得多,但它可能会帮助其他人。 Docmosis提供了一个 Java API,用于使用文档作为模板创建 doc、pdf、odt 格式的文档。它使用 OpenOffice 作为引擎来执行格式转换。文档操作和填充由 Docmosis 本身执行。

于 2010-05-16T03:40:21.067 回答
-1

经过一番研究,我发现了iText,一个 PDF 和 RTF 文件创建 API。我想我可以使用 RTF 生成创建一个 Doc 可读文件,然后可以使用 Doc 进行编辑并重新保存。

有人对以这种方式使用的 iText 有任何经验吗?

于 2008-10-15T01:21:08.550 回答