Use the Alternate entry, if it exists, in ICCBased Colour Space dictionaries (issue 5836, issue 5939, issue 6055)
Fixes 5836. Fixes 5939. Fixes 6055.
This commit is contained in:
parent
bf20334bea
commit
bc5e43b45c
@ -262,7 +262,7 @@ var ColorSpace = (function ColorSpaceClosure() {
|
|||||||
} else if (isArray(cs)) {
|
} else if (isArray(cs)) {
|
||||||
mode = xref.fetchIfRef(cs[0]).name;
|
mode = xref.fetchIfRef(cs[0]).name;
|
||||||
this.mode = mode;
|
this.mode = mode;
|
||||||
var numComps, params;
|
var numComps, params, alt;
|
||||||
|
|
||||||
switch (mode) {
|
switch (mode) {
|
||||||
case 'DeviceGray':
|
case 'DeviceGray':
|
||||||
@ -284,6 +284,17 @@ var ColorSpace = (function ColorSpaceClosure() {
|
|||||||
var stream = xref.fetchIfRef(cs[1]);
|
var stream = xref.fetchIfRef(cs[1]);
|
||||||
var dict = stream.dict;
|
var dict = stream.dict;
|
||||||
numComps = dict.get('N');
|
numComps = dict.get('N');
|
||||||
|
alt = dict.get('Alternate');
|
||||||
|
if (alt) {
|
||||||
|
var altIR = ColorSpace.parseToIR(alt, xref, res);
|
||||||
|
// Parse the /Alternate CS to ensure that the number of components
|
||||||
|
// are correct, and also (indirectly) that it is not a PatternCS.
|
||||||
|
var altCS = ColorSpace.fromIR(altIR);
|
||||||
|
if (altCS.numComps === numComps) {
|
||||||
|
return altIR;
|
||||||
|
}
|
||||||
|
warn('ICCBased color space: Ignoring incorrect /Alternate entry.');
|
||||||
|
}
|
||||||
if (numComps === 1) {
|
if (numComps === 1) {
|
||||||
return 'DeviceGrayCS';
|
return 'DeviceGrayCS';
|
||||||
} else if (numComps === 3) {
|
} else if (numComps === 3) {
|
||||||
@ -316,11 +327,11 @@ var ColorSpace = (function ColorSpaceClosure() {
|
|||||||
} else if (isArray(name)) {
|
} else if (isArray(name)) {
|
||||||
numComps = name.length;
|
numComps = name.length;
|
||||||
}
|
}
|
||||||
var alt = ColorSpace.parseToIR(cs[2], xref, res);
|
alt = ColorSpace.parseToIR(cs[2], xref, res);
|
||||||
var tintFnIR = PDFFunction.getIR(xref, xref.fetchIfRef(cs[3]));
|
var tintFnIR = PDFFunction.getIR(xref, xref.fetchIfRef(cs[3]));
|
||||||
return ['AlternateCS', numComps, alt, tintFnIR];
|
return ['AlternateCS', numComps, alt, tintFnIR];
|
||||||
case 'Lab':
|
case 'Lab':
|
||||||
params = cs[1].getAll();
|
params = xref.fetchIfRef(cs[1]).getAll();
|
||||||
return ['LabCS', params];
|
return ['LabCS', params];
|
||||||
default:
|
default:
|
||||||
error('unimplemented color space object "' + mode + '"');
|
error('unimplemented color space object "' + mode + '"');
|
||||||
|
1
test/pdfs/issue5939.pdf.link
Normal file
1
test/pdfs/issue5939.pdf.link
Normal file
@ -0,0 +1 @@
|
|||||||
|
http://web.archive.org/web/20150613184455/https://www.usenix.org/system/files/login/articles/login_apr15_02_grosvenor_041315.pdf
|
@ -728,6 +728,15 @@
|
|||||||
"rounds": 1,
|
"rounds": 1,
|
||||||
"type": "eq"
|
"type": "eq"
|
||||||
},
|
},
|
||||||
|
{ "id": "issue5939",
|
||||||
|
"file": "pdfs/issue5939.pdf",
|
||||||
|
"md5": "43c61e06ad407c158763f0860c99bb04",
|
||||||
|
"rounds": 1,
|
||||||
|
"link": true,
|
||||||
|
"firstPage": 1,
|
||||||
|
"lastPage": 1,
|
||||||
|
"type": "eq"
|
||||||
|
},
|
||||||
{ "id": "cmykjpeg",
|
{ "id": "cmykjpeg",
|
||||||
"file": "pdfs/cmykjpeg.pdf",
|
"file": "pdfs/cmykjpeg.pdf",
|
||||||
"md5": "85d162b48ce98503a382d96f574f70a2",
|
"md5": "85d162b48ce98503a382d96f574f70a2",
|
||||||
|
Loading…
x
Reference in New Issue
Block a user