是否有 JavaAPI 可以创建丰富的 Word 文档?

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

一些澄清:

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

It'd be nice if I could start with a template doc and just fill in some spaces with tables, graphs, etc.

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

编辑: OpenOfficeUNO 项目似乎与我要求的最接近。虽然 POI 当然更加主流,但它对于我想要的东西来说太不成熟了。

155507 次浏览

我认为 阿帕奇警察可以胜任这项工作。一个可能的问题取决于使用您的目标可能会造成的事实,HWPF 仍然处于早期开发。

HWPF 是用于读取和 writing Microsoft Word 97(-XP) (只)使用 Java 的文件。

您可以使用类似于 JACOB的 JavaCOM 桥。如果是从客户端开始,另一种选择是使用 Javascript。

我用 安静,说话在.NET 中做邮件合并。我相信他们也有一个 Java 版本。

我过去开发过纯基于 XML 的 word 文件。我用过。NET,但是语言应该不重要,因为它是真正的 XML。这不是一件容易的事情(几年前有一个项目需要它)这些标签只能在 Word2007或更高版本中使用,但是您只需要微软的白皮书来描述每个标签的功能。您可以像使用 Word 一样使用标记完成所有您想要完成的任务(当然一开始会有一点痛苦)

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

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

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

我能够呈现一个将 MIME 类型设置为“ application/mword”的 HTML 页面,这导致浏览器产生了导入 HTML 的 Word,允许编辑和保存,就像我输出一个真正的 Word 文档一样。

桌子没问题,但是图像我还没处理好。它可能就像 HTML 中的一个标记一样简单,或者我可能需要以二进制形式传输包含图像数据的响应的一个单独部分,或者我还没有想到的其他方法。:)

2007年,我的项目成功地使用 OpenOffice.org 的 Universal Network Objects(UNO)接口以编程方式生成与 MS-Word 兼容的文档(* 。Doc) ,以及来自 JavaWeb 应用程序(Struts/JSP 框架)的相应 PDF 文档。

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

我们通过使用带插入书签的 MS-Word 文档模板来简化这个过程,然而,您可以完全从头开始构建文档。目标是让该软件生成报告文件,最终用户可以共享和进一步调整这些文件,然后将其转换为 PDF 格式,以便最终交付和归档。

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

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

我还没有调查最新的 OpenOfficeUNO 是否可以生成 MS-Office2007OpenXML 文档格式。

关于 OpenOffice UNO 的重要事情是:

  1. 这是免费软件
  2. 它支持多种语言(例如 VisualBasic、 Java、 C + + 等)。
  3. 它是独立于平台的(Windows、 Linux、 Unix 等)。

以下是一些有用的网站:

Try Aspose.Words for java.

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

等等。Word for Java 支持 DOC、 OOXML、 RTF、 HTML 和 OpenDocument 格式。和阿斯波斯一起。无需使用 MicrosoftWord 即可生成、修改和转换文档的单词。

有一个叫做 JODConverter 的工具,它可以挂接到开放办公室来公开它的文件格式转换器,还有一些版本可以作为一个 webapp (位于 tomcat 中)发布,还有一个命令行工具。我一直在向它发送 html 并转换为。Doc 和 pdf 成功地在一个相当大的项目,还没有上线,但我认为我会使用它。 Http://sourceforge.net/projects/jodconverter/

Docx4j 或 poi,它们都是 ASL v2

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

iText is really easy to use.

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

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

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

Bill,POI 和 iTextAPI 从编程的角度来看非常相似。我过去曾经使用过这两种方法,发现它们都很容易使用,并且有很好的文档记录。

使用 iText,您可以在代码稍有变化的情况下在格式(RTF 和 PDF)之间进行切换。如果我没记错的话,内容是使用相同的调用布局的,然后使用几行代码设置为 PDF 或 RTF。

然而,我相信 RTF 中的格式与 DOC 相比是有限的。我不知道您是否能够实现您正在寻找的高级特性(表格、内联图像)而不会遇到大量的麻烦,如果有的话。

考虑到您所说的关于 HWPF 没有足够的功能来满足您的需要(我只处理 POI 的 Excel 方面)您的 最好的办法可能是说服当权者,PDF 是最适合这项工作的技术

试试 Aspose。 Java 的代名词,它运行在任何安装了 Java 的操作系统上。

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

使用这个 API,您可以从头开始创建文档,从节点开始,并设置它们的格式属性。您还可以使用 DocumentBuilder,它提供更高级别的方法,如创建表行、插入字段等。或者你可以在现有的预先创建的文档之间复制/加入/移动部分,比如说你想组装一个合同,只需从几个文档中抓取和复制部分,然后进行 Aspose。文字将合并样式,列表格式等适当的结果文件。

You will be able to insert a TOC field using Aspose.Words, but as of today, the TOC field will require a field update when the document is opened in Microsoft Word. However, we are going to release full support for TOC fields early in 2010. E.g. it will build complete TOC as MS Word does it.

我是阿斯波斯的,文字组的。

It was mentioned only briefly once, so I'd like to call out the docx4j library, as I've had more success with docx4j than anything else. Apache POI's support for Word documents isn't very good. Also, unlike Aspose.Words, docx4j is an open source library.

唯一的缺点是,使用 docx4j 时,必须创建 Office Open XML (docx)格式文档,而不是基于 OLE2的(doc)格式文档。这是 Word2007的默认格式,但 Word2003和以前的用户需要安装一个兼容性包。

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

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

I implemented this API called Java2Word. with a few lines of code, you can generate one Microsoft Word Document.

例子:

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

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

* 我写这篇文章是因为我们在一个项目中有一个真正的必要性:

译自: 美国《 leonardo-pinho.blogspot.com/2010/07/java2word-word-document-generator-from.html 》 *

干杯 列奥纳多

编辑 : 链接中的项目移动到 < a href = “ https://github.com/leonardoanalista/java2word”rel = “ nofollow norefrer”> https://github.com/leonardoanalista/java2word