Merge pull request #9352 from Snuffleupagus/issue-9285

Attempt to actually resolve ColourSpace names in accordance with the specification (issue 9285)
This commit is contained in:
Brendan Dahl 2018-01-12 13:01:22 -08:00 committed by GitHub
commit d77fc8882a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 34 additions and 15 deletions

View File

@ -258,17 +258,7 @@ var ColorSpace = (function ColorSpaceClosure() {
}
};
ColorSpace.parseToIR = function(cs, xref, res, pdfFunctionFactory) {
if (isName(cs)) {
var colorSpaces = res.get('ColorSpace');
if (isDict(colorSpaces)) {
var refcs = colorSpaces.get(cs.name);
if (refcs) {
cs = refcs;
}
}
}
ColorSpace.parseToIR = function(cs, xref, res = null, pdfFunctionFactory) {
cs = xref.fetchIfRef(cs);
if (isName(cs)) {
switch (cs.name) {
@ -284,6 +274,20 @@ var ColorSpace = (function ColorSpaceClosure() {
case 'Pattern':
return ['PatternCS', null];
default:
if (isDict(res)) {
let colorSpaces = res.get('ColorSpace');
if (isDict(colorSpaces)) {
let resCS = colorSpaces.get(cs.name);
if (resCS) {
if (isName(resCS)) {
return ColorSpace.parseToIR(resCS, xref, res,
pdfFunctionFactory);
}
cs = resCS;
break;
}
}
}
throw new FormatError(`unrecognized colorspace ${cs.name}`);
}
}

View File

@ -412,6 +412,7 @@ var PartialEvaluator = (function PartialEvaluatorClosure() {
xref: this.xref,
res: resources,
image,
isInline: inline,
pdfFunctionFactory: this.pdfFunctionFactory,
});
// We force the use of RGBA_32BPP images here, because we can't handle
@ -464,6 +465,7 @@ var PartialEvaluator = (function PartialEvaluatorClosure() {
xref: this.xref,
res: resources,
image,
isInline: inline,
nativeDecoder: nativeImageDecoder,
pdfFunctionFactory: this.pdfFunctionFactory,
}).then((imageObj) => {

View File

@ -75,8 +75,8 @@ var PDFImage = (function PDFImageClosure() {
return dest;
}
function PDFImage({ xref, res, image, smask = null, mask = null,
isMask = false, pdfFunctionFactory, }) {
function PDFImage({ xref, res, image, isInline = false, smask = null,
mask = null, isMask = false, pdfFunctionFactory, }) {
this.image = image;
var dict = image.dict;
if (dict.has('Filter')) {
@ -139,7 +139,8 @@ var PDFImage = (function PDFImageClosure() {
'color components not supported.');
}
}
this.colorSpace = ColorSpace.parse(colorSpace, xref, res,
let resources = isInline ? res : null;
this.colorSpace = ColorSpace.parse(colorSpace, xref, resources,
pdfFunctionFactory);
this.numComps = this.colorSpace.numComps;
}
@ -167,6 +168,7 @@ var PDFImage = (function PDFImageClosure() {
xref,
res,
image: smask,
isInline,
pdfFunctionFactory,
});
} else if (mask) {
@ -179,6 +181,7 @@ var PDFImage = (function PDFImageClosure() {
xref,
res,
image: mask,
isInline,
isMask: true,
pdfFunctionFactory,
});
@ -193,7 +196,7 @@ var PDFImage = (function PDFImageClosure() {
* Handles processing of image data and returns the Promise that is resolved
* with a PDFImage when the image is ready to be used.
*/
PDFImage.buildImage = function({ handler, xref, res, image,
PDFImage.buildImage = function({ handler, xref, res, image, isInline = false,
nativeDecoder = null,
pdfFunctionFactory, }) {
var imagePromise = handleImageData(image, nativeDecoder);
@ -227,6 +230,7 @@ var PDFImage = (function PDFImageClosure() {
xref,
res,
image: imageData,
isInline,
smask: smaskData,
mask: maskData,
pdfFunctionFactory,

View File

@ -0,0 +1 @@
https://github.com/mozilla/pdf.js/files/1563256/4149180-355989.pdf

View File

@ -741,6 +741,14 @@
"link": false,
"type": "eq"
},
{ "id": "issue9285",
"file": "pdfs/issue9285.pdf",
"md5": "aa53ad98a72fd76c414101927951448b",
"rounds": 1,
"link": true,
"lastPage": 1,
"type": "eq"
},
{ "id": "issue8707",
"file": "pdfs/issue8707.pdf",
"md5": "d3dc670adde9ec9fb82c974027033029",