一、分析
通过网上找资料,发现用java实现word在线阅读有以下的实现方式:
1
Word=>PDF(OpenOffice+JodConverter)=>SWF(pdf2swf)=>FlexPaper浏览
2
Word=>PDF(MSOffice+JACOB)=>SWF(pdf2swf)=>FlexPaper浏览
3
Word =>SWF (FlashPaper)=> FlexPaper浏览
4
Word=>SWF(print2flash)=> FlexPaper浏览
5
用第三方收费组件:PageOffice
6
1) 利用 POI把 Word2003转换成 html;
2) 利用OpenOffice+JodConverter将word2003转换成html
前4种方式,目标都是一致的,就是都将word文档转换成flash文件,只是中间的实现不大一样。前两种方式比较麻烦,都是先转成PDF,再转成SWF,最后用FlexPaper浏览。两种比较快捷,可直接将源文件转为SWF,用FlexPaper浏览。第二种方式用到的jacob是微软的组件,在linux平台下基本是无望的了,第一个淘汰。由于FlashPaper不是开源工具,加之Win8系统不兼容(我现在用的系统),所以就没采用第三种实现方式。Print2flash是开源工具,即使公司产品中用到也不会出现版权纠纷,遗憾的是没找到如何用程序控制该工具转换文件的命令。所以第3,4种方式也淘汰了。通过下载,预使用,发现第5种方式用PageOffice是最省时省力的,也能将word文档完美的展现,但是,要钱!!好吧,一提到钱,此种实现只能暂作废。
后面一开始是想用OpenOffice+JodConverter实现转swf的,后面在逛百度文库的时候,发现一个让我很好奇的东西。就是,百度文库里的文档基本上都用html进行展示了,也就是说,我们上传的word文档,百度对其做了html转换的处理,与页面的嵌合也相当的好。这让我想到,我们的项目中是否也可以用此方式实现word的在线预览呢。
基于这个想法,我到谷歌找相关的资料,发现将word转html的开源工具没几个。其中,介绍得比较多的就是用POI进行转换,但是,由于POI对word的处理功能相当的弱,因此,开启了使用POI将wordàhtml的艰苦历程(后面发现网上有介绍用OpenOffice+JodConverter将word2003转换成html的方式,但是,我没有深究,有兴趣的同学可以去观望一下http://www.cnblogs.com/codeplus/archive/2011/10/22/2220952.html):
二、实现
1. POI介绍:
Apache POI 是用Java编写的免费开源的跨平台的 Java API,Apache POI提供API给Java程式对Microsoft Office格式档案读和写的功能。POI为“Poor Obfuscation Implementation”的首字母缩写,意为“可怜的模糊实现”。
Apache POI 是创建和维护操作各种符合Office Open XML(OOXML)标准和微软的OLE 2复合文档格式(OLE2)的Java API。用它可以使用Java读取和创建,修改MS Excel文件.而且,还可以使用Java读取和创建MS Word和MSPowerPoint文件。Apache POI 提供Java操作Excel解决方案(适用于Excel97-2008)。
基本结构:
HSSF -提供读写Microsoft Excel XLS格式档案的功能。
XSSF -提供读写Microsoft Excel OOXML XLSX格式档案的功能。
HWPF -提供读写Microsoft Word DOC格式档案的功能。
HSLF -提供读写Microsoft PowerPoint格式档案的功能。
HDGF -提供读Microsoft Visio格式档案的功能。
HPBF -提供读Microsoft Publisher格式档案的功能。
HSMF -提供读Microsoft Outlook格式档案的功能。
其实,POI比较拿手的是处理Excel表格,即上面的HSSF及XSSF,我们的很多项目,只要涉及报表的,基本上都有用到它吧。用对于HWPF即处理DOC的包,功能就没有那么健全了,且API也不完善。
2. poi相关包及依赖包配置。
3. 处理流程图:
1) 主体流程:
2) 进行word文档解释转换子流程
4. 代码实现
package com.lejie.common.util;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.util.List;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import org.apache.commons.io.output.ByteArrayOutputStream;
import org.apache.poi.hwpf.HWPFDocument;
import org.apache.poi.hwpf.converter.PicturesManager;
import org.apache.poi.hwpf.converter.WordToHtmlConverter;
import org.apache.poi.hwpf.usermodel.Picture;
import org.apache.poi.hwpf.usermodel.PictureType;
import org.w3c.dom.Document;
/**
* 利用poi将word简单的转换成html文件 Util
* @author weidetian
* @version 2014-3-6
*/
public class Word2Html {
public static void main(String argv[]) {
try {
convert2Html("F:\\web\\","统一账号性能测试方案.doc");
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 读出内容生成html
* @param content 读取word的内容
* @param path 生成的html路径
*/
public static void writeFile(String content, String path) {
FileOutputStream fos = null;
BufferedWriter bw = null;
try {
File file = new File(path);
fos = new FileOutputStream(file);
bw = new BufferedWriter(new OutputStreamWriter(fos,"utf-8"));
bw.write(content);
} catch (FileNotFoundException fnfe) {
fnfe.printStackTrace();
} catch (IOException ioe) {
ioe.printStackTrace();
} finally {
try {
if (bw != null)
bw.close();
if (fos != null)
fos.close();
} catch (IOException ie) {
}
}
}
/**
* 将word文档转化,生成html
* @param filePath 文件路径
* @param fileName 文件名称
* @return 生成的html路径
* @throws TransformerException
* @throws IOException
* @throws ParserConfigurationException
*/
public static String convert2Html(String filePath, String fileName)
throws TransformerException, IOException,
ParserConfigurationException {
HWPFDocument wordDocument = new HWPFDocument(new FileInputStream(filePath+fileName));//WordToHtmlUtils.loadDoc(new FileInputStream(inputFile));
WordToHtmlConverter wordToHtmlConverter = new WordToHtmlConverter(
DocumentBuilderFactory.newInstance().newDocumentBuilder()
.newDocument());
wordToHtmlConverter.setPicturesManager( new PicturesManager()
{
public String savePicture( byte[] content,
PictureType pictureType, String suggestedName,
float widthInches, float heightInches )
{
return suggestedName;
}
} );
wordToHtmlConverter.processDocument(wordDocument);
//save pictures
List pics=wordDocument.getPicturesTable().getAllPictures();
if(pics!=null){
for(int i=0;i<pics.size();i++){
Picture pic = (Picture)pics.get(i);
try {
pic.writeImageContent(new FileOutputStream(filePath+ pic.suggestFullFileName()));
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
}
Document htmlDocument = wordToHtmlConverter.getDocument();
ByteArrayOutputStream out = new ByteArrayOutputStream();
DOMSource domSource = new DOMSource(htmlDocument);
StreamResult streamResult = new StreamResult(out);
fileName = fileName.substring(0, fileName.indexOf("."));
String outPutFilePath = filePath + fileName + ".html";
TransformerFactory tf = TransformerFactory.newInstance();
Transformer serializer = tf.newTransformer();
serializer.setOutputProperty(OutputKeys.ENCODING, "utf-8");
serializer.setOutputProperty(OutputKeys.INDENT, "yes");
serializer.setOutputProperty(OutputKeys.METHOD, "html");
serializer.transform(domSource, streamResult);
out.close();
writeFile(new String(out.toByteArray()),outPutFilePath);
return outPutFilePath;
}
}
需要的jar在附件下载
- 大小: 26.2 KB
- 大小: 49.9 KB
- 大小: 16.4 KB
分享到:
相关推荐
将Word转换为HTML需要解析Word文档并将其内容重新构建为HTML标签。 3. **读取Word文档** 使用Apache POI的XWPF库,我们可以加载一个.docx文件,XWPFDocument类是处理此类文件的基础。通过XWPFDocument实例,我们...
本话题主要关注如何使用Apache POI库将Office文档转换为HTML格式。Apache POI是Java社区开发的一个开源项目,专门用于读写Microsoft Office格式的文件,包括Word(.doc/.docx)、Excel(.xls/.xlsx)等。 首先,让...
标题中的“poi将word、PPT、Excel转pdf实现在线预览的jar包”涉及到的是Apache POI库在Java开发中的应用,以及如何利用它来处理Microsoft Office文档并转换为PDF格式,以便进行在线预览。Apache POI是Java平台上用于...
在这个示例中,我们可能利用POI的HWPF库来读取Word文档,然后将其内容转换成HTML格式。这在需要在网络上显示Word内容或者希望在网页上保持文档格式时非常有用。转换过程涉及解析Word文档的各个部分,如段落、表格和...
在这个特定的场景中,我们利用POI将Word文档转换为HTML格式,以便于在网页上展示或者进行其他Web相关的操作。下面我们将深入探讨这个过程中的关键知识点。 1. **Java POI库**: POI是Apache软件基金会的一个开源项目...
将word转换成pdf确实有很多种方案!最近正好需要做一个这样的功能,需求是将word模板进行签名后转换为pdf。为此,我花了一点时间去网上找方案。这里记录一下最终的方案:利用poi+itextpdf进行word转pdf。此资源按...
"cms.rar_cms word_poi word html_poi word转HTML_poi转Word"这一标题提及的CMS可能是一个特定的项目或实现,它涉及到使用Apache POI库处理Microsoft Word文档,并将这些文档转换为HTML格式以供网页展示。Apache POI...
本篇将详细讲解如何利用Apache POI将不同类型的文件转换为HTML,以便进行在线预览。 首先,我们从标题"POI将文件转为html"入手。Apache POI是Apache软件基金会的一个开源项目,提供了一套API用于读写Microsoft ...
Apache POI是一个强大的Java库,专门用于处理Microsoft Office格式的文件,如Word(.doc和.docx)、Excel(.xls和....通过理解以上知识点,你可以利用Apache POI实现高效的Word到HTML的转换,确保内容和格式的一致性。
通过细致的工作,我们可以利用POI实现从Word和Excel到HTML的转换,保留原始文件的大部分格式和内容。然而,这种转换并非易事,它需要对文档结构、图像处理、HTML和CSS有深入的理解。在项目中,可以考虑使用现成的库...
本篇文章将详细讲解如何利用Apache POI库进行Word内容提取及Word转HTML的过程,以及涉及的相关知识点。 Apache POI是一个开源项目,专为处理Microsoft Office格式的文件而设计,包括Word(.doc/.docx)、Excel(....
在本篇中,我们将详细探讨如何利用Apache POI库来修改文件属性并进行格式转换。 首先,让我们看看如何使用POI修改文件属性。在Microsoft Office文档中,文件属性通常包括标题、作者、创建日期等元数据。以下是如何...