【移动应用开发技术】如何解决andriod版浏览器不支持文档直接打开的问题_第1页
【移动应用开发技术】如何解决andriod版浏览器不支持文档直接打开的问题_第2页
【移动应用开发技术】如何解决andriod版浏览器不支持文档直接打开的问题_第3页
【移动应用开发技术】如何解决andriod版浏览器不支持文档直接打开的问题_第4页
【移动应用开发技术】如何解决andriod版浏览器不支持文档直接打开的问题_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

【移动应用开发技术】如何解决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

*

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("%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

*

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

=

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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论