openoffice 实现Word转html

将Word转Html的原理是这样的:

1、客户上传Word文档到服务器

2、服务器调用OpenOffice程序打开上传的Word文档

3、OpenOffice将Word文档另存为Html格式

4、Over

至此可见,这要求服务器端安装OpenOffice软件,其实也可以是MS Office,不过OpenOffice的优势是跨平台,你懂的。恩,说明一下,本文的测试基于 MS Win7 Ultimate X64 系统。

下面就是规规矩矩的实现。

1、下载OpenOffice,http://download.openoffice.org/index.html So easy...

2、下载Jodconverter http://www.artofsolving.com/opensource/jodconverter 这是一个开启OpenOffice进行格式转化的第三方jar包。

3、泡杯热茶,等待下载。

 

4、安装OpenOffice,安装结束后,调用cmd,启动OpenOffice的一项服务:C:\Program Files (x86)\OpenOffice.org 3\program>soffice -headless -accept="socket,port=8100;urp;"

5、打开eclipse

6、喝杯热茶,等待eclipse打开。

7、新建eclipse项目,导入Jodconverter/lib 下得jar包。

 

 * commons-io

 * jodconverter

 * juh

 * jurt

 * ridl

 * slf4j-api

 * slf4j-jdk14 

 * unoil

 * xstream 

 

8、Coding...

 

[java] view plain copy
 
 在CODE上查看代码片派生到我的代码片
    1. 查看代码  
    2.   
    3. package com.mzule.doc2html.util;  
    4.   
    5. import java.io.BufferedReader;  
    6. import java.io.File;  
    7. import java.io.FileInputStream;  
    8. import java.io.FileNotFoundException;  
    9. import java.io.IOException;  
    10. import java.io.InputStreamReader;  
    11. import java.net.ConnectException;  
    12. import java.util.Date;  
    13. import java.util.regex.Matcher;  
    14. import java.util.regex.Pattern;  
    15.   
    16. import com.artofsolving.jodconverter.DocumentConverter;  
    17. import com.artofsolving.jodconverter.openoffice.connection.OpenOfficeConnection;  
    18. import com.artofsolving.jodconverter.openoffice.connection.SocketOpenOfficeConnection;  
    19. import com.artofsolving.jodconverter.openoffice.converter.OpenOfficeDocumentConverter;  
    20.   
    21. /** 
    22.  * 将Word文档转换成html字符串的工具类 
    23.  *  
    24.  * @author MZULE 
    25.  *  
    26.  */  
    27. public class Doc2Html {  
    28.   
    29.     public static void main(String[] args) {  
    30.     System.out  
    31.         .println(toHtmlString(new File("C:/test/test.doc"), "C:/test"));  
    32.     }  
    33.   
    34.     /** 
    35.      * 将word文档转换成html文档 
    36.      *  
    37.      * @param docFile 
    38.      *                需要转换的word文档 
    39.      * @param filepath 
    40.      *                转换之后html的存放路径 
    41.      * @return 转换之后的html文件 
    42.      */  
    43.     public static File convert(File docFile, String filepath) {  
    44.     // 创建保存html的文件  
    45.     File htmlFile = new File(filepath + "/" + new Date().getTime()  
    46.         + ".html");  
    47.     // 创建Openoffice连接  
    48.     OpenOfficeConnection con = new SocketOpenOfficeConnection(8100);  
    49.     try {  
    50.         // 连接  
    51.         con.connect();  
    52.     } catch (ConnectException e) {  
    53.         System.out.println("获取OpenOffice连接失败...");  
    54.         e.printStackTrace();  
    55.     }  
    56.     // 创建转换器  
    57.     DocumentConverter converter = new OpenOfficeDocumentConverter(con);  
    58.     // 转换文档问html  
    59.     converter.convert(docFile, htmlFile);  
    60.     // 关闭openoffice连接  
    61.     con.disconnect();  
    62.     return htmlFile;  
    63.     }  
    64.   
    65.     /** 
    66.      * 将word转换成html文件,并且获取html文件代码。 
    67.      *  
    68.      * @param docFile 
    69.      *                需要转换的文档 
    70.      * @param filepath 
    71.      *                文档中图片的保存位置 
    72.      * @return 转换成功的html代码 
    73.      */  
    74.     public static String toHtmlString(File docFile, String filepath) {  
    75.     // 转换word文档  
    76.     File htmlFile = convert(docFile, filepath);  
    77.     // 获取html文件流  
    78.     StringBuffer htmlSb = new StringBuffer();  
    79.     try {  
    80.         BufferedReader br = new BufferedReader(new InputStreamReader(  
    81.             new FileInputStream(htmlFile)));  
    82.         while (br.ready()) {  
    83.         htmlSb.append(br.readLine());  
    84.         }  
    85.         br.close();  
    86.         // 删除临时文件  
    87.         htmlFile.delete();  
    88.     } catch (FileNotFoundException e) {  
    89.         e.printStackTrace();  
    90.     } catch (IOException e) {  
    91.         e.printStackTrace();  
    92.     }  
    93.     // HTML文件字符串  
    94.     String htmlStr = htmlSb.toString();  
    95.     // 返回经过清洁的html文本  
    96.     return clearFormat(htmlStr, filepath);  
    97.     }  
    98.   
    99.     /** 
    100.      * 清除一些不需要的html标记 
    101.      *  
    102.      * @param htmlStr 
    103.      *                带有复杂html标记的html语句 
    104.      * @return 去除了不需要html标记的语句 
    105.      */  
    106.     protected static String clearFormat(String htmlStr, String docImgPath) {  
    107.     // 获取body内容的正则  
    108.     String bodyReg = "<BODY .*</BODY>";  
    109.     Pattern bodyPattern = Pattern.compile(bodyReg);  
    110.     Matcher bodyMatcher = bodyPattern.matcher(htmlStr);  
    111.     if (bodyMatcher.find()) {  
    112.         // 获取BODY内容,并转化BODY标签为DIV  
    113.         htmlStr = bodyMatcher.group().replaceFirst("<BODY", "<DIV")  
    114.             .replaceAll("</BODY>", "</DIV>");  
    115.     }  
    116.     // 调整图片地址  
    117.     htmlStr = htmlStr.replaceAll("<IMG SRC=\"", "<IMG SRC=\"" + docImgPath  
    118.         + "/");  
    119.     // 把<P></P>转换成</div></div>保留样式  
    120.     // content = content.replaceAll("(<P)([^>]*>.*?)(<\\/P>)",  
    121.     // "<div$2</div>");  
    122.     // 把<P></P>转换成</div></div>并删除样式  
    123.     htmlStr = htmlStr.replaceAll("(<P)([^>]*)(>.*?)(<\\/P>)", "<p$3</p>");  
    124.     // 删除不需要的标签  
    125.     htmlStr = htmlStr  
    126.         .replaceAll(  
    127.             "<[/]?(font|FONT|span|SPAN|xml|XML|del|DEL|ins|INS|meta|META|[ovwxpOVWXP]:\\w+)[^>]*?>",  
    128.             "");  
    129.     // 删除不需要的属性  
    130.     htmlStr = htmlStr  
    131.         .replaceAll(  
    132.             "<([^>]*)(?:lang|LANG|class|CLASS|style|STYLE|size|SIZE|face|FACE|[ovwxpOVWXP]:\\w+)=(?:'[^']*'|\"\"[^\"\"]*\"\"|[^>]+)([^>]*)>",  
    133.             "<$1$2>");  
    134.     return htmlStr;  
    135.     }  
    136.   
    137. }