这里有新鲜出炉的精品教程,程序狗速度看过来!
Android是一种基于Linux的自由及开放源代码的操作系统,主要使用于移动设备,如智能手机和平板电脑,由Google公司和开放手机联盟领导及开发。尚未有统一中文名称,中国大陆地区较多人使用“安卓”或“安致”。
这篇文章主要介绍了微信或手机浏览器在线显示office文件,已测试ios、android,感兴趣的小伙伴们可以参考一下
最近开发微信企业号,发现微信andriod版内置浏览器在打开文件方面有问题,但是ios版没有问题,原因是ios版使用的是safari浏览器 支持文档直接打开,但是andriod版使用的是腾讯浏览器x5内核,不知道什么原因不支持,可能是集成出现的问题,这里提供解决方法,这种方法也同样适用手机浏览器或者安卓开发。通过此方法可以在微信上开发自己的第三方应用,或者解决自己的项目问题,解决方法及核心代码如下:
1、判断浏览器类型
HttpServletRequest req = ServletActionContext.getRequest();
String userAgent=req.getHeader("User-Agent");//里面包含了设备类型
2、IOS版直接使用流输出
Andriod版利用openoffice+jod转换成html,然后对html内容重新编辑,文件中有图片的将路径改为网络路径或者采用流输出(改成网络路径注意特殊符号,如+号会变成空格)
- /**
- * 从OA上抓取文件
- * author 牟云飞
- * company 海颐软件股份有限公司
- * tel 15562579597
- * qq 1147417467
- * team 客服产品中心/于洋
- * @return
- */
- public String getFileFromOa() {
- HttpServletRequest req = ServletActionContext.getRequest();
- String userAgent = req.getHeader("User-Agent"); //里面包含了设备类型
- if ( - 1 != userAgent.indexOf("iPhone")) {
- //-----------------//
- //此方法需要浏览器自己能够打开,ios可以但是微信andriod版内置浏览器不支持
- //-----------------//
- //如果是苹果手机
- //获得文件地址
- String fileUrl = ServletActionContext.getRequest().getParameter("fileUrl");
- fileUrl.replaceAll(" ", "\\+"); //转换加号
- String strURL = MessageUtil.oaUrl + fileUrl;
- String fileType = strURL.substring(strURL.lastIndexOf(".") + 1, strURL.length());
- //获得图片的数据流
- try {
- URL oaUrl = new URL(strURL);
- HttpURLConnection httpConn = (HttpURLConnection) oaUrl.openConnection();
- InputStream in =httpConn.getInputStream();
- //获取输出流
- HttpServletResponse response = ServletActionContext.getResponse();
- req.setCharacterEncoding("UTF-8");
- response.setCharacterEncoding("UTF-8");
- String name = fileUrl.substring(fileUrl.lastIndexOf("/") + 1, fileUrl.length());
- response.setHeader("Content-Disposition", "attachment;filename=" + new String((name).getBytes(), "iso-8859-1"));
- if ("doc".equals(fileType) || "docx".equals(fileType)) {
- response.setContentType("application/msword");
- } else if ("xls".equals(fileType) || "xlsx".equals(fileType)) {
- response.setContentType("application/msexcel");
- } else {
- response.setContentType("application/" + fileType);
- }
- OutputStream out = response.getOutputStream();
- //输出图片信息
- byte[] bytes = new byte[1024];
- int cnt = 0;
- while ((cnt = in.read(bytes, 0, bytes.length)) != -1) {
- out.write(bytes, 0, cnt);
- }
- out.flush();
- out.close(); in .close();
- } catch(MalformedURLException e) {
- e.printStackTrace();
- } catch(IOException e) {
- e.printStackTrace();
- }
- return null;
- } else {
- //如果非苹果手机,自己处理文档
- //获得文件地址
- String fileUrl = ServletActionContext.getRequest().getParameter("fileUrl");
- fileUrl.replaceAll("+", "\\+"); //转换加号
- String strURL = MessageUtil.oaUrl + fileUrl;
- //在本地存放OA文件,然后转换成html,再对文档中的图片路径进行修改,最后输出到页面
- try {
- URL oaUrl = new URL(strURL);
- HttpURLConnection httpConn = (HttpURLConnection) oaUrl.openConnection();
- InputStream in =httpConn.getInputStream();
- //获取输出流
- HttpServletResponse response = ServletActionContext.getResponse();
- req.setCharacterEncoding("UTF-8");
- response.setCharacterEncoding("UTF-8");
- String name = fileUrl.substring(fileUrl.lastIndexOf("/") + 1, fileUrl.length());
- //首先判断本地是否存在
- String path = req.getRealPath("");
- path = path.substring(0, path.lastIndexOf("\\") + 1);
- File htmlFile = new File(path + "OaFileToHtml\\" + name + ".html");
- if (!htmlFile.exists()) {
- //判断文件夹是否存在,创建文件夹
- String oaFilePath = path + "OaFile"; //存放OA文档的文件夹路径;
- File oaFiles = new File(oaFilePath);
- if (!oaFiles.exists()) {
- //如果文件夹不存在创建文件夹
- oaFiles.mkdirs();
- }
- //将OA消息存入本地
- File oafile = new File(oaFiles + File.separator + name);
- OutputStream out = new FileOutputStream(oafile);
- //输出图片信息
- byte[] bytes = new byte[1024];
- int cnt = 0;
- while ((cnt = in.read(bytes, 0, bytes.length)) != -1) {
- out.write(bytes, 0, cnt);
- }
- out.flush();
- out.close(); in .close();
- //转换成html
- String htmlFilePath = path + "OaFileToHtml"; //OA文件转成html的位置
- String htmlcontext = ConvertFileToHtml.toHtmlString(oafile, htmlFilePath);
- req.setAttribute("htmlcontext", htmlcontext);
- } else {
- //已经存在转换成功的文档
- StringBuffer htmlSb = new StringBuffer();
- try {
- BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(htmlFile), Charset.forName("gb2312")));
- while (br.ready()) {
- htmlSb.append(br.readLine());
- }
- br.close();
- } catch(FileNotFoundException e) {
- e.printStackTrace();
- } catch(IOException e) {
- e.printStackTrace();
- }
- // HTML文件字符串
- String htmlStr = htmlSb.toString();
- //System.out.println("htmlStr=" + htmlStr);
- // 返回经过清洁的html文本
- req.setAttribute("htmlcontext", ConvertFileToHtml.clearFormat(htmlStr, ""));
- }
- } catch(MalformedURLException e) {
- e.printStackTrace();
- } catch(IOException e) {
- e.printStackTrace();
- }
- return "lookfile";
- }
- }
-------------------将word转换成html文件,并读取内容-------------------------
- package com.haiyisoft.wx.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.nio.charset.Charset;
- 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;
- /**
- * * 端口启动命令:
- * soffice -headless -accept="socket,port=8100;urp;
- *
- *
- * author 牟云飞
- * company 海颐软件股份有限公司
- * tel 15562579597
- * qq 1147417467
- * team 客服产品中心/于洋
- *
- */
- public class ConvertFileToHtml {
- /**
- * 将word文档转换成html文档
- * @param docFile 需要转换的word文档
- * @param filepath 转换之后html的存放路径
- * @return 转换之后的html文件
- */
- public static File convert(File docFile, String filepath) {
- // 创建保存html的文件
- String fileName = docFile.getName();
- File htmlFile = new File(filepath + "/" + fileName + ".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;
- }
- /**
- *
- * 将word转换成html文件,并且获取html文件代码。
- * @param docFile 需要转换的文档
- * @param filepath 文档中图片的保存位置
- * @return 转换成功的html代码
- */
- public static String toHtmlString(File docFile, String filepath) {
- // 转换word文档
- File htmlFile = convert(docFile, filepath);
- System.out.println(htmlFile.getAbsolutePath());
- // 获取html文件流
- StringBuffer htmlSb = new StringBuffer();
- try {
- BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(htmlFile), Charset.forName("gb2312")));
- 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();
- //System.out.println("htmlStr=" + htmlStr);
- // 返回经过清洁的html文本
- return clearFormat(htmlStr, filepath);
- }
- /**
- *
- * 清除一些不需要的html标记
- */
- public static String clearFormat(String htmlStr, String docImgPath) {
- // 获取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=\"" + MessageUtil.webUrl + "/******.do?action=***);
- //特殊处理一下+号,因为网络传输+会变成空格,用+替换+号
- String temp1=htmlStr.substring(htmlStr.indexOf("action = ***"), htmlStr.length());
- String temp2=temp1.substring(0,temp1.indexOf("."));
- String temp3=temp2.replaceAll("\\ + ", " % 2B ");
- htmlStr=htmlStr.substring(0,htmlStr.indexOf("action = ***"))+temp3+temp1.substring(temp1.indexOf("."), temp1.length());
- // 把<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;
- }
- }
来源: http://www.phperz.com/article/17/0918/348614.html