版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
【移动应用开发技术】如何解决andriod版浏览器不支持文档直接打开的问题
这篇文章主要介绍如何解决andriod版浏览器不支持文档直接打开的问题,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!
最近开发微信企业号,发现微信andriod版内置浏览器在打开文件方面有问题,但是ios版没有问题,原因是ios版使用的是safari浏览器支持文档直接打开,但是andriod版使用的是腾讯浏览器x5内核,不知道什么原因不支持,可能是集成出现的问题,这里提供解决方法,这种方法也同样适用手机浏览器或者安卓开发。通过此方法可以在微信上开发自己的第三方应用,或者解决自己的项目问题,解决方法及核心代码如下:1、判断浏览器类型
HttpServletRequest
req
=
ServletAction
Context.getRequest();
String
userAgent=req.getHeader("User-Agent");//里面包含了设备类型
2、IOS版直接使用流输出
Andriod版利用openoffice+jod转换成html,然后对html内容重新编辑,文件中有图片的将路径改为网络路径或者采用流输出(改成网络路径注意特殊符号,如+号会变成空格)/**
*
从OA上抓取文件
*
author
牟云飞
*
company
海颐软件股份有限公司
*
tel
*
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("%20",
"\\+");//转换加号
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("%2B",
"\\+");//转换加号
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文件,并读取内容此类借鉴原地址并修改/blog/1817738package
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
.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
*
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
=
Ppile(bodyReg);
Matcher
bodyMatcher
=
bodyPattern.matcher(htmlStr);
if
(bodyMatcher.find())
{
//
获取BODY内容,并转化BODY标签为p
htmlStr
=
bodyMatcher.group().replaceFirst("<BODY",
"<p").replaceAll("</BODY>",
"</p>");
}
//
调整图片地址,这里将图片路径改为网络路径
htmlStr
=
htmlStr.replaceAll("<IMG
SRC=\"../","<IMG
SRC=\""
+
MessageUtil.webUrl+"/******.do?action=**
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2023年珠海市金湾区基层服务岗位招募笔试真题
- 2023年温州市瓯新资管服务有限公司招聘笔试真题
- 2023年普定县招聘城市社区工作者笔试真题
- 2023年湖北武汉洪山区招聘社区干事笔试真题
- 2023年安义县自然资源和规划局招聘笔试真题
- 2024年天津客运员考试题目及答案
- 人才招聘行业发展现状及潜力分析研究报告
- 2024年武汉客运考试模拟
- 2024年浙江客运安全员考试题库
- 2024年玉林客运从业资格证考试培训试题和答案
- 公司休假销假单模板
- 终极版2000m3湿式乙炔气柜的防火防爆设施设计
- 借钱不还强制执行申请书模板
- 科技图表设计及绘制
- QC080000质量认证标准及内审员培训教材课件
- 高磷血症的治疗课件
- 2023年9月新《医疗器械分类目录》-自2023年8月1日起施行
- 【英语分级阅读预备级2】06TheVeryWetDog课件
- 秋冬季常见呼吸道传染病预防课件
- 市政桥梁、道路工程土方平衡方案最终版
- 中班科学动物睡觉幼儿园
评论
0/150
提交评论