不多說,項目需要展示本地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。