diff --git a/web/base_viewer.js b/web/base_viewer.js index 2f7923844..3fec6934b 100644 --- a/web/base_viewer.js +++ b/web/base_viewer.js @@ -421,9 +421,9 @@ class BaseViewer { // Fetch a single page so we can get a viewport that will be the default // viewport for all pages - firstPagePromise.then((pdfPage) => { + firstPagePromise.then((firstPdfPage) => { let scale = this.currentScale; - let viewport = pdfPage.getViewport({ scale: scale * CSS_UNITS, }); + const viewport = firstPdfPage.getViewport({ scale: scale * CSS_UNITS, }); for (let pageNum = 1; pageNum <= pagesCount; ++pageNum) { let textLayerFactory = null; if (this.textLayerMode !== TextLayerMode.DISABLE) { @@ -449,6 +449,14 @@ class BaseViewer { }); this._pages.push(pageView); } + // Set the first `pdfPage` immediately, since it's already loaded, + // rather than having to repeat the `PDFDocumentProxy.getPage` call in + // the `this._ensurePdfPageLoaded` method before rendering can start. + const firstPageView = this._pages[0]; + if (firstPageView) { + firstPageView.setPdfPage(firstPdfPage); + this.linkService.cachePageRef(1, firstPdfPage.ref); + } if (this._spreadMode !== SpreadMode.NONE) { this._updateSpreadMode(); } @@ -469,8 +477,13 @@ class BaseViewer { pagesCapability.resolve(); return; } - let getPagesLeft = pagesCount; - for (let pageNum = 1; pageNum <= pagesCount; ++pageNum) { + let getPagesLeft = pagesCount - 1; // The first page was already loaded. + + if (getPagesLeft <= 0) { + pagesCapability.resolve(); + return; + } + for (let pageNum = 2; pageNum <= pagesCount; ++pageNum) { pdfDocument.getPage(pageNum).then((pdfPage) => { let pageView = this._pages[pageNum - 1]; if (!pageView.pdfPage) { diff --git a/web/pdf_thumbnail_viewer.js b/web/pdf_thumbnail_viewer.js index 982abfd68..7e0b2f2c9 100644 --- a/web/pdf_thumbnail_viewer.js +++ b/web/pdf_thumbnail_viewer.js @@ -164,9 +164,9 @@ class PDFThumbnailViewer { return; } - pdfDocument.getPage(1).then((firstPage) => { + pdfDocument.getPage(1).then((firstPdfPage) => { let pagesCount = pdfDocument.numPages; - let viewport = firstPage.getViewport({ scale: 1, }); + const viewport = firstPdfPage.getViewport({ scale: 1, }); for (let pageNum = 1; pageNum <= pagesCount; ++pageNum) { let thumbnail = new PDFThumbnailView({ container: this.container, @@ -179,6 +179,13 @@ class PDFThumbnailViewer { }); this._thumbnails.push(thumbnail); } + // Set the first `pdfPage` immediately, since it's already loaded, + // rather than having to repeat the `PDFDocumentProxy.getPage` call in + // the `this._ensurePdfPageLoaded` method before rendering can start. + const firstThumbnailView = this._thumbnails[0]; + if (firstThumbnailView) { + firstThumbnailView.setPdfPage(firstPdfPage); + } // Ensure that the current thumbnail is always highlighted on load. const thumbnailView = this._thumbnails[this._currentPageNumber - 1]; @@ -235,7 +242,9 @@ class PDFThumbnailViewer { return this._pagesRequests.get(thumbView); } const promise = this.pdfDocument.getPage(thumbView.id).then((pdfPage) => { - thumbView.setPdfPage(pdfPage); + if (!thumbView.pdfPage) { + thumbView.setPdfPage(pdfPage); + } this._pagesRequests.delete(thumbView); return pdfPage; }).catch((reason) => {