PDF.JS+JAVA跨域改进版
来源:互联网 发布:孙可望 知乎 编辑:程序博客网 时间:2024/06/08 10:44
改进内容:
上一篇博客已经介绍了怎么说使用PDF.JS进行在线预览pdf的操作了,但是在兼容性的方面出现了一些问题。经过不断的研究找到了以下的方法。(未阅读上一篇博客的长友请移步上一篇)
打开自己工程的viewer.js
把ajax部分给删掉,也就是这部分
var PDFData = ""; //定义一个空变量 $.ajax({ type: "GET", //如果报405错误就把post改成get async: false, mimeType: 'text/plain; charset=x-user-defined', url: "传入后台方法", //获取服务器路径 success: function(data) { PDFData = data; //data就是byte[]数组,下面有介绍 } }); var rawLength = PDFData.length; //转换成pdf.js能直接解析的Uint8Array类型,见pdf.js-4068 var array = new Uint8Array(new ArrayBuffer(rawLength)); for (var i = 0;i < rawLength; i++) { ·[i] = PDFData.charCodeAt(i) & 0xff; } var pdf_url = array;
然后在里面加上这些:
var path = [你自己服务器的地址];var pdf_url = path +[新的一个地址,为后台留接口];
ok,这里说明我们把刚进页面调用ajax给去掉,定义一个变量来接收后台直接传的文件流,把这个文件流在后面的代码里赋值给了DEFAULT_URL。下面讲java代码,这里还是以阿里云的OSS为例。
/* * Pdf测试 */@RequestMapping(value = "[这里是自己的地址]", method = RequestMethod.GET)public @ResponseBody byte[] loadPdf1(Model model, HttpServletResponse response, HttpServletRequest request) { // final String keySuffixWithSlash = "594/4452903.pdf"; // 这里是数据库的bucket_key final String keySuffixWithSlash = "baogaotest2.pdf"; // 创建OSSClient实例 OSSClient Server = new OSSClient(endpoint, accessKeyId, accessKeySecret); Date expiration = new Date(new Date().getTime() + 3600 * 1000); GeneratePresignedUrlRequest request1 = new GeneratePresignedUrlRequest("kiki-test", keySuffixWithSlash, HttpMethod.GET); // 设置过期时间 request1.setExpiration(expiration); URL signedUrl = Server.generatePresignedUrl(request1); String url = signedUrl.toString(); Server.shutdown(); System.out.println("signed url for getObject: " + signedUrl.toString()); HttpURLConnection httpConn = null; URL urlObj; byte buffBytes[] = new byte[1024]; try { HttpURLConnHelper HttpURLConnHelper = new HttpURLConnHelper(); InputStream input = HttpURLConnHelper.loadFileFromURL(url); response.setStatus(HttpServletResponse.SC_OK); response.setContentType("application/pdf;charset=UTF-8"); ServletOutputStream out = null; out = response.getOutputStream(); int read = 0; //byte buffBytes[] = new byte[1024]; while ((read = input.read(buffBytes)) != -1) { out.write(buffBytes, 0, read); } out.flush(); out.close(); } catch (IOException e1) { e1.printStackTrace(); } return buffBytes;}
说明:这样的改进是页面引入的时候是一个后台地址用于viewer.jsp的显示,然后文件流在单独给一个地址,在viewer.js里用一个变量去加载这个文件流,用于加载pdf的信息。解决了一些浏览器对Uint8Array这个对象的兼容性的问题。实测几乎兼容市面上的大多数浏览器。
阅读全文
1 0
- PDF.JS+JAVA跨域改进版
- PDF.JS+JAVA跨域
- pdf.js跨域加载文件
- 【Java】web在线打开PDF(pdf.js教程)
- java集成pdf.js实现pdf文件在线预览
- java在线阅览pdf方法一:pdf.js
- 【Java】web在线打开PDF(pdf.js教程)
- java数据库操作(改进版)
- Android JS 安全注入改进版
- js图片库——改进版
- javaWeb文档预览之PDF.js实现PDF文件跨域预览(附测试实例)
- 基于pdf.js简单在线pdf文件预览跨域解决方案,兼容性好!
- pdf.js
- pdf.js实际应用pdf文件在手机版浏览
- js之轮播再改进
- HTML5 pdf viewer pdf.js
- PDF网页展示--PDF.js
- pdf.js预览pdf文件
- 详细的Log4j使用教程
- 快速排序的C语言实现
- 研究生互联网企业面试刷题信息渠道
- 2015-11-30-java-tomcat连接mySql数据库
- 记一次函数崩溃的现象分析,stack around the variable…was corrupted
- PDF.JS+JAVA跨域改进版
- QT5.7 做支持XP的程序
- Java23种设计模式——访问者模式
- python大作战之递归和高阶函数
- Python 爬虫问题记录
- 搭建shadowsocks服务端
- 研究生互联网竞赛信息渠道
- Servlet 基础详解
- 《大话设计模式》之策略模式