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 = "";
            Pattern bodyPattern = Pattern.compile(bodyReg);
            Matcher bodyMatcher = bodyPattern.matcher(sb1);
            if (bodyMatcher.find()) {
                // 获取BODY内容,并转化BODY标签为DIV
                sb1 = bodyMatcher.group().replaceFirst(", ")
                        .replaceAll("", "
"); } // 调整图片地址 String infoConductFile = " +"/infoConductFile/" + modelSize + "/"; sb1 = sb1.replaceAll(", 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

你可能感兴趣的:(Java相关技术)