Allow skipping of errors when parsing broken/unsupported ColorSpaces (issue 6707, issue 11287)
This will allow us to attempt to recover as much as possible of a page, rather than immediately failing, when a broken/unsupported ColorSpace is encountered. This patch thus extends the framework added in PRs such as e.g. 8240 and 8922, to also cover parsing of ColorSpaces.
This commit is contained in:
parent
30ef05c161
commit
835d8c2be5
@ -289,10 +289,7 @@ var PartialEvaluator = (function PartialEvaluatorClosure() {
|
||||
return false;
|
||||
},
|
||||
|
||||
buildFormXObject: function PartialEvaluator_buildFormXObject(resources,
|
||||
xobj, smask,
|
||||
operatorList,
|
||||
task,
|
||||
async buildFormXObject(resources, xobj, smask, operatorList, task,
|
||||
initialState) {
|
||||
var dict = xobj.dict;
|
||||
var matrix = dict.getArray('Matrix');
|
||||
@ -318,14 +315,10 @@ var PartialEvaluator = (function PartialEvaluatorClosure() {
|
||||
groupOptions.isolated = (group.get('I') || false);
|
||||
groupOptions.knockout = (group.get('K') || false);
|
||||
if (group.has('CS')) {
|
||||
colorSpace = group.get('CS');
|
||||
if (colorSpace) {
|
||||
colorSpace = ColorSpace.parse(colorSpace, this.xref, resources,
|
||||
this.pdfFunctionFactory);
|
||||
} else {
|
||||
warn('buildFormXObject - invalid/non-existent Group /CS entry: ' +
|
||||
group.getRaw('CS'));
|
||||
}
|
||||
colorSpace = await this.parseColorSpace({
|
||||
cs: group.get('CS'),
|
||||
resources,
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@ -934,6 +927,26 @@ var PartialEvaluator = (function PartialEvaluatorClosure() {
|
||||
}
|
||||
},
|
||||
|
||||
parseColorSpace({ cs, resources, }) {
|
||||
return new Promise((resolve) => {
|
||||
resolve(ColorSpace.parse(cs, this.xref, resources,
|
||||
this.pdfFunctionFactory));
|
||||
}).catch((reason) => {
|
||||
if (reason instanceof AbortException) {
|
||||
return null;
|
||||
}
|
||||
if (this.options.ignoreErrors) {
|
||||
// Error(s) in the ColorSpace -- sending unsupported feature
|
||||
// notification and allow rendering to continue.
|
||||
this.handler.send('UnsupportedFeature',
|
||||
{ featureId: UNSUPPORTED_FEATURES.unknown, });
|
||||
warn(`parseColorSpace - ignoring ColorSpace: "${reason}".`);
|
||||
return null;
|
||||
}
|
||||
throw reason;
|
||||
});
|
||||
},
|
||||
|
||||
async handleColorN(operatorList, fn, args, cs, patterns, resources, task) {
|
||||
// compile tiling patterns
|
||||
var patternName = args[args.length - 1];
|
||||
@ -1158,15 +1171,25 @@ var PartialEvaluator = (function PartialEvaluatorClosure() {
|
||||
break;
|
||||
|
||||
case OPS.setFillColorSpace:
|
||||
stateManager.state.fillColorSpace =
|
||||
ColorSpace.parse(args[0], xref, resources,
|
||||
self.pdfFunctionFactory);
|
||||
continue;
|
||||
next(self.parseColorSpace({
|
||||
cs: args[0],
|
||||
resources,
|
||||
}).then(function(colorSpace) {
|
||||
if (colorSpace) {
|
||||
stateManager.state.fillColorSpace = colorSpace;
|
||||
}
|
||||
}));
|
||||
return;
|
||||
case OPS.setStrokeColorSpace:
|
||||
stateManager.state.strokeColorSpace =
|
||||
ColorSpace.parse(args[0], xref, resources,
|
||||
self.pdfFunctionFactory);
|
||||
continue;
|
||||
next(self.parseColorSpace({
|
||||
cs: args[0],
|
||||
resources,
|
||||
}).then(function(colorSpace) {
|
||||
if (colorSpace) {
|
||||
stateManager.state.strokeColorSpace = colorSpace;
|
||||
}
|
||||
}));
|
||||
return;
|
||||
case OPS.setFillColor:
|
||||
cs = stateManager.state.fillColorSpace;
|
||||
args = cs.getRgb(args, 0);
|
||||
|
1
test/pdfs/issue11287.pdf.link
Normal file
1
test/pdfs/issue11287.pdf.link
Normal file
@ -0,0 +1 @@
|
||||
https://github.com/mozilla/pdf.js/files/3786520/FLEXSTEEL.PIPELINE.TECHNOLOGIES.INC.vs.FEDON.DARREN.LOUIS.201834640.No.80265332.Texas.State.Harris.County.113th.District.Court.Jun.7.2018.pdf
|
@ -2977,6 +2977,14 @@
|
||||
"link": false,
|
||||
"type": "eq"
|
||||
},
|
||||
{ "id": "issue11287",
|
||||
"file": "pdfs/issue11287.pdf",
|
||||
"md5": "d7d6a7c124fad7b00f79112b71ee09d6",
|
||||
"rounds": 1,
|
||||
"link": true,
|
||||
"lastPage": 1,
|
||||
"type": "eq"
|
||||
},
|
||||
{ "id": "issue4890",
|
||||
"file": "pdfs/issue4890.pdf",
|
||||
"md5": "1666feb4cd26318c2bdbea6a175dce87",
|
||||
|
Loading…
Reference in New Issue
Block a user