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

一些澄清:

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

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

编辑:下面有几个很好的答案,就我目前的情况而言,每个答案都有自己的缺点。很难从他们身上选出“最终答案”。我想我会保持开放,并希望能够创建更好的解决方案。

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

有帮助吗?

解决方案

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 等)。

以下是一些有用的网站:

其他提示

我认为 阿帕奇兴趣点 可以完成这项工作。根据您的目标用途,可能出现的问题可能是由 HWPF 仍处于早期开发阶段引起的。

健康水务基金会是使用(仅)Java的Microsoft Word 97(-XP)文档读取和编写Microsoft Word 97(-XP)文档的API集。

你可以用这个: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

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

如果您需要 MS Word 输出格式,它将把文档输出为 DOC、DOCX 或 RTF。所有这些都得到同样好的支持。

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

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

我是 Aspose.Words 团队的成员。

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

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

尝试 Aspose.Words 对于java。

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

Aspose.Words for Java 支持 DOC、OOXML、RTF、HTML 和 OpenDocument 格式。使用 Aspose.Words,您可以生成、修改和转换文档,而无需使用 Microsoft Word。

您可以使用 Java COM 桥,例如 雅各布. 。如果是来自客户端,另一种选择是使用 Javascript。

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

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

文本 真的很容易使用。

如果您需要文档文件,您可以致电 阿比字 (免费的轻量级多操作系统文本处理器)从命令行,它有几个转换格式转换选项。

文档X4J 或 poi,两者都是 ASL v2

@奇迹计算:iText 实际上是免费且开源的

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

有人有过以这种方式使用 iText 的经验吗?

Bill,从编程角度来看,POI 和 iText API 非常相似。我过去曾使用过这两种方法,发现它们既易于使用又具有良好的文档记录。

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

不过我认为 RTF 的格式与 DOC 相比是有限的。我不知道您是否能够实现您正在寻找的高级功能(表格、内联图像),而不会遇到相当多的麻烦(如果有的话)。

鉴于您所说的 HWPF 没有足够的功能来满足您的需求(我只处理过 POI 的 Excel 方面),您的 最好的选择可能是说服当局相信 PDF 是最适合这项工作的技术.

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

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

有人有过以这种方式使用 iText 的经验吗?

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

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

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top