From 256482750388f6360354318f78d16ceffaa47f0e Mon Sep 17 00:00:00 2001 From: Fabian Lange Date: Fri, 28 Aug 2015 13:42:01 +0200 Subject: [PATCH] Fix text spacing with vertical fonts (#6387) According to the PDF spec 5.3.2, a positive value means in horizontal, that the next glyph is further to the left (so narrower), and in vertical that it is further down (so wider). This change fixes the way PDF.js has interpreted the value. --- src/core/evaluator.js | 30 ++++++++++++++++++++---------- src/display/canvas.js | 8 +++++--- test/pdfs/.gitignore | 1 + test/pdfs/issue6387.pdf | Bin 0 -> 66117 bytes test/test_manifest.json | 13 +++++++++++++ 5 files changed, 39 insertions(+), 13 deletions(-) create mode 100644 test/pdfs/issue6387.pdf diff --git a/src/core/evaluator.js b/src/core/evaluator.js index 9eb9c631a..3e0a98d46 100644 --- a/src/core/evaluator.js +++ b/src/core/evaluator.js @@ -731,11 +731,12 @@ var PartialEvaluator = (function PartialEvaluatorClosure() { var arr = args[0]; var combinedGlyphs = []; var arrLength = arr.length; + var state = stateManager.state; for (i = 0; i < arrLength; ++i) { var arrItem = arr[i]; if (isString(arrItem)) { Array.prototype.push.apply(combinedGlyphs, - self.handleText(arrItem, stateManager.state)); + self.handleText(arrItem, state)); } else if (isNum(arrItem)) { combinedGlyphs.push(arrItem); } @@ -1131,17 +1132,26 @@ var PartialEvaluator = (function PartialEvaluatorClosure() { if (typeof items[j] === 'string') { buildTextGeometry(items[j], textChunk); } else { - var val = items[j] / 1000; - if (!textState.font.vertical) { - offset = -val * textState.fontSize * textState.textHScale * - textState.textMatrix[0]; - textState.translateTextMatrix(offset, 0); - textChunk.width += offset; - } else { - offset = -val * textState.fontSize * - textState.textMatrix[3]; + // PDF Specification 5.3.2 states: + // The number is expressed in thousandths of a unit of text + // space. + // This amount is subtracted from the current horizontal or + // vertical coordinate, depending on the writing mode. + // In the default coordinate system, a positive adjustment + // has the effect of moving the next glyph painted either to + // the left or down by the given amount. + var val = items[j] * textState.fontSize / 1000; + if (textState.font.vertical) { + offset = val * textState.textMatrix[3]; textState.translateTextMatrix(0, offset); + // Value needs to be added to height to paint down. textChunk.height += offset; + } else { + offset = val * textState.textHScale * + textState.textMatrix[0]; + textState.translateTextMatrix(offset, 0); + // Value needs to be subtracted from width to paint left. + textChunk.width -= offset; } if (items[j] < 0 && textState.font.spaceWidth > 0) { var fakeSpaces = -items[j] / textState.font.spaceWidth; diff --git a/src/display/canvas.js b/src/display/canvas.js index 033068719..4c6754a9b 100644 --- a/src/display/canvas.js +++ b/src/display/canvas.js @@ -1360,6 +1360,7 @@ var CanvasGraphics = (function CanvasGraphicsClosure() { var textHScale = current.textHScale * fontDirection; var glyphsLength = glyphs.length; var vertical = font.vertical; + var spacingDir = vertical ? 1 : -1; var defaultVMetrics = font.defaultVMetrics; var widthAdvanceScale = fontSize * current.fontMatrix[0]; @@ -1406,7 +1407,7 @@ var CanvasGraphics = (function CanvasGraphicsClosure() { x += fontDirection * wordSpacing; continue; } else if (isNum(glyph)) { - x += -glyph * fontSize * 0.001; + x += spacingDir * glyph * fontSize / 1000; continue; } @@ -1476,6 +1477,7 @@ var CanvasGraphics = (function CanvasGraphicsClosure() { var font = current.font; var fontSize = current.fontSize; var fontDirection = current.fontDirection; + var spacingDir = font.vertical ? 1 : -1; var charSpacing = current.charSpacing; var wordSpacing = current.wordSpacing; var textHScale = current.textHScale * fontDirection; @@ -1483,7 +1485,7 @@ var CanvasGraphics = (function CanvasGraphicsClosure() { var glyphsLength = glyphs.length; var isTextInvisible = current.textRenderingMode === TextRenderingMode.INVISIBLE; - var i, glyph, width; + var i, glyph, width, spacingLength; if (isTextInvisible || fontSize === 0) { return; @@ -1504,7 +1506,7 @@ var CanvasGraphics = (function CanvasGraphicsClosure() { current.x += wordSpacing * textHScale; continue; } else if (isNum(glyph)) { - var spacingLength = -glyph * 0.001 * fontSize; + spacingLength = spacingDir * glyph * fontSize / 1000; this.ctx.translate(spacingLength, 0); current.x += spacingLength * textHScale; continue; diff --git a/test/pdfs/.gitignore b/test/pdfs/.gitignore index 5e4ab3862..1e3ccaf11 100644 --- a/test/pdfs/.gitignore +++ b/test/pdfs/.gitignore @@ -100,6 +100,7 @@ !issue5747.pdf !issue6099.pdf !issue6336.pdf +!issue6387.pdf !issue6410.pdf !gradientfill.pdf !bug903856.pdf diff --git a/test/pdfs/issue6387.pdf b/test/pdfs/issue6387.pdf new file mode 100644 index 0000000000000000000000000000000000000000..daf05618ff7d7d8c3d74f889a25101ea7c5203d1 GIT binary patch literal 66117 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