From 0414c0711f4b0d20a6680cbf3e5dc02a6e1d7bb0 Mon Sep 17 00:00:00 2001 From: notmasteryet Date: Tue, 29 Nov 2011 22:06:00 -0600 Subject: [PATCH 1/2] Fixing base encoding presence detection; character width scale --- src/canvas.js | 14 ++++++++------ src/evaluator.js | 2 ++ src/fonts.js | 7 ++++++- src/glyphlist.js | 3 ++- 4 files changed, 18 insertions(+), 8 deletions(-) diff --git a/src/canvas.js b/src/canvas.js index 587357980..f16313db2 100644 --- a/src/canvas.js +++ b/src/canvas.js @@ -537,13 +537,14 @@ var CanvasGraphics = (function canvasGraphics() { var charSpacing = current.charSpacing; var wordSpacing = current.wordSpacing; var textHScale = current.textHScale; + var fontMatrix = font.fontMatrix || IDENTITY_MATRIX; + var textHScale2 = textHScale * fontMatrix[0]; var glyphsLength = glyphs.length; if (font.coded) { ctx.save(); ctx.transform.apply(ctx, current.textMatrix); ctx.translate(current.x, current.y); - var fontMatrix = font.fontMatrix || IDENTITY_MATRIX; ctx.scale(1 / textHScale, 1); for (var i = 0; i < glyphsLength; ++i) { @@ -564,7 +565,7 @@ var CanvasGraphics = (function canvasGraphics() { var width = transformed[0] * fontSize + charSpacing; ctx.translate(width, 0); - current.x += width; + current.x += width * textHScale2; } ctx.restore(); @@ -573,7 +574,7 @@ var CanvasGraphics = (function canvasGraphics() { ctx.transform.apply(ctx, current.textMatrix); ctx.scale(1, -1); ctx.translate(current.x, -1 * current.y); - ctx.transform.apply(ctx, font.fontMatrix || IDENTITY_MATRIX); + ctx.transform.apply(ctx, fontMatrix); ctx.scale(1 / textHScale, 1); @@ -592,7 +593,7 @@ var CanvasGraphics = (function canvasGraphics() { // TODO actual characters can be extracted from the glyph.unicode } - current.x += width; + current.x += width * textHScale2; ctx.restore(); } @@ -602,12 +603,13 @@ var CanvasGraphics = (function canvasGraphics() { var ctx = this.ctx; var current = this.current; var fontSize = current.fontSize; - var textHScale = current.textHScale; + var textHScale2 = current.textHScale * + (current.font.fontMatrix || IDENTITY_MATRIX)[0]; var arrLength = arr.length; for (var i = 0; i < arrLength; ++i) { var e = arr[i]; if (isNum(e)) { - current.x -= e * 0.001 * fontSize * textHScale; + current.x -= e * 0.001 * fontSize * textHScale2; } else if (isString(e)) { this.showText(e); } else { diff --git a/src/evaluator.js b/src/evaluator.js index b6ef4ddfa..954c3bec3 100644 --- a/src/evaluator.js +++ b/src/evaluator.js @@ -498,6 +498,8 @@ var PartialEvaluator = (function partialEvaluator() { var baseName = encoding.get('BaseEncoding'); if (baseName) baseEncoding = Encodings[baseName.name]; + else + hasEncoding = false; // base encoding was not provided // Load the differences between the base and original if (encoding.has('Differences')) { diff --git a/src/fonts.js b/src/fonts.js index 9aabb3f57..2e95a7c94 100644 --- a/src/fonts.js +++ b/src/fonts.js @@ -764,6 +764,7 @@ var Font = (function Font() { this.hasEncoding = properties.hasEncoding; this.fontMatrix = properties.fontMatrix; + this.widthMultiplier = 1.0; if (properties.type == 'Type3') return; @@ -826,6 +827,8 @@ var Font = (function Font() { this.data = data; this.fontMatrix = properties.fontMatrix; + this.widthMultiplier = !properties.fontMatrix ? 1.0 : + 1.0 / properties.fontMatrix[0]; this.encoding = properties.baseEncoding; this.hasShortCmap = properties.hasShortCmap; this.loadedName = getUniqueName(); @@ -2131,10 +2134,12 @@ var Font = (function Font() { if (typeof unicodeChars === 'number') unicodeChars = String.fromCharCode(unicodeChars); + width = (isNum(width) ? width : this.defaultWidth) * this.widthMultiplier; + return { fontChar: String.fromCharCode(unicode), unicode: unicodeChars, - width: isNum(width) ? width : this.defaultWidth, + width: width, codeIRQueue: codeIRQueue }; }, diff --git a/src/glyphlist.js b/src/glyphlist.js index 5691f8546..01b94442a 100644 --- a/src/glyphlist.js +++ b/src/glyphlist.js @@ -4287,6 +4287,7 @@ var GlyphsUnicode = { zretroflexhook: 0x0290, zstroke: 0x01B6, zuhiragana: 0x305A, - zukatakana: 0x30BA + zukatakana: 0x30BA, + '.notdef': 0x0000 }; From 73bf5d7b651f6c1213321818e84986738d6f013d Mon Sep 17 00:00:00 2001 From: notmasteryet Date: Tue, 29 Nov 2011 22:22:30 -0600 Subject: [PATCH 2/2] Add paperine test --- test/pdfs/piperine.pdf.link | 1 + test/test_manifest.json | 7 +++++++ 2 files changed, 8 insertions(+) create mode 100644 test/pdfs/piperine.pdf.link diff --git a/test/pdfs/piperine.pdf.link b/test/pdfs/piperine.pdf.link new file mode 100644 index 000000000..0d38690ee --- /dev/null +++ b/test/pdfs/piperine.pdf.link @@ -0,0 +1 @@ +http://www.erowid.org/archive/rhodium/chemistry/3base/piperonal.pepper/piperine.pepper/465e03piperine.pdf diff --git a/test/test_manifest.json b/test/test_manifest.json index ef5677f07..dd861c9f2 100644 --- a/test/test_manifest.json +++ b/test/test_manifest.json @@ -283,5 +283,12 @@ "link": true, "rounds": 1, "type": "eq" + }, + { "id": "piperine", + "file": "pdfs/piperine.pdf", + "md5": "603ca43dc5732dbba1579f122958c0c2", + "link": true, + "rounds": 1, + "type": "eq" } ]