OpenOffice组件docx/doc转html

OpenOffice组件docx/doc转html

准备工作

  1. CentOS 安装OpenOffice

    • 资源准备

      openOffice安装包

    • 安装
      • 将资源包放在/opt/moudles路径下,解压后放在/opt/softwares路径
        解压
      [root@localhost moudles]
      # tar -zxvf Apache_OpenOffice_4.1.4_Linux_x86-64_install-rpm_zh-CN.tar.gz  -C ../softwares/
      
    • 解压之后会在 /opt/softwares 中生成zh-CN文件夹,进入zh-CNRPMS文件夹。
      [root@localhost moudles]# cd /opt/softwares/zh-CN/RPMS
      
    • 运行yum localinstall *.rpm
      [root@localhost RPMS]# yum localinstall *.rpm
      
    • 成功之后会在当前目录生成desktop-integration文件夹,运行运行 yum localinstall
      [root@localhost desktop-integration]# yum localinstall openoffice4.1.4-redhat-menus-4.1.4-9788.noarch.rpm
      
    • 安装成功会在 /opt 目录下生成openoffice4文件夹。
  1. 启动OpenOffice

    • 临时启动 :临时启动之后画面就不会动了, 不要认为是死机。只要不报错就是好现象。
      [root@localhost desktop-integration]# /opt/openoffice4/program/soffice -headless -accept="socket,host=127.0.0.1,port=8100;urp;" -nofirststartwizard
      
    • 永久启动
      [root@localhost desktop-integration]# nohup /opt/openoffice4/program/soffice -headless -accept="socket,host=127.0.0.1,port=8100;urp;" -nofirststartwizard &
      
  2. 查看启动是否成功

    [root@localhost opt]# ps -ef|grep openoffice
    
  3. 查看端口

    [root@localhost opt]# netstat -lnp |grep 8100
    

Codeing....

package com.jeecg.ud.service.util;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.ConnectException;
import java.util.Date;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import com.artofsolving.jodconverter.DocumentConverter;
import com.artofsolving.jodconverter.openoffice.connection.OpenOfficeConnection;
import com.artofsolving.jodconverter.openoffice.connection.SocketOpenOfficeConnection;
import com.artofsolving.jodconverter.openoffice.converter.OpenOfficeDocumentConverter;

/***
 * 
 * @ClassName: Doc2Html
 * @Description: 将Word文档转换成html字符串的工具类
 * @author 王维杰
 * @date 2018年5月14日
 *
 */
public class Doc2Html {

    /**
     * 将word转换成html文件,并且获取html文件代码。
     * 
     * @param docFile
     *            需要转换的文档
     * @param filepath
     *            文档中图片的保存位置
     * @param imgUrl
     *            文档中图片网络路径
     * 
     * @return 转换成功的html代码
     * 
     *         toHtmlString(new File(
     *         "D:\\workSpace\\testDir\\市场信息管理系统软件研制总结报告.docx"),
     *         "D:\\workSpace\\testDir\\image", "cestsa")
     */
    public static String toHtmlString(File docFile, String filepath,String imgUrl) {
        // 转换word文档
        File htmlFile = convert(docFile, filepath);
        // 获取html文件流
        StringBuffer htmlSb = new StringBuffer();
        try {
            BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(htmlFile)));
            while (br.ready()) {
                htmlSb.append(br.readLine());
            }
            br.close();
            // 删除临时文件
            htmlFile.delete();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        // HTML文件字符串
        String htmlStr = htmlSb.toString();
        // 返回经过清洁的html文本
        return clearFormat(htmlStr, filepath, imgUrl);
    }

    /**
     * 将word文档转换成html文档
     * 
     * @param docFile
     *            需要转换的word文档
     * @param filepath
     *            转换之后html的存放路径
     * @return 转换之后的html文件
     */
    public static File convert(File docFile, String filepath) {
        // 创建保存html的文件
        File htmlFile = new File(filepath + "/" + new Date().getTime()
                + ".html");
        // 创建Openoffice连接
        OpenOfficeConnection con = new SocketOpenOfficeConnection(8100);
        try {
            // 连接
            con.connect();
        } catch (ConnectException e) {
            System.out.println("获取OpenOffice连接失败...");
            e.printStackTrace();
        }
        // 创建转换器
        DocumentConverter converter = new OpenOfficeDocumentConverter(con);
        // 转换文档问html
        converter.convert(docFile, htmlFile);
        // 关闭openoffice连接
        con.disconnect();
        return htmlFile;
    }

    /**
     * 清除一些不需要的html标记
     * 
     * @param htmlStr
     *            带有复杂html标记的html语句
     * @return 去除了不需要html标记的语句
     */
    protected static String clearFormat(String htmlStr, String docImgPath,String imgUrl) {
        // 获取body内容的正则
        String bodyReg = "<BODY .*</BODY>";
        Pattern bodyPattern = Pattern.compile(bodyReg);
        Matcher bodyMatcher = bodyPattern.matcher(htmlStr);
        if (bodyMatcher.find()) {
            // 获取BODY内容,并转化BODY标签为DIV
            htmlStr = bodyMatcher.group().replaceFirst("<BODY", "<DIV").replaceAll("</BODY>", "</DIV>");
        }
        // 调整图片地址
        htmlStr = htmlStr.replaceAll("<IMG SRC=\"", "<IMG SRC=\"" + imgUrl+ "/");
        // 把<P></P>转换成</div></div>保留样式
        // content = content.replaceAll("(<P)([^>]*>.*?)(<\\/P>)",
        // "<div$2</div>");
        // 把<P></P>转换成</div></div>并删除样式
        htmlStr = htmlStr.replaceAll("(<P)([^>]*)(>.*?)(<\\/P>)", "<p$3</p>");
        // 删除不需要的标签
        htmlStr = htmlStr.replaceAll("<[/]?(font|FONT|span|SPAN|xml|XML|del|DEL|ins|INS|meta|META|[ovwxpOVWXP]:\\w+)[^>]*?>","");
        // 删除不需要的属性
        htmlStr = htmlStr.replaceAll("<([^>]*)(?:lang|LANG|class|CLASS|style|STYLE|size|SIZE|face|FACE|[ovwxpOVWXP]:\\w+)=(?:'[^']*'|\"\"[^\"\"]*\"\"|[^>]+)([^>]*)>","<$1$2>");
        return htmlStr;
    }

}
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,015评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,262评论 1 292
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,727评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,986评论 0 205
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,363评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,610评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,871评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,582评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,297评论 1 242
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,551评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,053评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,385评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,035评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,079评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,841评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,648评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,550评论 2 270

推荐阅读更多精彩内容

  • 各大Linux发行版软件包管理参考(http://www.freeoa.net/osuport/botinstal...
    IRONYT阅读 7,160评论 0 12
  • 1. 首先下载rpm包 下载rpm包(官网或者其他网站都可以)但是要注意版本,我建议是4.1.2版本以上,因为以前...
    那个初衷阅读 22,259评论 0 1
  • http://blog.csdn.net/mathewsking/article/details/8211273 ...
    liuboxx1阅读 5,979评论 1 1
  • 《一帘幽梦》 一帘幽梦 茫茫人海 天上最亮的星星 没有陪我 再也找不回 丢掉的一支水晶鞋 一帘幽梦 一片云朵 没有...
    金书js阅读 331评论 4 9
  • 首先非常感谢在温哥华留学时的好友王熙STEVE, 我是在他的带领下才开始健身的。前不久,我再次打开已经没落的人人网...
    Commonsense阅读 1,088评论 0 0