How to display whole PDF (not only one page) with PDF.JS? How to display whole PDF (not only one page) with PDF.JS? javascript javascript

How to display whole PDF (not only one page) with PDF.JS?


PDFJS has a member variable numPages, so you'd just iterate through them. BUT it's important to remember that getting a page in pdf.js is asynchronous, so the order wouldn't be guaranteed. So you'd need to chain them. You could do something along these lines:

var currPage = 1; //Pages are 1-based not 0-basedvar numPages = 0;var thePDF = null;//This is where you startPDFJS.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 );    }}


Here's my take. Renders all pages in correct order and still works asynchronously.

<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: scale });          canvas.height = viewport.height;          canvas.width = viewport.width;                    page.render({canvasContext: canvas.getContext('2d'), viewport: viewport});    });    }</script><div id='pdf-viewer'></div>


The pdfjs-dist library contains parts for building PDF viewer. You can use PDFPageView to render all pages. Based on https://github.com/mozilla/pdf.js/blob/master/examples/components/pageviewer.html :

var url = "https://cdn.mozilla.net/pdfjs/tracemonkey.pdf";var container = document.getElementById('container');// Load documentPDFJS.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;});
#container > *:not(:first-child) {  border-top: solid 1px black; }
<link href="https://npmcdn.com/pdfjs-dist/web/pdf_viewer.css" rel="stylesheet"/><script src="https://npmcdn.com/pdfjs-dist/web/compatibility.js"></script><script src="https://npmcdn.com/pdfjs-dist/build/pdf.js"></script><script src="https://npmcdn.com/pdfjs-dist/web/pdf_viewer.js"></script><div id="container" class="pdfViewer singlePageView"></div>