Redid encoding
This commit is contained in:
parent
8e8fb748ac
commit
aeba156d6b
65
pdf.js
65
pdf.js
@ -4213,18 +4213,16 @@ var PartialEvaluator = (function() {
|
||||
'9.7.5.3');
|
||||
}
|
||||
}
|
||||
} else if (fontDict.has('Encoding')) {
|
||||
} else {
|
||||
var baseEncoding = null, diffEncoding = [];
|
||||
if (fontDict.has('Encoding')) {
|
||||
var encoding = xref.fetchIfRef(fontDict.get('Encoding'));
|
||||
if (IsDict(encoding)) {
|
||||
// Build a map of between codes and glyphs
|
||||
// Load the base encoding
|
||||
var baseName = encoding.get('BaseEncoding');
|
||||
if (baseName) {
|
||||
var base = Encodings[baseName.name];
|
||||
for (var j = 0, end = base.length; j < end; j++)
|
||||
encodingMap[j] = GlyphsUnicode[base[j]] || 0;
|
||||
} else {
|
||||
TODO('need to load default encoding');
|
||||
baseEncoding = Encodings[baseName.name].slice();
|
||||
}
|
||||
|
||||
// Load the differences between the base and original
|
||||
@ -4235,29 +4233,38 @@ var PartialEvaluator = (function() {
|
||||
if (IsNum(data)) {
|
||||
index = data;
|
||||
} else {
|
||||
encodingMap[index++] = (subType.name == 'TrueType') ? j :
|
||||
GlyphsUnicode[data.name];
|
||||
diffEncoding[index++] = data.name;
|
||||
}
|
||||
}
|
||||
} else if (IsName(encoding)) {
|
||||
var encoding = Encodings[encoding.name];
|
||||
if (!encoding)
|
||||
error('Unknown font encoding');
|
||||
|
||||
var index = 0;
|
||||
for (var j = 0; j < encoding.length; j++)
|
||||
encodingMap[index++] = GlyphsUnicode[encoding[j]];
|
||||
|
||||
// firstChar and width are required
|
||||
// (except for 14 standard fonts)
|
||||
var firstChar = xref.fetchIfRef(fontDict.get('FirstChar'));
|
||||
var widths = xref.fetchIfRef(fontDict.get('Widths')) || [];
|
||||
for (var j = 0; j < widths.length; j++) {
|
||||
if (widths[j])
|
||||
charset.push(encoding[j + firstChar]);
|
||||
baseEncoding = Encodings[encoding.name].slice();
|
||||
}
|
||||
}
|
||||
} else if (fontDict.has('ToUnicode')) {
|
||||
|
||||
if (!baseEncoding) {
|
||||
var type = subType.name;
|
||||
if (type == 'TrueType') {
|
||||
baseEncoding = Encodings.WinAnsiEncoding.slice(0);
|
||||
} else if (type == 'Type1') {
|
||||
baseEncoding = Encodings.StandardEncoding.slice(0);
|
||||
} else {
|
||||
error('Unknown type of font');
|
||||
}
|
||||
}
|
||||
|
||||
// merge in the differences
|
||||
var length = baseEncoding.length > diffEncoding.length ?
|
||||
baseEncoding.length : diffEncoding.length;
|
||||
for (var i = 0, ii = length; i < ii; ++i) {
|
||||
var diffGlyph = diffEncoding[i];
|
||||
var baseGlyph = baseEncoding[i];
|
||||
if (diffGlyph)
|
||||
encodingMap[i] = GlyphsUnicode[diffGlyph];
|
||||
else if (baseGlyph)
|
||||
encodingMap[i] = GlyphsUnicode[baseGlyph];
|
||||
}
|
||||
|
||||
if (fontDict.has('ToUnicode')) {
|
||||
encodingMap = {empty: true};
|
||||
var cmapObj = xref.fetchIfRef(fontDict.get('ToUnicode'));
|
||||
if (IsName(cmapObj)) {
|
||||
@ -4326,6 +4333,16 @@ var PartialEvaluator = (function() {
|
||||
}
|
||||
}
|
||||
|
||||
/* // firstChar and width are required
|
||||
// (except for 14 standard fonts)
|
||||
var firstChar = xref.fetchIfRef(fontDict.get('FirstChar'));
|
||||
var widths = xref.fetchIfRef(fontDict.get('Widths')) || [];
|
||||
for (var j = 0; j < widths.length; j++) {
|
||||
if (widths[j])
|
||||
charset.push(encoding[j + firstChar]);
|
||||
}
|
||||
*/ }
|
||||
|
||||
if (!fd) {
|
||||
var baseFontName = fontDict.get('BaseFont');
|
||||
if (!IsName(baseFontName))
|
||||
|
Loading…
x
Reference in New Issue
Block a user