diff --git a/src/core/evaluator.js b/src/core/evaluator.js index bdeb1af80..68126279a 100644 --- a/src/core/evaluator.js +++ b/src/core/evaluator.js @@ -597,24 +597,13 @@ var PartialEvaluator = (function PartialEvaluatorClosure() { }, getTextContent: function PartialEvaluator_getTextContent( - stream, resources, state) { + stream, resources, textState) { - var bidiTexts; + textState = textState || new TextState(); + + var bidiTexts = []; var SPACE_FACTOR = 0.35; var MULTI_SPACE_FACTOR = 1.5; - var textState; - - if (!state) { - textState = new TextState(); - bidiTexts = []; - state = { - textState: textState, - bidiTexts: bidiTexts - }; - } else { - bidiTexts = state.bidiTexts; - textState = state.textState; - } var self = this; var xref = this.xref; @@ -734,11 +723,12 @@ var PartialEvaluator = (function PartialEvaluatorClosure() { if ('Form' !== type.name) break; - state = this.getTextContent( + var formTexts = this.getTextContent( xobj, xobj.dict.get('Resources') || resources, - state + textState ); + Util.concatenateToArray(bidiTexts, formTexts); break; case OPS.setGState: var dictName = args[0]; @@ -758,7 +748,11 @@ var PartialEvaluator = (function PartialEvaluatorClosure() { } // switch if (chunk !== '') { - var bidiText = PDFJS.bidi(chunk, -1, font.vertical); + var bidiResult = PDFJS.bidi(chunk, -1, font.vertical); + var bidiText = { + str: bidiResult.str, + dir: bidiResult.dir + }; var renderParams = textState.calcRenderParams(preprocessor.ctm); bidiText.x = renderParams.renderMatrix[4] - (textState.fontSize * renderParams.vScale * Math.sin(renderParams.angle)); @@ -775,13 +769,15 @@ var PartialEvaluator = (function PartialEvaluatorClosure() { bidiText.x += renderParams.vScale / 2; bidiText.y -= renderParams.vScale; } + bidiText.angle = renderParams.angle; + bidiText.size = fontHeight; bidiTexts.push(bidiText); chunk = ''; } } // while - return state; + return bidiTexts; }, extractDataStructures: function diff --git a/test/driver.js b/test/driver.js index 6e936ad52..3d69dc4c2 100644 --- a/test/driver.js +++ b/test/driver.js @@ -210,7 +210,7 @@ SimpleTextLayerBuilder.prototype = { ctx.stroke(); ctx.fill(); ctx.restore(); - var textContent = this.textContent.bidiTexts[this.textCounter].str; + var textContent = this.textContent[this.textCounter].str; ctx.font = fontHeight + 'px ' + geom.fontFamily; ctx.fillStyle = 'black'; ctx.fillText(textContent, geom.x, geom.y); diff --git a/web/pdf_find_controller.js b/web/pdf_find_controller.js index 99b9849dc..99810ec80 100644 --- a/web/pdf_find_controller.js +++ b/web/pdf_find_controller.js @@ -150,9 +150,7 @@ var PDFFindController = { var self = this; function extractPageText(pageIndex) { self.pdfPageSource.pages[pageIndex].getTextContent().then( - function textContentResolved(data) { - // Build the find string. - var bidiTexts = data.bidiTexts; + function textContentResolved(bidiTexts) { var str = ''; for (var i = 0; i < bidiTexts.length; i++) { diff --git a/web/text_layer_builder.js b/web/text_layer_builder.js index 170aa638e..c2f8043ea 100644 --- a/web/text_layer_builder.js +++ b/web/text_layer_builder.js @@ -62,7 +62,7 @@ var TextLayerBuilder = function textLayerBuilder(options) { this.renderLayer = function textLayerBuilderRenderLayer() { var self = this; var textDivs = this.textDivs; - var bidiTexts = this.textContent.bidiTexts; + var bidiTexts = this.textContent; var textLayerDiv = this.textLayerDiv; var canvas = document.createElement('canvas'); var ctx = canvas.getContext('2d'); @@ -149,7 +149,7 @@ var TextLayerBuilder = function textLayerBuilder(options) { this.divContentDone = true; var textDivs = this.textDivs; - var bidiTexts = this.textContent.bidiTexts; + var bidiTexts = this.textContent; for (var i = 0; i < bidiTexts.length; i++) { var bidiText = bidiTexts[i]; @@ -181,7 +181,7 @@ var TextLayerBuilder = function textLayerBuilder(options) { this.convertMatches = function textLayerBuilderConvertMatches(matches) { var i = 0; var iIndex = 0; - var bidiTexts = this.textContent.bidiTexts; + var bidiTexts = this.textContent; var end = bidiTexts.length - 1; var queryLen = PDFFindController === null ? 0 : PDFFindController.state.query.length; @@ -240,7 +240,7 @@ var TextLayerBuilder = function textLayerBuilder(options) { return; } - var bidiTexts = this.textContent.bidiTexts; + var bidiTexts = this.textContent; var textDivs = this.textDivs; var prevEnd = null; var isSelectedPage = PDFFindController === null ? @@ -355,7 +355,7 @@ var TextLayerBuilder = function textLayerBuilder(options) { // Clear out all matches. var matches = this.matches; var textDivs = this.textDivs; - var bidiTexts = this.textContent.bidiTexts; + var bidiTexts = this.textContent; var clearedUntilDivIdx = -1; // Clear out all current matches.