word导出html实现在线预览

需要的maven依赖经过编译,必须版本配合一致:
<!-- https://mvnrepository.com/artifact/fr.opensagres.xdocreport/org.apache.poi.xwpf.converter.core -->
<dependency>
<groupId>fr.opensagres.xdocreport</groupId>
<artifactId>org.apache.poi.xwpf.converter.core</artifactId>
<version>1.0.5</version>
</dependency>
<!-- https://mvnrepository.com/artifact/fr.opensagres.xdocreport/org.apache.poi.xwpf.converter.xhtml -->
<dependency>
<groupId>fr.opensagres.xdocreport</groupId>
<artifactId>org.apache.poi.xwpf.converter.xhtml</artifactId>
<version>1.0.5</version>
</dependency><!-- 版本与上面一致 -->
<!-- https://mvnrepository.com/artifact/org.apache.commons/commons-io -->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-io</artifactId>
<version>1.3.2</version>
</dependency>

<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-scratchpad</artifactId>
<version>3.17</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.commons/commons-collections4 -->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-collections4</artifactId>
<version>4.0</version>
</dependency>

<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.17</version>
</dependency>
<!-- <dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml-schemas</artifactId>
<version>3.16</version>
</dependency> -->
<!-- https://mvnrepository.com/artifact/org.apache.xmlbeans/xmlbeans -->
<dependency>
<groupId>org.apache.xmlbeans</groupId>
<artifactId>xmlbeans</artifactId>
<version>2.6.0</version>
</dependency>

<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.14</version>
</dependency><!-- poi引用的包要保持版本号一致,不然也会出现 ClassNotFoundException: org.apache.poi.wp.usermodel.Paragraph这个错误 -->
<!-- https://mvnrepository.com/artifact/org.apache.commons/commons-lang3 -->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.4</version>
</dependency>

package com.zyhao.openec.excel.utils;

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.InputStream;
import java.io.OutputStreamWriter;
import java.util.List;

import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
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.apache.poi.xwpf.converter.core.FileImageExtractor;
import org.apache.poi.xwpf.converter.core.IURIResolver;
import org.apache.poi.xwpf.converter.xhtml.XHTMLConverter;
import org.apache.poi.xwpf.converter.xhtml.XHTMLOptions;
import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.w3c.dom.Document;

