Track loaded such that setFont doesnt need to touch xref anymore
This commit is contained in:
parent
3006c090ad
commit
6dd82ad5d4
56
pdf.js
56
pdf.js
@ -4051,6 +4051,8 @@ var EvalState = (function() {
|
|||||||
return constructor;
|
return constructor;
|
||||||
})();
|
})();
|
||||||
|
|
||||||
|
var FontsMap = {};
|
||||||
|
|
||||||
var PartialEvaluator = (function() {
|
var PartialEvaluator = (function() {
|
||||||
function constructor() {
|
function constructor() {
|
||||||
this.state = new EvalState();
|
this.state = new EvalState();
|
||||||
@ -4208,17 +4210,23 @@ var PartialEvaluator = (function() {
|
|||||||
images.bind(xobj); // monitoring image load
|
images.bind(xobj); // monitoring image load
|
||||||
}
|
}
|
||||||
} else if (cmd == 'Tf') { // eagerly collect all fonts
|
} else if (cmd == 'Tf') { // eagerly collect all fonts
|
||||||
var fontRes = resources.get('Font');
|
var fontName = args[0].name;
|
||||||
if (fontRes) {
|
|
||||||
fontRes = xref.fetchIfRef(fontRes);
|
// Check if this font is known already and process it otherwise.
|
||||||
var font = xref.fetchIfRef(fontRes.get(args[0].name));
|
if (!FontsMap[fontName]) {
|
||||||
assertWellFormed(IsDict(font));
|
var fontRes = resources.get('Font');
|
||||||
if (!font.translated) {
|
if (fontRes) {
|
||||||
font.translated = this.translateFont(font, xref, resources);
|
fontRes = xref.fetchIfRef(fontRes);
|
||||||
if (fonts && font.translated) {
|
var font = xref.fetchIfRef(fontRes.get(fontName));
|
||||||
// keep track of each font we translated so the caller can
|
assertWellFormed(IsDict(font));
|
||||||
// load them asynchronously before calling display on a page
|
if (!font.translated) {
|
||||||
fonts.push(font.translated);
|
font.translated = this.translateFont(font, xref, resources);
|
||||||
|
if (fonts && font.translated) {
|
||||||
|
// keep track of each font we translated so the caller can
|
||||||
|
// load them asynchronously before calling display on a page
|
||||||
|
fonts.push(font.translated);
|
||||||
|
FontsMap[fontName] = font;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -4233,6 +4241,10 @@ var PartialEvaluator = (function() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Expose arrays for debugging purpose.
|
||||||
|
window.fnArray = fnArray;
|
||||||
|
window.argsArray = argsArray;
|
||||||
|
|
||||||
return function(gfx) {
|
return function(gfx) {
|
||||||
for (var i = 0, length = argsArray.length; i < length; i++)
|
for (var i = 0, length = argsArray.length; i < length; i++)
|
||||||
gfx[fnArray[i]].apply(gfx, argsArray[i]);
|
gfx[fnArray[i]].apply(gfx, argsArray[i]);
|
||||||
@ -4914,16 +4926,20 @@ var CanvasGraphics = (function() {
|
|||||||
this.current.leading = -leading;
|
this.current.leading = -leading;
|
||||||
},
|
},
|
||||||
setFont: function(fontRef, size) {
|
setFont: function(fontRef, size) {
|
||||||
var font = this.xref.fetchIfRef(this.res.get('Font'));
|
// Lookup the fontObj using fontRef only.
|
||||||
if (!IsDict(font))
|
var fontRefName = fontRef.name;
|
||||||
return;
|
var fontObj = FontsMap[fontRefName].fontObj;
|
||||||
|
|
||||||
|
if (!fontObj) {
|
||||||
|
throw "Can't find font for " + fontRefName;
|
||||||
|
}
|
||||||
|
|
||||||
|
var name = fontObj.loadedName;
|
||||||
|
if (!name) {
|
||||||
|
// TODO: fontDescriptor is not available, fallback to default font
|
||||||
|
name = 'sans-serif';
|
||||||
|
}
|
||||||
|
|
||||||
font = font.get(fontRef.name);
|
|
||||||
font = this.xref.fetchIfRef(font);
|
|
||||||
if (!font)
|
|
||||||
return;
|
|
||||||
|
|
||||||
var fontObj = font.fontObj;
|
|
||||||
this.current.font = fontObj;
|
this.current.font = fontObj;
|
||||||
this.current.fontSize = size;
|
this.current.fontSize = size;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user