diff --git a/src/jspdf.js b/src/jspdf.js index ff6a27dd0..a0356087f 100644 --- a/src/jspdf.js +++ b/src/jspdf.js @@ -1057,6 +1057,13 @@ var jsPDF = (function (global) { // convert grayscale value to rgb so that it can be converted to hex for consistency var floatVal = parseFloat(colorEncoded[0]); colorEncoded = [floatVal, floatVal, floatVal, 'r']; + } else if (colorEncoded.length === 5 && (colorEncoded[4] === 'k' || colorEncoded[4] === 'K')) { + // convert CMYK values to rbg so that it can be converted to hex for consistency + var red = (1.0 - colorEncoded[0]) * (1.0 - colorEncoded[3]); + var green = (1.0 - colorEncoded[1]) * (1.0 - colorEncoded[3]); + var blue = (1.0 - colorEncoded[2]) * (1.0 - colorEncoded[3]); + + colorEncoded = [red, green, blue, 'r']; } var colorAsRGB = '#'; for (var i = 0; i < 3; i++) { @@ -1143,11 +1150,11 @@ var jsPDF = (function (global) { } else { switch (options.precision) { case 2: - color = [f2(ch1 / 255), f2(ch2 / 255), f2(ch3 / 255), f2(ch4 / 255), letterArray[2]].join(" "); + color = [f2(ch1), f2(ch2), f2(ch3), f2(ch4), letterArray[2]].join(" "); break; case 3: default: - color = [f3(ch1 / 255), f3(ch2 / 255), f3(ch3 / 255), f3(ch4 / 255), letterArray[2]].join(" "); + color = [f3(ch1), f3(ch2), f3(ch3), f3(ch4), letterArray[2]].join(" "); } } } diff --git a/tests/init/jspdf.unit.spec.js b/tests/init/jspdf.unit.spec.js index b53a95449..e28b69f16 100644 --- a/tests/init/jspdf.unit.spec.js +++ b/tests/init/jspdf.unit.spec.js @@ -629,6 +629,7 @@ describe('jsPDF unit tests', () => { doc.__private__.setTextColor(255,0,0); expect(doc.__private__.getTextColor()).toEqual('#ff0000'); }); + it('jsPDF private function getFillColor', () => { const doc = jsPDF(); expect(doc.__private__.getFillColor()).toEqual('#000000') @@ -669,14 +670,29 @@ describe('jsPDF unit tests', () => { expect(doc.__private__.encodeColorString({ch1: '1.000', ch2: '0.000', ch3: '0.000'})).toEqual('1.000 0.000 0.000 rg'); expect(doc.__private__.encodeColorString({ch1: 255, ch2: 0, ch3: 0, ch4: {a: 0}})).toEqual('1.000 1.000 1.000 rg'); expect(doc.__private__.encodeColorString({ch1: 255, ch2: 0, ch3: 0, ch4: {a: 0.5}})).toEqual('1.000 0.000 0.000 rg'); - expect(doc.__private__.encodeColorString({ch1: 255, ch2: 0, ch3: 0, ch4: 255})).toEqual('1.000 0.000 0.000 1.000 k'); expect(doc.__private__.encodeColorString({ch1: '1.000', ch2: '0.000', ch3: '0.000', ch4: '1.000'})).toEqual('1.000 0.000 0.000 1.000 k'); - expect(doc.__private__.encodeColorString({ch1: 255, ch2: 0, ch3: 0, ch4: 255, precision: 3})).toEqual('1.000 0.000 0.000 1.000 k'); - expect(doc.__private__.encodeColorString({ch1: 255, ch2: 0, ch3: 0, ch4: 255, precision: 2})).toEqual('1.00 0.00 0.00 1.00 k'); + expect(doc.__private__.encodeColorString({ch1: 1.0, ch2: 0.0, ch3: 0.0, ch4: 1.0, precision: 3})).toEqual('1.000 0.000 0.000 1.000 k'); + expect(doc.__private__.encodeColorString({ch1: 1.0, ch2: 0.0, ch3: 0.0, ch4: 1.0, precision: 2})).toEqual('1.00 0.00 0.00 1.00 k'); + expect(doc.__private__.encodeColorString({ch1: 0.4, ch2: 0.2, ch3: 0.4, ch4: 0.1, precision: 2})).toEqual('0.40 0.20 0.40 0.10 k'); expect(function() {doc.__private__.encodeColorString('invalid');}).toThrow(new Error('Invalid color "invalid" passed to jsPDF.encodeColorString.')); }); - - + + it('jsPDF private function decodeColorString', () => { + const doc = jsPDF(); + expect(doc.__private__.decodeColorString('1.000 0.000 0.000 rg')).toEqual('#ff0000'); + expect(doc.__private__.decodeColorString('1.00 0.00 0.00 rg')).toEqual('#ff0000'); + expect(doc.__private__.decodeColorString('1.00 1.00 0.00 RG')).toEqual('#ffff00'); + expect(doc.__private__.decodeColorString('1.00 1.00 1.00 RG')).toEqual('#ffffff'); + expect(doc.__private__.decodeColorString('0.00 0.00 1.00 rg')).toEqual('#0000ff'); + expect(doc.__private__.decodeColorString('0.33 0.10 1.00 rg')).toEqual('#5419ff'); + expect(doc.__private__.decodeColorString('0 g')).toEqual('#000000'); + expect(doc.__private__.decodeColorString('0 G')).toEqual('#000000'); + expect(doc.__private__.decodeColorString('0.39 G')).toEqual('#636363'); + expect(doc.__private__.decodeColorString('1.0 G')).toEqual('#ffffff'); + expect(doc.__private__.decodeColorString('0.32 0.67 0.10 0.32 k')).toEqual('#75399c'); + expect(doc.__private__.decodeColorString('1.00 0.00 0.00 0.00 K')).toEqual('#00ffff'); + expect(doc.__private__.decodeColorString('1.00 0.00 1.00 0.00 K')).toEqual('#00ff00'); + }); it('jsPDF private function getDocumentProperty, setDocumentProperty', () => { const doc = jsPDF();