diff --git a/src/core.js b/src/core.js index 9b0f0530d..e6391610c 100644 --- a/src/core.js +++ b/src/core.js @@ -66,6 +66,10 @@ var Page = (function PageClosure() { this.pageDict = pageDict; this.xref = xref; this.ref = ref; + this.idCounters = { + font: 0, + obj: 0 + }; } Page.prototype = { @@ -159,17 +163,19 @@ var Page = (function PageClosure() { var contentStreamPromise = pdfManager.ensure(this, 'getContentStream', []); var resourcesPromise = pdfManager.ensure(this, 'resources'); + + var partialEvaluator = new PartialEvaluator( + pdfManager, this.xref, handler, + this.pageIndex, 'p' + this.pageIndex + '_', + this.idCounters); + var dataPromises = Promise.all( [contentStreamPromise, resourcesPromise]); dataPromises.then(function(data) { var contentStream = data[0]; var resources = data[1]; - var pe = self.pe = new PartialEvaluator( - pdfManager, - self.xref, handler, self.pageIndex, - 'p' + self.pageIndex + '_'); - pdfManager.ensure(pe, 'getOperatorList', + pdfManager.ensure(partialEvaluator, 'getOperatorList', [contentStream, resources]).then( function(opListPromise) { opListPromise.then(function(data) { @@ -181,11 +187,7 @@ var Page = (function PageClosure() { pdfManager.ensure(this, 'getAnnotationsForDraw', []).then( function(annotations) { - var annotationEvaluator = new PartialEvaluator( - pdfManager, self.xref, handler, self.pageIndex, - 'p' + self.pageIndex + '_annotation'); - - pdfManager.ensure(annotationEvaluator, 'getAnnotationsOperatorList', + pdfManager.ensure(partialEvaluator, 'getAnnotationsOperatorList', [annotations]).then( function(opListPromise) { opListPromise.then(function(data) { @@ -242,12 +244,13 @@ var Page = (function PageClosure() { dataPromises.then(function(data) { var contentStream = data[0]; var resources = data[1]; - var pe = new PartialEvaluator( - pdfManager, - self.xref, handler, self.pageIndex, - 'p' + self.pageIndex + '_'); + var partialEvaluator = new PartialEvaluator( + pdfManager, self.xref, handler, + self.pageIndex, 'p' + self.pageIndex + '_', + self.idCounters); - pe.getTextContent(contentStream, resources).then(function(bidiTexts) { + partialEvaluator.getTextContent( + contentStream, resources).then(function(bidiTexts) { textContentPromise.resolve({ bidiTexts: bidiTexts }); diff --git a/src/evaluator.js b/src/evaluator.js index 3fcf03c30..1bd97650c 100644 --- a/src/evaluator.js +++ b/src/evaluator.js @@ -25,7 +25,7 @@ var PartialEvaluator = (function PartialEvaluatorClosure() { function PartialEvaluator(pdfManager, xref, handler, pageIndex, - uniquePrefix) { + uniquePrefix, idCounters) { this.state = new EvalState(); this.stateStack = []; @@ -34,8 +34,7 @@ var PartialEvaluator = (function PartialEvaluatorClosure() { this.handler = handler; this.pageIndex = pageIndex; this.uniquePrefix = uniquePrefix; - this.objIdCounter = 0; - this.fontIdCounter = 0; + this.idCounters = idCounters; } // Specifies properties for each command @@ -277,7 +276,7 @@ var PartialEvaluator = (function PartialEvaluatorClosure() { // If there is no imageMask, create the PDFImage and a lot // of image processing can be done here. var uniquePrefix = this.uniquePrefix || ''; - var objId = 'img_' + uniquePrefix + (++this.objIdCounter); + var objId = 'img_' + uniquePrefix + (++this.idCounters.obj); dependencies[objId] = true; retData.args = [objId, w, h]; @@ -510,11 +509,11 @@ var PartialEvaluator = (function PartialEvaluatorClosure() { font = xref.fetchIfRef(font) || fontRes.get(fontName); if (!isDict(font)) { - ++this.fontIdCounter; + ++this.idCounters.font; promise.resolve({ font: { translated: new ErrorFont('Font ' + fontName + ' is not available'), - loadedName: 'g_font_' + this.uniquePrefix + this.fontIdCounter + loadedName: 'g_font_' + this.uniquePrefix + this.idCounters.obj }, dependencies: {} }); @@ -525,7 +524,7 @@ var PartialEvaluator = (function PartialEvaluatorClosure() { if (!loadedName) { // keep track of each font we translated so the caller can // load them asynchronously before calling display on a page - loadedName = 'g_font_' + this.uniquePrefix + (this.fontIdCounter + 1); + loadedName = 'g_font_' + this.uniquePrefix + (this.idCounters.font + 1); font.loadedName = loadedName; var translated; @@ -575,7 +574,7 @@ var PartialEvaluator = (function PartialEvaluatorClosure() { }); } - ++this.fontIdCounter; + ++this.idCounters.font; } else { promise.resolve({ font: font,