From aad77fcc554d93a083f0424effb0a11082d874d0 Mon Sep 17 00:00:00 2001 From: notmasteryet Date: Sun, 14 Aug 2011 08:40:22 -0500 Subject: [PATCH] BaseFont and misc fonts fixes --- fonts.js | 16 +++++++++++----- pdf.js | 15 ++++++++++++--- test/pdfs/ecma262.pdf.link | 1 + test/test_manifest.json | 6 ++++++ 4 files changed, 30 insertions(+), 8 deletions(-) create mode 100644 test/pdfs/ecma262.pdf.link diff --git a/fonts.js b/fonts.js index 4f1c7ef66..e994526d7 100755 --- a/fonts.js +++ b/fonts.js @@ -7,7 +7,7 @@ var isWorker = (typeof window == 'undefined'); /** * Maximum file size of the font. */ -var kMaxFontFileSize = 200000; +var kMaxFontFileSize = 300000; /** * Maximum time to wait for a font to be loaded by font-face rules. @@ -83,7 +83,7 @@ var FontMeasure = (function FontMeasure() { var bold = font.bold ? 'bold' : 'normal'; var italic = font.italic ? 'italic' : 'normal'; size *= kScalePrecision; - var rule = bold + ' ' + italic + ' ' + size + 'px "' + name + '"'; + var rule = italic + ' ' + bold + ' ' + size + 'px "' + name + '"'; ctx.font = rule; }, measureText: function fonts_measureText(text) { @@ -395,17 +395,23 @@ var Font = (function Font() { // If the font is to be ignored, register it like an already loaded font // to avoid the cost of waiting for it be be loaded by the platform. if (properties.ignore) { - this.loadedName = 'Arial'; + this.loadedName = 'sans-serif'; this.loading = false; return; } if (!file) { - var fontName = stdFontMap[name]; + // The file data is not specified. Trying to mingle the font name + // to be used with the canvas.font. + var fontName = stdFontMap[name] || name.replace('_', '-'); this.bold = (fontName.indexOf('Bold') != -1); - this.italic = (fontName.indexOf('Oblique') != -1); + this.italic = (fontName.indexOf('Oblique') != -1) || + (fontName.indexOf('Italic') != -1); this.loadedName = fontName.split('-')[0]; this.loading = false; + this.charsToUnicode = function(s) { + return s; + }; return; } diff --git a/pdf.js b/pdf.js index fbe9b7717..e6a0d6713 100644 --- a/pdf.js +++ b/pdf.js @@ -3758,8 +3758,17 @@ var PartialEvaluator = (function() { fd = fontDict.get('FontDescriptor'); } - if (!fd) - return null; + if (!fd) { + var baseFontName = fontDict.get('BaseFont'); + if (!IsName(baseFontName)) + return null; + // Using base font name as a font name. + return { + name: baseFontName.name.replace(/[\+,\-]/g, '_'), + fontDict: fontDict, + properties: {} + }; + } var descriptor = xref.fetch(fd); @@ -4298,7 +4307,7 @@ var CanvasGraphics = (function() { var bold = fontObj.bold ? 'bold' : 'normal'; var italic = fontObj.italic ? 'italic' : 'normal'; - var rule = bold + ' ' + italic + ' ' + size + 'px "' + name + '"'; + var rule = italic + ' ' + bold + ' ' + size + 'px "' + name + '"'; this.ctx.font = rule; } }, diff --git a/test/pdfs/ecma262.pdf.link b/test/pdfs/ecma262.pdf.link new file mode 100644 index 000000000..9aae67530 --- /dev/null +++ b/test/pdfs/ecma262.pdf.link @@ -0,0 +1 @@ +http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf diff --git a/test/test_manifest.json b/test/test_manifest.json index 8b0e2b719..d40e53277 100644 --- a/test/test_manifest.json +++ b/test/test_manifest.json @@ -80,5 +80,11 @@ "file": "pdfs/rotation.pdf", "rounds": 1, "type": "load" + }, + { "id": "ecma262-pdf", + "file": "pdfs/ecma262.pdf", + "link": true, + "rounds": 1, + "type": "load" } ]