From 2af843863cbf3006a153df8869e6f7feb140efbd Mon Sep 17 00:00:00 2001 From: Aras Abbasi Date: Mon, 3 Sep 2018 00:13:09 +0430 Subject: [PATCH] Repair context2d.js (#1923) --- plugins/context2d.js | 588 ++++++++---------- tests/context2d/reference/arc.pdf | Bin 0 -> 4010 bytes .../bar_graph_with_text_and_lines.pdf | Bin 92754 -> 68064 bytes tests/context2d/reference/csscolornames.pdf | Bin 0 -> 3330 bytes tests/context2d/reference/curves.pdf | Bin 0 -> 3515 bytes tests/context2d/reference/drawImage.pdf | Bin 0 -> 41461 bytes .../reference/fillRect_strokeRect.pdf | Bin 0 -> 3126 bytes tests/context2d/reference/fonts.pdf | Bin 0 -> 3635 bytes .../reference/moveTo_lineTo_stroke_fill.pdf | Bin 0 -> 3193 bytes tests/context2d/reference/paths.pdf | Bin 0 -> 3173 bytes .../reference/setFillStyle_setStrokeStyle.pdf | Bin 0 -> 3334 bytes tests/context2d/reference/setLineCap.pdf | Bin 0 -> 3148 bytes tests/context2d/reference/setLineJoin.pdf | Bin 0 -> 3203 bytes tests/context2d/reference/setTextBaseline.pdf | Bin 0 -> 3611 bytes tests/context2d/standard.spec.js | 420 ++++++++++++- 15 files changed, 681 insertions(+), 327 deletions(-) create mode 100644 tests/context2d/reference/arc.pdf create mode 100644 tests/context2d/reference/csscolornames.pdf create mode 100644 tests/context2d/reference/curves.pdf create mode 100644 tests/context2d/reference/drawImage.pdf create mode 100644 tests/context2d/reference/fillRect_strokeRect.pdf create mode 100644 tests/context2d/reference/fonts.pdf create mode 100644 tests/context2d/reference/moveTo_lineTo_stroke_fill.pdf create mode 100644 tests/context2d/reference/paths.pdf create mode 100644 tests/context2d/reference/setFillStyle_setStrokeStyle.pdf create mode 100644 tests/context2d/reference/setLineCap.pdf create mode 100644 tests/context2d/reference/setLineJoin.pdf create mode 100644 tests/context2d/reference/setTextBaseline.pdf diff --git a/plugins/context2d.js b/plugins/context2d.js index 5fa973d23..fa79ba87e 100644 --- a/plugins/context2d.js +++ b/plugins/context2d.js @@ -19,7 +19,7 @@ * require('jspdf.js'); require('lib/css_colors.js'); */ -(function (jsPDFAPI) { +(function (jsPDFAPI, globalObj) { 'use strict'; jsPDFAPI.events.push([ @@ -248,8 +248,8 @@ //TODO only push the clip if it has not been applied to the current PDF context if (this.ctx._clip_path.length > 0) { var lines; - if (window.outIntercept) { - lines = window.outIntercept.type === 'group' ? window.outIntercept.stream : window.outIntercept; + if (globalObj.outIntercept) { + lines = globalObj.outIntercept.type === 'group' ? globalObj.outIntercept.stream : globalObj.outIntercept; } else { lines = this.internal.getCurrentPage(); } @@ -257,7 +257,7 @@ var origPath = this.path; this.path = this.ctx._clip_path; this.ctx._clip_path = []; - this._fill(null, true); + this._drawPaths(null, true); this.ctx._clip_path = this.path; this.path = origPath; } @@ -303,8 +303,8 @@ //TODO only push the clip if it has not been applied to the current PDF context if (this.ctx._clip_path.length > 0) { var lines; - if (window.outIntercept) { - lines = window.outIntercept.type === 'group' ? window.outIntercept.stream : window.outIntercept; + if (globalObj.outIntercept) { + lines = globalObj.outIntercept.type === 'group' ? globalObj.outIntercept.stream : globalObj.outIntercept; } else { lines = this.internal.getCurrentPage(); } @@ -312,7 +312,7 @@ var origPath = this.path; this.path = this.ctx._clip_path; this.ctx._clip_path = []; - this._fill(null, true); + this._drawPaths(null, true); this.ctx._clip_path = this.path; this.path = origPath; } @@ -346,105 +346,108 @@ }, - setFont: function (font) { - this.ctx.font = font; - - //var rx = /\s*(\w+)\s+(\w+)\s+(\w+)\s+([\d\.]+)(px|pt|em)\s+["']?(\w+)['"]?/; - var rx = /\s*(\w+)\s+(\w+)\s+(\w+)\s+([\d\.]+)(px|pt|em)\s+(.*)?/; - m = rx.exec(font); - if (m != null) { - var fontStyle = m[1]; - var fontVariant = m[2]; - var fontWeight = m[3]; - var fontSize = m[4]; - var fontSizeUnit = m[5]; - var fontFamily = m[6]; - - if ('px' === fontSizeUnit) { - fontSize = Math.floor(parseFloat(fontSize)); - // fontSize = fontSize * 1.25; - } else if ('em' === fontSizeUnit) { - fontSize = Math.floor(parseFloat(fontSize) * this.pdf.getFontSize()); - } else { - fontSize = Math.floor(parseFloat(fontSize)); - } - - this.pdf.setFontSize(fontSize); - - if (fontWeight === 'bold' || fontWeight === '700') { - this.pdf.setFontStyle('bold'); - } else { - if (fontStyle === 'italic') { - this.pdf.setFontStyle('italic'); - } else { - this.pdf.setFontStyle('normal'); - } - } - var style; - if ('bold' === fontWeight || fontWeight === '700') { - style = (fontStyle === 'italic') ? 'bolditalic' : 'bold'; - } else if (fontStyle === 'italic') { - style = 'italic'; - } else { - style = 'normal'; - } + setFont: function (font) { + this.ctx.font = font; + var rx, m; + + //var rx = /\s*(\w+)\s+(\w+)\s+(\w+)\s+([\d\.]+)(px|pt|em)\s+["']?(\w+)['"]?/; + rx = /\s*(\w+)\s+(\w+)\s+(\w+)\s+([\d\.]+)(px|pt|em)\s+(.*)?/; + m = rx.exec(font); + if (m != null) { + var fontStyle = m[1]; + var fontVariant = m[2]; + var fontWeight = m[3]; + var fontSize = m[4]; + var fontSizeUnit = m[5]; + var fontFamily = m[6]; + } else { + rx = /\s*(\d+)(pt|px|em)\s+([\w"]+)\s*([\w "]+)?/; + m = rx.exec(font); + if (m != null) { + var fontSize = m[1]; + var fontSizeUnit = m[2]; + var fontFamily = m[3]; + var fontStyle = m[4]; + } else { + return; + } + } - var parts = fontFamily.toLowerCase().split(/\s*,\s*/); - var jsPdfFontName = 'Times'; - - var fallbackFonts = { - arial: 'Helvetica', - verdana: 'Helvetica', - helvetica: 'Helvetica', - 'sans-serif': 'Helvetica', - fixed: 'Courier', - monospace: 'Courier', - terminal: 'Courier', - courier: 'Courier', - times: 'Times', - cursive: 'Times', - fantasy: 'Times', - serif: 'Times' - } - - for (var i = 0; i < parts.length; i++) { - if (this.pdf.internal.getFont(parts[i], style, {noFallback: true, disableWarning: true}) !== undefined) { - jsPdfFontName = parts[i]; - break; - } else if (style === 'bolditalic' && this.pdf.internal.getFont(parts[i], 'bold', {noFallback: true, disableWarning: true}) !== undefined) { - jsPdfFontName = parts[i]; - style = 'bold'; - } else if (this.pdf.internal.getFont(parts[i], 'normal', {noFallback: true, disableWarning: true}) !== undefined){ - jsPdfFontName = parts[i]; - style = 'normal'; - break; - } - } - + if ('px' === fontSizeUnit) { + fontSize = Math.floor(parseFloat(fontSize)); + // fontSize = fontSize * 1.25; + } else if ('em' === fontSizeUnit) { + fontSize = Math.floor(parseFloat(fontSize) * this.pdf.getFontSize()); + } else { + fontSize = Math.floor(parseFloat(fontSize)); + } + this.pdf.setFontSize(fontSize); - this.pdf.setFont(jsPdfFontName, style); - } else { - var rx = /\s*(\d+)(pt|px|em)\s+([\w "]+)\s*([\w "]+)?/; - var m = rx.exec(font); - if (m != null) { - var size = m[1]; - var unit = m[2]; - var name = m[3]; - var style = m[4]; - if (!style) { - style = 'normal'; - } - if ('em' === fontSizeUnit) { - size = Math.floor(parseFloat(fontSize) * this.pdf.getFontSize()); - } else { - size = Math.floor(parseFloat(size)); - } - this.pdf.setFontSize(size); - this.pdf.setFont(name, style); - } - } - }, + if (fontWeight === 'bold' || fontWeight === '700') { + this.pdf.setFontStyle('bold'); + } else { + if (fontStyle === 'italic') { + this.pdf.setFontStyle('italic'); + } else { + this.pdf.setFontStyle('normal'); + } + } + + var style = ''; + if (fontWeight === 'bold' || parseInt(fontWeight, 10) >= 700 || fontStyle === 'bold') { + style = 'bold'; + } + + if (fontStyle === 'italic') { + style += 'italic'; + } + + if (style.length === 0) { + style = 'normal'; + } + var jsPdfFontName = ''; + var parts = fontFamily.toLowerCase().split(/\s*,\s*/); + + var fallbackFonts = { + arial: 'Helvetica', + verdana: 'Helvetica', + helvetica: 'Helvetica', + 'sans-serif': 'Helvetica', + fixed: 'Courier', + monospace: 'Courier', + terminal: 'Courier', + courier: 'Courier', + times: 'Times', + cursive: 'Times', + fantasy: 'Times', + serif: 'Times' + } + + for (var i = 0; i < parts.length; i++) { + if (this.pdf.internal.getFont(parts[i], style, {noFallback: true, disableWarning: true}) !== undefined) { + jsPdfFontName = parts[i]; + break; + } else if (style === 'bolditalic' && this.pdf.internal.getFont(parts[i], 'bold', {noFallback: true, disableWarning: true}) !== undefined) { + jsPdfFontName = parts[i]; + style = 'bold'; + } else if (this.pdf.internal.getFont(parts[i], 'normal', {noFallback: true, disableWarning: true}) !== undefined){ + jsPdfFontName = parts[i]; + style = 'normal'; + break; + } + } + if (jsPdfFontName === '') { + for (var i = 0; i < parts.length; i++) { + if (fallbackFonts[parts[i]]) { + jsPdfFontName = fallbackFonts[parts[i]]; + break; + } + } + } + jsPdfFontName = (jsPdfFontName === '') ? 'Times' : jsPdfFontName; + this.pdf.setFont(jsPdfFontName, style); + }, setTextBaseline: function (baseline) { this.ctx.textBaseline = baseline; @@ -819,11 +822,12 @@ }, stroke: function () { + var rule = 'stroke'; if (this.ctx._clip_path.length > 0) { var lines; - if (window.outIntercept) { - lines = window.outIntercept.type === 'group' ? window.outIntercept.stream : window.outIntercept; + if (globalObj.outIntercept) { + lines = globalObj.outIntercept.type === 'group' ? globalObj.outIntercept.stream : globalObj.outIntercept; } else { lines = this.internal.getCurrentPage(); } @@ -832,156 +836,35 @@ var origPath = this.path; this.path = this.ctx._clip_path; this.ctx._clip_path = []; - this._stroke(true); + this._drawPaths(rule, true); this.ctx._clip_path = this.path; this.path = origPath; - this._stroke(false); + this._drawPaths(rule, false); lines.push("Q"); } else { - this._stroke(false); + this._drawPaths(rule, false); } }, - - _stroke: function (isClip) { - if (!isClip && this._isStrokeTransparent()) { - return; - } - - //TODO opacity - - var moves = []; - var closed = false; - - var xPath = this.path; - - for (var i = 0; i < xPath.length; i++) { - var pt = xPath[i]; - switch (pt.type) { - case 'mt': - moves.push({start: pt, deltas: [], abs: []}); - break; - case 'lt': - var delta = [ - pt.x - xPath[i - 1].x, pt.y - xPath[i - 1].y - ]; - moves[moves.length - 1].deltas.push(delta); - moves[moves.length - 1].abs.push(pt); - break; - case 'bct': - var delta = [ - pt.x1 - xPath[i - 1].x, pt.y1 - xPath[i - 1].y, - pt.x2 - xPath[i - 1].x, pt.y2 - xPath[i - 1].y, - pt.x - xPath[i - 1].x, pt.y - xPath[i - 1].y - ]; - moves[moves.length - 1].deltas.push(delta); - break; - case 'qct': - // convert to bezier - var x1 = xPath[i - 1].x + 2.0 / 3.0 * (pt.x1 - xPath[i - 1].x); - var y1 = xPath[i - 1].y + 2.0 / 3.0 * (pt.y1 - xPath[i - 1].y); - var x2 = pt.x + 2.0 / 3.0 * (pt.x1 - pt.x); - var y2 = pt.y + 2.0 / 3.0 * (pt.y1 - pt.y); - var x3 = pt.x; - var y3 = pt.y; - var delta = [ - x1 - xPath[i - 1].x, y1 - xPath[i - 1].y, - x2 - xPath[i - 1].x, y2 - xPath[i - 1].y, - x3 - xPath[i - 1].x, y3 - xPath[i - 1].y - ]; - moves[moves.length - 1].deltas.push(delta); - break; - case 'arc': - //TODO this was hack to avoid out-of-bounds issue - // No move-to before drawing the arc - if (moves.length == 0) { - moves.push({start: {x: 0, y: 0}, deltas: [], abs: []}); - } - moves[moves.length - 1].arc = true; - if (Array.isArray(moves[moves.length - 1].abs)) { - moves[moves.length - 1].abs.push(pt); - } - break; - case 'close': - closed = true; - break; - } - } - - for (var i = 0; i < moves.length; i++) { - var style; - if (i == moves.length - 1) { - style = 's'; - } else { - style = null; - } - if (moves[i].arc) { - var arcs = moves[i].abs; - for (var ii = 0; ii < arcs.length; ii++) { - var arc = arcs[ii]; - var start = arc.startAngle * 360 / (2 * Math.PI); - var end = arc.endAngle * 360 / (2 * Math.PI); - var x = arc.x; - var y = arc.y; - this.internal.arc2(this, x, y, arc.radius, start, end, arc.anticlockwise, style, isClip); - } - } else { - var x = moves[i].start.x; - var y = moves[i].start.y; - if (!isClip) { - this.pdf.lines(moves[i].deltas, x, y, null, style); - } else { - this.pdf.lines(moves[i].deltas, x, y, null, null); - this.pdf.clip_fixed(); - } - } - } - }, - - _isFillTransparent: function () { - return this.ctx._isFillTransparent || this.globalAlpha == 0; - }, - - _isStrokeTransparent: function () { - return this.ctx._isStrokeTransparent || this.globalAlpha == 0; - }, - - fill: function (fillRule) { //evenodd or nonzero (default) - if (this.ctx._clip_path.length > 0) { - - var lines; - if (window.outIntercept) { - lines = window.outIntercept.type === 'group' ? window.outIntercept.stream : window.outIntercept; - } else { - lines = this.internal.getCurrentPage(); - } - lines.push("q"); - - var origPath = this.path; - this.path = this.ctx._clip_path; - this.ctx._clip_path = []; - this._fill(fillRule, true); - - this.ctx._clip_path = this.path; - this.path = origPath; - this._fill(fillRule, false); - - lines.push('Q'); - } else { - this._fill(fillRule, false); - } - }, - - _fill: function (fillRule, isClip) { - if (this._isFillTransparent()) { + + _drawPaths: function (rule, isClip) { + var isStroke = (rule === 'stroke'); + var isFill = !isStroke; + + if (isStroke && !isClip && this._isStrokeTransparent()) { + return; + } + + if (isFill && this._isFillTransparent()) { return; } var v2Support = typeof this.pdf.internal.newObject2 === 'function'; - + var closed = false; + var lines; - if (window.outIntercept) { - lines = window.outIntercept.type === 'group' ? window.outIntercept.stream : window.outIntercept; + if (globalObj.outIntercept) { + lines = globalObj.outIntercept.type === 'group' ? globalObj.outIntercept.stream : globalObj.outIntercept; } else { lines = this.internal.getCurrentPage(); } @@ -991,14 +874,14 @@ // var oldPath = this.path; // this.path = this.ctx._clip_path; // this.ctx._clip_path = []; - // this._fill(fillRule, true); + // this._drawPaths(rule, true); // this.ctx._clip_path = this.path; // this.path = oldPath; // lines.push('Q'); // } var moves = []; - var outInterceptOld = window.outIntercept; + var outInterceptOld = globalObj.outIntercept; if (v2Support) { // Blend and Mask @@ -1028,7 +911,7 @@ lines.splice(1, 0, instruction); lines.push('Q'); - window.outIntercept = obj; + globalObj.outIntercept = obj; break; default: var dictionaryEntry = '/' + this.pdf.internal.blendModeMap[this.ctx.globalCompositeOperation.toUpperCase()]; @@ -1102,7 +985,11 @@ //TODO this was hack to avoid out-of-bounds issue when drawing circle // No move-to before drawing the arc if (moves.length === 0) { - moves.push({deltas: [], abs: []}); + if (isStroke) { + moves.push({start: {x: 0, y: 0}, deltas: [], abs: []}); + } else { + moves.push({deltas: [], abs: []}); + } } moves[moves.length - 1].arc = true; if (Array.isArray(moves[moves.length - 1].abs)) { @@ -1111,6 +998,7 @@ break; case 'close': moves.push({close: true}); + closed = true; break; } } @@ -1118,67 +1006,121 @@ for (var i = 0; i < moves.length; i++) { var style; if (i == moves.length - 1) { - style = 'f'; - if (fillRule === 'evenodd') { - style += '*'; - } + if (isStroke) { + style = 's'; + } else { + style = 'f'; + if (rule === 'evenodd') { + style += '*'; + } + } } else { style = null; } - if (moves[i].close) { + if (moves[i].close && isFill) { this.pdf.internal.out('h'); if (style) { // only fill at final path move this.pdf.internal.out(style); } } - else if (moves[i].arc) { - if (moves[i].start) { + + if (moves[i].arc ) { + if (moves[i].start && isFill) { this.internal.move2(this, moves[i].start.x, moves[i].start.y); } var arcs = moves[i].abs; - for (var ii = 0; ii < arcs.length; ii++) { - var arc = arcs[ii]; - //TODO lines deltas were getting in here - if (typeof arc.startAngle !== 'undefined') { - var start = arc.startAngle * 360 / (2 * Math.PI); - var end = arc.endAngle * 360 / (2 * Math.PI); - var x = arc.x; - var y = arc.y; - if (ii === 0) { - this.internal.move2(this, x, y); - } - this.internal.arc2(this, x, y, arc.radius, start, end, arc.anticlockwise, null, isClip); - if (ii === arcs.length - 1) { - // The original arc move did not occur because of the algorithm - if (moves[i].start) { - var x = moves[i].start.x; - var y = moves[i].start.y; - this.internal.line2(c2d, x, y); - } - } - } else { - this.internal.line2(c2d, arc.x, arc.y); - } - } - } - else { - var x = moves[i].start.x; - var y = moves[i].start.y; - if (!isClip) { - this.pdf.lines(moves[i].deltas, x, y, null, style); - } else { - this.pdf.lines(moves[i].deltas, x, y, null, null); - this.pdf.clip_fixed(); + if (isStroke) { + for (var ii = 0; ii < arcs.length; ii++) { + var arc = arcs[ii]; + var start = arc.startAngle * 360 / (2 * Math.PI); + var end = arc.endAngle * 360 / (2 * Math.PI); + var x = arc.x; + var y = arc.y; + this.internal.arc2(this, x, y, arc.radius, start, end, arc.anticlockwise, style, isClip); + } + } else { + for (var ii = 0; ii < arcs.length; ii++) { + var arc = arcs[ii]; + //TODO lines deltas were getting in here + if (typeof arc.startAngle !== 'undefined') { + var start = arc.startAngle * 360 / (2 * Math.PI); + var end = arc.endAngle * 360 / (2 * Math.PI); + var x = arc.x; + var y = arc.y; + if (ii === 0) { + this.internal.move2(this, x, y); + } + this.internal.arc2(this, x, y, arc.radius, start, end, arc.anticlockwise, style, isClip); + if (ii === arcs.length - 1) { + // The original arc move did not occur because of the algorithm + if (moves[i].start) { + var x = moves[i].start.x; + var y = moves[i].start.y; + this.internal.line2(c2d, x, y); + } + } + } else { + this.internal.line2(c2d, arc.x, arc.y); + } + } } + } else { + if (moves[i].close !== true) { + var x = moves[i].start.x; + var y = moves[i].start.y; + if (!isClip) { + this.pdf.lines(moves[i].deltas, x, y, null, style); + } else { + this.pdf.lines(moves[i].deltas, x, y, null, null); + this.pdf.clip_fixed(); + } + } } } - window.outIntercept = outInterceptOld; + globalObj.outIntercept = outInterceptOld; + + this.beginPath(); // if (this.ctx._clip_path.length > 0) { // lines.push('Q'); // } + }, + + _isFillTransparent: function () { + return this.ctx._isFillTransparent || this.globalAlpha == 0; + }, + + _isStrokeTransparent: function () { + return this.ctx._isStrokeTransparent || this.globalAlpha == 0; + }, + + fill: function (rule) { //evenodd or nonzero (default) + rule = rule || 'fill'; + if (this.ctx._clip_path.length > 0) { + + var lines; + if (globalObj.outIntercept) { + lines = globalObj.outIntercept.type === 'group' ? globalObj.outIntercept.stream : globalObj.outIntercept; + } else { + lines = this.internal.getCurrentPage(); + } + lines.push("q"); + + var origPath = this.path; + this.path = this.ctx._clip_path; + this.ctx._clip_path = []; + this._drawPaths(rule, true); + + this.ctx._clip_path = this.path; + this.path = origPath; + this._drawPaths(rule, false); + + lines.push('Q'); + } else { + this._drawPaths(rule, false); + } }, pushMask: function () { @@ -1524,45 +1466,39 @@ * Each bezier curve is an object with four points, where x1,y1 and x4,y4 are the arc's end points and x2,y2 and x3,y3 are the cubic bezier's control points. */ - c2d.internal.createArc = function (radius, startAngle, endAngle, anticlockwise) { - var EPSILON = 0.00001; // Roughly 1/1000th of a degree, see below - var twoPI = Math.PI * 2; - var piOverTwo = Math.PI / 2.0; - - // normalize startAngle, endAngle to [0, 2PI] - var startAngleN = startAngle; - if (startAngleN < twoPI || startAngleN > twoPI) { - startAngleN = startAngleN % twoPI; - } - if (startAngleN < 0) { - startAngleN = twoPI + startAngleN; - } - - while (startAngle > endAngle) { - startAngle = startAngle - twoPI; - } - var totalAngle = Math.abs(endAngle - startAngle); - if (totalAngle < twoPI) { - if (anticlockwise) { - totalAngle = twoPI - totalAngle; - } - } + c2d.internal.createArc = function(radius,startAngle,endAngle,anticlockwise) { + + var EPSILON = 0.00001; // Roughly 1/1000th of a degree, see below + + // normalize startAngle, endAngle to [-2PI, 2PI] + var twoPI = Math.PI * 2; + var startAngleN = startAngle; + if (startAngleN < twoPI || startAngleN > twoPI) { + startAngleN = startAngleN % twoPI; + } + var endAngleN = endAngle; + if (endAngleN < twoPI || endAngleN > twoPI) { + endAngleN = endAngleN % twoPI; + } + + // Compute the sequence of arc curves, up to PI/2 at a time. + // Total arc angle is less than 2PI. + var curves = []; + var piOverTwo = Math.PI / 2.0; + //var sgn = (startAngle < endAngle) ? +1 : -1; // clockwise or counterclockwise + var sgn = anticlockwise ? -1 : +1; + + var a1 = startAngle; + for (var totalAngle = Math.min(twoPI, Math.abs(endAngleN - startAngleN)); totalAngle > EPSILON;) { + var a2 = a1 + sgn * Math.min(totalAngle, piOverTwo); + curves.push(this.createSmallArc(radius, a1, a2)); + totalAngle -= Math.abs(a2 - a1); + a1 = a2; + } + + return curves; + } - // Compute the sequence of arc curves, up to PI/2 at a time. - var curves = []; - var sgn = anticlockwise ? -1 : +1; - - var a1 = startAngleN; - for (; totalAngle > EPSILON;) { - var remain = sgn * Math.min(totalAngle, piOverTwo); - var a2 = a1 + remain; - curves.push(this.createSmallArc(radius, a1, a2)); - totalAngle -= Math.abs(a2 - a1); - a1 = a2; - } - - return curves; - }; c2d.internal.getCurrentPage = function () { diff --git a/tests/context2d/reference/arc.pdf b/tests/context2d/reference/arc.pdf new file mode 100644 index 0000000000000000000000000000000000000000..790b778a184086e8b77889a56a48dcac2a5b24f7 GIT binary patch literal 4010 zcmcInU2fw>41S+e@Fmz?6dBErW;7~-0RBn3K~p5K1GH$c53($071&ZL%Wcv#^#r|4 zdz5m1WIJ}Z$riC6`%_5{-&wy=wAe3BogeD5hoBuOH!-Aw#8#3IitQ)TEzCG^ncC;nE zR8tFL=>T?FRCn!X;Ecuie%UrfwjhiO2EP#o-{F$2|J>R=nmZyT6#|lkQ^sKdBB6pq zVo=q9NU2efq=IS46!IYHYPVIZY{=d}XiE!uE{O^k0Ff(x3iA%uGuAUv^#@MN&+wF2QSZXlF* zu8TsU*g6We4H1YAB9Pu{&T>_d03&1SC^ElKo!IbFi7ZB!$0 z-DPDv6WO#CwN@mdiJfByB2hnE7Ip>E$723#(Uy5eqVa0dx<+T)9VgLQmDkgDzmde1!*BlX>~e3LE@er@?%M z6E+P8b0mGykpZ4%WzoES4zSU875t?_4A=*%1Uy_`>%hVCk0;t|eK=?x@XciNrOmi0 z7sc{;R4=mX0L8EwcK#dxFiipHi+hkwy#^D;j`{4X~~?|_Z}U{1W;8-LCoW<%`% zldQ$FX16WA>ImR3H^1@IVp7llr~U0O>bj}(anZtUgmXMZH^n0!Zx;(3+WX;u5dJUl ztaPW}$q6nv*n+@W{#=0F8N0&yF|1;+Ay}RQ+d%C~<8U693AoN;xdz+^ZkH*zZ_F-H zlKWvF*Bo5&Ilchip`kGE@KD$#ZDbG9=%=g6eUZ0-jv~1^*ZFoY$H1qnylCM4{nCbx zGZ1AT@Unq7hqkP%Vb&J#e)z3m+_01hE?KPfH%z=^?A?bgt9ZrO{W1m_egyTMz4qMU zB`4f^t{#f2ms{K2^nnvW`w^M2H{f7^Zmqp?E^j2t^5i>XiB_*>^8~j_ggjCw$ zc1by@MBtDR$w^VPgeQ$ip${HgHrFu{IZVoWdiFr&P z&1d>O$W$(8+8JUx7-l+J!PLKq>6Qr9sJ5W;GtxYBOWuxEtkQ+u4FhYd0H6*QtgO0g|Er zB^yKFiKXckq;n200=>ZlP`|ZOU;A+7LIl;@1Jr30Tu|2>B*hra*a5kwB1pB&&M_9j z(VYtnV>euBrB@Zz^u&Anis0OCZ=U(W9?LwkH_!ZMp7Cj$W&F{eXPgROI`WtBb-!hf z9GGOD+nH|;bWw9u8|_LWI%VeNQZy54JO?#@>V2W+z25EAN_%+3sN=uo20c1uQlMX_ zlv7I&sI*Gx)n$_w59u^izyjXiG27G!CczVvKD{t$-5ZlGy)$Xz1EKMcBx?L4nPd1H zN!H2zT}9x%-bL@Vf!^z_`)H&v>vf?@C;gT>vagHL9Axluuf?L@;<13mr^_v_S!D6& z80B#V`5oB{9P*i5FB`nfX;iN!=m?v=d9{_`T5s{~jTX0Ww%FHX@#AK~WOv8T{Nu}# z4Gy?mDkt!wz==|(za5<~#j+ssL5@Db&Y)WdtZ-7M?k^PYA=P+%a#fai(KaSa_A#tr zn=k&GURAXDFo)$J*OR|2%&W@eKrD*3iLr!jTf(w^BUs_>d2yNhHHToF2Uca_*PwYu zf@)i}BE~aX2dZgRF)#ATWUau7cp64y$qlnAc;e@lxyk#HYAvO9Go To!Zyt#)=fj?uv@qO>2Jwj;{5- delta 2420 zcmai#e@q)?7{_za0;^a{fwoW}Mb=odg7>4>yJFMO**3<3&^iKcbnT+fIObrbI+qzc zT%vyr4fAn9_s1O5#O)6gmYZ&=VEnbkKZqnuqehpZ#<;}Ii3y2|!T9#xyVB#m#3q;C z_w&8)^S<}obGcaago zhyBC#SRby(y32-jmksMXioT=hOLpvEvSa_C1M7nhto;pG`x~%cRrIQ&FEnERLL>Ia zomh`Mv1XgFW}C2HQS^$UXPdD<+g$KFC1cBNii*Qb?;&ZQYkB>2o`Q+ZZHm+6);dhP z>MXPuorQLk`Kd#7Ug*?1$63|!az)3>p-fm%ogamwGZ{qA$^)u18Pqy6-KrA|7oD3? zl!-@G=VnyvP!B7PJg3@;@xbYAC*(n??s3a=_GimxDfJkdp85VNc(u2lic2%SW;{$U zKjN0>t`m+79e{0p_o9g$ME`giJ776!kw$x3D7f5@a;Ukt;7YtzF8^`7GUWVDAofqa!7T#egHSeXQ z%oF!hQsUfrxs)AYC_Qc)>(b?)X7%~LL;BqQqCWrZC4K(PEBf3qsn0*3(&zh6=<|k? z`uvMiIy_r0jlB~f`+&IftPX$Qpx4T=^E#zb>zyC!^DFs{91`aaNTYLH$rH3*Yb=xU zmupHkC!=4!v~NV#1pV7=xnlZJmr!&n?W86EqT zK=~V5gl_M~@7l@;*>4jl_7{PkT_w=Fe-r5HKP3pY_z0wP>i4wpO)VT<(%FAARhxL$ z&+r`0v(s&r)G3D;2(XNcF8o~kT_*V?zzE#*_mz~GL#`lhbZLg>2*z?G_4`IYR&)v diff --git a/tests/context2d/reference/csscolornames.pdf b/tests/context2d/reference/csscolornames.pdf new file mode 100644 index 0000000000000000000000000000000000000000..d3f2f9e68500a95c747dd4cf9deaa9de7daa395c GIT binary patch literal 3330 zcmcIn-EQhe5We51n49P%s)BddKiCzD6hp|NO+`d3wQ6)O3@jWYW2g4|H0d+-3Hmba zqjY95f!HS{rwUx)VLUtkGy8FJI~bmej?GT~`uop+m<=5A>5BDwR`m3sz`Bi>is5&m zG7SRXPM9@OWnL9CRf60wep2%!4)aI2=g4paw_%lv{TXcO;_FfuDqb_*ksN+!9Ilz@aMb+#RV-N;F>4qAN<<4LZF&{m7`ct$ z_8Uc|IoJ)z9f;=abfV^G5Uto%gf@&~x7PluVv-{nmt)9=-YNE;6<-%hWewGM%y>V! ze#PgnsumCxTgUBZ{b5?Ewt5o-x?`T#n6Do;`J&XVDA#p9>#S1|TO}@;^96aGlYX)-%P{D&9g#sP}|Xigm7jlaeZivjNc zX{_;|o^1FLlPxJJD>ffKJ+ajOcDGm1);v=vk^@!KoXpLYfte^e*Il{Zr z+)cR#SU8$J{bQFK??sc)h%Q5hIHB$wgu1X3WK}Cn3 zA&5grrjtAy#9G1W;Cso1&jT(+ARH(7j>`|6e>mIIipZ?Fp!zWmLB1q7xkT_-qsj4u z$}VT5dy7605$KPQRcVU3CE1(!DX*{q<4pDQv|49-b{-40K%gT9Lxfg;z;j*Og#~PR zPJoH04`f@Ov?+Zrd7OWRCnTo4A?Ld7v!0I;H{^V(ZG#s$xH4bz1aF@elDFk-8=JIo z*6~{Y36H>PL#~UMyvg(1afrZg>63z5>ZLx3rEl?EujRA!oIN>R#7T;vfQIER`9o3N ztVy10Lh@!HM%f|<(~{WPqXFDQuiy6^?n@`&cIfl&r6WQv9a~;@ovw7ktBbdYe4?Hy SbzErEF|zC8f1Z=8@$g^bpN@C{ literal 0 HcmV?d00001 diff --git a/tests/context2d/reference/curves.pdf b/tests/context2d/reference/curves.pdf new file mode 100644 index 0000000000000000000000000000000000000000..c0e2ad14bcb93b0162f8cbc09cf8f910f2bbe96a GIT binary patch literal 3515 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 I$-8m%9fgQ+umAu6 literal 0 HcmV?d00001 diff --git a/tests/context2d/reference/paths.pdf b/tests/context2d/reference/paths.pdf new file mode 100644 index 0000000000000000000000000000000000000000..6ea993c3886c5d7704ed3cb4fddf0c2cf43e475d GIT binary patch literal 3173 zcmcIm?{4Bo5dXeUF<+v)Qx&|k_WDnSA_WtAs5ucqq*jgYgE0%|2<+5eu1TM%PjD~O zK1yedISAI3TosIjXUDTMv%mSXb9U1ooMXooXJ7vQ>mT8QgkpLxx?Sh?>A`?=lPrv& z|I*|ZkiL$EGd5MRE>ly1+AuztS(fyQN4S&3@KJT7gdpPAN8!XpZfSP~UM+obAxu7F zBfM^mU7LJiKLPq7eXeY2l9iAhCE*Vt;U}S_WR<>GYhJ;2jb6u%0E3|8Bk0;7psr<` zRVq*^7TSJoG&MV)=}pCie#n+;74=`a5Zcqs(_v7*YWBIe`D(lp;!s$ z=WJHN9b-I(8kjYMDt3tIuNy^!|A4>~PA{npQ{cQe%g@GUX(F7-dTQ$!aimZSJ{>!oIzGrHvW{9;40xy=UBix$*N}v7EiW2f=rEFq$s2-`A9z zuMI=^9ZoO|Cvzk^>PSpwn3?kRF+i^4O$L7}5gXel$^_h%&@l&2hCgz5dpQWF^JCYP zzlFtZwldZExL76m36f#gr~ljjX_^8aZ;G4a4{fr{(i5Ejcw^i+z~?`i6UTewZ^^^F zPyK(ISh{Nt+v1C^06gCOCQqwrvHYL<_bckAEYgXwaOcnn0?w^@r0Z?CqIsj&yyNCQ zq`R`d{kmNu=%S~(q%mZmfFr|{3k(la9`F&E(!dRrDIe;7#$*6>XJImgy1<#F5u(17 zi6lwf%qc`84HJzHlEtkx62`4P60SiT^F`|XI-1^_)B-t5%iX<>`@NhFK3k`zgtzw< zADsq?j(kUR5=}ieEAoC~4ZQ9Ds3e9mk_uh)l>9-eH&VWNx2KiHqr(OjCsYK*f+w~G z&1cQPHhM7mWy-p@(+5oi_C4h5<&v;v+3Vz~SW^H-xrvMAdX?|lc`VJG#xR9Ketp2# z+SM?JEzkAH7(bA2c?vZJ<2g@ChV+1kiXcDWxlwzsRurZKIbXMVK}exGkc--TQF<*o z#GvILx{|{ETpxN~%P#7mg#r5Qb6}|2`XZmA`P_z*J{8OX&yy{ml^5;F*)qwNG!$^L zOtL=>$ITfRg{7%^lgz_>UO=6al>Ea!+(9=EgT5O?Q5Z&-m+@7sU01s*90WaAqL2Q? YOGG|$&QvxjZJjYnN4_{ayBZDt1ynn1qyPW_ literal 0 HcmV?d00001 diff --git a/tests/context2d/reference/setFillStyle_setStrokeStyle.pdf b/tests/context2d/reference/setFillStyle_setStrokeStyle.pdf new file mode 100644 index 0000000000000000000000000000000000000000..b8c2c0834b313a017b3e7fccf0846bd1fb274d9c GIT binary patch literal 3334 zcmcImU2fY(5PsiN%!`o(fyLdWmOq7HAfhBks0$gAffP0JKuK$b21PpLDz$s2o}ia$ zkCGXZ5@ph{oWjxrIULQm^Sd*1ayb~CijK`r{`vRs|CkLN()lgx^{lIhI}O%lxY7)t znNAD{{CCQ%sm{|)w$M4qlJT2fMqxj_hii@u<*SbL!0U>R=YM8akR}GvIdlu@voofX zB`KlrO4)@@R^|)X(#OAZlj(5Hct>*hlW{m_qQmjz-6LBuS$uhtbU^uWTD~&PZV-!r z8npws-gAH&RRanyp3qPqUZAGul}RptQp2oi(hlG_&jD(aYQWP@R~pVsMFp;Speq>f zDyCKBDUq!-=gj&wTIO&~MKFaTa~sM!t5c?SKvosV2(!zqewb^b!1}1;Z`wqQkXf_M z+!RGbr6ia&Ocv=fN>*TfijogW9&H)S8bw)df-hl)CBUqUu=>~Y z!2JmeCi6J@y1~oy+F|g1!Uzh((G2kq8WLcih;;V)F%Z;f$_oBbAy&GNR0*QKLWc}E zTKomI-^aAPbD zApehM#NpofM|gKL!2UlE4bGZoTYS+75Qm%J>|s4mIskQPuBABmu>*lI&zvDJsdMbM@+NUh%|^IN?zfQI5{J=ev4 zFGt6hn}yEc?QKr3;~LT7?{JaBwai3mG6;=^w}W3K7asSy6gKyj^PbB$oWFUucPj30 z%?1^OcnQ)Kt&}TVAghgXa;K9I3p#tdec(o5K0>mIV~j1yUW5MS<4i;5|=kS(Z;o7Yj2(Rsj@V(Y~Qbd j-2NbNhMq6GLwj)c5|PhTGr0*fQ&fy}mCH^}hLh2E1qX~p literal 0 HcmV?d00001 diff --git a/tests/context2d/reference/setLineCap.pdf b/tests/context2d/reference/setLineCap.pdf new file mode 100644 index 0000000000000000000000000000000000000000..c277719653d50e5da4f9817a48b60f2e220a38f9 GIT binary patch literal 3148 zcmcIm;cnVM4E}#l;XhSdO(l1iTnH1YR6^O zGCPDp6Lrw3pYlghQFzf z4G8=?WY$n;NuEx026CbJpr>KbN$%m2qe8V*LwevjqT#i!nB^z2!POZ!1^W1y>3B*; z=)E*{rsJ8p0pZyAIWwsa=8QKahi{C-8>Sk3A--dhqs+mRv^$46pyshEVk0JCh2(W) zsUoCYA)8(exl|Dny)Hc~{UT>H-6MfqUp>&Qlg>m5k#lJHrHrK|_!QFKi>;E_~*lVg~ajO;}HW$Cq!+e}X|GEGAjXF=0 z$w(Wxv~bb@>q6gSd+X0}tmu^ge)-?WURiX%b{ho&ln^*=^d!*9kYoeVLy`j&0!a#} zfRf}wQO`(hLQz>r^q{!lB(^{lO&LW*ip4mBvVbD_2!dF#w1!}@w1?n=v>`Q8>(gL- zt0xA~QG8wXb+KN{G4N?V(J363NOC-Y zL9G2G%IEQ#o%>W@JzZUyJ!L|N4}T@1W}^Xh8_a$Cg-p^(+bYlZYMaVt89j=iE&PK^WM*5klqt?$=D zHY@u{ZeyA~wjph==CgF%HJnLq$Is`;S$Xt# literal 0 HcmV?d00001 diff --git a/tests/context2d/reference/setLineJoin.pdf b/tests/context2d/reference/setLineJoin.pdf new file mode 100644 index 0000000000000000000000000000000000000000..897250d32b37606ae74f2a61d0be35df3dd5d65a GIT binary patch literal 3203 zcmcImU2fAr5PsiN%u7`&)OdFt+iMh6YT^bWic%$&Ktwz^$u_uh>|$@Avnhh#jS+4-OS4laWJv1r-s;ODO&znKjj(&;tpbgav}8x7V)xX=uLGo2U^ z_;tjrkCzP@D?xWYbJ^2pd=m7VF}22$cmYCN{;81LNOaN z3HQ35-_TvNYPyC097tExbls+I#j5Fwja>}33aAR3ve?LR&aAi5JckKYU<5_lR+MtK z$(M7l$g1k}F}2LP0$E&A9t?FoJ)AZW_V4t}f=E8BbO1hE;RT@LIm|AKbk)0412KQ=4-v0Pk6OPwE&(q)+J zp&2$?{O|VnvlPVcrC5ePFku|c_7MN>#aKE(@$b!v-MjH)cykrt{-1^h@0#tk_@pa9 z>|TE3yX7>E|MUF%L|tU*Y^)7TECeWEUFuuB-UdrVBi-u1SN#w0t}Jf9P6r7A)DQ?# z`Vy!zMA<;;A*u}&0#Odo0wv0YVxJM|L9tngR8R~!kv@pxQbrObMTugN7Em-FiJ+`l zTSH;7wuiz+(nfTVS|5hfYdtf7j^gX)UKjOUj)BitGo8VU>zqPIAk*SUh@ub^nJ7(y z&}euOypmif?sF+@?mF$4Tpn_McvL$T!PEAF>V-H2>4Naw0?}Iq=Y}^rIi1njYxIGL zz`TKE6~~xcl06Ua(iIk9nCM;_ua-&8&TXcz5Tr@L5SCRBxQ=5xa0P3g?V&MxAX)RI zP*{wIJkBYlTRb5#u%~s5dObUF@K_ys0!X)<6DIyg^L^19Fc;hR*lXNgBRk+*wkK5lRi_QpfA%t zN@t86EJ> zT%{TW{yJvHSQXhipQ!@mM)6TaaoEjX;E|)k@~oD0!EK9{>wRKIFH1G9E}&gn-`p^j zMg&6d71+H>7y1coZsX5|&Q-W%yd^pO&N%#lqU+#8@)qYDTuD1~SOOE)zA9l8)(x29 zdw`3BIg=(Xf#4puS!~u<%OQx^A7R-Lqa+pc%-W?E;<27p!K?*Y`RQvfXI z4d7!OMTu$xG_TsKR3`!OH-Nh^UBu~Pi-07oh*r^&*xlfM!Hgf{sDMYxj4_mSUQ;Tt zEsw3Yg{;aNA1Tj_ZdfRiz_?S%XJT2%jLCYc%gmzu63iH+vn(RVjGyE5HZ9^>fh3Oe zLie7+98AfK`>=YEmbC+JpALTA&64Q-J#fCkgV8jJe_LZkdG9c|-{1s=;cSk0M;+;5 z@r+ge{xJ|#eK!pL8WAh(GciGIQ|OojXN$j}o^*N;&gaLrm3}Q2LA+GO^*CFG=^4nd z?XLfgf1aWsju*wv@rOE0;@KI_f4nem9H8@`&57f+@z-!Q?_>R+h8la#VOcz>1&HIt zZ}PgFX378De>bBZ@@zIy8XgTC9Ki_G3%0l65~sv&_3Ty8A@<6$`*k`f2p~e>@aRjR zn<2>r3J*zbpd*lE0Tob^Y$)p)i4K&Ng+v$11Sio0Q8r~1(Nb)tOOyqav>$2( zm;LW07cTd>6ef2i|BlNKoPW65*%jx~!vfU{F$uB-&Djf_s;e=3v{LEqjP|al51a_} z9i;0d!Pt`RefXNK@d8Gv>Sf7#neO1cI~);ei< z7_xmG=M>Tdosbyv1D$I&*LpS{Xx~n7uc?#G{e=02wQaY7D{P{|0fy6V_$*wvfh#$0 z#sGm2_mk3Y>?chRiMx+0EsW-&&TTh*mY%s|r}HpQa44W;nZ$o6x;JB-Wt#rSlnF6R z=NXigL}m~B@CcoO&%Im0`+m>1Ek|(6clxgH47%O6aQeP`bBf6);!L5#T$hY7x!GnH I7lV=iFCOH~ { }); comparePdf(doc.output(), 'bar_graph_with_text_and_lines.pdf', 'context2d') - }) + }); + + + it('context2d: paths', () => { + var doc = new jsPDF('p', 'pt', 'letter'); + var context = doc.context2d; + + context.beginPath(); + context.arc(150,150,50,0,Math.PI, false); + context.lineTo(300,300); + context.stroke(); + + context.fillStyle = 'red'; + context.fillRect(545,205,50,40); + + comparePdf(doc.output(), 'paths.pdf', 'context2d') + }); + + it('context2d: fonts', () => { + var doc = new jsPDF('p', 'pt', 'a4'); + + var ctx = doc.context2d; + + var y = 0; + var h = 20 + var pad = 10; + var textHeight = 20; + + ctx.setFont("10pt times"); + ctx.fillText("10pt times", 20, y + textHeight); + y += textHeight + pad; + + ctx.setFont("10pt courier"); + ctx.fillText("10pt courier", 20, y + textHeight); + y += textHeight + pad; + + ctx.setFont("10pt courier bold"); + ctx.fillText("10pt courier bold", 20, y + textHeight); + y += textHeight + pad; + + ctx.setFont("10pt courier italic"); + ctx.fillText("10pt courier italic", 20, y + textHeight); + y += textHeight + pad; + + ctx.setFont("50pt courier bold"); + ctx.fillText("50pt courier bold", 20, y + 50); + y += 50 + pad; + + ctx.setFont("50pt courier bold"); + ctx.strokeText("50pt courier bold", 20, y + 50); + y += 50 + pad; + + ctx.setFont("20pt courier bold"); + ctx.strokeText("20pt courier bold", 20, y + 20); + y += 20 + pad; + + ctx.setFont("20pt courier bold"); + ctx.fillText("20pt courier bold", 20, y + 20); + y += 20 + pad; + + ctx.setFont("20pt arial bold"); + ctx.fillText("20pt arial bold", 20, y + 20); + y += 20 + pad; + comparePdf(doc.output(), 'fonts.pdf', 'context2d') + }); + + it('context2d: css color names', () => { + var doc = new jsPDF('p', 'pt', 'a4'); + var ctx = doc.context2d; + + var y = 0; + var h = 20 + var pad = 10; + var textHeight = 20; + ctx.setFont("20pt times"); + // CSS Color Names + ctx.save(); + y += textHeight + pad; + + ctx.setFillStyle('red'); + ctx.fillText("Red", 20, y + textHeight); + y += textHeight + pad; + + ctx.setFillStyle('green'); + ctx.fillText("Green", 20, y + textHeight); + y += textHeight + pad; + + ctx.setStrokeStyle('blue'); + ctx.strokeText("Blue", 20, y + textHeight); + y += textHeight + pad; + ctx.restore(); + + comparePdf(doc.output(), 'csscolornames.pdf', 'context2d') + }); + + it('context2d: drawImage', () => { + var imgData = 'data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEASABIAAD/4ge4SUNDX1BST0ZJTEUAAQEAAAeoYXBwbAIgAABtbnRyUkdCIFhZWiAH2QACABkACwAaAAthY3NwQVBQTAAAAABhcHBsAAAAAAAAAAAAAAAAAAAAAAAA9tYAAQAAAADTLWFwcGwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAtkZXNjAAABCAAAAG9kc2NtAAABeAAABWxjcHJ0AAAG5AAAADh3dHB0AAAHHAAAABRyWFlaAAAHMAAAABRnWFlaAAAHRAAAABRiWFlaAAAHWAAAABRyVFJDAAAHbAAAAA5jaGFkAAAHfAAAACxiVFJDAAAHbAAAAA5nVFJDAAAHbAAAAA5kZXNjAAAAAAAAABRHZW5lcmljIFJHQiBQcm9maWxlAAAAAAAAAAAAAAAUR2VuZXJpYyBSR0IgUHJvZmlsZQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbWx1YwAAAAAAAAAeAAAADHNrU0sAAAAoAAABeGhySFIAAAAoAAABoGNhRVMAAAAkAAAByHB0QlIAAAAmAAAB7HVrVUEAAAAqAAACEmZyRlUAAAAoAAACPHpoVFcAAAAWAAACZGl0SVQAAAAoAAACem5iTk8AAAAmAAAComtvS1IAAAAWAAACyGNzQ1oAAAAiAAAC3mhlSUwAAAAeAAADAGRlREUAAAAsAAADHmh1SFUAAAAoAAADSnN2U0UAAAAmAAAConpoQ04AAAAWAAADcmphSlAAAAAaAAADiHJvUk8AAAAkAAADomVsR1IAAAAiAAADxnB0UE8AAAAmAAAD6G5sTkwAAAAoAAAEDmVzRVMAAAAmAAAD6HRoVEgAAAAkAAAENnRyVFIAAAAiAAAEWmZpRkkAAAAoAAAEfHBsUEwAAAAsAAAEpHJ1UlUAAAAiAAAE0GFyRUcAAAAmAAAE8mVuVVMAAAAmAAAFGGRhREsAAAAuAAAFPgBWAWEAZQBvAGIAZQBjAG4A/QAgAFIARwBCACAAcAByAG8AZgBpAGwARwBlAG4AZQByAGkBDQBrAGkAIABSAEcAQgAgAHAAcgBvAGYAaQBsAFAAZQByAGYAaQBsACAAUgBHAEIAIABnAGUAbgDoAHIAaQBjAFAAZQByAGYAaQBsACAAUgBHAEIAIABHAGUAbgDpAHIAaQBjAG8EFwQwBDMEMAQ7BEwEPQQ4BDkAIAQ/BEAEPgREBDAEOQQ7ACAAUgBHAEIAUAByAG8AZgBpAGwAIABnAOkAbgDpAHIAaQBxAHUAZQAgAFIAVgBCkBp1KAAgAFIARwBCACCCcl9pY8+P8ABQAHIAbwBmAGkAbABvACAAUgBHAEIAIABnAGUAbgBlAHIAaQBjAG8ARwBlAG4AZQByAGkAcwBrACAAUgBHAEIALQBwAHIAbwBmAGkAbMd8vBgAIABSAEcAQgAg1QS4XNMMx3wATwBiAGUAYwBuAP0AIABSAEcAQgAgAHAAcgBvAGYAaQBsBeQF6AXVBeQF2QXcACAAUgBHAEIAIAXbBdwF3AXZAEEAbABsAGcAZQBtAGUAaQBuAGUAcwAgAFIARwBCAC0AUAByAG8AZgBpAGwAwQBsAHQAYQBsAOEAbgBvAHMAIABSAEcAQgAgAHAAcgBvAGYAaQBsZm6QGgAgAFIARwBCACBjz4/wZYdO9k4AgiwAIABSAEcAQgAgMNcw7TDVMKEwpDDrAFAAcgBvAGYAaQBsACAAUgBHAEIAIABnAGUAbgBlAHIAaQBjA5MDtQO9A7kDugPMACADwAPBA78DxgOvA7sAIABSAEcAQgBQAGUAcgBmAGkAbAAgAFIARwBCACAAZwBlAG4A6QByAGkAYwBvAEEAbABnAGUAbQBlAGUAbgAgAFIARwBCAC0AcAByAG8AZgBpAGUAbA5CDhsOIw5EDh8OJQ5MACAAUgBHAEIAIA4XDjEOSA4nDkQOGwBHAGUAbgBlAGwAIABSAEcAQgAgAFAAcgBvAGYAaQBsAGkAWQBsAGUAaQBuAGUAbgAgAFIARwBCAC0AcAByAG8AZgBpAGkAbABpAFUAbgBpAHcAZQByAHMAYQBsAG4AeQAgAHAAcgBvAGYAaQBsACAAUgBHAEIEHgQxBEkEOAQ5ACAEPwRABD4ERAQ4BDsETAAgAFIARwBCBkUGRAZBACAGKgY5BjEGSgZBACAAUgBHAEIAIAYnBkQGOQYnBkUARwBlAG4AZQByAGkAYwAgAFIARwBCACAAUAByAG8AZgBpAGwAZQBHAGUAbgBlAHIAZQBsACAAUgBHAEIALQBiAGUAcwBrAHIAaQB2AGUAbABzAGV0ZXh0AAAAAENvcHlyaWdodCAyMDA3IEFwcGxlIEluYy4sIGFsbCByaWdodHMgcmVzZXJ2ZWQuAFhZWiAAAAAAAADzUgABAAAAARbPWFlaIAAAAAAAAHRNAAA97gAAA9BYWVogAAAAAAAAWnUAAKxzAAAXNFhZWiAAAAAAAAAoGgAAFZ8AALg2Y3VydgAAAAAAAAABAc0AAHNmMzIAAAAAAAEMQgAABd7///MmAAAHkgAA/ZH///ui///9owAAA9wAAMBs/+EAgEV4aWYAAE1NACoAAAAIAAUBEgADAAAAAQABAAABGgAFAAAAAQAAAEoBGwAFAAAAAQAAAFIBKAADAAAAAQACAACHaQAEAAAAAQAAAFoAAAAAAAAASAAAAAEAAABIAAAAAQACoAIABAAAAAEAAAH0oAMABAAAAAEAAAH0AAAAAP/bAEMAAgEBAgEBAgIBAgICAgIDBQMDAwMDBgQEAwUHBgcHBwYGBgcICwkHCAoIBgYJDQkKCwsMDAwHCQ0ODQwOCwwMC//bAEMBAgICAwIDBQMDBQsIBggLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLC//AABEIAfQB9AMBIgACEQEDEQH/xAAfAAABBQEBAQEBAQAAAAAAAAAAAQIDBAUGBwgJCgv/xAC1EAACAQMDAgQDBQUEBAAAAX0BAgMABBEFEiExQQYTUWEHInEUMoGRoQgjQrHBFVLR8CQzYnKCCQoWFxgZGiUmJygpKjQ1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4eLj5OXm5+jp6vHy8/T19vf4+fr/xAAfAQADAQEBAQEBAQEBAAAAAAAAAQIDBAUGBwgJCgv/xAC1EQACAQIEBAMEBwUEBAABAncAAQIDEQQFITEGEkFRB2FxEyIygQgUQpGhscEJIzNS8BVictEKFiQ04SXxFxgZGiYnKCkqNTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqCg4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2dri4+Tl5ufo6ery8/T19vf4+fr/2gAMAwEAAhEDEQA/APzLooor+sD8nCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKK4z4yfFb/hWOl2zWUMVxe3jkRpISFVQOWOOepUfjXJj8dRy2hLE4h2hHf8vzNqFCeJqKnTV2zs6K+bm/aQ8VliReW4z2FsnH6VLaftL+KLaQNNLZXAB+7JbgA/98kGvjI+I+Vt2cZr5L/5I9l8OYpdY/e/8j6Morx3QP2sY3ZV8UaUyDPMltJu/wDHGx/6FXo/hX4jaL40Uf8ACPahBNKRnySdso/4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F/x+J/28PjP4X+Pv7ROo+JPhLa3MGnXNvDFNLPEImvJkUqZdnUAqEXnk7cnGah1X9k27W4P9iavbyRHp58RRh7fLnP14rT8Gfstwabfx3HjC9W8WJgwt4UxG+OzMeSPbAr87o8D5vOt7N0bebasvO9/y1PoZ53g4w5lO/lZ3PMtS+Fmv6Hodpqz2crWtxGs6yQ5ZoQeRvA5Xsc9Oetew/BP/AIKcfFT4N2sdncapB4p02LhbfWkad4x0ws4YSemAzMB2FejgBRheAK5vxL8IvDvit2k1bTIRM3WWLMT/AFJXGfxzX1mY+Gbsngq2ttVLv1s1+VvmeVh+JVe1eHzX+T/zPULb/gt1/wASUi8+Hf8AxMRGQGTWP3BfHBwYdwGe2T9a+LvBVrc+PvipayRpslu777XL5S4EQ372I9AOcfhXq037KmhPNuhvtVRCc7d8Zx9DsrsvBXw40j4f27J4cttkkgCyTOd0kg9z/QYFedlXh5jliYSxXLGmmm7O7duit387WOjFcQ0PZNUruT8jdooor9rPigooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKmg064urSee2hkeG1CmZ1XKxhjgFj2yeKhr1L4P8AhUav+zr8X9TNvJIdIs9KIlXO2HzNQjT5u3PTn0rOrUVKN33S+9pfqVFczseW0UUVoSFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUVY0q0hvtSgh1C6jsoJHCyTyIzrEvdiqAsfoBXqXgv4JfDfWbx08a/GrQ9EgEW9JI/DmqXZZ8j5CogXHBJzkjisqlaNJXkn8k3+SZUYuWi/Ox5LX0j+yt4fXVf2E/2mbhpShtrPw8oULnd/xMWk/wDaIH/AqiX9kz4NsoI/aT8Oc88+FtQFe9/s3fs+/DfQf2P/AI+aZ4f+NWi6xpOs2+irqeqx6FdxR6II7mZoy8bfNL5jFlGz7u3JryMwzCm6S5VK/ND7Ev5494/16nVQoS5tbbPquz8z8+KK+jf+GS/g3/0cn4b/APCX1CsLxt+zt8KPD2nsfDXx90LV74MoEH/CLanFGQep80RsOPQA13xx9KbslL/wCf8A8iYOjJa6fev8zw+itrxt4d0zw5fRx+GPEFl4hiYHdNbW08CoeO00aE5z6dj7Zxa7Iy5ldGT0CiiimAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFfTf7JOpQWf7BH7T8d1KqPLa+Hdinq3+nTLx/wJ0H/AhXzJXtHwH8Rtpn7J3x309YlddTstE3OWwY/L1ONuB3zXFmEPaUkv70PwnFm1CXLK/k/wAmeL0UUV2mIUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAVraJ4sk0Tw5rWmxRK6a1FFFI5JzGI5VkBA7klcfiayaKTSluAUUUUwCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA//2Q=='; + + var doc = new jsPDF('p', 'pt', 'a4'); + var ctx = doc.context2d; + + var y = 0; + var h = 20 + var pad = 20; + y += pad; + ctx.drawImage(imgData, 20, y, 50, 50); + y += 50 + pad; + ctx.drawImage(imgData, 20, y, 200, 200); + y += 200 + pad; + ctx.drawImage(imgData, 20, y); + y += 200 + pad; + comparePdf(doc.output(), 'drawImage.pdf', 'context2d'); + }); + + it('context2d: curves', () => { + + var doc = new jsPDF('p', 'pt', 'a4'); + var ctx = doc.context2d; + + var y = 0; + var h = 20 + var pad = 20; + + y = pad; + + ctx.save(); + ctx.lineWidth = 6; + ctx.strokeStyle = "#333"; + ctx.beginPath(); + ctx.moveTo(100, y); + ctx.bezierCurveTo(150, y+100, 350, y+100, 400, y); + ctx.stroke(); + ctx.restore(); + + y += 100 + pad; + ctx.save(); + ctx.lineWidth = 6; + ctx.strokeStyle = "#333"; + ctx.beginPath(); + ctx.moveTo(100, y); + ctx.bezierCurveTo(150, y+100, 350, y+100, 400, y); + ctx.fill(); + ctx.restore(); + + y += 100 + pad; + ctx.save(); + ctx.lineWidth = 6; + ctx.strokeStyle = "#333"; + ctx.beginPath(); + ctx.moveTo(100, y); + ctx.quadraticCurveTo(250, y+100, 400, y); + ctx.stroke(); + ctx.restore(); + + y += 100 + pad; + ctx.save(); + ctx.lineWidth = 6; + ctx.strokeStyle = "#333"; + ctx.beginPath(); + ctx.moveTo(100, y); + ctx.quadraticCurveTo(250, y+100, 400, y); + ctx.fill(); + ctx.restore(); + comparePdf(doc.output(), 'curves.pdf', 'context2d'); + }); + + it('context2d: setStrokeStyle and setFillStyle', () => { + var doc = new jsPDF('p', 'pt', 'a4'); + var ctx = doc.context2d; + + var y = 0; + var h = 20 + var pad = 20; + + y = pad; + + // test fill style + ctx.setFillStyle('#ff0000'); + ctx.fillRect(20, y, 20, h); + y += h + pad; + + ctx.setFillStyle('#00ff00'); + ctx.fillRect(20, y, 20, h); + y += h + pad; + + ctx.setFillStyle('#0000ff'); + ctx.fillRect(20, y, 20, h); + y += h + pad; + + // test stroke style + ctx.setStrokeStyle('#ff0000'); + ctx.strokeRect(20, y, 20, h); + y += h + pad; + + ctx.setStrokeStyle('#00ff00'); + ctx.strokeRect(20, y, 20, h); + y += h + pad; + + ctx.setStrokeStyle('#0000ff'); + ctx.strokeRect(20, y, 20, h); + y += h + pad; + + ctx.setStrokeStyle('#000000'); + ctx.setFillStyle('#000000'); + comparePdf(doc.output(), 'setFillStyle_setStrokeStyle.pdf', 'context2d'); + }); + + it('context2d: arc', () => { + var doc = new jsPDF('p', 'pt', 'a4'); + var ctx = doc.context2d; + + var y = 0; + var h = 20 + var pad = 20; + + ctx.setStrokeStyle('black'); + ctx.setFillStyle('black'); + + y = pad + 40; + ctx.arc(50, y, 20, -10, 170, false); + ctx.stroke(); + y += pad + 40; + + ctx.arc(50, y, 20, -10, 170, true); + ctx.stroke(); + y += pad + 40; + + ctx.arc(50, y, 20, 0, Math.PI, false); + ctx.stroke(); + y += pad + 40; + + ctx.arc(50, y, 20, 0, Math.PI, true); + ctx.stroke(); + y += pad + 40; + + ctx.arc(50, y, 20, 0, 2*Math.PI, false); + ctx.stroke(); + y += pad + 40; + + ctx.arc(50, y, 20, 0, 2*Math.PI, false); + ctx.fill(); + y += pad + 40; + + ctx.arc(50, y, 20, 0, Math.PI, false); + ctx.fill(); + comparePdf(doc.output(), 'arc.pdf', 'context2d'); + }); + + it('context2d: fillRect and strokeRect', () => { + + var doc = new jsPDF('p', 'pt', 'a4'); + var ctx = doc.context2d; + + var y = 20; + var h = 20 + var pad = 20; + + ctx.fillRect(20, y, 20, h); + y += h + pad; + + ctx.setFillStyle('#f5f5f5'); + ctx.fillRect(20, y, 20, h); + y += h + pad; + + ctx.strokeRect(20, y, 20, h); + y += h + pad; + + comparePdf(doc.output(), 'fillRect_strokeRect.pdf', 'context2d'); + }); + + it('context2d: setLineCap', () => { + + var doc = new jsPDF('p', 'pt', 'a4'); + var ctx = doc.context2d; + + var y = 20; + var h = 20 + var pad = 20; + + ctx.setLineWidth(5); + ctx.setLineCap('butt'); + ctx.moveTo(20, y); + ctx.lineTo(200, y); + ctx.stroke(); + y += pad; + ctx.setLineCap('round'); + ctx.moveTo(20, y); + ctx.lineTo(200, y); + ctx.stroke(); + y += pad; + ctx.setLineCap('square'); + ctx.moveTo(20, y); + ctx.lineTo(200, y); + ctx.stroke(); + y += pad; + + comparePdf(doc.output(), 'setLineCap.pdf', 'context2d'); + }) + + xit('context2d: setLineJoin', () => { + + var doc = new jsPDF('p', 'pt', 'a4'); + var ctx = doc.context2d; + + var y = 20; + var h = 20 + var pad = 20; + + ctx.setLineWidth(10); + ctx.setLineJoin('miter'); + ctx.moveTo(20, y); + ctx.lineTo(200, y); + ctx.lineTo(250, y + 50); + ctx.stroke(); + y += pad + 10; + ctx.setLineJoin('bevel'); + ctx.moveTo(20, y); + ctx.lineTo(200, y); + ctx.lineTo(250, y + 50); + ctx.stroke(); + y += pad + 10; + ctx.setLineJoin('round'); + ctx.moveTo(20, y); + ctx.lineTo(200, y); + ctx.lineTo(250, y + 50); + ctx.stroke(); + y += pad + 10; + y += 50; + + comparePdf(doc.output(), 'setLineCap.pdf', 'context2d'); + }); + + + it('context2d: moveTo, lineTo, stroke, fill', () => { + + var doc = new jsPDF('p', 'pt', 'a4'); + var ctx = doc.context2d; + + var y = 20; + var h = 20 + var pad = 20; + + // stroked diamond + ctx.moveTo(30, y); + ctx.lineTo(50, y + 20); + ctx.lineTo(30, y + 40); + ctx.lineTo(10, y + 20); + ctx.lineTo(30, y); + ctx.stroke(); + y += 50; + + // filled diamond + ctx.moveTo(30, y); + ctx.lineTo(50, y + 20); + ctx.lineTo(30, y + 40); + ctx.lineTo(10, y + 20); + ctx.lineTo(30, y); + ctx.closePath(); + ctx.fill(); + y += 50; + comparePdf(doc.output(), 'moveTo_lineTo_stroke_fill.pdf', 'context2d'); + }); + + + it('context2d: setTextBaseline', () => { + var doc = new jsPDF('p', 'pt', 'a4'); + var ctx = doc.context2d; + + var y = 20; + var h = 20 + var pad = 20; + var textHeight = 20; + + ctx.setStrokeStyle('#dddddd'); + ctx.setFont("20pt times"); + + ctx.moveTo(20,y); + ctx.lineTo(150, y); + ctx.stroke(); + ctx.setTextBaseline('alphabetic'); + ctx.fillText("Alphabetic Q", 20, y); + y += 40 + pad; + + ctx.moveTo(20,y); + ctx.lineTo(150, y); + ctx.stroke(); + ctx.setTextBaseline('ideographic'); + ctx.fillText("Ideographic Q", 20, y); + y += 40 + pad; + + ctx.moveTo(20,y); + ctx.lineTo(150, y); + ctx.stroke(); + ctx.setTextBaseline('top'); + ctx.fillText("Top Q", 20, y); + y += 40 + pad; + + ctx.moveTo(20,y); + ctx.lineTo(150, y); + ctx.stroke(); + ctx.setTextBaseline('bottom'); + ctx.fillText("Bottom Q", 20, y); + y += 40 + pad; + + ctx.moveTo(20,y); + ctx.lineTo(150, y); + ctx.stroke(); + ctx.setTextBaseline('middle'); + ctx.fillText("Middle Q", 20, y); + y += 40 + pad; + + ctx.moveTo(20,y); + ctx.lineTo(150, y); + ctx.stroke(); + ctx.setTextBaseline('hanging'); + ctx.fillText("Hanging Q", 20, y); + y += 40 + pad; + comparePdf(doc.output(), 'setTextBaseline.pdf', 'context2d'); + }); })