Skip to content

Commit f87de63

Browse files
committed
Merge pull request mozilla#3197 from brendandahl/type3-regression
Fix type3 font loading regression.
2 parents 6b709ef + c5c2f7a commit f87de63

File tree

3 files changed

+45
-37
lines changed

3 files changed

+45
-37
lines changed

src/evaluator.js

Lines changed: 38 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -520,62 +520,63 @@ var PartialEvaluator = (function PartialEvaluatorClosure() {
520520
return promise;
521521
}
522522

523-
var loadedName = font.loadedName;
524-
if (!loadedName) {
525-
// keep track of each font we translated so the caller can
526-
// load them asynchronously before calling display on a page
527-
loadedName = 'g_font_' + this.uniquePrefix + (this.idCounters.font + 1);
528-
font.loadedName = loadedName;
523+
if (font.loaded) {
524+
promise.resolve({
525+
font: font,
526+
dependencies: {}
527+
});
528+
return promise;
529+
}
529530

531+
// keep track of each font we translated so the caller can
532+
// load them asynchronously before calling display on a page
533+
font.loadedName = 'g_font_' + this.uniquePrefix +
534+
(this.idCounters.font + 1);
535+
536+
if (!font.translated) {
530537
var translated;
531538
try {
532539
translated = this.translateFont(font, xref);
533540
} catch (e) {
534541
if (e instanceof MissingDataException) {
535-
font.loadedName = null;
536542
throw e;
537543
}
538544
translated = new ErrorFont(e instanceof Error ? e.message : e);
539545
}
540546
font.translated = translated;
547+
}
541548

542-
if (translated.loadCharProcs) {
543-
delete translated.loadCharProcs;
544-
545-
var charProcs = font.get('CharProcs').getAll();
546-
var fontResources = font.get('Resources') || resources;
547-
var opListPromises = [];
548-
var charProcKeys = Object.keys(charProcs);
549+
if (font.translated.loadCharProcs) {
550+
var charProcs = font.get('CharProcs').getAll();
551+
var fontResources = font.get('Resources') || resources;
552+
var opListPromises = [];
553+
var charProcKeys = Object.keys(charProcs);
554+
for (var i = 0, n = charProcKeys.length; i < n; ++i) {
555+
var key = charProcKeys[i];
556+
var glyphStream = charProcs[key];
557+
opListPromises.push(
558+
this.getOperatorList(glyphStream, fontResources));
559+
}
560+
Promise.all(opListPromises).then(function(datas) {
561+
var charProcOperatorList = {};
562+
var dependencies = {};
549563
for (var i = 0, n = charProcKeys.length; i < n; ++i) {
550564
var key = charProcKeys[i];
551-
var glyphStream = charProcs[key];
552-
opListPromises.push(
553-
this.getOperatorList(glyphStream, fontResources));
565+
var data = datas[i];
566+
charProcOperatorList[key] = data.queue;
567+
Util.extendObj(dependencies, data.dependencies);
554568
}
555-
Promise.all(opListPromises).then(function(datas) {
556-
var charProcOperatorList = {};
557-
var dependencies = {};
558-
for (var i = 0, n = charProcKeys.length; i < n; ++i) {
559-
var key = charProcKeys[i];
560-
var data = datas[i];
561-
charProcOperatorList[key] = data.queue;
562-
Util.extendObj(dependencies, data.dependencies);
563-
}
564-
translated.charProcOperatorList = charProcOperatorList;
565-
promise.resolve({
566-
font: font,
567-
dependencies: dependencies
568-
});
569-
});
570-
} else {
569+
font.translated.charProcOperatorList = charProcOperatorList;
570+
font.loaded = true;
571+
++this.idCounters.font;
571572
promise.resolve({
572573
font: font,
573-
dependencies: {}
574+
dependencies: dependencies
574575
});
575-
}
576-
577-
++this.idCounters.font;
576+
}.bind(this));
578577
} else {
578+
++this.idCounters.font;
579+
font.loaded = true;
579580
promise.resolve({
580581
font: font,
581582
dependencies: {}

test/pdfs/issue3188.pdf

7.75 MB
Binary file not shown.

test/test_manifest.json

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -467,6 +467,13 @@
467467
"rounds": 1,
468468
"type": "eq"
469469
},
470+
{ "id": "issue3188",
471+
"file": "pdfs/issue3188.pdf",
472+
"md5": "161b72604d86f40ab2f765ddd3b61227",
473+
"rounds": 1,
474+
"lastPage": 1,
475+
"type": "eq"
476+
},
470477
{ "id": "issue1586",
471478
"file": "pdfs/pdfjsbad1586.pdf",
472479
"md5": "793d0870f0b0c613799b0677d64daca4",

0 commit comments

Comments
 (0)