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


111

我有一个新应用程序,我将在必须生成包含表,图形,目录和文本的Word文档的地方进行工作。有什么好的API可以使用呢?您如何确定它支持图形,目录和表?使用它们时有哪些隐藏的陷阱?

一些说明:

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

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

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

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


26
不知道在最后一次编辑该问题后30个月以及最初提出该问题3年后如何结束该问题将非常有成效。如果我将标题更改为“如何使用Java API创建丰富的Word文档?” 那会解决这个问题吗?
billjamesdev

1
万一有人需要对可用的Java api esupu.com/open-source-office-document-java-api-review
Sameera

您可以看看docxtemplater,https//github.com/edi9999/docxtemplater/,这是我创建的库,可从docx模板生成docx
edi9999 2014年

1
这个问题应该重新开始。该问题已被重新措词以符合规则,因此,我想请有权重新提出该问题的人致电。问题之前是:什么是创建Word文档的良好Java API?现在的问题是:是否存在可以创建丰富的Word文档的Java API?现在的问题很明显地指向了要问的人想要什么:使用图形,目录和表创建Word文档。这个问题也不再要求“好的” Java API。每个人的好坏都不同。
Sjoerd Pottuit

Answers:


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

以下是一些有用的网站:


1
到目前为止,这与我要求的工具集最兼容。我将其标记为“已接受”。尽管我完全认识到POI更为主流,但它还没有我想要的功能。
billjamesdev

30

我认为Apache POI可以胜任。HWPF仍处于早期开发阶段,可能会导致取决于您的用途的问题。

HWPF 是用于使用(仅)Java读写Microsoft Word 97(-XP)文档的API集。


有图形和表格可能性的知识吗?目录如何?任何人在POI中做这些事情都有真正的经验吗?
billjamesdev

1
查看POI文档,看来该HWPF尚处于开发初期,主要是允许从.doc中读取文本,而不是真正用于动态创建“复杂”文档。
Billjamesdev

我不相信它处理更复杂的图表/表格等
布莱恩·阿格纽


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


1
您是否使用实际的MS Word测试过?我设法创建了Windows上OpenOffice和LibreOffice可以读取但MSWord无法读取的文件。(我已在code.google.com/p/java2word/issues/detail?id=16上报告了此问题)
Stein G. Strindhaug 2011年

2
我无法使用OpenOffice打开java2word生成的文件吗?与Office 2010
配合使用,效果很好

是否支持创建.docx文件?@Leonardo
MaheshVarma


4

尝试使用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团队中。


4

它仅被简要提及一次,所以我想调用docx4j库,因为docx4j取得了比其他任何方面都更多的成功。Apache POI对Word文档的支持不是很好。另外,与Aspose.Words不同,docx4j是一个开源库。

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


3

尝试使用Aspose.Words for Java。

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

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


2

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


谢谢,但是看起来这需要在Windows计算机上运行,​​对吗?阅读本文后,我澄清了主机操作系统,但感谢您提供信息。
Billjamesdev

在Web服务器计算机上使用JACOB将需要在其上安装Microsoft Word本身,因为通过COM界面创建和处理Word文档需要启动Word应用程序的实际实例。通常,在多用户服务器上对Word + COM的这种使用存在很大问题,因为Word不是为这种用途而设计的-例如,复制文档的某些部分通常是使用Selection对象和Windows剪贴板完成的,这在Web中是不可想象的。服务器计算机设置。我对此颇为
不解


2

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


2

文字确实易于使用。

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



1

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

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

从编程角度来看,Bill,POI和iText API非常相似。我过去曾与他们一起工作过,发现它们既易于使用又有据可查。

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

但是,我认为与DOC相比,RTF中的格式是有限的。我不知道您是否能够实现您正在寻找的高级功能(表格,内嵌图像),而不会产生任何麻烦。

鉴于您所说的关于HWPF的功能不足以满足您的需求(我只讨论了POI的Excel方面),您最好的选择可能是让人们相信PDF是最适合这项工作的技术


1

过去,我已经开发了基于XML的纯文字文件。我使用了.NET,但是语言并不重要,因为它确实是XML。这不是最容易的事情(几年前有一个项目需要它。)这些仅在Word 2007或更高版本中有效-但是您所需要的只是描述每个标签功能的Microsoft白皮书。您可以像使用Word一样使用标签来完成所有想要的操作(当然,开始时要痛苦得多)。


0

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

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


我曾经使用iText导出到RTF,但它有点不稳定:例如TOC不能很好地使用,并且它真的不是很容易使用(缺少文档)
AlfaTeK,2010年

0

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

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

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


0

即使这比请求晚很多,它可能也会帮助其他人。 Docmosis提供了Java API,可使用文档作为模板以doc,pdf,odt格式创建文档。它使用OpenOffice作为引擎来执行格式转换。文档处理和填充由Docmosis本身执行。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.