`

利用POI将word转换成html实现在线阅读

    博客分类:
  • JAVA
 
阅读更多
一、分析
通过网上找资料,发现用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
分享到:
评论

相关推荐

    poi将word转换成html、样式 表格 图片处理

    将Word转换为HTML需要解析Word文档并将其内容重新构建为HTML标签。 3. **读取Word文档** 使用Apache POI的XWPF库,我们可以加载一个.docx文件,XWPFDocument类是处理此类文件的基础。通过XWPFDocument实例,我们...

    Java利用POI将office转成HTML

    本话题主要关注如何使用Apache POI库将Office文档转换为HTML格式。Apache POI是Java社区开发的一个开源项目,专门用于读写Microsoft Office格式的文件,包括Word(.doc/.docx)、Excel(.xls/.xlsx)等。 首先,让...

    poi将word、PPT、Excel转pdf实现在线预览的jar包

    标题中的“poi将word、PPT、Excel转pdf实现在线预览的jar包”涉及到的是Apache POI库在Java开发中的应用,以及如何利用它来处理Microsoft Office文档并转换为PDF格式,以便进行在线预览。Apache POI是Java平台上用于...

    java POI完整示例,POI将word转HTML,数据库倒出数据到Excel等

    在这个示例中,我们可能利用POI的HWPF库来读取Word文档,然后将其内容转换成HTML格式。这在需要在网络上显示Word内容或者希望在网页上保持文档格式时非常有用。转换过程涉及解析Word文档的各个部分,如段落、表格和...

    java poi把word文档转化为html,支持doc。

    在这个特定的场景中,我们利用POI将Word文档转换为HTML格式,以便于在网页上展示或者进行其他Web相关的操作。下面我们将深入探讨这个过程中的关键知识点。 1. **Java POI库**: POI是Apache软件基金会的一个开源项目...

    利用poi+itextpdf进行word转pdf.zip

    将word转换成pdf确实有很多种方案!最近正好需要做一个这样的功能,需求是将word模板进行签名后转换为pdf。为此,我花了一点时间去网上找方案。这里记录一下最终的方案:利用poi+itextpdf进行word转pdf。此资源按...

    cms.rar_cms word_poi word html_poi word转HTML_poi转Word

    "cms.rar_cms word_poi word html_poi word转HTML_poi转Word"这一标题提及的CMS可能是一个特定的项目或实现,它涉及到使用Apache POI库处理Microsoft Word文档,并将这些文档转换为HTML格式以供网页展示。Apache POI...

    POI将文件转为html

    本篇将详细讲解如何利用Apache POI将不同类型的文件转换为HTML,以便进行在线预览。 首先,我们从标题"POI将文件转为html"入手。Apache POI是Apache软件基金会的一个开源项目,提供了一套API用于读写Microsoft ...

    poiWord2003和Word2007包括图片完整转换成html 包括完整Jar包

    Apache POI是一个强大的Java库,专门用于处理Microsoft Office格式的文件,如Word(.doc和.docx)、Excel(.xls和....通过理解以上知识点,你可以利用Apache POI实现高效的Word到HTML的转换,确保内容和格式的一致性。

    java引用POI将Word、Excel转换为html

    通过细致的工作,我们可以利用POI实现从Word和Excel到HTML的转换,保留原始文件的大部分格式和内容。然而,这种转换并非易事,它需要对文档结构、图像处理、HTML和CSS有深入的理解。在项目中,可以考虑使用现成的库...

    word内容提取 word转html-POI wps doc docx转html

    本篇文章将详细讲解如何利用Apache POI库进行Word内容提取及Word转HTML的过程,以及涉及的相关知识点。 Apache POI是一个开源项目,专为处理Microsoft Office格式的文件而设计,包括Word(.doc/.docx)、Excel(....

    POI修改word、excel、pdf、ppt文件属性如作者以及将其转成html

    在本篇中,我们将详细探讨如何利用Apache POI库来修改文件属性并进行格式转换。 首先,让我们看看如何使用POI修改文件属性。在Microsoft Office文档中,文件属性通常包括标题、作者、创建日期等元数据。以下是如何...

Global site tag (gtag.js) - Google Analytics