Java利用OpenOffice进行将word,excel转化成html解析到界面(下)

这一篇是结合上一篇OpenOffice基础上,对具体web工程中的需求进行整合以及测试。

1.封装解析类

我们在上篇已经获取如果解析成html文件,但是要把html转换成为字符串显示,我们还必须调用一个jar包,进行解析:
这里写图片描述
首先导入jsoup的jar

package com.dean.ssm.util.officeparsing;

import java.io.ByteArrayOutputStream;
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.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import javax.servlet.http.HttpServletRequest;
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.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;

public class GetTextFromWord {
    /**
     * 解析html文件中的body并将body内容截取成String类型
     * 
     * @author ff
     * @param filename
     *            html文件路径
     * @return
     */
    public String HtmlToString(String filename, HttpServletRequest request,
            String modelSize) {
        System.out.println(modelSize);
        String path = request.getSession().getServletContext().getRealPath("");
        String filepath = path.substring(0, path.length() - 3);
        File input = new File(filename);
        try {
            Document doc = Jsoup.parse(input, "gb2312");
            String html = doc.html();
            Document doc1 = Jsoup.parseBodyFragment(html);
            Element body1 = doc1.body();
            StringBuffer sb = new StringBuffer();
            sb.append(body1.toString());
            String sb1 = new String(sb);
            // 获取body内容的正则
            String bodyReg = "<BODY .*</BODY>";
            Pattern bodyPattern = Pattern.compile(bodyReg);
            Matcher bodyMatcher = bodyPattern.matcher(sb1);
            if (bodyMatcher.find()) {
                // 获取BODY内容,并转化BODY标签为DIV
                sb1 = bodyMatcher.group().replaceFirst("<body", "<div")
                        .replaceAll("</body>", "</div>");
            }
            // 调整图片地址
            String infoConductFile = "<img SRC=\"" +"/infoConductFile/" + modelSize + "/";
            sb1 = sb1.replaceAll("<img SRC=\"", infoConductFile);
            // 删除不需要的标签
            sb1 = sb1
                    .replaceAll(
                            "<[/]?(xml|XML|del|DEL|ins|INS|title|TITLE|meta|META|[ovwxpOVWXP]:\\w+)[^>]*?>",
                            "");
            System.out.println(sb1);
            return sb1;
        } catch (IOException e) {
            e.printStackTrace();
        }
        return "";
    }
}

以上为博主自己封装解析类,解析后的字符串可以拼接在个人需求中任意需要调用的地方。

2.Ctrl层调用

// 对模版内容进行解析
// 1.根据ID查url
String contentadd = "";
if (icc.getModelId() != null || icc.getModelId() != -1) {
ModelManage modelManage = modelManageService
.selectByPrimaryKey(icc.getModelId());
// 2.进行后缀判断,调用解析方法
if (modelManage != null) {
if (modelManage.getModelUrl().endsWith(".doc")
|| modelManage.getModelUrl().endsWith(".docx")
|| modelManage.getModelUrl().endsWith(".xls")
|| modelManage.getModelUrl().endsWith(".xlsx")) {
String path = request.getSession().getServletContext().getRealPath("");
String filepath = path.substring(0, path.length() - 3);
GetTextFromWord getTextFromWord = new GetTextFromWord();
int tmp = modelManage.getModelSize().indexOf("\\");
contentadd = getTextFromWord.HtmlToString(filepath+ "infoConductFile" + "\\"
+ modelManage.getModelSize(), request,modelManage.getModelSize().substring(0, tmp));
        }
    }
}
// 3.拼接内容,存入数据库
String ctnt = URLDecoder.decode(
URLDecoder.decode(icc.getContent()), "utf-8");
icc.setContent(ctnt + contentadd);

说明:首先定义一个字符串变量,然后根据前台获取上传office文件的路径,解析后调用转换方法,将office文件转换成html然后调用博主所写封装类返回字符串类型,然后接到contentadd,最后拼接在所需要拼接的地方。

3.文件存储路径以及格式

博主使用的是服务器存储文件,所以当上传的时候直接会在服务器生成html文件和图片文件。
这里写图片描述
其中docx为上传到服务器文件,解析自动生成html和jpg文件,证明程序无误,功能实现。
ppt文件的话会将每一个幻灯片切换成图片显示,OpenOffice对PPT解析不是非常良好,博主不太推荐, 不过他也是可以解析的。

到这里需求就基本完成了,剩下一些小的优化工作在此就不赘述了,如有问题可以留言告知博主,也可能会有更好的解析方法,大家可以留言交流学习,希望我这篇文章可以帮助到大家,不忘初心,我们不止会New

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值