Re-enable TrueType and add a TODO about translating the ToUnicode entry (note TrueType still fails on cmap)

This commit is contained in:
Vivien Nicolas 2011-06-19 04:35:25 +02:00
parent c766954ddf
commit b0cde50e21
2 changed files with 13 additions and 17 deletions

View File

@ -100,18 +100,6 @@ var Font = function(aName, aFile, aProperties) {
break;
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";
var ttf = new TrueType(aFile);
this.font = ttf.data;
@ -184,7 +172,7 @@ Font.prototype = {
document.body.appendChild(canvas);
// 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
var count = 30;
while (count-- && charset.length <= 30)
@ -205,7 +193,7 @@ Font.prototype = {
}
}
ctx.font = "bold italic 20px " + fontName + ", Symbol, Arial";
var textWidth = ctx.measureText(testString);
var textWidth = ctx.measureText(testString).width;
if (debug)
ctx.fillText(testString, 20, 20);
@ -220,7 +208,7 @@ Font.prototype = {
window.clearInterval(interval);
Fonts[fontName].loading = false;
warn("Is " + fontName + " for charset: " + charset + " loaded?");
} else if (textWidth != ctx.measureText(testString)) {
} else if (textWidth != ctx.measureText(testString).width) {
window.clearInterval(interval);
Fonts[fontName].loading = false;
}

12
pdf.js
View File

@ -1902,6 +1902,7 @@ var CanvasGraphics = (function() {
// Generate the custom cmap of the font if needed
var encodingMap = {};
var charset = [];
if (fontDict.has("Encoding")) {
var encoding = xref.fetchIfRef(fontDict.get("Encoding"));
if (IsDict(encoding)) {
@ -1923,16 +1924,23 @@ var CanvasGraphics = (function() {
if (!encoding)
error("Unknown font encoding");
var widths = xref.fetchIfRef(fontDict.get("Widths"));
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),
"invalid font Widths or FirstChar");
var charset = [];
for (var j = 0; j < widths.length; j++) {
if (widths[j])
charset.push(encoding[j + firstChar]);
}
}
} else if (fontDict.has("ToUnicode")) {
TODO("ToUnicode stream translation not implemented");
}
var subType = fontDict.get("Subtype");