Browse Source

Merge pull request #6112 from Snuffleupagus/iccbased-alternate

Use the Alternate entry, if it exists, in ICCBased Colour Space dictionaries (issue 5836, issue 5939, issue 6055)
Tim van der Meij 10 years ago
parent
commit
c8fd9c8c06
  1. 17
      src/core/colorspace.js
  2. 1
      test/pdfs/issue5939.pdf.link
  3. 9
      test/test_manifest.json

17
src/core/colorspace.js

@ -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

@ -0,0 +1 @@
http://web.archive.org/web/20150613184455/https://www.usenix.org/system/files/login/articles/login_apr15_02_grosvenor_041315.pdf

9
test/test_manifest.json

@ -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…
Cancel
Save