|
|
@ -409,8 +409,8 @@ var FontLoader = { |
|
|
|
|
|
|
|
|
|
|
|
bind: function fontLoaderBind(fonts, callback) { |
|
|
|
bind: function fontLoaderBind(fonts, callback) { |
|
|
|
function checkFontsLoaded() { |
|
|
|
function checkFontsLoaded() { |
|
|
|
for (var i = 0, ii = objs.length; i < ii; i++) { |
|
|
|
for (var i = 0, ii = fonts.length; i < ii; i++) { |
|
|
|
var fontObj = objs[i]; |
|
|
|
var fontObj = fonts[i]; |
|
|
|
if (fontObj.loading) { |
|
|
|
if (fontObj.loading) { |
|
|
|
return false; |
|
|
|
return false; |
|
|
|
} |
|
|
|
} |
|
|
@ -423,52 +423,45 @@ var FontLoader = { |
|
|
|
return true; |
|
|
|
return true; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
var rules = [], names = [], objs = []; |
|
|
|
var rules = [], names = [], fontsToLoad = []; |
|
|
|
|
|
|
|
var fontCreateTimer = 0; |
|
|
|
|
|
|
|
|
|
|
|
for (var i = 0, ii = fonts.length; i < ii; i++) { |
|
|
|
for (var i = 0, ii = fonts.length; i < ii; i++) { |
|
|
|
var font = fonts[i]; |
|
|
|
var font = fonts[i]; |
|
|
|
|
|
|
|
|
|
|
|
// If there is already a fontObj on the font, then it was loaded/attached
|
|
|
|
// Add the font to the DOM only once or skip if the font
|
|
|
|
// to the page already and we don't have to do anything for this font
|
|
|
|
// is already loaded.
|
|
|
|
// here future.
|
|
|
|
if (font.attached || font.loading == false) { |
|
|
|
if (font.fontObj) { |
|
|
|
|
|
|
|
continue; |
|
|
|
continue; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
font.attached = true; |
|
|
|
|
|
|
|
|
|
|
|
var obj = new Font(font.name, font.file, font.properties); |
|
|
|
fontsToLoad.push(font); |
|
|
|
|
|
|
|
|
|
|
|
// Store the fontObj on the font such that `setFont` in CanvasGraphics
|
|
|
|
|
|
|
|
// can reuse it later again.
|
|
|
|
|
|
|
|
font.fontObj = obj; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
objs.push(obj); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var str = ''; |
|
|
|
var str = ''; |
|
|
|
var data = obj.data; |
|
|
|
var data = font.data; |
|
|
|
if (data) { |
|
|
|
if (data) { |
|
|
|
var length = data.length; |
|
|
|
var length = data.length; |
|
|
|
for (var j = 0; j < length; j++) |
|
|
|
for (var j = 0; j < length; j++) |
|
|
|
str += String.fromCharCode(data[j]); |
|
|
|
str += String.fromCharCode(data[j]); |
|
|
|
|
|
|
|
|
|
|
|
var rule = isWorker ? obj.bindWorker(str) : obj.bindDOM(str); |
|
|
|
var rule = font.bindDOM(str); |
|
|
|
if (rule) { |
|
|
|
if (rule) { |
|
|
|
rules.push(rule); |
|
|
|
rules.push(rule); |
|
|
|
names.push(obj.loadedName); |
|
|
|
names.push(font.loadedName); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
this.listeningForFontLoad = false; |
|
|
|
this.listeningForFontLoad = false; |
|
|
|
if (!isWorker && rules.length) { |
|
|
|
if (!isWorker && rules.length) { |
|
|
|
FontLoader.prepareFontLoadEvent(rules, names, objs); |
|
|
|
FontLoader.prepareFontLoadEvent(rules, names, fontsToLoad); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
if (!checkFontsLoaded()) { |
|
|
|
if (!checkFontsLoaded()) { |
|
|
|
document.documentElement.addEventListener( |
|
|
|
document.documentElement.addEventListener( |
|
|
|
'pdfjsFontLoad', checkFontsLoaded, false); |
|
|
|
'pdfjsFontLoad', checkFontsLoaded, false); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
return objs; |
|
|
|
|
|
|
|
}, |
|
|
|
}, |
|
|
|
// Set things up so that at least one pdfjsFontLoad event is
|
|
|
|
// Set things up so that at least one pdfjsFontLoad event is
|
|
|
|
// dispatched when all the @font-face |rules| for |names| have been
|
|
|
|
// dispatched when all the @font-face |rules| for |names| have been
|
|
|
@ -476,7 +469,7 @@ var FontLoader = { |
|
|
|
// has already started in this (outer) document, so that they should
|
|
|
|
// has already started in this (outer) document, so that they should
|
|
|
|
// be ordered before the load in the subdocument.
|
|
|
|
// be ordered before the load in the subdocument.
|
|
|
|
prepareFontLoadEvent: function fontLoaderPrepareFontLoadEvent(rules, names, |
|
|
|
prepareFontLoadEvent: function fontLoaderPrepareFontLoadEvent(rules, names, |
|
|
|
objs) { |
|
|
|
fonts) { |
|
|
|
/** Hack begin */ |
|
|
|
/** Hack begin */ |
|
|
|
// There's no event when a font has finished downloading so the
|
|
|
|
// There's no event when a font has finished downloading so the
|
|
|
|
// following code is a dirty hack to 'guess' when a font is
|
|
|
|
// following code is a dirty hack to 'guess' when a font is
|
|
|
@ -517,8 +510,8 @@ var FontLoader = { |
|
|
|
'message', |
|
|
|
'message', |
|
|
|
function fontLoaderMessage(e) { |
|
|
|
function fontLoaderMessage(e) { |
|
|
|
var fontNames = JSON.parse(e.data); |
|
|
|
var fontNames = JSON.parse(e.data); |
|
|
|
for (var i = 0, ii = objs.length; i < ii; ++i) { |
|
|
|
for (var i = 0, ii = fonts.length; i < ii; ++i) { |
|
|
|
var font = objs[i]; |
|
|
|
var font = fonts[i]; |
|
|
|
font.loading = false; |
|
|
|
font.loading = false; |
|
|
|
} |
|
|
|
} |
|
|
|
var evt = document.createEvent('Events'); |
|
|
|
var evt = document.createEvent('Events'); |
|
|
@ -862,7 +855,7 @@ var Font = (function FontClosure() { |
|
|
|
this.widthMultiplier = !properties.fontMatrix ? 1.0 : |
|
|
|
this.widthMultiplier = !properties.fontMatrix ? 1.0 : |
|
|
|
1.0 / properties.fontMatrix[0]; |
|
|
|
1.0 / properties.fontMatrix[0]; |
|
|
|
this.encoding = properties.baseEncoding; |
|
|
|
this.encoding = properties.baseEncoding; |
|
|
|
this.loadedName = getUniqueName(); |
|
|
|
this.loadedName = properties.loadedName; |
|
|
|
this.loading = true; |
|
|
|
this.loading = true; |
|
|
|
}; |
|
|
|
}; |
|
|
|
|
|
|
|
|
|
|
@ -2272,17 +2265,6 @@ var Font = (function FontClosure() { |
|
|
|
} |
|
|
|
} |
|
|
|
}, |
|
|
|
}, |
|
|
|
|
|
|
|
|
|
|
|
bindWorker: function font_bindWorker(data) { |
|
|
|
|
|
|
|
postMessage({ |
|
|
|
|
|
|
|
action: 'font', |
|
|
|
|
|
|
|
data: { |
|
|
|
|
|
|
|
raw: data, |
|
|
|
|
|
|
|
fontName: this.loadedName, |
|
|
|
|
|
|
|
mimetype: this.mimetype |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
}); |
|
|
|
|
|
|
|
}, |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
bindDOM: function font_bindDom(data) { |
|
|
|
bindDOM: function font_bindDom(data) { |
|
|
|
var fontName = this.loadedName; |
|
|
|
var fontName = this.loadedName; |
|
|
|
|
|
|
|
|
|
|
|