diff --git a/src/annotation.js b/src/annotation.js index 467cbf9f8..7681489d0 100644 --- a/src/annotation.js +++ b/src/annotation.js @@ -240,6 +240,46 @@ var Annotation = (function AnnotationClosure() { } }; + Annotation.appendToOperatorList = function Annotation_appendToOperatorList( + annotations, pageQueue, pdfManager, dependencies, partialEvaluator) { + + function reject(e) { + annotationsReadyPromise.reject(e); + } + + var annotationsReadyPromise = new Promise(); + + var ensurePromises = []; + for (var i = 0, n = annotations.length; i < n; ++i) { + var ensurePromise = pdfManager.ensure(annotations[i], + 'getOperatorList', + [partialEvaluator]); + ensurePromises.push(ensurePromise); + } + + Promise.all(ensurePromises).then(function(listPromises) { + Promise.all(listPromises).then(function(datas) { + var fnArray = pageQueue.fnArray; + var argsArray = pageQueue.argsArray; + fnArray.push('beginAnnotations'); + argsArray.push([]); + for (var i = 0, n = datas.length; i < n; ++i) { + var annotationData = datas[i]; + var annotationQueue = annotationData.queue; + Util.concatenateToArray(fnArray, annotationQueue.fnArray); + Util.concatenateToArray(argsArray, annotationQueue.argsArray); + Util.extendObj(dependencies, annotationData.dependencies); + } + fnArray.push('endAnnotations'); + argsArray.push([]); + + annotationsReadyPromise.resolve(); + }, reject); + }, reject); + + return annotationsReadyPromise; + }; + return Annotation; })(); PDFJS.Annotation = Annotation; diff --git a/src/canvas.js b/src/canvas.js index 07b95ec8d..7cd6624ab 100644 --- a/src/canvas.js +++ b/src/canvas.js @@ -1515,6 +1515,15 @@ var CanvasGraphics = (function CanvasGraphicsClosure() { this.restore(); }, + beginAnnotations: function CanvasGraphics_beginAnnotations() { + this.save(); + this.current = new CanvasExtraState(); + }, + + endAnnotations: function CanvasGraphics_endAnnotations() { + this.restore(); + }, + beginAnnotation: function CanvasGraphics_beginAnnotation(rect, transform, matrix) { this.save(); diff --git a/src/core.js b/src/core.js index 785654cdb..1af2fe99d 100644 --- a/src/core.js +++ b/src/core.js @@ -175,32 +175,18 @@ var Page = (function PageClosure() { var pageData = datas[0]; var pageQueue = pageData.queue; var annotations = datas[1]; - - var ensurePromises = []; - for (var i = 0, n = annotations.length; i < n; ++i) { - var ensurePromise = pdfManager.ensure(annotations[i], - 'getOperatorList', - [partialEvaluator]); - ensurePromises.push(ensurePromise); + if (annotations.length === 0) { + PartialEvaluator.optimizeQueue(pageQueue); + promise.resolve(pageData); + return; } - Promise.all(ensurePromises).then(function(listPromises) { - Promise.all(listPromises).then(function(datas) { - for (var i = 0, n = datas.length; i < n; ++i) { - var annotationData = datas[i]; - var annotationQueue = annotationData.queue; - Util.concatenateToArray(pageQueue.fnArray, - annotationQueue.fnArray); - Util.concatenateToArray(pageQueue.argsArray, - annotationQueue.argsArray); - Util.extendObj(pageData.dependencies, - annotationData.dependencies); - } - - PartialEvaluator.optimizeQueue(pageQueue); - - promise.resolve(pageData); - }, reject); + var dependencies = pageData.dependencies; + var annotationsReadyPromise = Annotation.appendToOperatorList( + annotations, pageQueue, pdfManager, dependencies, partialEvaluator); + annotationsReadyPromise.then(function () { + PartialEvaluator.optimizeQueue(pageQueue); + promise.resolve(pageData); }, reject); }, reject);