它显示一页。我想显示所有页面。一个在另一个之下,或者放置一些按钮来更改页面,甚至更好地加载
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 | var currPage = 1; //Pages are 1-based not 0-based var numPages = 0; var thePDF = null; //This is where you start PDFJS.getDocument(url).then(function(pdf) {<!-- --> //Set PDFJS global object (so we can easily access in our page functions thePDF = pdf; //How many pages it has numPages = pdf.numPages; //Start with first page pdf.getPage( 1 ).then( handlePages ); }); function handlePages(page) {<!-- --> //This gives us the page's dimensions at full scale var viewport = page.getViewport( 1 ); //We'll create a canvas for each page to draw it on var canvas = document.createElement( "canvas" ); canvas.style.display = "block"; var context = canvas.getContext('2d'); canvas.height = viewport.height; canvas.width = viewport.width; //Draw it on the canvas page.render({<!-- -->canvasContext: context, viewport: viewport}); //Add it to the web page document.body.appendChild( canvas ); //Move to next page currPage++; if ( thePDF !== null && currPage <= numPages ) {<!-- --> thePDF.getPage( currPage ).then( handlePages ); } } |
这是我的看法。以正确的顺序呈现所有页面并仍然异步工作。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 | <style> #pdf-viewer {<!-- --> width: 100%; height: 100%; background: rgba(0, 0, 0, 0.1); overflow: auto; } .pdf-page-canvas {<!-- --> display: block; margin: 5px auto; border: 1px solid rgba(0, 0, 0, 0.2); } </style> <script> url = 'https://github.com/mozilla/pdf.js/blob/master/test/pdfs/tracemonkey.pdf'; var thePdf = null; var scale = 1; PDFJS.getDocument(url).promise.then(function(pdf) {<!-- --> thePdf = pdf; viewer = document.getElementById('pdf-viewer'); for(page = 1; page <= pdf.numPages; page++) {<!-- --> canvas = document.createElement("canvas"); canvas.className = 'pdf-page-canvas'; viewer.appendChild(canvas); renderPage(page, canvas); } }); function renderPage(pageNumber, canvas) {<!-- --> thePdf.getPage(pageNumber).then(function(page) {<!-- --> viewport = page.getViewport(scale); canvas.height = viewport.height; canvas.width = viewport.width; page.render({<!-- -->canvasContext: canvas.getContext('2d'), viewport: viewport}); }); } </script> <div id='pdf-viewer'></div> |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | var url = "https://cdn.mozilla.net/pdfjs/tracemonkey.pdf"; var container = document.getElementById('container'); // Load document PDFJS.getDocument(url).then(function (doc) {<!-- --> var promise = Promise.resolve(); for (var i = 0; i < doc.numPages; i++) {<!-- --> // One-by-one load pages promise = promise.then(function (id) {<!-- --> return doc.getPage(id + 1).then(function (pdfPage) {<!-- --> // Add div with page view. var SCALE = 1.0; var pdfPageView = new PDFJS.PDFPageView({<!-- --> container: container, id: id, scale: SCALE, defaultViewport: pdfPage.getViewport(SCALE), // We can enable text/annotations layers, if needed textLayerFactory: new PDFJS.DefaultTextLayerFactory(), annotationLayerFactory: new PDFJS.DefaultAnnotationLayerFactory() }); // Associates the actual page with the view, and drawing it pdfPageView.setPdfPage(pdfPage); return pdfPageView.draw(); }); }.bind(null, i)); } return promise; }); |
1 2 3 | #container > *:not(:first-child) {<!-- --> border-top: solid 1px black; } |
1 2 3 4 5 6 | <link href="https://npmcdn.com/pdfjs-dist/web/pdf_viewer.css" rel="stylesheet"/> <script src="//i2.wp.com/npmcdn.com/pdfjs-dist/web/compatibility.js"></script> <script src="//i2.wp.com/npmcdn.com/pdfjs-dist/build/pdf.js"></script> <script src="//i2.wp.com/npmcdn.com/pdfjs-dist/web/pdf_viewer.js"></script> <div id="container" class="pdfViewer singlePageView"></div> |
如果你想在不同的画布中渲染
index.html
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | <!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <title>PDF Sample</title> <script type="text/javascript" src="jquery.js"></script> <script type="text/javascript" src="pdf.js"></script> <script type="text/javascript" src="main.js"> </script> <link rel="stylesheet" type="text/css" href="main.css"> </head> <body id="body"> </body> </html> |
main.css
1 2 3 | canvas {<!-- --> display: block; } |
main.js
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 | $(function() {<!-- --> var filePath = "document.pdf"; function Num(num) {<!-- --> var num = num; return function () {<!-- --> return num; } }; function renderPDF(url, canvasContainer, options) {<!-- --> var options = options || {<!-- --> scale: 1.5 }, func, pdfDoc, def = $.Deferred(), promise = $.Deferred().resolve().promise(), width, height, makeRunner = function(func, args) {<!-- --> return function() {<!-- --> return func.call(null, args); }; }; function renderPage(num) {<!-- --> var def = $.Deferred(), currPageNum = new Num(num); pdfDoc.getPage(currPageNum()).then(function(page) {<!-- --> var viewport = page.getViewport(options.scale); var canvas = document.createElement('canvas'); var ctx = canvas.getContext('2d'); var renderContext = {<!-- --> canvasContext: ctx, viewport: viewport }; if(currPageNum() === 1) {<!-- --> height = viewport.height; width = viewport.width; } canvas.height = height; canvas.width = width; canvasContainer.appendChild(canvas); page.render(renderContext).then(function() {<!-- --> def.resolve(); }); }) return def.promise(); } function renderPages(data) {<!-- --> pdfDoc = data; var pagesCount = pdfDoc.numPages; for (var i = 1; i <= pagesCount; i++) {<!-- --> func = renderPage; promise = promise.then(makeRunner(func, i)); } } PDFJS.disableWorker = true; PDFJS.getDocument(url).then(renderPages); }; var body = document.getElementById("body"); renderPDF(filePath, body); }); |