不多说,项目需要展示本地pdf文件,因为浏览器兼容问题,就用了<iframe>直接打开了,不过最上面的toolbar是什么鬼啊,需求变更后又要求去掉什么下载之类的功能,然后就发现了pdf.js可以解决这个问题,不过只能打开项目里面的图片!
网上找了好多方法,比如set head,设置浏览器安全等级,设置php页面等等,但是并没有效果,然后看到论坛说后台用流处理一下可以解决这种跨域取文件的问题,所以解决办法就有了:
页面依然是打开viewer.html,不过file路径要换成后台处理的stream:
1 <iframe src="<c:url value="plugins/pdfjs/web/viewer.html" />?file=<%=basePath%>apply/lcappoint/pdfStreamHandeler.do" width="100%" height="800"></iframe>
然后,后台也很简单,就是获取file,转换成流,然后用response.getOutputStream.write()写到前台就好:
@RequestMapping(value = "/pdfStreamHandeler") @ResponseBody public void pdfStreamHandeler(String filePath, HttpServletRequest request, HttpServletResponse response) { filePath = "d://a.pdf"; File file = new File(filePath); byte[] data = null; try { FileInputStream input = new FileInputStream(file); data = new byte[input.available()]; input.read(data); response.getOutputStream().write(data); input.close(); } catch (Exception e) { logger.error("pdf文件处理异常:" + e.getMessage()); } }
然后就能打开本地的pdf文件了。
因为格式都是可控的,才是我们需要的嘛。
小白水平有限,只是在大咖的思路下弄了一下实现,这只是简单的demo。