赞
踩
@使用embed标签实现PDF在线预览
直接贴代码了
<body>
<div id="app">
<embed v-bind:src="cldz" type="application/pdf" id="clShow" height="pixels">
</div>
</body>
前端用了vue框架,src中绑定的字段值是一个控制层里的方法
/** *这里有个问题,传入的参数需要编码,所以到了服务端还需要解码一次 */ @ResponseBody @GetMapping("downloadCl") public void downloadCl(HttpServletResponse response,HttpServletRequest request) { String parameter=request.getQueryString(); String url=getURLDecoderString(parameter); String[] params; if(StringUtils.isNotBlank(url)) { Map<String, String> map=new HashMap<>(); try { params=url.split("&"); for(int i=0;i<params.length;i++) { String[] item=params[i].split("="); map.put(item[0], item[1]); } }catch (Exception e) { LoggerUtil.error("解析材料参数出错:"+url, e); } download(response,MapUtils.getString(map, "name"),MapUtils.getString(map, "src"),MapUtils.getString(map, "clType")); } }
这一块主要是对参数进行了解码,PS:传入的地址存在大数据对象,直接传服务端会报500
/** * URL 解码 * * @return */ **public static String getURLDecoderString(String str) { String result = ""; if (null == str) { return ""; } try { result = java.net.URLDecoder.decode(str, "UTF-8"); } catch (UnsupportedEncodingException e) { LoggerUtil.error("材料路径URL解码失败", e); } return result; }
/** * 为了复用 * @param response * @param name * @param src * @param clType */ **public void download(HttpServletResponse response, String name,String src,String clType) { if (name != null) { InputStream is = null; BufferedInputStream bs = null; OutputStream os = null; try { byte[] cl=null; if(WsCommonConsts.DOWNLOAD_DZJZ.equals(clType)) { cl=getDzjzcl(src); }else{ cl=downloadFromFtp(src); } if (cl!=null) { // 设置Headers response.setHeader("Content-Type", "application/octet-stream"); // 设置下载的文件的名称-该方式已解决中文乱码问题 response.setHeader("Content-Disposition", "attachment;filename=" + new String(name.getBytes("gb2312"), "ISO8859-1")); is = new ByteArrayInputStream(cl); bs = new BufferedInputStream(is); os = response.getOutputStream(); byte[] buffer = new byte[cl.length]; int len = 0; while ((len = bs.read(buffer)) != -1) { os.write(buffer, 0, len); } } } catch (IOException ex) { LoggerUtil.error("下载文书或材料异常", ex); } finally { try { if (is != null) { is.close(); } if (bs != null) { bs.close(); } if (os != null) { os.flush(); os.close(); } } catch (IOException e) { LoggerUtil.error("关闭流异常", e); } } } }**
这里又一个让人头疼的问题,服务端重定向时Chrome及IE11都可以很好的发送请求,唯独IE10出错,后来考虑在发送请求时判断浏览器是否为IE10
**function IEVersion() { var userAgent = navigator.userAgent; //取得浏览器的userAgent字符串 var isIE = userAgent.indexOf("compatible") > -1 && userAgent.indexOf("MSIE") > -1; //判断是否IE<11浏览器 var isEdge = userAgent.indexOf("Edge") > -1 && !isIE; //判断是否IE的Edge浏览器 var isIE11 = userAgent.indexOf('Trident') > -1 && userAgent.indexOf("rv:11.0") > -1; if(isIE) { var reIE = new RegExp("MSIE (\\d+\\.\\d+);"); reIE.test(userAgent); var fIEVersion = parseFloat(RegExp["$1"]); if(fIEVersion == 7) { return 7; } else if(fIEVersion == 8) { return 8; } else if(fIEVersion == 9) { return 9; } else if(fIEVersion == 10) { return 10; } else { return 6;//IE版本<=7 } } else if(isEdge) { return 'edge';//edge } else if(isIE11) { return 11; //IE11 }else{ return -1;//不是ie浏览器 } }
以上,实现了一个支持IE的PDF在线预览功能
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。