Re-enable TrueType and add a TODO about translating the ToUnicode entry (note TrueType still fails on cmap)
This commit is contained in:
parent
c766954ddf
commit
b0cde50e21
18
fonts.js
18
fonts.js
@ -100,18 +100,6 @@ var Font = function(aName, aFile, aProperties) {
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case "TrueType":
|
case "TrueType":
|
||||||
// TrueType is disabled for the moment since the sanitizer prevent it
|
|
||||||
// from loading because of an overdated cmap table
|
|
||||||
return Fonts[aName] = {
|
|
||||||
data: null,
|
|
||||||
properties: {
|
|
||||||
encoding: {},
|
|
||||||
charset: null
|
|
||||||
},
|
|
||||||
loading: false,
|
|
||||||
cache: Object.create(null)
|
|
||||||
};
|
|
||||||
|
|
||||||
this.mimetype = "font/opentype";
|
this.mimetype = "font/opentype";
|
||||||
var ttf = new TrueType(aFile);
|
var ttf = new TrueType(aFile);
|
||||||
this.font = ttf.data;
|
this.font = ttf.data;
|
||||||
@ -184,7 +172,7 @@ Font.prototype = {
|
|||||||
document.body.appendChild(canvas);
|
document.body.appendChild(canvas);
|
||||||
|
|
||||||
// Retrieve font charset
|
// Retrieve font charset
|
||||||
var charset = Fonts[fontName].charset || [];
|
var charset = Fonts[fontName].properties.charset || [];
|
||||||
// if the charset is too small make it repeat a few times
|
// if the charset is too small make it repeat a few times
|
||||||
var count = 30;
|
var count = 30;
|
||||||
while (count-- && charset.length <= 30)
|
while (count-- && charset.length <= 30)
|
||||||
@ -205,7 +193,7 @@ Font.prototype = {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
ctx.font = "bold italic 20px " + fontName + ", Symbol, Arial";
|
ctx.font = "bold italic 20px " + fontName + ", Symbol, Arial";
|
||||||
var textWidth = ctx.measureText(testString);
|
var textWidth = ctx.measureText(testString).width;
|
||||||
|
|
||||||
if (debug)
|
if (debug)
|
||||||
ctx.fillText(testString, 20, 20);
|
ctx.fillText(testString, 20, 20);
|
||||||
@ -220,7 +208,7 @@ Font.prototype = {
|
|||||||
window.clearInterval(interval);
|
window.clearInterval(interval);
|
||||||
Fonts[fontName].loading = false;
|
Fonts[fontName].loading = false;
|
||||||
warn("Is " + fontName + " for charset: " + charset + " loaded?");
|
warn("Is " + fontName + " for charset: " + charset + " loaded?");
|
||||||
} else if (textWidth != ctx.measureText(testString)) {
|
} else if (textWidth != ctx.measureText(testString).width) {
|
||||||
window.clearInterval(interval);
|
window.clearInterval(interval);
|
||||||
Fonts[fontName].loading = false;
|
Fonts[fontName].loading = false;
|
||||||
}
|
}
|
||||||
|
12
pdf.js
12
pdf.js
@ -1902,6 +1902,7 @@ var CanvasGraphics = (function() {
|
|||||||
|
|
||||||
// Generate the custom cmap of the font if needed
|
// Generate the custom cmap of the font if needed
|
||||||
var encodingMap = {};
|
var encodingMap = {};
|
||||||
|
var charset = [];
|
||||||
if (fontDict.has("Encoding")) {
|
if (fontDict.has("Encoding")) {
|
||||||
var encoding = xref.fetchIfRef(fontDict.get("Encoding"));
|
var encoding = xref.fetchIfRef(fontDict.get("Encoding"));
|
||||||
if (IsDict(encoding)) {
|
if (IsDict(encoding)) {
|
||||||
@ -1923,16 +1924,23 @@ var CanvasGraphics = (function() {
|
|||||||
if (!encoding)
|
if (!encoding)
|
||||||
error("Unknown font encoding");
|
error("Unknown font encoding");
|
||||||
|
|
||||||
var widths = xref.fetchIfRef(fontDict.get("Widths"));
|
|
||||||
var firstChar = xref.fetchIfRef(fontDict.get("FirstChar"));
|
var firstChar = xref.fetchIfRef(fontDict.get("FirstChar"));
|
||||||
|
|
||||||
|
var index = 0;
|
||||||
|
for (var j = 0; j < encoding.length; j++) {
|
||||||
|
encodingMap[firstChar + index++] = GlyphsUnicode[encoding[j]];
|
||||||
|
}
|
||||||
|
|
||||||
|
var widths = xref.fetchIfRef(fontDict.get("Widths"));
|
||||||
assertWellFormed(IsArray(widths) && IsInt(firstChar),
|
assertWellFormed(IsArray(widths) && IsInt(firstChar),
|
||||||
"invalid font Widths or FirstChar");
|
"invalid font Widths or FirstChar");
|
||||||
var charset = [];
|
|
||||||
for (var j = 0; j < widths.length; j++) {
|
for (var j = 0; j < widths.length; j++) {
|
||||||
if (widths[j])
|
if (widths[j])
|
||||||
charset.push(encoding[j + firstChar]);
|
charset.push(encoding[j + firstChar]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
} else if (fontDict.has("ToUnicode")) {
|
||||||
|
TODO("ToUnicode stream translation not implemented");
|
||||||
}
|
}
|
||||||
|
|
||||||
var subType = fontDict.get("Subtype");
|
var subType = fontDict.get("Subtype");
|
||||||
|
Loading…
Reference in New Issue
Block a user