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:
commit
d77fc8882a
@ -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}`);
|
||||
}
|
||||
}
|
||||
|
@ -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) => {
|
||||
|
@ -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,
|
||||
|
1
test/pdfs/issue9285.pdf.link
Normal file
1
test/pdfs/issue9285.pdf.link
Normal file
@ -0,0 +1 @@
|
||||
https://github.com/mozilla/pdf.js/files/1563256/4149180-355989.pdf
|
@ -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",
|
||||
|
Loading…
x
Reference in New Issue
Block a user