Moves pdfDocument.getPage/getTextContent requests out of PDFView

This commit is contained in:
Yury Delendik 2014-09-15 09:49:24 -05:00
parent 7af8748151
commit 7642c39734
5 changed files with 204 additions and 134 deletions

View File

@ -22,7 +22,8 @@
'use strict'; 'use strict';
var PageView = function pageView(container, id, scale, defaultViewport, var PageView = function pageView(container, id, scale, defaultViewport,
linkService, renderingQueue, cache, viewer) { linkService, renderingQueue, cache,
pageSource, viewer) {
this.id = id; this.id = id;
this.rotation = 0; this.rotation = 0;
@ -34,6 +35,7 @@ var PageView = function pageView(container, id, scale, defaultViewport,
this.linkService = linkService; this.linkService = linkService;
this.renderingQueue = renderingQueue; this.renderingQueue = renderingQueue;
this.cache = cache; this.cache = cache;
this.pageSource = pageSource;
this.viewer = viewer; this.viewer = viewer;
this.renderingState = RenderingStates.INITIAL; this.renderingState = RenderingStates.INITIAL;
@ -430,12 +432,6 @@ var PageView = function pageView(container, id, scale, defaultViewport,
scrollIntoView(div, { left: left, top: top }); scrollIntoView(div, { left: left, top: top });
}; };
this.getTextContent = function pageviewGetTextContent() {
return this.renderingQueue.getPage(this.id).then(function(pdfPage) {
return pdfPage.getTextContent();
});
};
this.draw = function pageviewDraw(callback) { this.draw = function pageviewDraw(callback) {
var pdfPage = this.pdfPage; var pdfPage = this.pdfPage;
@ -443,7 +439,7 @@ var PageView = function pageView(container, id, scale, defaultViewport,
return; return;
} }
if (!pdfPage) { if (!pdfPage) {
var promise = this.renderingQueue.getPage(this.id); var promise = this.pageSource.getPage();
promise.then(function(pdfPage) { promise.then(function(pdfPage) {
delete this.pagePdfPromise; delete this.pagePdfPromise;
this.setPdfPage(pdfPage); this.setPdfPage(pdfPage);
@ -631,7 +627,7 @@ var PageView = function pageView(container, id, scale, defaultViewport,
function pdfPageRenderCallback() { function pdfPageRenderCallback() {
pageViewDrawCallback(null); pageViewDrawCallback(null);
if (textLayer) { if (textLayer) {
self.getTextContent().then( self.pdfPage.getTextContent().then(
function textContentResolved(textContent) { function textContentResolved(textContent) {
textLayer.setTextContent(textContent); textLayer.setTextContent(textContent);
} }

View File

@ -13,10 +13,17 @@
* See the License for the specific language governing permissions and * See the License for the specific language governing permissions and
* limitations under the License. * limitations under the License.
*/ */
/* globals PDFJS, FindStates, FirefoxCom, Promise */ /* globals PDFJS, FirefoxCom, Promise */
'use strict'; 'use strict';
var FindStates = {
FIND_FOUND: 0,
FIND_NOTFOUND: 1,
FIND_WRAPPED: 2,
FIND_PENDING: 3
};
/** /**
* Provides "search" or "find" functionality for the PDF. * Provides "search" or "find" functionality for the PDF.
* This object actually performs the search for a given string. * This object actually performs the search for a given string.
@ -41,7 +48,7 @@ var PDFFindController = (function PDFFindControllerClosure() {
this.state = null; this.state = null;
this.dirtyMatch = false; this.dirtyMatch = false;
this.findTimeout = null; this.findTimeout = null;
this.pdfPageSource = options.pdfPageSource || null; this.pdfViewer = options.pdfViewer || null;
this.integratedFind = options.integratedFind || false; this.integratedFind = options.integratedFind || false;
this.charactersToNormalize = { this.charactersToNormalize = {
'\u2018': '\'', // Left single quotation mark '\u2018': '\'', // Left single quotation mark
@ -137,7 +144,7 @@ var PDFFindController = (function PDFFindControllerClosure() {
this.pageContents = []; this.pageContents = [];
var extractTextPromisesResolves = []; var extractTextPromisesResolves = [];
var numPages = this.pdfPageSource.pagesCount; var numPages = this.pdfViewer.pagesCount;
for (var i = 0; i < numPages; i++) { for (var i = 0; i < numPages; i++) {
this.extractTextPromises.push(new Promise(function (resolve) { this.extractTextPromises.push(new Promise(function (resolve) {
extractTextPromisesResolves.push(resolve); extractTextPromisesResolves.push(resolve);
@ -146,7 +153,7 @@ var PDFFindController = (function PDFFindControllerClosure() {
var self = this; var self = this;
function extractPageText(pageIndex) { function extractPageText(pageIndex) {
self.pdfPageSource.getPageView(pageIndex).getTextContent().then( self.pdfViewer.getPageTextContent(pageIndex).then(
function textContentResolved(textContent) { function textContentResolved(textContent) {
var textItems = textContent.items; var textItems = textContent.items;
var str = []; var str = [];
@ -159,7 +166,7 @@ var PDFFindController = (function PDFFindControllerClosure() {
self.pageContents.push(str.join('')); self.pageContents.push(str.join(''));
extractTextPromisesResolves[pageIndex](pageIndex); extractTextPromisesResolves[pageIndex](pageIndex);
if ((pageIndex + 1) < self.pdfPageSource.pagesCount) { if ((pageIndex + 1) < self.pdfViewer.pagesCount) {
extractPageText(pageIndex + 1); extractPageText(pageIndex + 1);
} }
} }
@ -189,7 +196,7 @@ var PDFFindController = (function PDFFindControllerClosure() {
}, },
updatePage: function PDFFindController_updatePage(index) { updatePage: function PDFFindController_updatePage(index) {
var page = this.pdfPageSource.getPageView(index); var page = this.pdfViewer.getPageView(index);
if (this.selected.pageIdx === index) { if (this.selected.pageIdx === index) {
// If the page is selected, scroll the page into view, which triggers // If the page is selected, scroll the page into view, which triggers
@ -205,8 +212,8 @@ var PDFFindController = (function PDFFindControllerClosure() {
nextMatch: function PDFFindController_nextMatch() { nextMatch: function PDFFindController_nextMatch() {
var previous = this.state.findPrevious; var previous = this.state.findPrevious;
var currentPageIndex = this.pdfPageSource.page - 1; var currentPageIndex = this.pdfViewer.currentPageNumber - 1;
var numPages = this.pdfPageSource.pagesCount; var numPages = this.pdfViewer.pagesCount;
this.active = true; this.active = true;
@ -346,7 +353,7 @@ var PDFFindController = (function PDFFindControllerClosure() {
this.updateUIState(state, this.state.findPrevious); this.updateUIState(state, this.state.findPrevious);
if (this.selected.pageIdx !== -1) { if (this.selected.pageIdx !== -1) {
this.updatePage(this.selected.pageIdx, true); this.updatePage(this.selected.pageIdx);
} }
}, },

View File

@ -17,7 +17,7 @@
/*globals watchScroll, Cache, DEFAULT_CACHE_SIZE, PageView, UNKNOWN_SCALE, /*globals watchScroll, Cache, DEFAULT_CACHE_SIZE, PageView, UNKNOWN_SCALE,
IGNORE_CURRENT_POSITION_ON_ZOOM, SCROLLBAR_PADDING, VERTICAL_PADDING, IGNORE_CURRENT_POSITION_ON_ZOOM, SCROLLBAR_PADDING, VERTICAL_PADDING,
MAX_AUTO_SCALE, getVisibleElements, PresentationMode, MAX_AUTO_SCALE, getVisibleElements, PresentationMode,
RenderingStates */ RenderingStates, Promise, CSS_UNITS, PDFJS */
'use strict'; 'use strict';
@ -29,11 +29,7 @@ var PDFViewer = (function pdfViewer() {
this.linkService = options.linkService; this.linkService = options.linkService;
this.scroll = watchScroll(this.container, this._scrollUpdate.bind(this)); this.scroll = watchScroll(this.container, this._scrollUpdate.bind(this));
this.pages = []; this.updateInProgress = false;
this.cache = new Cache(DEFAULT_CACHE_SIZE);
this.currentPageNumber = 1;
this.previousPageNumber = 1;
this.updateInProgress = true;
this.resetView(); this.resetView();
} }
@ -42,6 +38,10 @@ var PDFViewer = (function pdfViewer() {
return this.pages.length; return this.pages.length;
}, },
getPageView: function (index) {
return this.pages[index];
},
setCurrentPageNumber: function (val) { setCurrentPageNumber: function (val) {
var event = document.createEvent('UIEvents'); var event = document.createEvent('UIEvents');
event.initUIEvent('pagechange', true, true, window, 0); event.initUIEvent('pagechange', true, true, window, 0);
@ -61,18 +61,114 @@ var PDFViewer = (function pdfViewer() {
this.container.dispatchEvent(event); this.container.dispatchEvent(event);
}, },
addPage: function (pageNum, scale, viewport) { setDocument: function (pdfDocument) {
var pageView = new PageView(this.viewer, pageNum, scale, viewport, if (this.pdfDocument) {
this.linkService, this.renderingQueue, this.resetView();
this.cache, this); }
this.pages.push(pageView);
return pageView; this.pdfDocument = pdfDocument;
if (!pdfDocument) {
return;
}
var pagesCount = pdfDocument.numPages;
var pagesRefMap = this.pagesRefMap = {};
var self = this;
var resolvePagesPromise;
var pagesPromise = new Promise(function (resolve) {
resolvePagesPromise = resolve;
});
this.pagesPromise = pagesPromise;
pagesPromise.then(function () {
var event = document.createEvent('CustomEvent');
event.initCustomEvent('pagesloaded', true, true, {
pagesCount: pagesCount
});
self.container.dispatchEvent(event);
});
var isOnePageRenderedResolved = false;
var resolveOnePageRendered = null;
var onePageRendered = new Promise(function (resolve) {
resolveOnePageRendered = resolve;
});
this.onePageRendered = onePageRendered;
var bindOnAfterDraw = function (pageView) {
// when page is painted, using the image as thumbnail base
pageView.onAfterDraw = function pdfViewLoadOnAfterDraw() {
if (!isOnePageRenderedResolved) {
isOnePageRenderedResolved = true;
resolveOnePageRendered();
}
var event = document.createEvent('CustomEvent');
event.initCustomEvent('pagerendered', true, true, {
pageNumber: pageView.id
});
self.container.dispatchEvent(event);
};
};
var firstPagePromise = pdfDocument.getPage(1);
this.firstPagePromise = firstPagePromise;
// Fetch a single page so we can get a viewport that will be the default
// viewport for all pages
return firstPagePromise.then(function(pdfPage) {
var scale = this.currentScale || 1.0;
var viewport = pdfPage.getViewport(scale * CSS_UNITS);
for (var pageNum = 1; pageNum <= pagesCount; ++pageNum) {
var pageSource = new PDFPageSource(pdfDocument, pageNum);
var pageView = new PageView(this.viewer, pageNum, scale,
viewport.clone(), this.linkService,
this.renderingQueue, this.cache,
pageSource, this);
bindOnAfterDraw(pageView);
this.pages.push(pageView);
}
// Fetch all the pages since the viewport is needed before printing
// starts to create the correct size canvas. Wait until one page is
// rendered so we don't tie up too many resources early on.
onePageRendered.then(function () {
if (!PDFJS.disableAutoFetch) {
var getPagesLeft = pagesCount;
for (var pageNum = 1; pageNum <= pagesCount; ++pageNum) {
pdfDocument.getPage(pageNum).then(function (pageNum, pdfPage) {
var pageView = self.pages[pageNum - 1];
if (!pageView.pdfPage) {
pageView.setPdfPage(pdfPage);
}
var refStr = pdfPage.ref.num + ' ' + pdfPage.ref.gen + ' R';
pagesRefMap[refStr] = pageNum;
getPagesLeft--;
if (!getPagesLeft) {
resolvePagesPromise();
}
}.bind(null, pageNum));
}
} else {
// XXX: Printing is semi-broken with auto fetch disabled.
resolvePagesPromise();
}
});
}.bind(this));
}, },
resetView: function () { resetView: function () {
this.cache = new Cache(DEFAULT_CACHE_SIZE);
this.pages = [];
this.currentPageNumber = 1;
this.previousPageNumber = 1;
this.currentScale = UNKNOWN_SCALE; this.currentScale = UNKNOWN_SCALE;
this.currentScaleValue = null; this.currentScaleValue = null;
this.location = null; this.location = null;
var container = this.viewer;
while (container.hasChildNodes()) {
container.removeChild(container.lastChild);
}
}, },
_scrollUpdate: function () { _scrollUpdate: function () {
@ -171,14 +267,6 @@ var PDFViewer = (function pdfViewer() {
this.setScale(this.currentScaleValue, true, true); this.setScale(this.currentScaleValue, true, true);
}, },
removeAllPages: function () {
var container = this.viewer;
while (container.hasChildNodes()) {
container.removeChild(container.lastChild);
}
this.pages = [];
},
updateLocation: function (firstPage) { updateLocation: function (firstPage) {
var currentScale = this.currentScale; var currentScale = this.currentScale;
var currentScaleValue = this.currentScaleValue; var currentScaleValue = this.currentScaleValue;
@ -308,7 +396,28 @@ var PDFViewer = (function pdfViewer() {
return; return;
} }
}, },
getPageTextContent: function (pageIndex) {
return this.pdfDocument.getPage(pageIndex + 1).then(function (page) {
return page.getTextContent();
});
},
}; };
return PDFViewer; return PDFViewer;
})(); })();
var PDFPageSource = (function PDFPageSourceClosure() {
function PDFPageSource(pdfDocument, pageNumber) {
this.pdfDocument = pdfDocument;
this.pageNumber = pageNumber;
}
PDFPageSource.prototype = {
getPage: function () {
return this.pdfDocument.getPage(this.pageNumber);
}
};
return PDFPageSource;
})();

View File

@ -14,13 +14,14 @@
* See the License for the specific language governing permissions and * See the License for the specific language governing permissions and
* limitations under the License. * limitations under the License.
*/ */
/* globals mozL10n, RenderingStates, THUMBNAIL_SCROLL_MARGIN, /* globals mozL10n, RenderingStates, THUMBNAIL_SCROLL_MARGIN, Promise,
watchScroll, getVisibleElements, scrollIntoView */ watchScroll, getVisibleElements, scrollIntoView, PDFPageSource */
'use strict'; 'use strict';
var ThumbnailView = function thumbnailView(container, id, defaultViewport, var ThumbnailView = function thumbnailView(container, id, defaultViewport,
linkService, renderingQueue) { linkService, renderingQueue,
pageSource) {
var anchor = document.createElement('a'); var anchor = document.createElement('a');
anchor.href = linkService.getAnchorUrl('#page=' + id); anchor.href = linkService.getAnchorUrl('#page=' + id);
anchor.title = mozL10n.get('thumb_page_title', {page: id}, 'Page {{page}}'); anchor.title = mozL10n.get('thumb_page_title', {page: id}, 'Page {{page}}');
@ -65,6 +66,7 @@ var ThumbnailView = function thumbnailView(container, id, defaultViewport,
this.hasImage = false; this.hasImage = false;
this.renderingState = RenderingStates.INITIAL; this.renderingState = RenderingStates.INITIAL;
this.renderingQueue = renderingQueue; this.renderingQueue = renderingQueue;
this.pageSource = pageSource;
this.setPdfPage = function thumbnailViewSetPdfPage(pdfPage) { this.setPdfPage = function thumbnailViewSetPdfPage(pdfPage) {
this.pdfPage = pdfPage; this.pdfPage = pdfPage;
@ -128,7 +130,7 @@ var ThumbnailView = function thumbnailView(container, id, defaultViewport,
this.draw = function thumbnailViewDraw(callback) { this.draw = function thumbnailViewDraw(callback) {
if (!this.pdfPage) { if (!this.pdfPage) {
var promise = this.renderingQueue.getPage(this.id); var promise = this.pageSource.getPage(this.id);
promise.then(function(pdfPage) { promise.then(function(pdfPage) {
this.setPdfPage(pdfPage); this.setPdfPage(pdfPage);
this.draw(callback); this.draw(callback);
@ -190,7 +192,7 @@ var ThumbnailView = function thumbnailView(container, id, defaultViewport,
this.setImage = function thumbnailViewSetImage(img) { this.setImage = function thumbnailViewSetImage(img) {
if (!this.pdfPage) { if (!this.pdfPage) {
var promise = this.renderingQueue.getPage(this.id); var promise = this.pageSource.getPage();
promise.then(function(pdfPage) { promise.then(function(pdfPage) {
this.setPdfPage(pdfPage); this.setPdfPage(pdfPage);
this.setImage(img); this.setImage(img);
@ -252,6 +254,10 @@ var PDFThumbnailViewer = (function pdfThumbnailViewer() {
this.renderingQueue.renderHighestPriority(); this.renderingQueue.renderHighestPriority();
}, },
getThumbnail: function PDFThumbnailViewer_getThumbnail(index) {
return this.thumbnails[index];
},
getVisibleThumbs: function PDFThumbnailViewer_getVisibleThumbs() { getVisibleThumbs: function PDFThumbnailViewer_getVisibleThumbs() {
return getVisibleElements(this.container, this.thumbnails); return getVisibleElements(this.container, this.thumbnails);
}, },
@ -289,20 +295,32 @@ var PDFThumbnailViewer = (function pdfThumbnailViewer() {
ThumbnailView.tempImageCache = null; ThumbnailView.tempImageCache = null;
}, },
removeAllThumbnails: function PDFThumbnailViewer_cleanup() { setDocument: function (pdfDocument) {
var thumbsView = this.container; if (this.pdfDocument) {
while (thumbsView.hasChildNodes()) { // cleanup of the elements and views
thumbsView.removeChild(thumbsView.lastChild); var thumbsView = this.container;
while (thumbsView.hasChildNodes()) {
thumbsView.removeChild(thumbsView.lastChild);
}
this.thumbnails = [];
} }
this.thumbnails = [];
},
addThumbnail: function PDFThumbnailViewer_addThumbnail(pageNum, viewport, this.pdfDocument = pdfDocument;
linkService) { if (!pdfDocument) {
var thumbnail = new ThumbnailView(this.container, pageNum, viewport, return Promise.resolve();
this.linkService, this.renderingQueue); }
this.thumbnails.push(thumbnail);
return thumbnail; return pdfDocument.getPage(1).then(function (firstPage) {
var pagesCount = pdfDocument.numPages;
var viewport = firstPage.getViewport(1.0);
for (var pageNum = 1; pageNum <= pagesCount; ++pageNum) {
var pageSource = new PDFPageSource(pdfDocument, pageNum);
var thumbnail = new ThumbnailView(this.container, pageNum,
viewport.clone(), this.linkService,
this.renderingQueue, pageSource);
this.thumbnails.push(thumbnail);
}
}.bind(this));
}, },
ensureThumbnailVisible: ensureThumbnailVisible:

View File

@ -52,12 +52,6 @@ var RenderingStates = {
PAUSED: 2, PAUSED: 2,
FINISHED: 3 FINISHED: 3
}; };
var FindStates = {
FIND_FOUND: 0,
FIND_NOTFOUND: 1,
FIND_WRAPPED: 2,
FIND_PENDING: 3
};
PDFJS.imageResourcesPath = './images/'; PDFJS.imageResourcesPath = './images/';
//#if (FIREFOX || MOZCENTRAL || B2G || GENERIC || CHROME) //#if (FIREFOX || MOZCENTRAL || B2G || GENERIC || CHROME)
@ -141,7 +135,7 @@ var PDFView = {
Preferences.initialize(); Preferences.initialize();
this.findController = new PDFFindController({ this.findController = new PDFFindController({
pdfPageSource: this, pdfViewer: this.pdfViewer,
integratedFind: this.supportsIntegratedFind integratedFind: this.supportsIntegratedFind
}); });
@ -263,10 +257,6 @@ var PDFView = {
}); });
}, },
getPage: function pdfViewGetPage(n) {
return this.pdfDocument.getPage(n);
},
getPageView: function pdfViewGetPageView(index) { getPageView: function pdfViewGetPageView(index) {
return this.pdfViewer.pages[index]; return this.pdfViewer.pages[index];
}, },
@ -491,8 +481,8 @@ var PDFView = {
this.pdfDocument.destroy(); this.pdfDocument.destroy();
this.pdfDocument = null; this.pdfDocument = null;
this.pdfThumbnailViewer.removeAllThumbnails(); this.pdfThumbnailViewer.setDocument(null);
this.pdfViewer.removeAllPages(); this.pdfViewer.setDocument(null);
if (typeof PDFBug !== 'undefined') { if (typeof PDFBug !== 'undefined') {
PDFBug.cleanup(); PDFBug.cleanup();
@ -845,21 +835,6 @@ var PDFView = {
load: function pdfViewLoad(pdfDocument, scale) { load: function pdfViewLoad(pdfDocument, scale) {
var self = this; var self = this;
var isOnePageRenderedResolved = false;
var resolveOnePageRendered = null;
var onePageRendered = new Promise(function (resolve) {
resolveOnePageRendered = resolve;
});
function bindOnAfterDraw(pageView, thumbnailView) {
// when page is painted, using the image as thumbnail base
pageView.onAfterDraw = function pdfViewLoadOnAfterDraw() {
if (!isOnePageRenderedResolved) {
isOnePageRenderedResolved = true;
resolveOnePageRendered();
}
thumbnailView.setImage(pageView.canvas);
};
}
PDFView.findController.reset(); PDFView.findController.reset();
@ -884,57 +859,19 @@ var PDFView = {
PDFView.documentFingerprint = id; PDFView.documentFingerprint = id;
var store = PDFView.store = new ViewHistory(id); var store = PDFView.store = new ViewHistory(id);
var pdfViewer = this.pdfViewer;
pdfViewer.currentScale = scale;
pdfViewer.setDocument(pdfDocument);
var firstPagePromise = pdfViewer.firstPagePromise;
var pagesPromise = pdfViewer.pagesPromise;
var onePageRendered = pdfViewer.onePageRendered;
this.pageRotation = 0; this.pageRotation = 0;
this.pagesRefMap = pdfViewer.pagesRefMap;
var pagesRefMap = this.pagesRefMap = {}; this.pdfThumbnailViewer.setDocument(pdfDocument);
var resolvePagesPromise;
var pagesPromise = new Promise(function (resolve) {
resolvePagesPromise = resolve;
});
this.pagesPromise = pagesPromise;
var firstPagePromise = pdfDocument.getPage(1);
var pagesViewer = this.pdfViewer;
var thumbsViewer = this.pdfThumbnailViewer;
// Fetch a single page so we can get a viewport that will be the default
// viewport for all pages
firstPagePromise.then(function(pdfPage) { firstPagePromise.then(function(pdfPage) {
var viewport = pdfPage.getViewport((scale || 1.0) * CSS_UNITS);
for (var pageNum = 1; pageNum <= pagesCount; ++pageNum) {
var viewportClone = viewport.clone();
var pageView = pagesViewer.addPage(pageNum, scale, viewportClone);
var thumbnailView = thumbsViewer.addThumbnail(pageNum, viewportClone);
bindOnAfterDraw(pageView, thumbnailView);
}
// Fetch all the pages since the viewport is needed before printing
// starts to create the correct size canvas. Wait until one page is
// rendered so we don't tie up too many resources early on.
onePageRendered.then(function () {
if (!PDFJS.disableAutoFetch) {
var getPagesLeft = pagesCount;
for (var pageNum = 1; pageNum <= pagesCount; ++pageNum) {
pdfDocument.getPage(pageNum).then(function (pageNum, pdfPage) {
var pageView = PDFView.getPageView(pageNum - 1);
if (!pageView.pdfPage) {
pageView.setPdfPage(pdfPage);
}
var refStr = pdfPage.ref.num + ' ' + pdfPage.ref.gen + ' R';
pagesRefMap[refStr] = pageNum;
getPagesLeft--;
if (!getPagesLeft) {
resolvePagesPromise();
}
}.bind(null, pageNum));
}
} else {
// XXX: Printing is semi-broken with auto fetch disabled.
resolvePagesPromise();
}
});
downloadedPromise.then(function () { downloadedPromise.then(function () {
var event = document.createEvent('CustomEvent'); var event = document.createEvent('CustomEvent');
event.initCustomEvent('documentload', true, true, {}); event.initCustomEvent('documentload', true, true, {});
@ -1118,10 +1055,6 @@ var PDFView = {
}, },
setInitialView: function pdfViewSetInitialView(storedHash, scale) { setInitialView: function pdfViewSetInitialView(storedHash, scale) {
// Reset the current scale, as otherwise the page's scale might not get
// updated if the zoom level stayed the same.
this.pdfViewer.resetView();
// When opening a new file (when one is already loaded in the viewer): // When opening a new file (when one is already loaded in the viewer):
// Reset 'currentPageNumber', since otherwise the page's scale will be wrong // Reset 'currentPageNumber', since otherwise the page's scale will be wrong
// if 'currentPageNumber' is larger than the number of pages in the file. // if 'currentPageNumber' is larger than the number of pages in the file.
@ -1814,6 +1747,13 @@ function webViewerInitialized() {
document.addEventListener('DOMContentLoaded', webViewerLoad, true); document.addEventListener('DOMContentLoaded', webViewerLoad, true);
document.addEventListener('pagerendered', function (e) {
var pageIndex = e.detail.pageNumber - 1;
var pageView = PDFView.pdfViewer.getPageView(pageIndex);
var thumbnailView = PDFView.pdfThumbnailViewer.getThumbnail(pageIndex);
thumbnailView.setImage(pageView.canvas);
}, true);
function updateViewarea() { function updateViewarea() {
if (!PDFView.initialized) { if (!PDFView.initialized) {
return; return;