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

24

我需要用Java将一个Word文档转换成HTML文件。该函数将输入一个Word文档,输出将基于Word文档的页数生成相应数目的HTML文件,例如,如果Word文档有3页,则会生成3个具有所需分页符的HTML文件。

我搜索了可以将doc转换为html的开源/非商业API,但没有找到任何结果。请帮助以前完成过这种工作的人。

谢谢


1
以下是一些起点,祝你好运。在微软的网站上,你可以找到.doc格式的文档,而在ECMA的网站上,你可以找到.docx格式的文档。微软在他们的OpenXML开发者博客上有一个Java分类,其中包括一篇关于在Java中将OpenXML转换为XHTML的文章 - lewinski
http://www.theserverside.com/news/thread.tss?thread_id=41942#216880 —— 这之前对我来说运行得相当不错。 - anjanb
11个回答

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

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


4

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

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

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

您可能希望在程序启动时启动openoffice,并在程序中需要多次调用Python脚本时进行调用(使用某种检查来确保ooffice进程始终存在)。
另一种选择是每次需要进行转换时生成以下命令:
ooffice -headless“macro://<path to ooffice vb macro to convert,with parameter pointing to file>”
我已经多次使用宏方法,效果很好(抱歉,我没有可用的宏代码)。
虽然有通过MS Word完成它的机制,但从Java中并不容易,并且需要其他支持程序通过OLE驱动MS Word。
我以前也使用过abiword,它可以很好地处理许多文档,但在处理更复杂的文档时会感到困惑(ooffice似乎可以处理我遇到的所有问题)。Abiword具有比ooffice更简单的命令行界面。

3

2

从3.5版本开始,Apache POI支持更新的Word版本。 - Madison Caldwell

2
如果是docx文件,您可以使用docx4j(ASL v2)。它使用XSLT创建HTML。然而,它将为整个文档提供单个HTML。
如果您想要每页一个HTML,则可以使用Word放入docx中的lastRenderedPageBreak标记来实现(假设您使用Word创建了它)。

1

我尝试了这种方法,它可以从以下网站与我一起使用: 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);

我希望这可以解决你的问题


请分享解决方案本身,而不是发布链接。 - SaeX

1

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


0
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


0

如果您想将MS Word文档转换为HTML,您必须找到MS Word文档规范(因为它基本上是当前Word中的任何内容的二进制转储),并逐个元素地慢慢进行转换,将ms word“对象/状态”转换为html等效物。您可能能够找到一个脚本来帮助您完成这项工作,因为这真的不是一件有趣的工作,而且我建议不要这样做(转换文件格式甚至在自己的商业文件中读取始终很困难并且经常不完整)。 附注:只要google doc2html


你有没有看过规格说明书?(算了,你有没有调查过包含规格说明的.rtf文件与指定格式之间的不一致性?)-- 这是不可行的,太多工作了,而且还有其他解决方案可用。 - Arafangion
2
我确实说过这很困难,而且规格说明经常不完整,并建议不要这么做。 - DavidG

0

如果您正在使用ooxml格式针对Word 2007文件进行操作,那么这篇文章可能会有所帮助。此外,还有Ooxml4j项目,该项目正在实现Java库的ooxml。

但是,如果您的目标是二进制文件...那就另当别论了。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接