1、前端需要引入pdf.js、pdf.worker.js
/** * 预览pdf文件 * pop 用于显示pdf文件的jquery对象 * workerSrc pdf.worker.js相对于调用showPdf方法文件的路径 * 如:../../../lib/pdf/pdf.worker.js * data pdf的base64数据 */ pageNS.showPdf = function(pop,data,workerSrc) { debugger; $(pop).empty(); var url = convertDataURIToBinary(data); PDFJS.workerSrc = workerSrc; PDFJS.getDocument(url).then(function getPdfHelloWorld(pdf){ pages = pdf.numPages; for(var i = 1; i <= pdf.numPages; i++){ var id = 'page-id-' + i; $(pop).append('<canvas id="' + id + '"></canvas>'); showAll(url,i,id); } }); } var showAll = function(url,page,id){ PDFJS.getDocument(url).then(function getPdfHelloWorld(pdf){ pdf.getPage(page).then(function getPageHelloWorld(page){ var scale = 1; var viewport = page.getViewport(scale); var canvas = document.getElementById(id); var context = canvas.getContext('2d'); canvas.height = viewport.height; canvas.width = viewport.width; var renderContext = { canvasContext:context, viewport:viewport }; page.render(renderContext); }); }); }; var convertDataURIToBinary = function(dataURI) { //将encodeBase64解码 dataURI = dataURI.replace(/[\r\n]/g,''); var raw = window.atob(dataURI); var rawLength = raw.length; //转换成pdf.js能直接解析的Uint8Array类型,见pdf.js-4068 var array = new Uint8Array(new ArrayBuffer(rawLength)); for(i = 0; i < rawLength; i++) { array[i] = raw.charCodeAt(i)&0xff; } return array; }; 2、后端从ftp上获取PDF文件并将其转换成base64数据传给前台
