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

我有一个新的应用程序,我将在哪里生成一个包含表格,图形,目录和文本的Word文档。 什么是一个很好的API用于此? 你有多确定它支持图形,ToC和表格? 使用它们有什么隐藏的问题?

一些澄清:

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

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

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

编辑: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 Developer’s Guide。

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

关于OpenOffice UNO的重要事项是:

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

这是一些有用的网站:

  • 打开办公室回家
  • 打开Office UNO开发人员指南
  • OpenOffice Developer’s Forum (特别是“Macros and API”和“Code Snippets”论坛)。

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

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

您可以使用此function: 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字段的全面支持。例如,它将构建完整的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 for java。

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

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

您可以使用JACOB之类的Java COM桥。 如果是来自客户端,则另一种选择是使用Javascript。

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

有一个名为JODConverter的工具挂钩到开放式办公室以暴露它的文件格式转换器,有一些版本可用作webapp(位于tomcat中),你发布它和命令行工具。 我已经开始使用html并转换为.doc和pdf,这是一个相当大的项目,尚未上线,但我想我将会使用它。 http://sourceforge.net/projects/jodconverter/

iText非常易于使用。

如果您需要doc文件,可以从命令行调用abiword (free lightweigh multi-os文本处理器),它有几种转换格式转换选项。

docx4j或poi,两者都是ASL v2

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

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

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

从编程的角度来看,Bill,POI和iText API非常相似。 我过去曾与他们合作,发现它们既易于使用又有很好的记录。

使用iText,您可以通过对代码进行微小更改来切换格式(RTF和PDF)。 如果我没记错的话,内容是使用相同的调用布局的,然后使用几行代码设置为PDF或RTF。

但是我认为与DOC相比,RTF中的格式是有限的。 我不知道你是否能够实现你正在寻找的高级function(表格,内嵌图像),如果有的话,没有相当多的麻烦。

鉴于你所说的HWPF没有足够的function满足你的需求(我只处理了POI的Excel方面),你最好的选择可能是说服PDF是最适合这项工作的技术

我以前开发过基于XML的纯文字文件。 我使用.NET,但语言无关紧要,因为它确实是XML。 这不是最简单的事情(几年前有一个需要它的项目。)这些只能在Word 2007或更高版本中运行 – 但您需要的只是Microsoft的白皮书,它描述了每个标记的function。 您可以使用与使用Word相同的方式完成所需的所有操作(当然最初会有点痛苦)。

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

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

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

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

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

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