PDF.JS+JAVA跨域
来源:互联网 发布:昆特牌 淘宝 编辑:程序博客网 时间:2024/05/18 03:58
开始
先去官网下载PDF.JS,地址:http://mozilla.github.io/pdf.js/
下载之后解压缩
把整个文件夹当直接引入工程。
把 viewer.html 和 viewer.js 复制出去单独使用,保留控件的完整性。
在html里或者jsp里按照格式相应的路径改好。
<link rel="stylesheet" href="[路径]+web/viewer.css"><link rel="resource" type="application/l10n" href="[路径]+web/locale/locale.properties"><script src="[路径]+jquery.min.js"></script><script src="[路径]+build/pdf.js"></script><script src="[路径]+viewer.js (自己的viewer.js)"></script>打开自己的viewer.js。在895行附近,把相应的路径给改掉。服务器的话需要设置相对路径。
function configure(PDFJS) { PDFJS.imageResourcesPath = path +'[路径]/web/images/'; PDFJS.workerSrc = path +'[路径]/build/pdf.worker.js'; PDFJS.cMapUrl = path +'[路径]/web/web/cmaps/'; PDFJS.cMapPacked = true;}在10054行附近,设置 DEFAULT_URL为一个变量。
var DEFAULT_URL = pdf_url;
给整个viewer.js 加上 下面函数,意思是页面加载完毕后才加载渲染函数。
把变量定义在开头,这样方面使用。
$(document).ready(function(){ var pdf_url = "[需要查看的pdf路径]"; . . .});这样基础路径设置完毕,这样就把页面抽离出来并且可以加载本地需要的PDF了。
跨域
这里采用的是文件流的方式实现跨域操作。
现在viewer.js开头调用ajax。获取pdf的文件流。
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;
后台java方法
1.本地文件流后台处理,只用了web项目,没有任何框架
public void pdfStreamHandeler(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()); }}
2:跨域(从云服务器下载)
这里以阿里云的OSS云服务器为例,设计知识点:https://www.alibabacloud.com/help/zh/doc-detail/32016.htm?spm=a3c0i.o32014zh.b99.108.e7882928dW9FL
@RequestMapping(value = "/pdf", method = RequestMethod.GET)@ResponseBodypublic byte[] loadPdf1(Model model, HttpServletResponse response, HttpServletRequest request) { final String keySuffixWithSlash = "a.pdf"; // 创建OSSClient实例 OSSClient Server = new OSSClient(endpoint, accessKeyId, accessKeySecret); Date expiration = new Date(new Date().getTime() + 3600 * 1000); GeneratePresignedUrlRequest request1 = new GeneratePresignedUrlRequest("aaa", 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; try { //将url转化成流,把他利用resonse读出,返回页面的是buffBytes 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 null;}
其中HttpURLConnHelper是一个方法类,使用了这个工具类。参考地址:http://blog.csdn.net/iblade/article/details/50488749
这样后台处理跨域资源并且以流的形式给前台,就做好了。
这里的兼容性后期测试的时候出现了问题,在手机端的兼容性不行,如要解决请参考本人的另一篇博客。
阅读全文
1 0
- PDF.JS+JAVA跨域
- 【Java】web在线打开PDF(pdf.js教程)
- java集成pdf.js实现pdf文件在线预览
- java在线阅览pdf方法一:pdf.js
- 【Java】web在线打开PDF(pdf.js教程)
- PDF.JS+JAVA跨域改进版
- pdf.js
- HTML5 pdf viewer pdf.js
- PDF网页展示--PDF.js
- pdf.js预览pdf文件
- java实现附件预览(openoffice+PDF.js)
- java在线阅览pdf方法二:pdfobject.js
- JAVA常用API或编程工具003--实现pdf在线阅读功能之pdf.js
- pdf.js开发经验
- JS print pdf
- pdf.js使用教程
- pdf.js使用
- pdf.js 框架使用方法
- Content-Type的类型
- Liunx基础_配置yum源仓库
- 数据结构与算法--图的遍历
- MyEclipse快捷键大全
- Android搜索附近蓝牙
- PDF.JS+JAVA跨域
- 黑客是怎样买彩票的?中奖率提示2倍
- SpringMVC实现poi 解析excel 导入导出
- HDF5
- 二叉树
- CSS笔记
- eclipse下的Servers工程与Tomcat的关系
- Spring Boot 出现 Could not load JDBC driver class [com.mysql.jdbc.Drivers]
- Python 数据可视化