diff --git a/bower.json b/bower.json index fb3b32065..2809bf8fc 100644 --- a/bower.json +++ b/bower.json @@ -1,6 +1,6 @@ { "name": "pdfjs-dist", - "version": "1.4.111", + "version": "1.4.113", "main": [ "build/pdf.js", "build/pdf.worker.js" diff --git a/build/pdf.combined.js b/build/pdf.combined.js index 163aa077a..1de7aa89c 100644 --- a/build/pdf.combined.js +++ b/build/pdf.combined.js @@ -28,8 +28,8 @@ factory((root.pdfjsDistBuildPdfCombined = {})); // Use strict in our context only - users might not want it 'use strict'; -var pdfjsVersion = '1.4.111'; -var pdfjsBuild = '6b1de4a'; +var pdfjsVersion = '1.4.113'; +var pdfjsBuild = 'a6acf74'; var pdfjsFilePath = typeof document !== 'undefined' && document.currentScript ? @@ -29773,15 +29773,19 @@ var CanvasGraphics = (function CanvasGraphicsClosure() { } } - if (simpleFillText && !accent) { - // common case - ctx.fillText(character, scaledX, scaledY); - } else { - this.paintChar(character, scaledX, scaledY); - if (accent) { - scaledAccentX = scaledX + accent.offset.x / fontSizeScale; - scaledAccentY = scaledY - accent.offset.y / fontSizeScale; - this.paintChar(accent.fontChar, scaledAccentX, scaledAccentY); + // Only attempt to draw the glyph if it is actually in the embedded font + // file or if there isn't a font file so the fallback font is shown. + if (glyph.isInFont || font.missingFile) { + if (simpleFillText && !accent) { + // common case + ctx.fillText(character, scaledX, scaledY); + } else { + this.paintChar(character, scaledX, scaledY); + if (accent) { + scaledAccentX = scaledX + accent.offset.x / fontSizeScale; + scaledAccentY = scaledY - accent.offset.y / fontSizeScale; + this.paintChar(accent.fontChar, scaledAccentX, scaledAccentY); + } } } @@ -33929,7 +33933,7 @@ function getFontType(type, subtype) { var Glyph = (function GlyphClosure() { function Glyph(fontChar, unicode, accent, width, vmetric, operatorListId, - isSpace) { + isSpace, isInFont) { this.fontChar = fontChar; this.unicode = unicode; this.accent = accent; @@ -33937,17 +33941,20 @@ var Glyph = (function GlyphClosure() { this.vmetric = vmetric; this.operatorListId = operatorListId; this.isSpace = isSpace; + this.isInFont = isInFont; } Glyph.prototype.matchesForCache = function(fontChar, unicode, accent, width, - vmetric, operatorListId, isSpace) { + vmetric, operatorListId, isSpace, + isInFont) { return this.fontChar === fontChar && this.unicode === unicode && this.accent === accent && this.width === width && this.vmetric === vmetric && this.operatorListId === operatorListId && - this.isSpace === isSpace; + this.isSpace === isSpace && + this.isInFont === isInFont; }; return Glyph; @@ -34206,6 +34213,7 @@ var Font = (function FontClosure() { this.loadedName = properties.loadedName; this.isType3Font = properties.isType3Font; this.sizes = []; + this.missingFile = false; this.glyphCache = Object.create(null); @@ -36548,6 +36556,7 @@ var Font = (function FontClosure() { unicode = String.fromCharCode(unicode); } + var isInFont = charcode in this.toFontChar; // First try the toFontChar map, if it's not there then try falling // back to the char code. fontCharCode = this.toFontChar[charcode] || charcode; @@ -36562,6 +36571,7 @@ var Font = (function FontClosure() { var accent = null; if (this.seacMap && this.seacMap[charcode]) { + isInFont = true; var seac = this.seacMap[charcode]; fontCharCode = seac.baseFontCharCode; accent = { @@ -36575,9 +36585,9 @@ var Font = (function FontClosure() { var glyph = this.glyphCache[charcode]; if (!glyph || !glyph.matchesForCache(fontChar, unicode, accent, width, vmetric, - operatorListId, isSpace)) { + operatorListId, isSpace, isInFont)) { glyph = new Glyph(fontChar, unicode, accent, width, vmetric, - operatorListId, isSpace); + operatorListId, isSpace, isInFont); this.glyphCache[charcode] = glyph; } return glyph; diff --git a/build/pdf.js b/build/pdf.js index 826aec7e0..d3f22467e 100644 --- a/build/pdf.js +++ b/build/pdf.js @@ -28,8 +28,8 @@ factory((root.pdfjsDistBuildPdf = {})); // Use strict in our context only - users might not want it 'use strict'; -var pdfjsVersion = '1.4.111'; -var pdfjsBuild = '6b1de4a'; +var pdfjsVersion = '1.4.113'; +var pdfjsBuild = 'a6acf74'; var pdfjsFilePath = typeof document !== 'undefined' && document.currentScript ? @@ -7707,15 +7707,19 @@ var CanvasGraphics = (function CanvasGraphicsClosure() { } } - if (simpleFillText && !accent) { - // common case - ctx.fillText(character, scaledX, scaledY); - } else { - this.paintChar(character, scaledX, scaledY); - if (accent) { - scaledAccentX = scaledX + accent.offset.x / fontSizeScale; - scaledAccentY = scaledY - accent.offset.y / fontSizeScale; - this.paintChar(accent.fontChar, scaledAccentX, scaledAccentY); + // Only attempt to draw the glyph if it is actually in the embedded font + // file or if there isn't a font file so the fallback font is shown. + if (glyph.isInFont || font.missingFile) { + if (simpleFillText && !accent) { + // common case + ctx.fillText(character, scaledX, scaledY); + } else { + this.paintChar(character, scaledX, scaledY); + if (accent) { + scaledAccentX = scaledX + accent.offset.x / fontSizeScale; + scaledAccentY = scaledY - accent.offset.y / fontSizeScale; + this.paintChar(accent.fontChar, scaledAccentX, scaledAccentY); + } } } diff --git a/build/pdf.worker.js b/build/pdf.worker.js index f83a12a21..e7b6fbd90 100644 --- a/build/pdf.worker.js +++ b/build/pdf.worker.js @@ -28,8 +28,8 @@ factory((root.pdfjsDistBuildPdfWorker = {})); // Use strict in our context only - users might not want it 'use strict'; -var pdfjsVersion = '1.4.111'; -var pdfjsBuild = '6b1de4a'; +var pdfjsVersion = '1.4.113'; +var pdfjsBuild = 'a6acf74'; var pdfjsFilePath = typeof document !== 'undefined' && document.currentScript ? @@ -25953,7 +25953,7 @@ function getFontType(type, subtype) { var Glyph = (function GlyphClosure() { function Glyph(fontChar, unicode, accent, width, vmetric, operatorListId, - isSpace) { + isSpace, isInFont) { this.fontChar = fontChar; this.unicode = unicode; this.accent = accent; @@ -25961,17 +25961,20 @@ var Glyph = (function GlyphClosure() { this.vmetric = vmetric; this.operatorListId = operatorListId; this.isSpace = isSpace; + this.isInFont = isInFont; } Glyph.prototype.matchesForCache = function(fontChar, unicode, accent, width, - vmetric, operatorListId, isSpace) { + vmetric, operatorListId, isSpace, + isInFont) { return this.fontChar === fontChar && this.unicode === unicode && this.accent === accent && this.width === width && this.vmetric === vmetric && this.operatorListId === operatorListId && - this.isSpace === isSpace; + this.isSpace === isSpace && + this.isInFont === isInFont; }; return Glyph; @@ -26230,6 +26233,7 @@ var Font = (function FontClosure() { this.loadedName = properties.loadedName; this.isType3Font = properties.isType3Font; this.sizes = []; + this.missingFile = false; this.glyphCache = Object.create(null); @@ -28572,6 +28576,7 @@ var Font = (function FontClosure() { unicode = String.fromCharCode(unicode); } + var isInFont = charcode in this.toFontChar; // First try the toFontChar map, if it's not there then try falling // back to the char code. fontCharCode = this.toFontChar[charcode] || charcode; @@ -28586,6 +28591,7 @@ var Font = (function FontClosure() { var accent = null; if (this.seacMap && this.seacMap[charcode]) { + isInFont = true; var seac = this.seacMap[charcode]; fontCharCode = seac.baseFontCharCode; accent = { @@ -28599,9 +28605,9 @@ var Font = (function FontClosure() { var glyph = this.glyphCache[charcode]; if (!glyph || !glyph.matchesForCache(fontChar, unicode, accent, width, vmetric, - operatorListId, isSpace)) { + operatorListId, isSpace, isInFont)) { glyph = new Glyph(fontChar, unicode, accent, width, vmetric, - operatorListId, isSpace); + operatorListId, isSpace, isInFont); this.glyphCache[charcode] = glyph; } return glyph; diff --git a/package.json b/package.json index ae77b48b8..749e2055f 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "pdfjs-dist", - "version": "1.4.111", + "version": "1.4.113", "main": "build/pdf.js", "description": "Generic build of Mozilla's PDF.js library.", "keywords": [