您的位置:首页 > 编程语言 > Java开发

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

2018-04-02 10:46 591 查看
这一篇是结合上一篇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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: