Merge pull request #11159 from Snuffleupagus/issue-11150

For Type1 fonts, replace missing font dictionary /Widths entries with ones from the font data (issue 11150)
This commit is contained in:
Tim van der Meij 2019-09-19 13:14:27 +02:00 committed by GitHub
commit 58e5f36666
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 21 additions and 3 deletions

View File

@ -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];
}

View File

@ -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;

View File

@ -82,6 +82,7 @@
!issue10665_reduced.pdf
!issue11016_reduced.pdf
!issue11045.pdf
!issue11150_reduced.pdf
!bad-PageLabels.pdf
!decodeACSuccessive.pdf
!filled-background.pdf

Binary file not shown.

View File

@ -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",

View File

@ -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);
});