public class WordToHtml {
public static void main(String[] args) {
try {
wordToHtml("E:\me\2.docx", "E:\me\", "123.html");
// wordToHtml("E:\me\2.doc", "E:\me\", "12.html");
} catch (Exception e) {
e.printStackTrace();
}
}

public static void wordToHtml(String wordPath,String htmlPath,String newFilename) throws Exception {
        convert2Html(wordPath, htmlPath, newFilename);
}    

public static void writeFile(String content, String path) throws Exception {
    FileOutputStream fos = null;
    BufferedWriter bw = null;
    try {
        File file = new File(path);
        fos = new FileOutputStream(file);
        bw = new BufferedWriter(new OutputStreamWriter(fos));
        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
 * 支持 .doc and .docx
 * @param fileName word文件名
 * @param outPutFilePath html存储路径
 * @param newFileName html名
 * @throws Exception
 */
public static void convert2Html(String fileName, String outPutFilePath,String newFileName)
        throws Exception {
    String substring = fileName.substring(fileName.lastIndexOf(".")+1);
    ByteArrayOutputStream out = new ByteArrayOutputStream();

    /**
     * word2007和word2003的构建方式不同,
     * 前者的构建方式是xml,后者的构建方式是dom树。
     * 文件的后缀也不同,前者后缀为.docx,后者后缀为.doc
     * 相应的,apache.poi提供了不同的实现类。
     */
    if("docx".equals(substring)){

// writeFile(new String("<html><head> <meta http-equiv=\"content-type\" content=\"text/html\" charset=\"utf-8\"/></head>对不起,.docx格式的word文档,暂时不能生成预览</html>".getBytes("utf-8")), outPutFilePath+newFileName);

        //step 1 : load DOCX into XWPFDocument
        InputStream inputStream = new FileInputStream(new File(fileName));
        XWPFDocument document = new XWPFDocument(inputStream);

        //step 2 : prepare XHTML options
        final String imageUrl = "";
        XHTMLOptions options = XHTMLOptions.create();
        options.setExtractor(new FileImageExtractor(new File(outPutFilePath + imageUrl)));
        options.setIgnoreStylesIfUnused(false);
        options.setFragment(true);
        options.URIResolver(new IURIResolver() {

// @Override 重写的方法,加上这个报错,你看看是啥问题
public String resolve(String uri) {
return imageUrl + uri;
}
});

        //step 3 : convert XWPFDocument to XHTML
        XHTMLConverter.getInstance().convert(document, out, options);

    }else{
        HWPFDocument wordDocument = new HWPFDocument(new FileInputStream(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&&!pics.isEmpty()){

            for(int i=0;i<pics.size();i++){
                Picture pic = (Picture)pics.get(i);
                System.out.println();
                try {
                    pic.writeImageContent(new FileOutputStream(outPutFilePath
                            + pic.suggestFullFileName()));
                } catch (FileNotFoundException e) {
                    e.printStackTrace();
                }
            }
        }
        Document htmlDocument = wordToHtmlConverter.getDocument();
        DOMSource domSource = new DOMSource(htmlDocument);
        StreamResult streamResult = new StreamResult(out);    

        TransformerFactory tf = TransformerFactory.newInstance();    //这个应该是转换成xml的
        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+newFileName);
}

}

原文地址:http://blog.51cto.com/17099933344/2087457

时间: 2024-10-24 09:43:42

word导出html实现在线预览的相关文章

asp.net word ecxel类型文件在线预览

首先得引用COM: Microsoft Excel 10 Object Library Microsoft Word 10 Object Library 或者是 10以上的类库 我现在用的是:资源下载: http://download.csdn.net/detail/panfuy/3247641 或者附件 Microsoft Excel 10 Object Library Microsoft Word 10 Object Library 代码如下: C#代码   using System; us

带进度的多文件上传(支持上传.doc后缀的word文档并在线预览)

原文:带进度的多文件上传(支持上传.doc后缀的word文档并在线预览) 源代码下载地址:http://www.zuidaima.com/share/1550463556848640.htm 演示地址:http://img.zeroteam.net/     访问路径和自己工程的设置有关 如:http://localhost:8081/strutd2_fileupload/index.jsp

Aspose office (Excel,Word,PPT),PDF 在线预览

就是做个备份,拿的是试用版的 Aspose         /// <summary>         /// Aspose office (Excel,Word,PPT),PDF 在线预览         /// </summary>         /// <param name="sourceDoc">需要预览的文件地址</param>         /// <param name="saveDoc"&g

word转pdf swf 在线预览

来源:http://www.cnblogs.com/wuhenke/archive/2010/08/01/1789750.html 之前在项目中研究使用了一套word转PDF,然后将PDF转成SWF的方法,最终实现SWF的在线浏览.自己还有些洋洋得意,昨晚在浏览网页搜集资料时发现:原来在2004年左右就有Flash Paper,已经很容易地实现上面的过程. Flash Paper支持Office文档(.doc,.xls,.ppt)直接转换为PDF或SWF,速度很快,效果较好.可惜,Flash P

怎么实现word,excel在线预览

在开发工作当中肯定会遇到需要在线预览word ,excel的功能,咋也不能抓瞎呀,有问题就解决问题. 目前有两种模式1.付费的编辑器购买2.把文档放到第三方网站上去然后实现: 前者价格比较高:后者简单,但是隐私性不够好,正可谓公司机密公司机密,定不能随便把文档交给第三方网站的 现在我在nuget上写了一个库ce.office.extension,可实现word,excel的在线预览功能,可供使用. 有需要的可自取哦,挥手不谢- 原文地址:https://blog.51cto.com/147813

Atitit.office&#160;word&#160;&#160;excel&#160;&#160;ppt&#160;pdf&#160;的web在线预览方案与html转换方案&#160;attilax&#160;总结

Atitit.office word  excel  ppt pdf 的web在线预览方案与html转换方案 attilax 总结 1. office word  excel pdf 的web预览要求1 1.1. 显示效果要好1 1.2. 可以自定义显示界面1 1.3. 不需要控件,兼容性好1 1.4. 支持编辑操作1 2. 纯html预览解决之道(自由的格式)1 3. 转换swf flash方案2 4. 转换pdf方式..更多的浏览器已经直接支持pdf格式查看2 5. 控件方式2 6. Hyb

[Asp.net]常见word,excel,ppt,pdf在线预览方案(转)

引言 之前项目需要,查找了office文档在线预览的解决方案,顺便记录一下,方便以后查询. 方案一 直接在浏览器中打开Office文档在页面上的链接.会弹出如下窗口: 优点:主流浏览器都支持. 缺点:Office文档链接在浏览器中打开,会有如上图的提示,需用户自己选择打开或者保存功能,如果客户电脑上安装迅雷下载软件,会启动迅雷下载,用户体验不好. 方案二 office文档转html,首先引入com组件中office库,然后在程序集扩展中引入word,excel,ppt的dll. 然后F6生成,会

JSP实现word文档的上传,在线预览,下载

前两天帮同学实现在线预览word文档中的内容,而且需要提供可以下载的链接!在网上找了好久,都没有什么可行的方法,只得用最笨的方法来实现了.希望得到各位大神的指教.下面我就具体谈谈自己的实现过程,总结一下学习中的收获. 我相信很多程序员都遇到过,有些word文档希望直接在浏览器中打开进行预览,但是浏览器往往不是很配合,直接就提示下载,不像pdf文档,浏览器可以直接进行预览.Word文档甚至始终都会通过本地的Office软件打开.那么,问题来了,如何可以在线浏览word文档呢? 其实,我在最初的时候

[Asp.net]常见word,excel,ppt,pdf在线预览方案

在线预览PDF格式 文章地址:http://www.cnblogs.com/wolf-sun/p/3525437.html [Asp.net]常见word,excel,ppt,pdf在线预览方案 http://www.cnblogs.com/wolf-sun/p/3569960.html http://www.cnblogs.com/wolf-sun/p/3574278.html [Asp.net]常见word,excel,ppt,pdf在线预览方案