在 Java 中以编程方式将 Word doc 转换为 HTML

Posted

技术标签:

【中文标题】在 Java 中以编程方式将 Word doc 转换为 HTML【英文标题】:Convert Word doc to HTML programmatically in Java 【发布时间】:2010-09-18 15:21:51 【问题描述】:

我需要将 Word 文档转换为 Java 中的 html 文件。该函数将输入一个word文档,输出将是基于word文档页数的html文件,即如果word文档有3页,那么将生成3个具有所需分页符的html文件。

我搜索了可以将 doc 转换为 html 但没有结果的开源/非商业 API。任何曾经做过此类工作的人请帮忙。

谢谢

【问题讨论】:

这里有一些起点。祝你好运。在 Microsoft 的网站上,您可以找到 .doc format 的文档,在 ECMA 网站上,您可以找到 .docx format 的文档。 Microsoft 在其 OpenXML 开发人员博客上有一个 category for Java,其中包括专门关于转换 OpenXML to XHTML in Java 的帖子。 theserverside.com/news/thread.tss?thread_id=41942#216880 -- 这对我来说之前效果很好 这是一个已经做了一段时间的人使用的东西 -- jroller.com/rickard/entry/word_to_html_in_java 【参考方案1】:

您必须找到 MS word doc 规范(因为它基本上是当时 word 中任何内容的二进制转储),然后慢慢地逐个元素地检查它,转换 ms word “objects/states”到 html 等价物。你也许可以找到一个脚本来为你做这件事,因为这真的不是一件有趣的工作,我建议你不要这样做(转换文件格式甚至从你自己的商业文件中读取总是很困难,而且往往是不完整的)。 PS:就google doc2html

【讨论】:

你看过规范吗? (从头开始,你有没有调查过包含规范的 .rtf 文件与指定格式之间的不一致?)——这是不可行的,虽然有其他解决方案,但工作量太大了。 我确实说过这很难,而且规格通常不完整,因此建议不要这样做。【参考方案2】:

如果您使用 ooxml 格式定位 word 2007 文件,那么这个article 可能会有所帮助。 还有 Ooxml4j 项目正在为 Java 库实现 ooxml。

如果你的目标是二进制文件……那是另一个问题。

【讨论】:

【参考方案3】:

我已在新的 MS Word XML 格式不可用的生产系统中成功使用了以下方法:

生成一个执行类似以下操作的进程:

http://www.oooninja.com/2008/02/batch-command-line-file-conversion-with.html

您可能希望在程序启动时启动一次 openoffice,并在程序期间根据需要多次调用 python 脚本(通过某种检查以确保 ooffice 进程始终存在)。

另一种选择是在每次需要进行转换时生成以下命令:

ooffice -headless "macro://"

我已经多次使用宏方法并且效果很好(抱歉,我没有可用的宏代码)。

虽然有通过 MS Word 执行此操作的机制,但它们在 Java 中并不容易,并且确实需要其他支持程序才能通过 OLE 驱动 MS Word。

我以前也使用过 abiword,它适用于许多文档,但确实会与更复杂的文档混淆(ooffice 似乎可以处理我扔给它的所有内容)。 Abiword 的转换命令行界面比 ooffice 稍微简单一些。

【讨论】:

【参考方案4】:

我们使用 tm-extractors (http://mvnrepository.com/artifact/org.textmining/tm-extractors),并回退到商业 Aspose (http://www.aspose.com/)。两者都有本机 Java API。

【讨论】:

【参考方案5】:
import officetools.OfficeFile; // package available at www.dancrintea.ro/doc-to-pdf/
...
FileInputStream fis = new FileInputStream(new File("test.doc"));
FileOutputStream fos = new FileOutputStream(new File("test.html"));
OfficeFile f = new OfficeFile(fis,"localhost","8100", true);
f.convert(fos,"html");

所有可能的转化:

doc --> pdf、html、txt、rtf

xls --> pdf、html、csv

ppt --> pdf, swf

html --> pdf

【讨论】:

【参考方案6】:

如果是 docx,您可以使用 docx4j (ASL v2)。这使用 XSLT 创建 HTML。

但是,它会为您提供整个文档的单个 HTML。

如果您希望每页都有一个 HTML,您可以使用 Word 放入 docx 中的 lastRenderedPageBreak 标记来做一些事情(假设您使用 Word 创建它)。

【讨论】:

【参考方案7】:

在新的 MS word docx 中更容易做到这一点,因为格式是 XML。 您可以使用 XSL 将 XML 格式的 Word 文档转换为 HTML 格式。

但是,如果您的 Word 文档是旧版本,您可以使用 POI 库 http://poi.apache.org/ 然后访问它并生成一个 Java 对象,从那时起,您可以使用 HTML java 库轻松地将其转换为 HTML 格式

http://www.dom4j.org/dom4j-1.4/apidocs/org/dom4j/io/HTMLWriter.html

【讨论】:

从 3.5 版开始,Apache POI 支持更新版本的 Word。【参考方案8】:

我看到这个帖子出现在外部链接中,并且偶尔会发帖,所以我想我会发布一个更新(希望没人介意)。 OpenOffice 不断发展,3.2 版再次改进了单词导入导出过滤器。 OpenOffice 和 Java 可以在许多平台上运行,因此 Java 系统可以直接使用 OpenOffice UNO API 来导入/操作/导出多种格式(包括 word 和 pdf)的文档,或者使用像 JODReports 或 Docmosis 这样的库来方便.两者都有免费/开放选项。

【讨论】:

【参考方案9】:

我推荐JODConverter,它利用了 OpenOffice.org,它可以为当今可用的 OpenDocument 和 Microsoft Office 格式提供可以说是最好的导入/导出过滤器。

JODConverter 有很多文档、脚本和教程可以帮助您。

【讨论】:

【参考方案10】:

我尝试过这种方式,并从这个网站与我一起工作 http://code.google.com/p/xdocreport/wiki/XWPFConverterXHTML

这仅适用于 docx 将其转换为该 word 文档中包含 html 的图像。

    // 1) Load DOCX into XWPFDocument
    InputStream doc = new FileInputStream(new File("c:/document.docx"));
    XWPFDocument document = new XWPFDocument(doc);

   // 2) Prepare XHTML options (here we set the IURIResolver to load images from a "word/media" folder)
            XHTMLOptions options = XHTMLOptions.create(); //.URIResolver(new FileURIResolver(new File("word/media")));;

            // 3) Extract image
            String root = "target";
            File imageFolder = new File( root + "/images/" + doc );
            options.setExtractor( new FileImageExtractor( imageFolder ) );
            // 4) URI resolver
            options.URIResolver( new FileURIResolver( imageFolder ) );


            OutputStream out = new FileOutputStream(new File("c:/document.html"));
            XHTMLConverter.getInstance().convert(document, out, options);

希望这能解决你的问题

【讨论】:

请分享解决方案本身,而不是发布链接。【参考方案11】:

你可以使用micrsoft office online

首先,在服务器端请求https://view.officeapps.live.com/op/view.aspx?src='your doc file online url'

然后使用jsoup解析结果html

当从移动设备访问时,html 将包含一个框架。

【讨论】:

以上是关于在 Java 中以编程方式将 Word doc 转换为 HTML的主要内容,如果未能解决你的问题,请参考以下文章

如何用纯java代码实现word转pdf?

如何用纯java代码实现word转pdf

用Java可以把pdf转doc吗?

使用 OpenOffice.org 基本宏以编程方式将 *.odt 文件转换为 MS Word *.doc 文件

在 UIPageViewController 中以编程方式转到下一页

用java怎么将word文档转成图片格式