diff --git a/fonts.js b/fonts.js index 172d6fa3c..273ef5ea6 100644 --- a/fonts.js +++ b/fonts.js @@ -25,6 +25,12 @@ var kMaxWaitForFontFace = 1000; var fontCount = 0; var fontName = ""; +/** + * If for some reason one want to debug without fonts activated, it just need + * to turn this pref to true/false. + */ +var kDisableFonts = false; + /** * Hold a map of decoded fonts and of the standard fourteen Type1 fonts and * their acronyms. @@ -93,6 +99,16 @@ var Font = function(aName, aFile, aProperties) { } fontCount++; + if (aProperties.ignore || kDisableFonts) { + Fonts[aName] = { + data: aFile, + loading: false, + properties: {}, + cache: Object.create(null) + } + return; + } + switch (aProperties.type) { case "Type1": var cff = new CFF(aName, aFile, aProperties); @@ -203,19 +219,21 @@ Font.prototype = { if (debug) ctx.fillText(testString, 20, 20); - var start = Date.now(); var interval = window.setInterval(function canvasInterval(self) { + this.start = this.start || Date.now(); ctx.font = "bold italic 20px " + fontName + ", Symbol, Arial"; // For some reasons the font has not loaded, so mark it loaded for the // page to proceed but cry - if ((Date.now() - start) >= kMaxWaitForFontFace) { + if ((Date.now() - this.start) >= kMaxWaitForFontFace) { window.clearInterval(interval); Fonts[fontName].loading = false; warn("Is " + fontName + " for charset: " + charset + " loaded?"); + this.start = 0; } else if (textWidth != ctx.measureText(testString).width) { window.clearInterval(interval); Fonts[fontName].loading = false; + this.start = 0; } if (debug) @@ -747,9 +765,12 @@ var TrueType = function(aName, aFile, aProperties) { }); } + + var offsetDelta = 0; + // Replace the old CMAP table var rewrittedCMAP = this._createCMAPTable(glyphs); - var offsetDelta = rewrittedCMAP.length - originalCMAP.data.length; + offsetDelta = rewrittedCMAP.length - originalCMAP.data.length; originalCMAP.data = rewrittedCMAP; // Rewrite the 'post' table if needed diff --git a/pdf.js b/pdf.js index cc84115cf..d39579f74 100644 --- a/pdf.js +++ b/pdf.js @@ -1900,9 +1900,16 @@ var CanvasGraphics = (function() { error("FontFile not found for font: " + fontName); fontFile = xref.fetchIfRef(fontFile); + // Fonts with an embedded cmap but without any assignment in + // it are not yet supported, so ask the fonts loader to ignore + // them to not pay a stupid one sec latence. + var ignoreFont = true; + var encodingMap = {}; var charset = []; if (fontDict.has("Encoding")) { + ignoreFont = false; + var encoding = xref.fetchIfRef(fontDict.get("Encoding")); if (IsDict(encoding)) { // Build a map between codes and glyphs @@ -1960,8 +1967,9 @@ var CanvasGraphics = (function() { error("useCMap is not implemented"); break; - case "begincodespacerange": case "beginbfrange": + ignoreFont = false; + case "begincodespacerange": token = ""; tokens = []; break; @@ -2002,7 +2010,7 @@ var CanvasGraphics = (function() { } } } - } + } var subType = fontDict.get("Subtype"); var bbox = descriptor.get("FontBBox"); @@ -2013,7 +2021,8 @@ var CanvasGraphics = (function() { type: subType.name, encoding: encodingMap, charset: charset, - bbox: bbox + bbox: bbox, + ignore: ignoreFont }; return { @@ -2275,7 +2284,7 @@ var CanvasGraphics = (function() { } this.current.fontSize = size; - this.ctx.font = this.current.fontSize +'px "' + fontName + '"'; + this.ctx.font = this.current.fontSize +'px "' + fontName + '", Symbol'; }, setTextRenderingMode: function(mode) { TODO("text rendering mode");