diff --git a/web/pdf_find_controller.js b/web/pdf_find_controller.js index 3ae4424bb..92416330e 100644 --- a/web/pdf_find_controller.js +++ b/web/pdf_find_controller.js @@ -251,6 +251,11 @@ class PDFFindController { // Store the pageContent as a string. this.pageContents[i] = strBuf.join(''); extractTextCapability.resolve(i); + }, (reason) => { + console.error(`Unable to get page ${i + 1} text content`, reason); + // Page error -- assuming no text content. + this.pageContents[i] = ''; + extractTextCapability.resolve(i); }); }); } diff --git a/web/pdf_page_view.js b/web/pdf_page_view.js index d6b499ecf..5c1f16005 100644 --- a/web/pdf_page_view.js +++ b/web/pdf_page_view.js @@ -56,6 +56,7 @@ class PDFPageView { this.id = options.id; this.renderingId = 'page' + this.id; + this.pdfPage = null; this.pageLabel = null; this.rotation = 0; this.scale = options.scale || DEFAULT_SCALE; @@ -110,6 +111,7 @@ class PDFPageView { this.reset(); if (this.pdfPage) { this.pdfPage.cleanup(); + this.pdfPage = null; } } @@ -341,6 +343,11 @@ class PDFPageView { this.reset(); // Ensure that we reset all state to prevent issues. } + if (!this.pdfPage) { + this.renderingState = RenderingStates.FINISHED; + return Promise.reject(new Error('Page is not loaded')); + } + this.renderingState = RenderingStates.RUNNING; let pdfPage = this.pdfPage; diff --git a/web/pdf_thumbnail_viewer.js b/web/pdf_thumbnail_viewer.js index 6892d4633..d0ecb469a 100644 --- a/web/pdf_thumbnail_viewer.js +++ b/web/pdf_thumbnail_viewer.js @@ -133,10 +133,10 @@ class PDFThumbnailViewer { this.pdfDocument = pdfDocument; if (!pdfDocument) { - return Promise.resolve(); + return; } - return pdfDocument.getPage(1).then((firstPage) => { + pdfDocument.getPage(1).then((firstPage) => { let pagesCount = pdfDocument.numPages; let viewport = firstPage.getViewport(1.0); for (let pageNum = 1; pageNum <= pagesCount; ++pageNum) { @@ -151,6 +151,8 @@ class PDFThumbnailViewer { }); this._thumbnails.push(thumbnail); } + }).catch((reason) => { + console.error('Unable to initialize thumbnail viewer', reason); }); } @@ -205,6 +207,10 @@ class PDFThumbnailViewer { thumbView.setPdfPage(pdfPage); this._pagesRequests[pageNumber] = null; return pdfPage; + }).catch((reason) => { + console.error('Unable to get page for thumb view', reason); + // Page error -- there is nothing can be done. + this._pagesRequests[pageNumber] = null; }); this._pagesRequests[pageNumber] = promise; return promise; diff --git a/web/pdf_viewer.js b/web/pdf_viewer.js index fbe1bf780..bffe3ff0b 100644 --- a/web/pdf_viewer.js +++ b/web/pdf_viewer.js @@ -341,7 +341,7 @@ class PDFViewer { // Fetch a single page so we can get a viewport that will be the default // viewport for all pages - return firstPagePromise.then((pdfPage) => { + firstPagePromise.then((pdfPage) => { let scale = this.currentScale; let viewport = pdfPage.getViewport(scale * CSS_UNITS); for (let pageNum = 1; pageNum <= pagesCount; ++pageNum) { @@ -387,6 +387,12 @@ class PDFViewer { if (--getPagesLeft === 0) { pagesCapability.resolve(); } + }, (reason) => { + console.error(`Unable to get page ${pageNum} to initialize viewer`, + reason); + if (--getPagesLeft === 0) { + pagesCapability.resolve(); + } }); } }); @@ -400,6 +406,8 @@ class PDFViewer { if (this.findController) { this.findController.resolveFirstPage(); } + }).catch((reason) => { + console.error('Unable to initialize viewer', reason); }); } @@ -838,6 +846,10 @@ class PDFViewer { } this._pagesRequests[pageNumber] = null; return pdfPage; + }).catch((reason) => { + console.error('Unable to get page for page view', reason); + // Page error -- there is nothing can be done. + this._pagesRequests[pageNumber] = null; }); this._pagesRequests[pageNumber] = promise; return promise;