For Type1 fonts, replace missing font dictionary /Widths entries with ones from the font data (issue 11150)
Hopefully this patch makes sense, and in order to reduce the regression risk the implementation ensures that only completely missing widths are being replaced.
This commit is contained in:
parent
d7c7f15551
commit
af22dc9b0c
@ -3200,7 +3200,7 @@ var Type1Font = (function Type1FontClosure() {
|
||||
var eexecBlock = getEexecBlock(file, eexecBlockLength);
|
||||
var eexecBlockParser = new Type1Parser(eexecBlock.stream, true,
|
||||
SEAC_ANALYSIS_ENABLED);
|
||||
var data = eexecBlockParser.extractFontProgram();
|
||||
var data = eexecBlockParser.extractFontProgram(properties);
|
||||
for (var info in data.properties) {
|
||||
properties[info] = data.properties[info];
|
||||
}
|
||||
|
@ -520,7 +520,7 @@ var Type1Parser = (function Type1ParserClosure() {
|
||||
* Returns an object containing a Subrs array and a CharStrings
|
||||
* array extracted from and eexec encrypted block of data
|
||||
*/
|
||||
extractFontProgram: function Type1Parser_extractFontProgram() {
|
||||
extractFontProgram: function Type1Parser_extractFontProgram(properties) {
|
||||
var stream = this.stream;
|
||||
|
||||
var subrs = [], charstrings = [];
|
||||
@ -646,6 +646,16 @@ var Type1Parser = (function Type1ParserClosure() {
|
||||
lsb: charString.lsb,
|
||||
seac: charString.seac,
|
||||
});
|
||||
|
||||
// Attempt to replace missing widths, from the font dictionary /Widths
|
||||
// entry, with ones from the font data (fixes issue11150_reduced.pdf).
|
||||
if (properties.builtInEncoding) {
|
||||
const index = properties.builtInEncoding.indexOf(glyph);
|
||||
if (index > -1 && properties.widths[index] === undefined &&
|
||||
index >= properties.firstChar && index <= properties.lastChar) {
|
||||
properties.widths[index] = charString.width;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return program;
|
||||
|
1
test/pdfs/.gitignore
vendored
1
test/pdfs/.gitignore
vendored
@ -82,6 +82,7 @@
|
||||
!issue10665_reduced.pdf
|
||||
!issue11016_reduced.pdf
|
||||
!issue11045.pdf
|
||||
!issue11150_reduced.pdf
|
||||
!bad-PageLabels.pdf
|
||||
!decodeACSuccessive.pdf
|
||||
!filled-background.pdf
|
||||
|
BIN
test/pdfs/issue11150_reduced.pdf
Normal file
BIN
test/pdfs/issue11150_reduced.pdf
Normal file
Binary file not shown.
@ -53,6 +53,13 @@
|
||||
"link": false,
|
||||
"type": "text"
|
||||
},
|
||||
{ "id": "issue11150",
|
||||
"file": "pdfs/issue11150_reduced.pdf",
|
||||
"md5": "8b86381089a9ec28723791245a9adfa6",
|
||||
"rounds": 1,
|
||||
"link": false,
|
||||
"type": "eq"
|
||||
},
|
||||
{ "id": "issue1293",
|
||||
"file": "pdfs/issue1293r.pdf",
|
||||
"md5": "4a098f5051f34fab036f5bbe88f8deef",
|
||||
|
@ -90,7 +90,7 @@ describe('Type1Parser', function() {
|
||||
'/.notdef 1 RD x ND\n' +
|
||||
'end');
|
||||
var parser = new Type1Parser(stream, false, SEAC_ANALYSIS_ENABLED);
|
||||
var program = parser.extractFontProgram();
|
||||
var program = parser.extractFontProgram({});
|
||||
expect(program.charstrings.length).toEqual(1);
|
||||
expect(program.properties.privateData.ExpansionFactor).toEqual(99);
|
||||
});
|
||||
|
Loading…
Reference in New Issue
Block a user