|
|
@ -35,6 +35,7 @@ |
|
|
|
// all requirements to run parts of pdf.js in a web worker.
|
|
|
|
// all requirements to run parts of pdf.js in a web worker.
|
|
|
|
// Right now, the requirement is, that an Uint8Array is still an Uint8Array
|
|
|
|
// Right now, the requirement is, that an Uint8Array is still an Uint8Array
|
|
|
|
// as it arrives on the worker. Chrome added this with version 15.
|
|
|
|
// as it arrives on the worker. Chrome added this with version 15.
|
|
|
|
|
|
|
|
globalScope.PDFJS.disableWorker = true; |
|
|
|
if (!globalScope.PDFJS.disableWorker && typeof Worker !== 'undefined') { |
|
|
|
if (!globalScope.PDFJS.disableWorker && typeof Worker !== 'undefined') { |
|
|
|
var workerSrc = PDFJS.workerSrc; |
|
|
|
var workerSrc = PDFJS.workerSrc; |
|
|
|
if (typeof workerSrc === 'undefined') { |
|
|
|
if (typeof workerSrc === 'undefined') { |
|
|
@ -57,6 +58,7 @@ |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
var messageHandler = new MessageHandler('main', worker); |
|
|
|
var messageHandler = new MessageHandler('main', worker); |
|
|
|
|
|
|
|
this.messageHandler = messageHandler; |
|
|
|
|
|
|
|
|
|
|
|
messageHandler.on('test', function pdfDocTest(supportTypedArray) { |
|
|
|
messageHandler.on('test', function pdfDocTest(supportTypedArray) { |
|
|
|
if (supportTypedArray) { |
|
|
|
if (supportTypedArray) { |
|
|
@ -112,20 +114,20 @@ |
|
|
|
|
|
|
|
|
|
|
|
messageHandler.on('getpage', function pdfDocPage(data) { |
|
|
|
messageHandler.on('getpage', function pdfDocPage(data) { |
|
|
|
var pageInfo = data.pageInfo; |
|
|
|
var pageInfo = data.pageInfo; |
|
|
|
var page = new PdfPageWrapper(pageInfo, transport); |
|
|
|
var page = new PdfPageWrapper(pageInfo, this); |
|
|
|
this.pageCache[pageInfo.pageNumber] = pageInfo; |
|
|
|
this.pageCache[pageInfo.pageNumber] = page; |
|
|
|
var promises = this.pagePromises[pageInfo.pageNumber]; |
|
|
|
var promises = this.pagePromises[pageInfo.pageNumber]; |
|
|
|
delete this.pagePromises[pageInfo.pageNumber]; |
|
|
|
delete this.pagePromises[pageInfo.pageNumber]; |
|
|
|
for (var i = 0, ii = promises.length; i < ii; ++i) |
|
|
|
for (var i = 0, ii = promises.length; i < ii; ++i) |
|
|
|
promises.resolve(page); |
|
|
|
promises[i].resolve(page); |
|
|
|
}, this); |
|
|
|
}, this); |
|
|
|
|
|
|
|
|
|
|
|
messageHandler.on('page', function pdfDocPage(data) { |
|
|
|
messageHandler.on('page', function pdfDocPage(data) { |
|
|
|
var pageNum = data.pageNum; |
|
|
|
var pageNum = data.pageNum; |
|
|
|
var page = this.pageCache[pageNum]; |
|
|
|
var page = this.pageCache[pageNum - 1]; |
|
|
|
var depFonts = data.depFonts; |
|
|
|
var depFonts = data.depFonts; |
|
|
|
|
|
|
|
|
|
|
|
page.stats.timeEnd('Page Request'); |
|
|
|
//page.stats.timeEnd('Page Request');
|
|
|
|
page.startRenderingFromOperatorList(data.operatorList, depFonts); |
|
|
|
page.startRenderingFromOperatorList(data.operatorList, depFonts); |
|
|
|
}, this); |
|
|
|
}, this); |
|
|
|
|
|
|
|
|
|
|
@ -208,26 +210,26 @@ |
|
|
|
}, |
|
|
|
}, |
|
|
|
|
|
|
|
|
|
|
|
sendData: function WorkerTransport_sendData(data) { |
|
|
|
sendData: function WorkerTransport_sendData(data) { |
|
|
|
this.messageHandler.send('doc', data); |
|
|
|
this.messageHandler.send('doc_request', data); |
|
|
|
}, |
|
|
|
}, |
|
|
|
|
|
|
|
|
|
|
|
getPage: function WorkerTransport_getPage(n, promise) { |
|
|
|
getPage: function WorkerTransport_getPage(n, promise) { |
|
|
|
if (this.pageCache[n]) { |
|
|
|
if (this.pageCache[n - 1]) { |
|
|
|
promise.resolve(pageCache[n]); |
|
|
|
promise.resolve(pageCache[n - 1]); |
|
|
|
return; |
|
|
|
return; |
|
|
|
} |
|
|
|
} |
|
|
|
if (n in this.pagePromises) { |
|
|
|
if ((n - 1) in this.pagePromises) { |
|
|
|
this.pagePromises[n].push(promise); |
|
|
|
this.pagePromises[n - 1].push(promise); |
|
|
|
return; |
|
|
|
return; |
|
|
|
} |
|
|
|
} |
|
|
|
this.pagePromises[n] = [promise]; |
|
|
|
this.pagePromises[n - 1] = [promise]; |
|
|
|
this.messageHandler.send('getpage', {page: n}); |
|
|
|
this.messageHandler.send('getpage_request', {pageNumber: n - 1}); |
|
|
|
} |
|
|
|
} |
|
|
|
}; |
|
|
|
}; |
|
|
|
function PdfPageWrapper(page, transport) { |
|
|
|
function PdfPageWrapper(pageInfo, transport) { |
|
|
|
this.pageInfo = pageInfo; |
|
|
|
this.pageInfo = pageInfo; |
|
|
|
this.transport = transport; |
|
|
|
this.transport = transport; |
|
|
|
this.stats = new StatTimer(); |
|
|
|
this._stats = new StatTimer(); |
|
|
|
this.objs = transport.objs; |
|
|
|
this.objs = transport.objs; |
|
|
|
} |
|
|
|
} |
|
|
|
PdfPageWrapper.prototype = { |
|
|
|
PdfPageWrapper.prototype = { |
|
|
@ -238,7 +240,7 @@ |
|
|
|
return this.pageInfo.rotate; |
|
|
|
return this.pageInfo.rotate; |
|
|
|
}, |
|
|
|
}, |
|
|
|
get stats() { |
|
|
|
get stats() { |
|
|
|
return this.stats; |
|
|
|
return this._stats; |
|
|
|
}, |
|
|
|
}, |
|
|
|
get ref() { |
|
|
|
get ref() { |
|
|
|
return this.pageInfo.ref; |
|
|
|
return this.pageInfo.ref; |
|
|
@ -258,18 +260,17 @@ |
|
|
|
return promise; |
|
|
|
return promise; |
|
|
|
}, |
|
|
|
}, |
|
|
|
render: function(renderContext) { |
|
|
|
render: function(renderContext) { |
|
|
|
var promise; |
|
|
|
var promise = new Promise(); |
|
|
|
var stats = this.stats; |
|
|
|
var stats = this.stats; |
|
|
|
stats.time('Overall'); |
|
|
|
stats.time('Overall'); |
|
|
|
// If there is no displayReadyPromise yet, then the operatorList was never
|
|
|
|
// If there is no displayReadyPromise yet, then the operatorList was never
|
|
|
|
// requested before. Make the request and create the promise.
|
|
|
|
// requested before. Make the request and create the promise.
|
|
|
|
if (!this.displayReadyPromise) { |
|
|
|
if (!this.displayReadyPromise) { |
|
|
|
this.displayReadyPromise = promise = new Promise(); |
|
|
|
this.displayReadyPromise = new Promise(); |
|
|
|
|
|
|
|
|
|
|
|
this.stats.time('Page Request'); |
|
|
|
//this.stats.time('Page Request');
|
|
|
|
this.messageHandler.send('page_request', this.pageNumber + 1); |
|
|
|
this.transport.messageHandler.send('page_request', this.pageNumber + 1); |
|
|
|
} else |
|
|
|
} |
|
|
|
promise = this.displayReadyPromise; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var callback = (function complete(error) { |
|
|
|
var callback = (function complete(error) { |
|
|
|
if (error) |
|
|
|
if (error) |
|
|
@ -345,14 +346,14 @@ |
|
|
|
var stats = this.stats; |
|
|
|
var stats = this.stats; |
|
|
|
stats.time('Rendering'); |
|
|
|
stats.time('Rendering'); |
|
|
|
|
|
|
|
|
|
|
|
/* REMOVE ??? */ |
|
|
|
/* REMOVE ??? |
|
|
|
var xref = this.xref; |
|
|
|
var xref = this.xref; |
|
|
|
var resources = this.resources; |
|
|
|
var resources = this.resources; |
|
|
|
assertWellFormed(isDict(resources), 'invalid page resources'); |
|
|
|
assertWellFormed(isDict(resources), 'invalid page resources'); |
|
|
|
|
|
|
|
|
|
|
|
gfx.xref = xref; |
|
|
|
gfx.xref = xref; |
|
|
|
gfx.res = resources; |
|
|
|
gfx.res = resources; |
|
|
|
/* REMOVE END */ |
|
|
|
REMOVE END */ |
|
|
|
|
|
|
|
|
|
|
|
gfx.beginDrawing(viewport); |
|
|
|
gfx.beginDrawing(viewport); |
|
|
|
|
|
|
|
|
|
|
|