corrade-nucleus-nucleons – Blame information for rev 20

Subversion Repositories:
Rev:
Rev Author Line No. Line
20 office 1 /** @preserve
2 * jsPDF - PDF Document creation from JavaScript
3 * Version ${versionID}
4 * CommitID ${commitID}
5 *
6 * Copyright (c) 2010-2014 James Hall <james@parall.ax>, https://github.com/MrRio/jsPDF
7 * 2010 Aaron Spike, https://github.com/acspike
8 * 2012 Willow Systems Corporation, willow-systems.com
9 * 2012 Pablo Hess, https://github.com/pablohess
10 * 2012 Florian Jenett, https://github.com/fjenett
11 * 2013 Warren Weckesser, https://github.com/warrenweckesser
12 * 2013 Youssef Beddad, https://github.com/lifof
13 * 2013 Lee Driscoll, https://github.com/lsdriscoll
14 * 2013 Stefan Slonevskiy, https://github.com/stefslon
15 * 2013 Jeremy Morel, https://github.com/jmorel
16 * 2013 Christoph Hartmann, https://github.com/chris-rock
17 * 2014 Juan Pablo Gaviria, https://github.com/juanpgaviria
18 * 2014 James Makes, https://github.com/dollaruw
19 * 2014 Diego Casorran, https://github.com/diegocr
20 * 2014 Steven Spungin, https://github.com/Flamenco
21 * 2014 Kenneth Glassey, https://github.com/Gavvers
22 *
23 * Permission is hereby granted, free of charge, to any person obtaining
24 * a copy of this software and associated documentation files (the
25 * "Software"), to deal in the Software without restriction, including
26 * without limitation the rights to use, copy, modify, merge, publish,
27 * distribute, sublicense, and/or sell copies of the Software, and to
28 * permit persons to whom the Software is furnished to do so, subject to
29 * the following conditions:
30 *
31 * The above copyright notice and this permission notice shall be
32 * included in all copies or substantial portions of the Software.
33 *
34 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
35 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
36 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
37 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
38 * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
39 * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
40 * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
41 *
42 * Contributor(s):
43 * siefkenj, ahwolf, rickygu, Midnith, saintclair, eaparango,
44 * kim3er, mfo, alnorth, Flamenco
45 */
46  
47 /**
48 * Creates new jsPDF document object instance.
49 *
50 * @class
51 * @param orientation One of "portrait" or "landscape" (or shortcuts "p" (Default), "l")
52 * @param unit Measurement unit to be used when coordinates are specified.
53 * One of "pt" (points), "mm" (Default), "cm", "in"
54 * @param format One of 'pageFormats' as shown below, default: a4
55 * @returns {jsPDF}
56 * @name jsPDF
57 */
58 var jsPDF = (function(global) {
59 'use strict';
60 var pdfVersion = '1.3',
61 pageFormats = { // Size in pt of various paper formats
62 'a0' : [2383.94, 3370.39], 'a1' : [1683.78, 2383.94],
63 'a2' : [1190.55, 1683.78], 'a3' : [ 841.89, 1190.55],
64 'a4' : [ 595.28, 841.89], 'a5' : [ 419.53, 595.28],
65 'a6' : [ 297.64, 419.53], 'a7' : [ 209.76, 297.64],
66 'a8' : [ 147.40, 209.76], 'a9' : [ 104.88, 147.40],
67 'a10' : [ 73.70, 104.88], 'b0' : [2834.65, 4008.19],
68 'b1' : [2004.09, 2834.65], 'b2' : [1417.32, 2004.09],
69 'b3' : [1000.63, 1417.32], 'b4' : [ 708.66, 1000.63],
70 'b5' : [ 498.90, 708.66], 'b6' : [ 354.33, 498.90],
71 'b7' : [ 249.45, 354.33], 'b8' : [ 175.75, 249.45],
72 'b9' : [ 124.72, 175.75], 'b10' : [ 87.87, 124.72],
73 'c0' : [2599.37, 3676.54], 'c1' : [1836.85, 2599.37],
74 'c2' : [1298.27, 1836.85], 'c3' : [ 918.43, 1298.27],
75 'c4' : [ 649.13, 918.43], 'c5' : [ 459.21, 649.13],
76 'c6' : [ 323.15, 459.21], 'c7' : [ 229.61, 323.15],
77 'c8' : [ 161.57, 229.61], 'c9' : [ 113.39, 161.57],
78 'c10' : [ 79.37, 113.39], 'dl' : [ 311.81, 623.62],
79 'letter' : [612, 792],
80 'government-letter' : [576, 756],
81 'legal' : [612, 1008],
82 'junior-legal' : [576, 360],
83 'ledger' : [1224, 792],
84 'tabloid' : [792, 1224],
85 'credit-card' : [153, 243]
86 };
87  
88 /**
89 * jsPDF's Internal PubSub Implementation.
90 * See mrrio.github.io/jsPDF/doc/symbols/PubSub.html
91 * Backward compatible rewritten on 2014 by
92 * Diego Casorran, https://github.com/diegocr
93 *
94 * @class
95 * @name PubSub
96 */
97 function PubSub(context) {
98 var topics = {};
99  
100 this.subscribe = function(topic, callback, once) {
101 if(typeof callback !== 'function') {
102 return false;
103 }
104  
105 if(!topics.hasOwnProperty(topic)) {
106 topics[topic] = {};
107 }
108  
109 var id = Math.random().toString(35);
110 topics[topic][id] = [callback,!!once];
111  
112 return id;
113 };
114  
115 this.unsubscribe = function(token) {
116 for(var topic in topics) {
117 if(topics[topic][token]) {
118 delete topics[topic][token];
119 return true;
120 }
121 }
122 return false;
123 };
124  
125 this.publish = function(topic) {
126 if(topics.hasOwnProperty(topic)) {
127 var args = Array.prototype.slice.call(arguments, 1), idr = [];
128  
129 for(var id in topics[topic]) {
130 var sub = topics[topic][id];
131 try {
132 sub[0].apply(context, args);
133 } catch(ex) {
134 if(global.console) {
135 console.error('jsPDF PubSub Error', ex.message, ex);
136 }
137 }
138 if(sub[1]) idr.push(id);
139 }
140 if(idr.length) idr.forEach(this.unsubscribe);
141 }
142 };
143 }
144  
145 /**
146 * @constructor
147 * @private
148 */
149 function jsPDF(orientation, unit, format, compressPdf) {
150 var options = {};
151  
152 if (typeof orientation === 'object') {
153 options = orientation;
154  
155 orientation = options.orientation;
156 unit = options.unit || unit;
157 format = options.format || format;
158 compressPdf = options.compress || options.compressPdf || compressPdf;
159 }
160  
161 // Default options
162 unit = unit || 'mm';
163 format = format || 'a4';
164 orientation = ('' + (orientation || 'P')).toLowerCase();
165  
166 var format_as_string = ('' + format).toLowerCase(),
167 compress = !!compressPdf && typeof Uint8Array === 'function',
168 textColor = options.textColor || '0 g',
169 drawColor = options.drawColor || '0 G',
170 activeFontSize = options.fontSize || 16,
171 lineHeightProportion = options.lineHeight || 1.15,
172 lineWidth = options.lineWidth || 0.200025, // 2mm
173 objectNumber = 2, // 'n' Current object number
174 outToPages = !1, // switches where out() prints. outToPages true = push to pages obj. outToPages false = doc builder content
175 offsets = [], // List of offsets. Activated and reset by buildDocument(). Pupulated by various calls buildDocument makes.
176 fonts = {}, // collection of font objects, where key is fontKey - a dynamically created label for a given font.
177 fontmap = {}, // mapping structure fontName > fontStyle > font key - performance layer. See addFont()
178 activeFontKey, // will be string representing the KEY of the font as combination of fontName + fontStyle
179  
180 fontStateStack = [], //
181  
182 patterns = {}, // collection of pattern objects
183 patternMap = {}, // see fonts
184  
185 gStates = {}, // collection of graphic state objects
186 gStatesMap = {}, // see fonts
187 activeGState = null,
188  
189 k, // Scale factor
190 tmp,
191 page = 0,
192 currentPage,
193 pages = [],
194 pagesContext = [], // same index as pages and pagedim
195 pagedim = [],
196 content = [],
197 additionalObjects = [],
198 lineCapID = 0,
199 lineJoinID = 0,
200 content_length = 0,
201  
202 renderTargets = {},
203 renderTargetMap = {},
204 renderTargetStack = [],
205  
206 pageX, pageY, pageMatrix, // only used for FormObjects
207 pageWidth,
208 pageHeight,
209 pageMode,
210 zoomMode,
211 layoutMode,
212 documentProperties = {
213 'title' : '',
214 'subject' : '',
215 'author' : '',
216 'keywords' : '',
217 'creator' : ''
218 },
219 API = {},
220 events = new PubSub(API),
221  
222 /////////////////////
223 // Private functions
224 /////////////////////
225 f2 = function(number) {
226 return number.toFixed(2); // Ie, %.2f
227 },
228 f3 = function(number) {
229 return number.toFixed(3); // Ie, %.3f
230 },
231 padd2 = function(number) {
232 return ('0' + parseInt(number)).slice(-2);
233 },
234 padd2Hex = function (hexString) {
235 var s = "00" + hexString;
236 return s.substr(s.length - 2);
237 },
238 out = function(string) {
239 if (outToPages) {
240 /* set by beginPage */
241 pages[currentPage].push(string);
242 } else {
243 // +1 for '\n' that will be used to join 'content'
244 content_length += string.length + 1;
245 content.push(string);
246 }
247 },
248 newObject = function() {
249 // Begin a new object
250 objectNumber++;
251 offsets[objectNumber] = content_length;
252 out(objectNumber + ' 0 obj');
253 return objectNumber;
254 },
255 // Does not output the object until after the pages have been output.
256 // Returns an object containing the objectId and content.
257 // All pages have been added so the object ID can be estimated to start right after.
258 // This does not modify the current objectNumber; It must be updated after the newObjects are output.
259 newAdditionalObject = function() {
260 var objId = pages.length * 2 + 1;
261 objId += additionalObjects.length;
262 var obj = {objId:objId, content:''};
263 additionalObjects.push(obj);
264 return obj;
265 },
266 // Does not output the object. The caller must call newObjectDeferredBegin(oid) before outputing any data
267 newObjectDeferred = function() {
268 objectNumber++;
269 offsets[objectNumber] = function(){
270 return content_length;
271 };
272 return objectNumber;
273 },
274 newObjectDeferredBegin = function(oid) {
275 offsets[oid] = content_length;
276 },
277 putStream = function(str) {
278 out('stream');
279 out(str);
280 out('endstream');
281 },
282 putPages = function() {
283 var n,p,arr,i,deflater,adler32,adler32cs,wPt,hPt;
284  
285 adler32cs = global.adler32cs || jsPDF.adler32cs;
286 if (compress && typeof adler32cs === 'undefined') {
287 compress = false;
288 }
289  
290 // outToPages = false as set in endDocument(). out() writes to content.
291  
292 for (n = 1; n <= page; n++) {
293 newObject();
294 wPt = (pageWidth = pagedim[n].width) * k;
295 hPt = (pageHeight = pagedim[n].height) * k;
296 out('<</Type /Page');
297 out('/Parent 1 0 R');
298 out('/Resources 2 0 R');
299 out('/MediaBox [0 0 ' + f2(wPt) + ' ' + f2(hPt) + ']');
300 // Added for annotation plugin
301 events.publish('putPage', {pageNumber: n, page: pages[n]});
302 out('/Contents ' + (objectNumber + 1) + ' 0 R');
303 out('>>');
304 out('endobj');
305  
306 // Page content
307 p = pages[n].join('\n');
308  
309 // prepend global change of basis matrix
310 // (Now, instead of converting every coordinate to the pdf coordinate system, we apply a matrix
311 // that does this job for us (however, texts, images and similar objects must be drawn bottom up))
312 p = new Matrix(k, 0, 0, -k, 0, pageHeight).toString() + " cm\n" + p;
313  
314 newObject();
315 if (compress) {
316 arr = [];
317 i = p.length;
318 while(i--) {
319 arr[i] = p.charCodeAt(i);
320 }
321 adler32 = adler32cs.from(p);
322 deflater = new Deflater(6);
323 deflater.append(new Uint8Array(arr));
324 p = deflater.flush();
325 arr = new Uint8Array(p.length + 6);
326 arr.set(new Uint8Array([120, 156]));
327 arr.set(p, 2);
328 arr.set(new Uint8Array([adler32 & 0xFF, (adler32 >> 8) & 0xFF, (adler32 >> 16) & 0xFF, (adler32 >> 24) & 0xFF]), p.length+2);
329 p = String.fromCharCode.apply(null, arr);
330 out('<</Length ' + p.length + ' /Filter [/FlateDecode]>>');
331 } else {
332 out('<</Length ' + p.length + '>>');
333 }
334 putStream(p);
335 out('endobj');
336 }
337 offsets[1] = content_length;
338 out('1 0 obj');
339 out('<</Type /Pages');
340 var kids = '/Kids [';
341 for (i = 0; i < page; i++) {
342 kids += (3 + 2 * i) + ' 0 R ';
343 }
344 out(kids + ']');
345 out('/Count ' + page);
346 out('>>');
347 out('endobj');
348 events.publish('postPutPages');
349 },
350 putFont = function(font) {
351 font.objectNumber = newObject();
352 out('<</BaseFont/' + font.PostScriptName + '/Type/Font');
353 if (typeof font.encoding === 'string') {
354 out('/Encoding/' + font.encoding);
355 }
356 out('/Subtype/Type1>>');
357 out('endobj');
358 },
359 putFonts = function() {
360 for (var fontKey in fonts) {
361 if (fonts.hasOwnProperty(fontKey)) {
362 putFont(fonts[fontKey]);
363 }
364 }
365 },
366 putXObject = function (xObject) {
367 xObject.objectNumber = newObject();
368 out("<<");
369 out("/Type /XObject");
370 out("/Subtype /Form");
371 out("/BBox [" + [
372 f2(xObject.x),
373 f2(xObject.y),
374 f2(xObject.x + xObject.width),
375 f2(xObject.y + xObject.height)
376 ].join(" ") + "]");
377 out("/Matrix [" + xObject.matrix.toString() + "]");
378 // TODO: /Resources
379  
380 var p = xObject.pages[1].join("\n");
381 out("/Length " + p.length);
382  
383 out(">>");
384 putStream(p);
385 out("endobj");
386 },
387 putXObjects = function () {
388 for (var xObjectKey in renderTargets) {
389 if (renderTargets.hasOwnProperty(xObjectKey)) {
390 putXObject(renderTargets[xObjectKey]);
391 }
392 }
393 },
394  
395 interpolateAndEncodeRGBStream = function (colors, numberSamples) {
396 var tValues = [];
397 var t;
398 var dT = 1.0 / (numberSamples - 1);
399 for (t = 0.0; t < 1.0; t += dT) {
400 < 1.0; t += dT) { tValues.push(t);
401 < 1.0; t += dT) { }
402 < 1.0; t += dT) { tValues.push(1.0);
403  
404 < 1.0; t += dT) { // add first and last control point if not present
405 < 1.0; t += dT) { if (colors[0].offset != 0.0) {
406 < 1.0; t += dT) { var c0 = {
407 < 1.0; t += dT) { offset: 0.0,
408 < 1.0; t += dT) { color: colors[0].color
409 < 1.0; t += dT) { };
410 < 1.0; t += dT) { colors.unshift(c0)
411 < 1.0; t += dT) { }
412 < 1.0; t += dT) { if (colors[colors.length - 1].offset != 1.0) {
413 < 1.0; t += dT) { var c1 = {
414 < 1.0; t += dT) { offset: 1.0,
415 < 1.0; t += dT) { color: colors[colors.length - 1].color
416 < 1.0; t += dT) { };
417 < 1.0; t += dT) { colors.push(c1);
418 < 1.0; t += dT) { }
419  
420 < 1.0; t += dT) { var out = "";
421 < 1.0; t += dT) { var index = 0;
422  
423 < 1.0; t += dT) { for (var i = 0; i < tValues.length; i++) {
424 < 1.0; t += dT) {< tValues.length; i++) { t = tValues[i];
425  
426 < 1.0; t += dT) {< tValues.length; i++) { while (t > colors[index + 1].offset)
427 < 1.0; t += dT) {< tValues.length; i++) { index++;
428  
429 < 1.0; t += dT) {< tValues.length; i++) { var a = colors[index].offset;
430 < 1.0; t += dT) {< tValues.length; i++) { var b = colors[index + 1].offset;
431 < 1.0; t += dT) {< tValues.length; i++) { var d = (t - a) / (b - a);
432  
433 < 1.0; t += dT) {< tValues.length; i++) { var aColor = colors[index].color;
434 < 1.0; t += dT) {< tValues.length; i++) { var bColor = colors[index + 1].color;
435  
436 < 1.0; t += dT) {< tValues.length; i++) { out += padd2Hex((Math.round((1 - d) * aColor[0] + d * bColor[0])).toString(16))
437 < 1.0; t += dT) {< tValues.length; i++) { + padd2Hex((Math.round((1 - d) * aColor[1] + d * bColor[1])).toString(16))
438 < 1.0; t += dT) {< tValues.length; i++) { + padd2Hex((Math.round((1 - d) * aColor[2] + d * bColor[2])).toString(16));
439 < 1.0; t += dT) {< tValues.length; i++) { }
440 < 1.0; t += dT) {< tValues.length; i++) { return out.trim();
441 < 1.0; t += dT) {< tValues.length; i++) { },
442 < 1.0; t += dT) {< tValues.length; i++) { putShadingPattern = function (pattern, numberSamples) {
443 < 1.0; t += dT) {< tValues.length; i++) { /*
444 < 1.0; t += dT) {< tValues.length; i++) { Axial patterns shade between the two points specified in coords, radial patterns between the inner
445 < 1.0; t += dT) {< tValues.length; i++) { and outer circle.
446  
447 < 1.0; t += dT) {< tValues.length; i++) { The user can specify an array (colors) that maps t-Values in [0, 1] to RGB colors. These are now
448 < 1.0; t += dT) {< tValues.length; i++) { interpolated to equidistant samples and written to pdf as a sample (type 0) function.
449 < 1.0; t += dT) {< tValues.length; i++) { */
450  
451 < 1.0; t += dT) {< tValues.length; i++) { // The number of color samples that should be used to describe the shading.
452 < 1.0; t += dT) {< tValues.length; i++) { // The higher, the more accurate the gradient will be.
453 < 1.0; t += dT) {< tValues.length; i++) { numberSamples || (numberSamples = 21);
454  
455 < 1.0; t += dT) {< tValues.length; i++) { var funcObjectNumber = newObject();
456 < 1.0; t += dT) {< tValues.length; i++) { var stream = interpolateAndEncodeRGBStream(pattern.colors, numberSamples);
457 < 1.0; t += dT) {< tValues.length; i++) { out("<< /FunctionType 0");
458 < 1.0; t += dT) {< tValues.length; i++) { out("/Domain [0.0 1.0]");
459 < 1.0; t += dT) {< tValues.length; i++) { out("/Size [" + numberSamples + "]");
460 < 1.0; t += dT) {< tValues.length; i++) { out("/BitsPerSample 8");
461 < 1.0; t += dT) {< tValues.length; i++) { out("/Range [0.0 1.0 0.0 1.0 0.0 1.0]");
462 < 1.0; t += dT) {< tValues.length; i++) { out("/Decode [0.0 1.0 0.0 1.0 0.0 1.0]");
463 < 1.0; t += dT) {< tValues.length; i++) { out("/Length " + stream.length);
464 < 1.0; t += dT) {< tValues.length; i++) { // The stream is Hex encoded
465 < 1.0; t += dT) {< tValues.length; i++) { out("/Filter /ASCIIHexDecode");
466 < 1.0; t += dT) {< tValues.length; i++) { out(">>");
467 < 1.0; t += dT) {< tValues.length; i++) { putStream(stream);
468 < 1.0; t += dT) {< tValues.length; i++) { out("endobj");
469  
470 < 1.0; t += dT) {< tValues.length; i++) { pattern.objectNumber = newObject();
471 < 1.0; t += dT) {< tValues.length; i++) { out("<< /ShadingType " + pattern.type);
472 < 1.0; t += dT) {< tValues.length; i++) { out("/ColorSpace /DeviceRGB");
473  
474 < 1.0; t += dT) {< tValues.length; i++) { var coords = "/Coords ["
475 < 1.0; t += dT) {< tValues.length; i++) { + f3(parseFloat(pattern.coords[0])) + " "// x1
476 < 1.0; t += dT) {< tValues.length; i++) { + f3(parseFloat(pattern.coords[1])) + " "; // y1
477 < 1.0; t += dT) {< tValues.length; i++) { if (pattern.type === 2) {
478 < 1.0; t += dT) {< tValues.length; i++) { // axial
479 < 1.0; t += dT) {< tValues.length; i++) { coords += f3(parseFloat(pattern.coords[2])) + " " // x2
480 < 1.0; t += dT) {< tValues.length; i++) { + f3(parseFloat(pattern.coords[3])); // y2
481 < 1.0; t += dT) {< tValues.length; i++) { } else {
482 < 1.0; t += dT) {< tValues.length; i++) { // radial
483 < 1.0; t += dT) {< tValues.length; i++) { coords += f3(parseFloat(pattern.coords[2])) + " "// r1
484 < 1.0; t += dT) {< tValues.length; i++) { + f3(parseFloat(pattern.coords[3])) + " " // x2
485 < 1.0; t += dT) {< tValues.length; i++) { + f3(parseFloat(pattern.coords[4])) + " " // y2
486 < 1.0; t += dT) {< tValues.length; i++) { + f3(parseFloat(pattern.coords[5])); // r2
487 < 1.0; t += dT) {< tValues.length; i++) { }
488 < 1.0; t += dT) {< tValues.length; i++) { coords += "]";
489 < 1.0; t += dT) {< tValues.length; i++) { out(coords);
490  
491 < 1.0; t += dT) {< tValues.length; i++) { if (pattern.matrix) {
492 < 1.0; t += dT) {< tValues.length; i++) { out("/Matrix [" + pattern.matrix.toString() + "]");
493 < 1.0; t += dT) {< tValues.length; i++) { }
494  
495 < 1.0; t += dT) {< tValues.length; i++) { out("/Function " + funcObjectNumber + " 0 R");
496 < 1.0; t += dT) {< tValues.length; i++) { out("/Extend [true true]");
497 < 1.0; t += dT) {< tValues.length; i++) { out(">>");
498 < 1.0; t += dT) {< tValues.length; i++) { out("endobj");
499 < 1.0; t += dT) {< tValues.length; i++) { },
500 < 1.0; t += dT) {< tValues.length; i++) { putTilingPattern = function (pattern) {
501 < 1.0; t += dT) {< tValues.length; i++) { var resourcesObjectNumber = newObject();
502 < 1.0; t += dT) {< tValues.length; i++) { out("<<");
503 < 1.0; t += dT) {< tValues.length; i++) { putResourceDictionary();
504 < 1.0; t += dT) {< tValues.length; i++) { out(">>");
505 < 1.0; t += dT) {< tValues.length; i++) { out("endobj");
506  
507 < 1.0; t += dT) {< tValues.length; i++) { pattern.objectNumber = newObject();
508 < 1.0; t += dT) {< tValues.length; i++) { out("<< /Type /Pattern");
509 < 1.0; t += dT) {< tValues.length; i++) { out("/PatternType 1"); // tiling pattern
510 < 1.0; t += dT) {< tValues.length; i++) { out("/PaintType 1"); // colored tiling pattern
511 < 1.0; t += dT) {< tValues.length; i++) { out("/TilingType 1"); // constant spacing
512 < 1.0; t += dT) {< tValues.length; i++) { out("/BBox [" + pattern.boundingBox.map(f3).join(" ") + "]");
513 < 1.0; t += dT) {< tValues.length; i++) { out("/XStep " + f3(pattern.xStep));
514 < 1.0; t += dT) {< tValues.length; i++) { out("/YStep " + f3(pattern.yStep));
515 < 1.0; t += dT) {< tValues.length; i++) { out("/Length " + pattern.stream.length);
516 < 1.0; t += dT) {< tValues.length; i++) { out("/Resources " + resourcesObjectNumber + " 0 R"); // TODO: resources
517 < 1.0; t += dT) {< tValues.length; i++) { pattern.matrix && out("/Matrix [" + pattern.matrix.toString() + "]");
518  
519 < 1.0; t += dT) {< tValues.length; i++) { out(">>");
520  
521 < 1.0; t += dT) {< tValues.length; i++) { putStream(pattern.stream);
522  
523 < 1.0; t += dT) {< tValues.length; i++) { out("endobj");
524 < 1.0; t += dT) {< tValues.length; i++) { },
525 < 1.0; t += dT) {< tValues.length; i++) { putPatterns = function () {
526 < 1.0; t += dT) {< tValues.length; i++) { var patternKey;
527 < 1.0; t += dT) {< tValues.length; i++) { for (patternKey in patterns) {
528 < 1.0; t += dT) {< tValues.length; i++) { if (patterns.hasOwnProperty(patternKey)) {
529 < 1.0; t += dT) {< tValues.length; i++) { if (patterns[patternKey] instanceof API.ShadingPattern) {
530 < 1.0; t += dT) {< tValues.length; i++) { putShadingPattern(patterns[patternKey]);
531 < 1.0; t += dT) {< tValues.length; i++) { } else if (patterns[patternKey] instanceof API.TilingPattern) {
532 < 1.0; t += dT) {< tValues.length; i++) { putTilingPattern(patterns[patternKey]);
533 < 1.0; t += dT) {< tValues.length; i++) { }
534 < 1.0; t += dT) {< tValues.length; i++) { }
535 < 1.0; t += dT) {< tValues.length; i++) { }
536 < 1.0; t += dT) {< tValues.length; i++) { },
537  
538 < 1.0; t += dT) {< tValues.length; i++) { putGState = function (gState) {
539 < 1.0; t += dT) {< tValues.length; i++) { gState.objectNumber = newObject();
540 < 1.0; t += dT) {< tValues.length; i++) { out("<<");
541 < 1.0; t += dT) {< tValues.length; i++) { for (var p in gState) {
542 < 1.0; t += dT) {< tValues.length; i++) { switch (p) {
543 < 1.0; t += dT) {< tValues.length; i++) { case "opacity":
544 < 1.0; t += dT) {< tValues.length; i++) { out("/ca " + f2(gState[p]));
545 < 1.0; t += dT) {< tValues.length; i++) { break;
546 < 1.0; t += dT) {< tValues.length; i++) { }
547 < 1.0; t += dT) {< tValues.length; i++) { }
548 < 1.0; t += dT) {< tValues.length; i++) { out(">>");
549 < 1.0; t += dT) {< tValues.length; i++) { out("endobj");
550 < 1.0; t += dT) {< tValues.length; i++) { },
551 < 1.0; t += dT) {< tValues.length; i++) { putGStates = function () {
552 < 1.0; t += dT) {< tValues.length; i++) { var gStateKey;
553 < 1.0; t += dT) {< tValues.length; i++) { for (gStateKey in gStates) {
554 < 1.0; t += dT) {< tValues.length; i++) { if (gStates.hasOwnProperty(gStateKey)) {
555 < 1.0; t += dT) {< tValues.length; i++) { putGState(gStates[gStateKey]);
556 < 1.0; t += dT) {< tValues.length; i++) { }
557 < 1.0; t += dT) {< tValues.length; i++) { }
558 < 1.0; t += dT) {< tValues.length; i++) { },
559  
560 < 1.0; t += dT) {< tValues.length; i++) { putXobjectDict = function () {
561 < 1.0; t += dT) {< tValues.length; i++) { for (var xObjectKey in renderTargets) {
562 < 1.0; t += dT) {< tValues.length; i++) { if (renderTargets.hasOwnProperty(xObjectKey) && renderTargets[xObjectKey].objectNumber >= 0) {
563 < 1.0; t += dT) {< tValues.length; i++) { out("/" + xObjectKey + " " + renderTargets[xObjectKey].objectNumber + " 0 R");
564 < 1.0; t += dT) {< tValues.length; i++) { }
565 < 1.0; t += dT) {< tValues.length; i++) { }
566  
567 < 1.0; t += dT) {< tValues.length; i++) { events.publish('putXobjectDict');
568 < 1.0; t += dT) {< tValues.length; i++) { },
569  
570 < 1.0; t += dT) {< tValues.length; i++) { putShadingPatternDict = function () {
571 < 1.0; t += dT) {< tValues.length; i++) { for (var patternKey in patterns) {
572 < 1.0; t += dT) {< tValues.length; i++) { if (patterns.hasOwnProperty(patternKey) && patterns[patternKey] instanceof API.ShadingPattern && patterns[patternKey].objectNumber >= 0) {
573 < 1.0; t += dT) {< tValues.length; i++) { out("/" + patternKey + " " + patterns[patternKey].objectNumber + " 0 R");
574 < 1.0; t += dT) {< tValues.length; i++) { }
575 < 1.0; t += dT) {< tValues.length; i++) { }
576  
577 < 1.0; t += dT) {< tValues.length; i++) { events.publish("putShadingPatternDict");
578 < 1.0; t += dT) {< tValues.length; i++) { },
579  
580 < 1.0; t += dT) {< tValues.length; i++) { putTilingPatternDict = function () {
581 < 1.0; t += dT) {< tValues.length; i++) { for (var patternKey in patterns) {
582 < 1.0; t += dT) {< tValues.length; i++) { if (patterns.hasOwnProperty(patternKey) && patterns[patternKey] instanceof API.TilingPattern && patterns[patternKey].objectNumber >= 0) {
583 < 1.0; t += dT) {< tValues.length; i++) { out("/" + patternKey + " " + patterns[patternKey].objectNumber + " 0 R");
584 < 1.0; t += dT) {< tValues.length; i++) { }
585 < 1.0; t += dT) {< tValues.length; i++) { }
586  
587 < 1.0; t += dT) {< tValues.length; i++) { events.publish("putTilingPatternDict");
588 < 1.0; t += dT) {< tValues.length; i++) { },
589  
590 < 1.0; t += dT) {< tValues.length; i++) { putGStatesDict = function () {
591 < 1.0; t += dT) {< tValues.length; i++) { var gStateKey;
592 < 1.0; t += dT) {< tValues.length; i++) { for (gStateKey in gStates) {
593 < 1.0; t += dT) {< tValues.length; i++) { if (gStates.hasOwnProperty(gStateKey) && gStates[gStateKey].objectNumber >= 0) {
594 < 1.0; t += dT) {< tValues.length; i++) { out("/" + gStateKey + " " + gStates[gStateKey].objectNumber + " 0 R");
595 < 1.0; t += dT) {< tValues.length; i++) { }
596 < 1.0; t += dT) {< tValues.length; i++) { }
597  
598 < 1.0; t += dT) {< tValues.length; i++) { events.publish("putGStateDict");
599 < 1.0; t += dT) {< tValues.length; i++) { },
600 < 1.0; t += dT) {< tValues.length; i++) { putResourceDictionary = function() {
601 < 1.0; t += dT) {< tValues.length; i++) { out('/ProcSet [/PDF /Text /ImageB /ImageC /ImageI]');
602 < 1.0; t += dT) {< tValues.length; i++) { out('/Font <<');
603 < 1.0; t += dT) {< tValues.length; i++) { // Do this for each font, the '1' bit is the index of the font
604 < 1.0; t += dT) {< tValues.length; i++) { for (var fontKey in fonts) {
605 < 1.0; t += dT) {< tValues.length; i++) { if (fonts.hasOwnProperty(fontKey)) {
606 < 1.0; t += dT) {< tValues.length; i++) { out('/' + fontKey + ' ' + fonts[fontKey].objectNumber + ' 0 R');
607 < 1.0; t += dT) {< tValues.length; i++) { }
608 < 1.0; t += dT) {< tValues.length; i++) { }
609 < 1.0; t += dT) {< tValues.length; i++) { out('>>');
610  
611 < 1.0; t += dT) {< tValues.length; i++) { out("/Shading <<");
612 < 1.0; t += dT) {< tValues.length; i++) { putShadingPatternDict();
613 < 1.0; t += dT) {< tValues.length; i++) { out(">>");
614  
615 < 1.0; t += dT) {< tValues.length; i++) { out("/Pattern <<");
616 < 1.0; t += dT) {< tValues.length; i++) { putTilingPatternDict();
617 < 1.0; t += dT) {< tValues.length; i++) { out(">>");
618  
619 < 1.0; t += dT) {< tValues.length; i++) { out("/ExtGState <<");
620 < 1.0; t += dT) {< tValues.length; i++) { putGStatesDict();
621 < 1.0; t += dT) {< tValues.length; i++) { out('>>');
622  
623 < 1.0; t += dT) {< tValues.length; i++) { out('/XObject <<');
624 < 1.0; t += dT) {< tValues.length; i++) { putXobjectDict();
625 < 1.0; t += dT) {< tValues.length; i++) { out('>>');
626 < 1.0; t += dT) {< tValues.length; i++) { },
627 < 1.0; t += dT) {< tValues.length; i++) { putResources = function() {
628 < 1.0; t += dT) {< tValues.length; i++) { putFonts();
629 < 1.0; t += dT) {< tValues.length; i++) { putGStates();
630 < 1.0; t += dT) {< tValues.length; i++) { putXObjects();
631 < 1.0; t += dT) {< tValues.length; i++) { putPatterns();
632 < 1.0; t += dT) {< tValues.length; i++) { events.publish('putResources');
633 < 1.0; t += dT) {< tValues.length; i++) { // Resource dictionary
634 < 1.0; t += dT) {< tValues.length; i++) { offsets[2] = content_length;
635 < 1.0; t += dT) {< tValues.length; i++) { out('2 0 obj');
636 < 1.0; t += dT) {< tValues.length; i++) { out('<<');
637 < 1.0; t += dT) {< tValues.length; i++) { putResourceDictionary();
638 < 1.0; t += dT) {< tValues.length; i++) { out('>>');
639 < 1.0; t += dT) {< tValues.length; i++) { out('endobj');
640 < 1.0; t += dT) {< tValues.length; i++) { events.publish('postPutResources');
641 < 1.0; t += dT) {< tValues.length; i++) { },
642 < 1.0; t += dT) {< tValues.length; i++) { putAdditionalObjects = function() {
643 < 1.0; t += dT) {< tValues.length; i++) { events.publish('putAdditionalObjects');
644 < 1.0; t += dT) {< tValues.length; i++) { for (var i=0; i<additionalObjects.length; i++){
645 < 1.0; t += dT) {< tValues.length; i++) { var obj = additionalObjects[i];
646 < 1.0; t += dT) {< tValues.length; i++) { offsets[obj.objId] = content_length;
647 < 1.0; t += dT) {< tValues.length; i++) { out( obj.objId + ' 0 obj');
648 < 1.0; t += dT) {< tValues.length; i++) { out(obj.content);
649 < 1.0; t += dT) {< tValues.length; i++) { out('endobj');
650 < 1.0; t += dT) {< tValues.length; i++) { }
651 < 1.0; t += dT) {< tValues.length; i++) { objectNumber += additionalObjects.length;
652 < 1.0; t += dT) {< tValues.length; i++) { events.publish('postPutAdditionalObjects');
653 < 1.0; t += dT) {< tValues.length; i++) { },
654 < 1.0; t += dT) {< tValues.length; i++) { addToFontDictionary = function(fontKey, fontName, fontStyle) {
655 < 1.0; t += dT) {< tValues.length; i++) { // this is mapping structure for quick font key lookup.
656 < 1.0; t += dT) {< tValues.length; i++) { // returns the KEY of the font (ex: "F1") for a given
657 < 1.0; t += dT) {< tValues.length; i++) { // pair of font name and type (ex: "Arial". "Italic")
658 < 1.0; t += dT) {< tValues.length; i++) { if (!fontmap.hasOwnProperty(fontName)) {
659 < 1.0; t += dT) {< tValues.length; i++) { fontmap[fontName] = {};
660 < 1.0; t += dT) {< tValues.length; i++) { }
661 < 1.0; t += dT) {< tValues.length; i++) { fontmap[fontName][fontStyle] = fontKey;
662 < 1.0; t += dT) {< tValues.length; i++) { },
663 < 1.0; t += dT) {< tValues.length; i++) { /**
664 < 1.0; t += dT) {< tValues.length; i++) { * FontObject describes a particular font as member of an instnace of jsPDF
665 < 1.0; t += dT) {< tValues.length; i++) { *
666 < 1.0; t += dT) {< tValues.length; i++) { * It's a collection of properties like 'id' (to be used in PDF stream),
667 < 1.0; t += dT) {< tValues.length; i++) { * 'fontName' (font's family name), 'fontStyle' (font's style variant label)
668 < 1.0; t += dT) {< tValues.length; i++) { *
669 < 1.0; t += dT) {< tValues.length; i++) { * @public
670 < 1.0; t += dT) {< tValues.length; i++) { * @property id {String} PDF-document-instance-specific label assinged to the font.
671 < 1.0; t += dT) {< tValues.length; i++) { * @property PostScriptName {String} PDF specification full name for the font
672 < 1.0; t += dT) {< tValues.length; i++) { * @property encoding {Object} Encoding_name-to-Font_metrics_object mapping.
673 < 1.0; t += dT) {< tValues.length; i++) { * @name FontObject
674 < 1.0; t += dT) {< tValues.length; i++) { */
675 < 1.0; t += dT) {< tValues.length; i++) { addFont = function(PostScriptName, fontName, fontStyle, encoding) {
676 < 1.0; t += dT) {< tValues.length; i++) { var fontKey = 'F' + (Object.keys(fonts).length + 1).toString(10),
677 < 1.0; t += dT) {< tValues.length; i++) { // This is FontObject
678 < 1.0; t += dT) {< tValues.length; i++) { font = fonts[fontKey] = {
679 < 1.0; t += dT) {< tValues.length; i++) { 'id' : fontKey,
680 < 1.0; t += dT) {< tValues.length; i++) { 'PostScriptName' : PostScriptName,
681 < 1.0; t += dT) {< tValues.length; i++) { 'fontName' : fontName,
682 < 1.0; t += dT) {< tValues.length; i++) { 'fontStyle' : fontStyle,
683 < 1.0; t += dT) {< tValues.length; i++) { 'encoding' : encoding,
684 < 1.0; t += dT) {< tValues.length; i++) { 'metadata' : {}
685 < 1.0; t += dT) {< tValues.length; i++) { };
686 < 1.0; t += dT) {< tValues.length; i++) { addToFontDictionary(fontKey, fontName, fontStyle);
687 < 1.0; t += dT) {< tValues.length; i++) { events.publish('addFont', font);
688  
689 < 1.0; t += dT) {< tValues.length; i++) { return fontKey;
690 < 1.0; t += dT) {< tValues.length; i++) { },
691 < 1.0; t += dT) {< tValues.length; i++) { addFonts = function() {
692  
693 < 1.0; t += dT) {< tValues.length; i++) { var HELVETICA = "helvetica",
694 < 1.0; t += dT) {< tValues.length; i++) { TIMES = "times",
695 < 1.0; t += dT) {< tValues.length; i++) { COURIER = "courier",
696 < 1.0; t += dT) {< tValues.length; i++) { NORMAL = "normal",
697 < 1.0; t += dT) {< tValues.length; i++) { BOLD = "bold",
698 < 1.0; t += dT) {< tValues.length; i++) { ITALIC = "italic",
699 < 1.0; t += dT) {< tValues.length; i++) { BOLD_ITALIC = "bolditalic",
700 < 1.0; t += dT) {< tValues.length; i++) { encoding = 'StandardEncoding',
701 < 1.0; t += dT) {< tValues.length; i++) { ZAPF = "zapfdingbats",
702 < 1.0; t += dT) {< tValues.length; i++) { standardFonts = [
703 < 1.0; t += dT) {< tValues.length; i++) { ['Helvetica', HELVETICA, NORMAL],
704 < 1.0; t += dT) {< tValues.length; i++) { ['Helvetica-Bold', HELVETICA, BOLD],
705 < 1.0; t += dT) {< tValues.length; i++) { ['Helvetica-Oblique', HELVETICA, ITALIC],
706 < 1.0; t += dT) {< tValues.length; i++) { ['Helvetica-BoldOblique', HELVETICA, BOLD_ITALIC],
707 < 1.0; t += dT) {< tValues.length; i++) { ['Courier', COURIER, NORMAL],
708 < 1.0; t += dT) {< tValues.length; i++) { ['Courier-Bold', COURIER, BOLD],
709 < 1.0; t += dT) {< tValues.length; i++) { ['Courier-Oblique', COURIER, ITALIC],
710 < 1.0; t += dT) {< tValues.length; i++) { ['Courier-BoldOblique', COURIER, BOLD_ITALIC],
711 < 1.0; t += dT) {< tValues.length; i++) { ['Times-Roman', TIMES, NORMAL],
712 < 1.0; t += dT) {< tValues.length; i++) { ['Times-Bold', TIMES, BOLD],
713 < 1.0; t += dT) {< tValues.length; i++) { ['Times-Italic', TIMES, ITALIC],
714 < 1.0; t += dT) {< tValues.length; i++) { ['Times-BoldItalic', TIMES, BOLD_ITALIC],
715 < 1.0; t += dT) {< tValues.length; i++) { ['ZapfDingbats',ZAPF ]
716 < 1.0; t += dT) {< tValues.length; i++) { ];
717  
718 < 1.0; t += dT) {< tValues.length; i++) { for (var i = 0, l = standardFonts.length; i < l; i++) {
719 < 1.0; t += dT) {< tValues.length; i++) { var fontKey = addFont(
720 < 1.0; t += dT) {< tValues.length; i++) { standardFonts[i][0],
721 < 1.0; t += dT) {< tValues.length; i++) { standardFonts[i][1],
722 < 1.0; t += dT) {< tValues.length; i++) { standardFonts[i][2],
723 < 1.0; t += dT) {< tValues.length; i++) { encoding);
724  
725 < 1.0; t += dT) {< tValues.length; i++) { // adding aliases for standard fonts, this time matching the capitalization
726 < 1.0; t += dT) {< tValues.length; i++) { var parts = standardFonts[i][0].split('-');
727 < 1.0; t += dT) {< tValues.length; i++) { addToFontDictionary(fontKey, parts[0], parts[1] || '');
728 < 1.0; t += dT) {< tValues.length; i++) { }
729 < 1.0; t += dT) {< tValues.length; i++) { events.publish('addFonts', { fonts : fonts, dictionary : fontmap });
730 < 1.0; t += dT) {< tValues.length; i++) { },
731 < 1.0; t += dT) {< tValues.length; i++) { matrixMult = function (m1, m2) {
732 < 1.0; t += dT) {< tValues.length; i++) { return new Matrix(
733 < 1.0; t += dT) {< tValues.length; i++) { m1.a * m2.a + m1.b * m2.c,
734 < 1.0; t += dT) {< tValues.length; i++) { m1.a * m2.b + m1.b * m2.d,
735 < 1.0; t += dT) {< tValues.length; i++) { m1.c * m2.a + m1.d * m2.c,
736 < 1.0; t += dT) {< tValues.length; i++) { m1.c * m2.b + m1.d * m2.d,
737 < 1.0; t += dT) {< tValues.length; i++) { m1.e * m2.a + m1.f * m2.c + m2.e,
738 < 1.0; t += dT) {< tValues.length; i++) { m1.e * m2.b + m1.f * m2.d + m2.f
739 < 1.0; t += dT) {< tValues.length; i++) { );
740 < 1.0; t += dT) {< tValues.length; i++) { },
741 < 1.0; t += dT) {< tValues.length; i++) { Matrix = function (a, b, c, d, e, f) {
742 < 1.0; t += dT) {< tValues.length; i++) { this.a = a;
743 < 1.0; t += dT) {< tValues.length; i++) { this.b = b;
744 < 1.0; t += dT) {< tValues.length; i++) { this.c = c;
745 < 1.0; t += dT) {< tValues.length; i++) { this.d = d;
746 < 1.0; t += dT) {< tValues.length; i++) { this.e = e;
747 < 1.0; t += dT) {< tValues.length; i++) { this.f = f;
748 < 1.0; t += dT) {< tValues.length; i++) { };
749  
750 < 1.0; t += dT) {< tValues.length; i++) { Matrix.prototype = {
751 < 1.0; t += dT) {< tValues.length; i++) { toString: function () {
752 < 1.0; t += dT) {< tValues.length; i++) { return [
753 < 1.0; t += dT) {< tValues.length; i++) { f3(this.a),
754 < 1.0; t += dT) {< tValues.length; i++) { f3(this.b),
755 < 1.0; t += dT) {< tValues.length; i++) { f3(this.c),
756 < 1.0; t += dT) {< tValues.length; i++) { f3(this.d),
757 < 1.0; t += dT) {< tValues.length; i++) { f3(this.e),
758 < 1.0; t += dT) {< tValues.length; i++) { f3(this.f)
759 < 1.0; t += dT) {< tValues.length; i++) { ].join(" ");
760 < 1.0; t += dT) {< tValues.length; i++) { }
761 < 1.0; t += dT) {< tValues.length; i++) { };
762  
763 < 1.0; t += dT) {< tValues.length; i++) { var unitMatrix = new Matrix(1, 0, 0, 1, 0, 0),
764  
765 < 1.0; t += dT) {< tValues.length; i++) { // Used (1) to save the current stream state to the XObjects stack and (2) to save completed form
766 < 1.0; t += dT) {< tValues.length; i++) { // objects in the xObjects map.
767 < 1.0; t += dT) {< tValues.length; i++) { RenderTarget = function () {
768 < 1.0; t += dT) {< tValues.length; i++) { this.page = page;
769 < 1.0; t += dT) {< tValues.length; i++) { this.currentPage = currentPage;
770 < 1.0; t += dT) {< tValues.length; i++) { this.pages = pages.slice(0);
771 < 1.0; t += dT) {< tValues.length; i++) { this.pagedim = pagedim.slice(0);
772 < 1.0; t += dT) {< tValues.length; i++) { this.pagesContext = pagesContext.slice(0);
773 < 1.0; t += dT) {< tValues.length; i++) { this.x = pageX;
774 < 1.0; t += dT) {< tValues.length; i++) { this.y = pageY;
775 < 1.0; t += dT) {< tValues.length; i++) { this.matrix = pageMatrix;
776 < 1.0; t += dT) {< tValues.length; i++) { this.width = pageWidth;
777 < 1.0; t += dT) {< tValues.length; i++) { this.height = pageHeight;
778  
779 < 1.0; t += dT) {< tValues.length; i++) { this.id = ""; // set by endFormObject()
780 < 1.0; t += dT) {< tValues.length; i++) { this.objectNumber = -1; // will be set by putXObject()
781 < 1.0; t += dT) {< tValues.length; i++) { };
782  
783 < 1.0; t += dT) {< tValues.length; i++) { RenderTarget.prototype = {
784 < 1.0; t += dT) {< tValues.length; i++) { restore: function () {
785 < 1.0; t += dT) {< tValues.length; i++) { page = this.page;
786 < 1.0; t += dT) {< tValues.length; i++) { currentPage = this.currentPage;
787 < 1.0; t += dT) {< tValues.length; i++) { pagesContext = this.pagesContext;
788 < 1.0; t += dT) {< tValues.length; i++) { pagedim = this.pagedim;
789 < 1.0; t += dT) {< tValues.length; i++) { pages = this.pages;
790 < 1.0; t += dT) {< tValues.length; i++) { pageX = this.x;
791 < 1.0; t += dT) {< tValues.length; i++) { pageY = this.y;
792 < 1.0; t += dT) {< tValues.length; i++) { pageMatrix = this.matrix;
793 < 1.0; t += dT) {< tValues.length; i++) { pageWidth = this.width;
794 < 1.0; t += dT) {< tValues.length; i++) { pageHeight = this.height;
795 < 1.0; t += dT) {< tValues.length; i++) { }
796 < 1.0; t += dT) {< tValues.length; i++) { };
797  
798 < 1.0; t += dT) {< tValues.length; i++) { var beginNewRenderTarget = function (x, y, width, height, matrix) {
799 < 1.0; t += dT) {< tValues.length; i++) { // save current state
800 < 1.0; t += dT) {< tValues.length; i++) { renderTargetStack.push(new RenderTarget());
801  
802 < 1.0; t += dT) {< tValues.length; i++) { // clear pages
803 < 1.0; t += dT) {< tValues.length; i++) { page = currentPage = 0;
804 < 1.0; t += dT) {< tValues.length; i++) { pages = [];
805 < 1.0; t += dT) {< tValues.length; i++) { pageX = x;
806 < 1.0; t += dT) {< tValues.length; i++) { pageY = y;
807  
808 < 1.0; t += dT) {< tValues.length; i++) { pageMatrix = matrix;
809  
810 < 1.0; t += dT) {< tValues.length; i++) { beginPage(width, height);
811 < 1.0; t += dT) {< tValues.length; i++) { },
812  
813 < 1.0; t += dT) {< tValues.length; i++) { endFormObject = function (key) {
814 < 1.0; t += dT) {< tValues.length; i++) { // only add it if it is not already present (the keys provided by the user must be unique!)
815 < 1.0; t += dT) {< tValues.length; i++) { if (renderTargetMap[key])
816 < 1.0; t += dT) {< tValues.length; i++) { return;
817  
818 < 1.0; t += dT) {< tValues.length; i++) { // save the created xObject
819 < 1.0; t += dT) {< tValues.length; i++) { var newXObject = new RenderTarget();
820  
821 < 1.0; t += dT) {< tValues.length; i++) { var xObjectId = 'Xo' + (Object.keys(renderTargets).length + 1).toString(10);
822 < 1.0; t += dT) {< tValues.length; i++) { newXObject.id = xObjectId;
823  
824 < 1.0; t += dT) {< tValues.length; i++) { renderTargetMap[key] = xObjectId;
825 < 1.0; t += dT) {< tValues.length; i++) { renderTargets[xObjectId] = newXObject;
826  
827 < 1.0; t += dT) {< tValues.length; i++) { events.publish('addFormObject', newXObject);
828  
829 < 1.0; t += dT) {< tValues.length; i++) { // restore state from stack
830 < 1.0; t += dT) {< tValues.length; i++) { renderTargetStack.pop().restore();
831 < 1.0; t += dT) {< tValues.length; i++) { },
832  
833 < 1.0; t += dT) {< tValues.length; i++) { /**
834 < 1.0; t += dT) {< tValues.length; i++) { * Adds a new pattern for later use.
835 < 1.0; t += dT) {< tValues.length; i++) { * @param {String} key The key by it can be referenced later. The keys must be unique!
836 < 1.0; t += dT) {< tValues.length; i++) { * @param {API.Pattern} pattern The pattern
837 < 1.0; t += dT) {< tValues.length; i++) { */
838 < 1.0; t += dT) {< tValues.length; i++) { addPattern = function (key, pattern) {
839 < 1.0; t += dT) {< tValues.length; i++) { // only add it if it is not already present (the keys provided by the user must be unique!)
840 < 1.0; t += dT) {< tValues.length; i++) { if (patternMap[key])
841 < 1.0; t += dT) {< tValues.length; i++) { return;
842  
843 < 1.0; t += dT) {< tValues.length; i++) { var prefix = pattern instanceof API.ShadingPattern ? "Sh" : "P";
844 < 1.0; t += dT) {< tValues.length; i++) { var patternKey = prefix + (Object.keys(patterns).length + 1).toString(10);
845 < 1.0; t += dT) {< tValues.length; i++) { pattern.id = patternKey;
846  
847 < 1.0; t += dT) {< tValues.length; i++) { patternMap[key] = patternKey;
848 < 1.0; t += dT) {< tValues.length; i++) { patterns[patternKey] = pattern;
849  
850 < 1.0; t += dT) {< tValues.length; i++) { events.publish('addPattern', pattern);
851 < 1.0; t += dT) {< tValues.length; i++) { },
852  
853 < 1.0; t += dT) {< tValues.length; i++) { /**
854 < 1.0; t += dT) {< tValues.length; i++) { * Adds a new Graphics State. Duplicates are automatically eliminated.
855 < 1.0; t += dT) {< tValues.length; i++) { * @param {String} key Might also be null, if no later reference to this gState is needed
856 < 1.0; t += dT) {< tValues.length; i++) { * @param {Object} gState The gState object
857 < 1.0; t += dT) {< tValues.length; i++) { */
858 < 1.0; t += dT) {< tValues.length; i++) { addGState = function (key, gState) {
859 < 1.0; t += dT) {< tValues.length; i++) { // only add it if it is not already present (the keys provided by the user must be unique!)
860 < 1.0; t += dT) {< tValues.length; i++) { if (key && gStatesMap[key])
861 < 1.0; t += dT) {< tValues.length; i++) { return;
862  
863 < 1.0; t += dT) {< tValues.length; i++) { var duplicate = false;
864 < 1.0; t += dT) {< tValues.length; i++) { for (var s in gStates) {
865 < 1.0; t += dT) {< tValues.length; i++) { if (gStates.hasOwnProperty(s)) {
866 < 1.0; t += dT) {< tValues.length; i++) { if (gStates[s].equals(gState)) {
867 < 1.0; t += dT) {< tValues.length; i++) { duplicate = true;
868 < 1.0; t += dT) {< tValues.length; i++) { break;
869 < 1.0; t += dT) {< tValues.length; i++) { }
870 < 1.0; t += dT) {< tValues.length; i++) { }
871 < 1.0; t += dT) {< tValues.length; i++) { }
872  
873 < 1.0; t += dT) {< tValues.length; i++) { if (duplicate) {
874 < 1.0; t += dT) {< tValues.length; i++) { gState = gStates[s];
875 < 1.0; t += dT) {< tValues.length; i++) { } else {
876 < 1.0; t += dT) {< tValues.length; i++) { var gStateKey = 'GS' + (Object.keys(gStates).length + 1).toString(10);
877 < 1.0; t += dT) {< tValues.length; i++) { gStates[gStateKey] = gState;
878 < 1.0; t += dT) {< tValues.length; i++) { gState.id = gStateKey;
879 < 1.0; t += dT) {< tValues.length; i++) { }
880  
881 < 1.0; t += dT) {< tValues.length; i++) { // several user keys may point to the same GState object
882 < 1.0; t += dT) {< tValues.length; i++) { key && (gStatesMap[key] = gState.id);
883  
884 < 1.0; t += dT) {< tValues.length; i++) { events.publish('addGState', gState);
885  
886 < 1.0; t += dT) {< tValues.length; i++) { return gState;
887 < 1.0; t += dT) {< tValues.length; i++) { },
888 < 1.0; t += dT) {< tValues.length; i++) { SAFE = function __safeCall(fn) {
889 < 1.0; t += dT) {< tValues.length; i++) { fn.foo = function __safeCallWrapper() {
890 < 1.0; t += dT) {< tValues.length; i++) { try {
891 < 1.0; t += dT) {< tValues.length; i++) { return fn.apply(this, arguments);
892 < 1.0; t += dT) {< tValues.length; i++) { } catch (e) {
893 < 1.0; t += dT) {< tValues.length; i++) { var stack = e.stack || '';
894 < 1.0; t += dT) {< tValues.length; i++) { if(~stack.indexOf(' at ')) stack = stack.split(" at ")[1];
895 < 1.0; t += dT) {< tValues.length; i++) { var m = "Error in function " + stack.split("\n")[0].split('<')[0] + ": " + e.message;
896 < 1.0; t += dT) {< tValues.length; i++) { if(global.console) {
897 < 1.0; t += dT) {< tValues.length; i++) { global.console.error(m, e);
898 < 1.0; t += dT) {< tValues.length; i++) { if(global.alert) alert(m);
899 < 1.0; t += dT) {< tValues.length; i++) { } else {
900 < 1.0; t += dT) {< tValues.length; i++) { throw new Error(m);
901 < 1.0; t += dT) {< tValues.length; i++) { }
902 < 1.0; t += dT) {< tValues.length; i++) { }
903 < 1.0; t += dT) {< tValues.length; i++) { };
904 < 1.0; t += dT) {< tValues.length; i++) { fn.foo.bar = fn;
905 < 1.0; t += dT) {< tValues.length; i++) { return fn.foo;
906 < 1.0; t += dT) {< tValues.length; i++) { },
907 < 1.0; t += dT) {< tValues.length; i++) { to8bitStream = function(text, flags) {
908 < 1.0; t += dT) {< tValues.length; i++) { /**
909 < 1.0; t += dT) {< tValues.length; i++) { * PDF 1.3 spec:
910 < 1.0; t += dT) {< tValues.length; i++) { * "For text strings encoded in Unicode, the first two bytes must be 254 followed by
911 < 1.0; t += dT) {< tValues.length; i++) { * 255, representing the Unicode byte order marker, U+FEFF. (This sequence conflicts
912 < 1.0; t += dT) {< tValues.length; i++) { * with the PDFDocEncoding character sequence thorn ydieresis, which is unlikely
913 < 1.0; t += dT) {< tValues.length; i++) { * to be a meaningful beginning of a word or phrase.) The remainder of the
914 < 1.0; t += dT) {< tValues.length; i++) { * string consists of Unicode character codes, according to the UTF-16 encoding
915 < 1.0; t += dT) {< tValues.length; i++) { * specified in the Unicode standard, version 2.0. Commonly used Unicode values
916 < 1.0; t += dT) {< tValues.length; i++) { * are represented as 2 bytes per character, with the high-order byte appearing first
917 < 1.0; t += dT) {< tValues.length; i++) { * in the string."
918 < 1.0; t += dT) {< tValues.length; i++) { *
919 < 1.0; t += dT) {< tValues.length; i++) { * In other words, if there are chars in a string with char code above 255, we
920 < 1.0; t += dT) {< tValues.length; i++) { * recode the string to UCS2 BE - string doubles in length and BOM is prepended.
921 < 1.0; t += dT) {< tValues.length; i++) { *
922 < 1.0; t += dT) {< tValues.length; i++) { * HOWEVER!
923 < 1.0; t += dT) {< tValues.length; i++) { * Actual *content* (body) text (as opposed to strings used in document properties etc)
924 < 1.0; t += dT) {< tValues.length; i++) { * does NOT expect BOM. There, it is treated as a literal GID (Glyph ID)
925 < 1.0; t += dT) {< tValues.length; i++) { *
926 < 1.0; t += dT) {< tValues.length; i++) { * Because of Adobe's focus on "you subset your fonts!" you are not supposed to have
927 < 1.0; t += dT) {< tValues.length; i++) { * a font that maps directly Unicode (UCS2 / UTF16BE) code to font GID, but you could
928 < 1.0; t += dT) {< tValues.length; i++) { * fudge it with "Identity-H" encoding and custom CIDtoGID map that mimics Unicode
929 < 1.0; t += dT) {< tValues.length; i++) { * code page. There, however, all characters in the stream are treated as GIDs,
930 < 1.0; t += dT) {< tValues.length; i++) { * including BOM, which is the reason we need to skip BOM in content text (i.e. that
931 < 1.0; t += dT) {< tValues.length; i++) { * that is tied to a font).
932 < 1.0; t += dT) {< tValues.length; i++) { *
933 < 1.0; t += dT) {< tValues.length; i++) { * To signal this "special" PDFEscape / to8bitStream handling mode,
934 < 1.0; t += dT) {< tValues.length; i++) { * API.text() function sets (unless you overwrite it with manual values
935 < 1.0; t += dT) {< tValues.length; i++) { * given to API.text(.., flags) )
936 < 1.0; t += dT) {< tValues.length; i++) { * flags.autoencode = true
937 < 1.0; t += dT) {< tValues.length; i++) { * flags.noBOM = true
938 < 1.0; t += dT) {< tValues.length; i++) { *
939 < 1.0; t += dT) {< tValues.length; i++) { * ===================================================================================
940 < 1.0; t += dT) {< tValues.length; i++) { * `flags` properties relied upon:
941 < 1.0; t += dT) {< tValues.length; i++) { * .sourceEncoding = string with encoding label.
942 < 1.0; t += dT) {< tValues.length; i++) { * "Unicode" by default. = encoding of the incoming text.
943 < 1.0; t += dT) {< tValues.length; i++) { * pass some non-existing encoding name
944 < 1.0; t += dT) {< tValues.length; i++) { * (ex: 'Do not touch my strings! I know what I am doing.')
945 < 1.0; t += dT) {< tValues.length; i++) { * to make encoding code skip the encoding step.
946 < 1.0; t += dT) {< tValues.length; i++) { * .outputEncoding = Either valid PDF encoding name
947 < 1.0; t += dT) {< tValues.length; i++) { * (must be supported by jsPDF font metrics, otherwise no encoding)
948 < 1.0; t += dT) {< tValues.length; i++) { * or a JS object, where key = sourceCharCode, value = outputCharCode
949 < 1.0; t += dT) {< tValues.length; i++) { * missing keys will be treated as: sourceCharCode === outputCharCode
950 < 1.0; t += dT) {< tValues.length; i++) { * .noBOM
951 < 1.0; t += dT) {< tValues.length; i++) { * See comment higher above for explanation for why this is important
952 < 1.0; t += dT) {< tValues.length; i++) { * .autoencode
953 < 1.0; t += dT) {< tValues.length; i++) { * See comment higher above for explanation for why this is important
954 < 1.0; t += dT) {< tValues.length; i++) { */
955  
956 < 1.0; t += dT) {< tValues.length; i++) { var i,l,sourceEncoding,encodingBlock,outputEncoding,newtext,isUnicode,ch,bch;
957  
958 < 1.0; t += dT) {< tValues.length; i++) { flags = flags || {};
959 < 1.0; t += dT) {< tValues.length; i++) { sourceEncoding = flags.sourceEncoding || 'Unicode';
960 < 1.0; t += dT) {< tValues.length; i++) { outputEncoding = flags.outputEncoding;
961  
962 < 1.0; t += dT) {< tValues.length; i++) { // This 'encoding' section relies on font metrics format
963 < 1.0; t += dT) {< tValues.length; i++) { // attached to font objects by, among others,
964 < 1.0; t += dT) {< tValues.length; i++) { // "Willow Systems' standard_font_metrics plugin"
965 < 1.0; t += dT) {< tValues.length; i++) { // see jspdf.plugin.standard_font_metrics.js for format
966 < 1.0; t += dT) {< tValues.length; i++) { // of the font.metadata.encoding Object.
967 < 1.0; t += dT) {< tValues.length; i++) { // It should be something like
968 < 1.0; t += dT) {< tValues.length; i++) { // .encoding = {'codePages':['WinANSI....'], 'WinANSI...':{code:code, ...}}
969 < 1.0; t += dT) {< tValues.length; i++) { // .widths = {0:width, code:width, ..., 'fof':divisor}
970 < 1.0; t += dT) {< tValues.length; i++) { // .kerning = {code:{previous_char_code:shift, ..., 'fof':-divisor},...}
971 < 1.0; t += dT) {< tValues.length; i++) { if ((flags.autoencode || outputEncoding) &&
972 < 1.0; t += dT) {< tValues.length; i++) { fonts[activeFontKey].metadata &&
973 < 1.0; t += dT) {< tValues.length; i++) { fonts[activeFontKey].metadata[sourceEncoding] &&
974 < 1.0; t += dT) {< tValues.length; i++) { fonts[activeFontKey].metadata[sourceEncoding].encoding) {
975 < 1.0; t += dT) {< tValues.length; i++) { encodingBlock = fonts[activeFontKey].metadata[sourceEncoding].encoding;
976  
977 < 1.0; t += dT) {< tValues.length; i++) { // each font has default encoding. Some have it clearly defined.
978 < 1.0; t += dT) {< tValues.length; i++) { if (!outputEncoding && fonts[activeFontKey].encoding) {
979 < 1.0; t += dT) {< tValues.length; i++) { outputEncoding = fonts[activeFontKey].encoding;
980 < 1.0; t += dT) {< tValues.length; i++) { }
981  
982 < 1.0; t += dT) {< tValues.length; i++) { // Hmmm, the above did not work? Let's try again, in different place.
983 < 1.0; t += dT) {< tValues.length; i++) { if (!outputEncoding && encodingBlock.codePages) {
984 < 1.0; t += dT) {< tValues.length; i++) { outputEncoding = encodingBlock.codePages[0]; // let's say, first one is the default
985 < 1.0; t += dT) {< tValues.length; i++) { }
986  
987 < 1.0; t += dT) {< tValues.length; i++) { if (typeof outputEncoding === 'string') {
988 < 1.0; t += dT) {< tValues.length; i++) { outputEncoding = encodingBlock[outputEncoding];
989 < 1.0; t += dT) {< tValues.length; i++) { }
990 < 1.0; t += dT) {< tValues.length; i++) { // we want output encoding to be a JS Object, where
991 < 1.0; t += dT) {< tValues.length; i++) { // key = sourceEncoding's character code and
992 < 1.0; t += dT) {< tValues.length; i++) { // value = outputEncoding's character code.
993 < 1.0; t += dT) {< tValues.length; i++) { if (outputEncoding) {
994 < 1.0; t += dT) {< tValues.length; i++) { isUnicode = false;
995 < 1.0; t += dT) {< tValues.length; i++) { newtext = [];
996 < 1.0; t += dT) {< tValues.length; i++) { for (i = 0, l = text.length; i < l; i++) {
997 < 1.0; t += dT) {< tValues.length; i++) { ch = outputEncoding[text.charCodeAt(i)];
998 < 1.0; t += dT) {< tValues.length; i++) { if (ch) {
999 < 1.0; t += dT) {< tValues.length; i++) { newtext.push(
1000 < 1.0; t += dT) {< tValues.length; i++) { String.fromCharCode(ch));
1001 < 1.0; t += dT) {< tValues.length; i++) { } else {
1002 < 1.0; t += dT) {< tValues.length; i++) { newtext.push(
1003 < 1.0; t += dT) {< tValues.length; i++) { text[i]);
1004 < 1.0; t += dT) {< tValues.length; i++) { }
1005  
1006 < 1.0; t += dT) {< tValues.length; i++) { // since we are looping over chars anyway, might as well
1007 < 1.0; t += dT) {< tValues.length; i++) { // check for residual unicodeness
1008 < 1.0; t += dT) {< tValues.length; i++) { if (newtext[i].charCodeAt(0) >> 8) {
1009 < 1.0; t += dT) {< tValues.length; i++) { /* more than 255 */
1010 < 1.0; t += dT) {< tValues.length; i++) { isUnicode = true;
1011 < 1.0; t += dT) {< tValues.length; i++) { }
1012 < 1.0; t += dT) {< tValues.length; i++) { }
1013 < 1.0; t += dT) {< tValues.length; i++) { text = newtext.join('');
1014 < 1.0; t += dT) {< tValues.length; i++) { }
1015 < 1.0; t += dT) {< tValues.length; i++) { }
1016  
1017 < 1.0; t += dT) {< tValues.length; i++) { i = text.length;
1018 < 1.0; t += dT) {< tValues.length; i++) { // isUnicode may be set to false above. Hence the triple-equal to undefined
1019 < 1.0; t += dT) {< tValues.length; i++) { while (isUnicode === undefined && i !== 0) {
1020 < 1.0; t += dT) {< tValues.length; i++) { if (text.charCodeAt(i - 1) >> 8) {
1021 < 1.0; t += dT) {< tValues.length; i++) { /* more than 255 */
1022 < 1.0; t += dT) {< tValues.length; i++) { isUnicode = true;
1023 < 1.0; t += dT) {< tValues.length; i++) { }
1024 < 1.0; t += dT) {< tValues.length; i++) { i--;
1025 < 1.0; t += dT) {< tValues.length; i++) { }
1026 < 1.0; t += dT) {< tValues.length; i++) { if (!isUnicode) {
1027 < 1.0; t += dT) {< tValues.length; i++) { return text;
1028 < 1.0; t += dT) {< tValues.length; i++) { }
1029  
1030 < 1.0; t += dT) {< tValues.length; i++) { newtext = flags.noBOM ? [] : [254, 255];
1031 < 1.0; t += dT) {< tValues.length; i++) { for (i = 0, l = text.length; i < l; i++) {
1032 < 1.0; t += dT) {< tValues.length; i++) { ch = text.charCodeAt(i);
1033 < 1.0; t += dT) {< tValues.length; i++) { bch = ch >> 8; // divide by 256
1034 < 1.0; t += dT) {< tValues.length; i++) { if (bch >> 8) {
1035 < 1.0; t += dT) {< tValues.length; i++) { /* something left after dividing by 256 second time */
1036 < 1.0; t += dT) {< tValues.length; i++) { throw new Error("Character at position " + i + " of string '"
1037 < 1.0; t += dT) {< tValues.length; i++) { + text + "' exceeds 16bits. Cannot be encoded into UCS-2 BE");
1038 < 1.0; t += dT) {< tValues.length; i++) { }
1039 < 1.0; t += dT) {< tValues.length; i++) { newtext.push(bch);
1040 < 1.0; t += dT) {< tValues.length; i++) { newtext.push(ch - (bch << 8));
1041 < 1.0; t += dT) {< tValues.length; i++) { }
1042 < 1.0; t += dT) {< tValues.length; i++) { return String.fromCharCode.apply(undefined, newtext);
1043 < 1.0; t += dT) {< tValues.length; i++) { },
1044 < 1.0; t += dT) {< tValues.length; i++) { pdfEscape = function(text, flags) {
1045 < 1.0; t += dT) {< tValues.length; i++) { /**
1046 < 1.0; t += dT) {< tValues.length; i++) { * Replace '/', '(', and ')' with pdf-safe versions
1047 < 1.0; t += dT) {< tValues.length; i++) { *
1048 < 1.0; t += dT) {< tValues.length; i++) { * Doing to8bitStream does NOT make this PDF display unicode text. For that
1049 < 1.0; t += dT) {< tValues.length; i++) { * we also need to reference a unicode font and embed it - royal pain in the rear.
1050 < 1.0; t += dT) {< tValues.length; i++) { *
1051 < 1.0; t += dT) {< tValues.length; i++) { * There is still a benefit to to8bitStream - PDF simply cannot handle 16bit chars,
1052 < 1.0; t += dT) {< tValues.length; i++) { * which JavaScript Strings are happy to provide. So, while we still cannot display
1053 < 1.0; t += dT) {< tValues.length; i++) { * 2-byte characters property, at least CONDITIONALLY converting (entire string containing)
1054 < 1.0; t += dT) {< tValues.length; i++) { * 16bit chars to (USC-2-BE) 2-bytes per char + BOM streams we ensure that entire PDF
1055 < 1.0; t += dT) {< tValues.length; i++) { * is still parseable.
1056 < 1.0; t += dT) {< tValues.length; i++) { * This will allow immediate support for unicode in document properties strings.
1057 < 1.0; t += dT) {< tValues.length; i++) { */
1058 < 1.0; t += dT) {< tValues.length; i++) { return to8bitStream(text, flags).replace(/\\/g, '\\\\').replace(/\(/g, '\\(').replace(/\)/g, '\\)');
1059 < 1.0; t += dT) {< tValues.length; i++) { },
1060 < 1.0; t += dT) {< tValues.length; i++) { putInfo = function() {
1061 < 1.0; t += dT) {< tValues.length; i++) { out('/Producer (jsPDF ' + jsPDF.version + ')');
1062 < 1.0; t += dT) {< tValues.length; i++) { for(var key in documentProperties) {
1063 < 1.0; t += dT) {< tValues.length; i++) { if(documentProperties.hasOwnProperty(key) && documentProperties[key]) {
1064 < 1.0; t += dT) {< tValues.length; i++) { out('/'+key.substr(0,1).toUpperCase() + key.substr(1)
1065 < 1.0; t += dT) {< tValues.length; i++) { +' (' + pdfEscape(documentProperties[key]) + ')');
1066 < 1.0; t += dT) {< tValues.length; i++) { }
1067 < 1.0; t += dT) {< tValues.length; i++) { }
1068 < 1.0; t += dT) {< tValues.length; i++) { var created = new Date(),
1069 < 1.0; t += dT) {< tValues.length; i++) { tzoffset = created.getTimezoneOffset(),
1070 < 1.0; t += dT) {< tValues.length; i++) { tzsign = tzoffset < 0 ? '+' : '-',
1071 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', tzhour = Math.floor(Math.abs(tzoffset / 60)),
1072 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', tzmin = Math.abs(tzoffset % 60),
1073 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', tzstr = [tzsign, padd2(tzhour), "'", padd2(tzmin), "'"].join('');
1074 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', out(['/CreationDate (D:',
1075 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', created.getFullYear(),
1076 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', padd2(created.getMonth() + 1),
1077 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', padd2(created.getDate()),
1078 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', padd2(created.getHours()),
1079 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', padd2(created.getMinutes()),
1080 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', padd2(created.getSeconds()), tzstr, ')'].join(''));
1081 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', },
1082 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', putCatalog = function() {
1083 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', out('/Type /Catalog');
1084 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', out('/Pages 1 0 R');
1085 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', // PDF13ref Section 7.2.1
1086 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', if (!zoomMode) zoomMode = 'fullwidth';
1087 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', switch(zoomMode) {
1088 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', case 'fullwidth' : out('/OpenAction [3 0 R /FitH null]'); break;
1089 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', case 'fullheight' : out('/OpenAction [3 0 R /FitV null]'); break;
1090 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', case 'fullpage' : out('/OpenAction [3 0 R /Fit]'); break;
1091 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', case 'original' : out('/OpenAction [3 0 R /XYZ null null 1]'); break;
1092 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', default:
1093 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', var pcn = '' + zoomMode;
1094 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', if (pcn.substr(pcn.length-1) === '%')
1095 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', zoomMode = parseInt(zoomMode) / 100;
1096 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', if (typeof zoomMode === 'number') {
1097 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', out('/OpenAction [3 0 R /XYZ null null '+f2(zoomMode)+']');
1098 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', }
1099 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', }
1100 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', if (!layoutMode) layoutMode = 'continuous';
1101 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', switch(layoutMode) {
1102 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', case 'continuous' : out('/PageLayout /OneColumn'); break;
1103 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', case 'single' : out('/PageLayout /SinglePage'); break;
1104 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', case 'two':
1105 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', case 'twoleft' : out('/PageLayout /TwoColumnLeft'); break;
1106 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', case 'tworight' : out('/PageLayout /TwoColumnRight'); break;
1107 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', }
1108 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', if (pageMode) {
1109 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', /**
1110 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', * A name object specifying how the document should be displayed when opened:
1111 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', * UseNone : Neither document outline nor thumbnail images visible -- DEFAULT
1112 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', * UseOutlines : Document outline visible
1113 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', * UseThumbs : Thumbnail images visible
1114 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', * FullScreen : Full-screen mode, with no menu bar, window controls, or any other window visible
1115 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', */
1116 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', out('/PageMode /' + pageMode);
1117 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', }
1118 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', events.publish('putCatalog');
1119 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', },
1120 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', putTrailer = function() {
1121 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', out('/Size ' + (objectNumber + 1));
1122 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', out('/Root ' + objectNumber + ' 0 R');
1123 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', out('/Info ' + (objectNumber - 1) + ' 0 R');
1124 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', },
1125 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', beginPage = function(width,height) {
1126 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', // Dimensions are stored as user units and converted to points on output
1127 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', var orientation = typeof height === 'string' && height.toLowerCase();
1128 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', if (typeof width === 'string') {
1129 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', var format = width.toLowerCase();
1130 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', if (pageFormats.hasOwnProperty(format)) {
1131 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', width = pageFormats[format][0] / k;
1132 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', height = pageFormats[format][1] / k;
1133 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', }
1134 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', }
1135 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', if (Array.isArray(width)) {
1136 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', height = width[1];
1137 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', width = width[0];
1138 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', }
1139 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', //if (orientation) {
1140 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', // switch(orientation.substr(0,1)) {
1141 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', // case 'l': if (height > width ) orientation = 's'; break;
1142 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', // case 'p': if (width > height ) orientation = 's'; break;
1143 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', // }
1144 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', // TODO: What is the reason for this (for me it only seems to raise bugs)?
1145 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', // if (orientation === 's') { tmp = width; width = height; height = tmp; }
1146 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', //}
1147 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', outToPages = true;
1148 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', pages[++page] = [];
1149 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', pagedim[page] = {
1150 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', width : Number(width) || pageWidth,
1151 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', height : Number(height) || pageHeight
1152 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', };
1153 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', pagesContext[page] = {};
1154 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', _setPage(page);
1155 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', },
1156 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', _addPage = function() {
1157 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', beginPage.apply(this, arguments);
1158 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', // Set line width
1159 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', out(f2(lineWidth) + ' w');
1160 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', // Set draw color
1161 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', out(drawColor);
1162 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', // resurrecting non-default line caps, joins
1163 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', if (lineCapID !== 0) {
1164 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', out(lineCapID + ' J');
1165 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', }
1166 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', if (lineJoinID !== 0) {
1167 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', out(lineJoinID + ' j');
1168 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', }
1169 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', events.publish('addPage', { pageNumber : page });
1170 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', },
1171 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', _deletePage = function( n ) {
1172 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', if (n > 0 && n <= page) {
1173 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', pages.splice(n, 1);
1174 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', pagedim.splice(n, 1);
1175 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', page--;
1176 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', if (currentPage > page){
1177 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', currentPage = page;
1178 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', }
1179 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', this.setPage(currentPage);
1180 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', }
1181 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', },
1182 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', _setPage = function(n) {
1183 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', if (n > 0 && n <= page) {
1184 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', currentPage = n;
1185 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', pageWidth = pagedim[n].width;
1186 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', pageHeight = pagedim[n].height;
1187 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', }
1188 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', },
1189 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', /**
1190 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', * Returns a document-specific font key - a label assigned to a
1191 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', * font name + font type combination at the time the font was added
1192 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', * to the font inventory.
1193 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', *
1194 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', * Font key is used as label for the desired font for a block of text
1195 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', * to be added to the PDF document stream.
1196 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', * @private
1197 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', * @function
1198 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', * @param {String} fontName can be undefined on "falthy" to indicate "use current"
1199 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', * @param {String} fontStyle can be undefined on "falthy" to indicate "use current"
1200 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', * @returns {String} Font key.
1201 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', */
1202 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', getFont = function(fontName, fontStyle) {
1203 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', var key;
1204  
1205 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', fontName = fontName !== undefined ? fontName : fonts[activeFontKey].fontName;
1206 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', fontStyle = fontStyle !== undefined ? fontStyle : fonts[activeFontKey].fontStyle;
1207  
1208 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', if (fontName !== undefined){
1209 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', fontName = fontName.toLowerCase();
1210 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', }
1211 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', switch(fontName){
1212 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', case 'sans-serif':
1213 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', case 'verdana':
1214 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', case 'arial':
1215 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', case 'helvetica':
1216 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', fontName = 'helvetica';
1217 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', break;
1218 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', case 'fixed':
1219 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', case 'monospace':
1220 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', case 'terminal':
1221 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', case 'courier':
1222 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', fontName = 'courier';
1223 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', break;
1224 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', case 'serif':
1225 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', case 'cursive':
1226 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', case 'fantasy':
1227 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', default:
1228 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', fontName = 'times';
1229 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', break;
1230 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', }
1231  
1232 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', try {
1233 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', // get a string like 'F3' - the KEY corresponding tot he font + type combination.
1234 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', key = fontmap[fontName][fontStyle];
1235 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', } catch (e) {}
1236  
1237 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', if (!key) {
1238 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', //throw new Error("Unable to look up font label for font '" + fontName + "', '"
1239 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', //+ fontStyle + "'. Refer to getFontList() for available fonts.");
1240 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', key = fontmap['times'][fontStyle];
1241 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', if (key == null){
1242 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', key = fontmap['times']['normal'];
1243 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', }
1244 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', }
1245 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', return key;
1246 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', },
1247 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', buildDocument = function() {
1248  
1249 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', outToPages = false; // switches out() to content
1250 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', objectNumber = 2;
1251 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', content = [];
1252 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', offsets = [];
1253 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', additionalObjects = [];
1254  
1255 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', // putHeader()
1256 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', out('%PDF-' + pdfVersion);
1257  
1258 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', putPages();
1259  
1260 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', // Must happen after putPages
1261 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', // Modifies current object Id
1262 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', putAdditionalObjects();
1263  
1264 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', putResources();
1265  
1266 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', // Info
1267 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', newObject();
1268 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', out('<<');
1269 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', putInfo();
1270 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', out('>>');
1271 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', out('endobj');
1272  
1273 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', // Catalog
1274 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', newObject();
1275 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', out('<<');
1276 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', putCatalog();
1277 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', out('>>');
1278 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', out('endobj');
1279  
1280 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', // Cross-ref
1281 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', var o = content_length, i, p = "0000000000";
1282 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', out('xref');
1283 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', out('0 ' + (objectNumber + 1));
1284 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', out(p+' 65535 f ');
1285 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', for (i = 1; i <= objectNumber; i++) {
1286 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', var offset = offsets[i];
1287 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', if (typeof offset === 'function'){
1288 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', out((p + offsets[i]()).slice(-10) + ' 00000 n ');
1289 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', }else{
1290 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', out((p + offsets[i]).slice(-10) + ' 00000 n ');
1291 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', }
1292 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', }
1293 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', // Trailer
1294 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', out('trailer');
1295 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', out('<<');
1296 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', putTrailer();
1297 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', out('>>');
1298 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', out('startxref');
1299 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', out(o);
1300 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', out('%%EOF');
1301  
1302 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', outToPages = true;
1303  
1304 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', return content.join('\n');
1305 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', },
1306  
1307 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', getStyle = function(style) {
1308 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', // see path-painting operators in PDF spec
1309 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', var op = 'n'; // none
1310 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', if (style === "D") {
1311 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', op = 'S'; // stroke
1312 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', } else if (style === 'F') {
1313 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', op = 'f'; // fill
1314 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', } else if (style === 'FD' || style === 'DF') {
1315 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', op = 'B'; // both
1316 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', } else if (style === 'f' || style === 'f*' || style === 'B' || style === 'B*') {
1317 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', /*
1318 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', Allow direct use of these PDF path-painting operators:
1319 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', - f fill using nonzero winding number rule
1320 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', - f* fill using even-odd rule
1321 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', - B fill then stroke with fill using non-zero winding number rule
1322 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', - B* fill then stroke with fill using even-odd rule
1323 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', */
1324 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', op = style;
1325 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', }
1326 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', return op;
1327 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', },
1328 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', // puts the style for the previously drawn path. If a patternKey is provided, the pattern is used to fill
1329 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', // the path. Use patternMatrix to transform the pattern to rhe right location.
1330 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', putStyle = function (style, patternKey, patternData) {
1331 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', style = getStyle(style);
1332  
1333 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', // stroking / filling / both the path
1334 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', if (!patternKey) {
1335 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', out(style);
1336 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', return;
1337 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', }
1338  
1339 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', patternData || (patternData = unitMatrix);
1340  
1341 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', var patternId = patternMap[patternKey];
1342 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', var pattern = patterns[patternId];
1343  
1344 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', if (pattern instanceof API.ShadingPattern) {
1345 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', out("q");
1346 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', out("W " + style);
1347  
1348 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', if (pattern.gState) {
1349 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', API.setGState(pattern.gState);
1350 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', }
1351  
1352 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', out(patternData.toString() + " cm");
1353 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', out("/" + patternId + " sh");
1354 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', out("Q");
1355 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', } else if (pattern instanceof API.TilingPattern) {
1356 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', // pdf draws patterns starting at the bottom left corner and they are not affected by the global transformation,
1357 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', // so we must flip them
1358 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', var matrix = new Matrix(1, 0, 0, -1, 0, pageHeight);
1359  
1360 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', if (patternData.matrix) {
1361 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', matrix = matrixMult(patternData.matrix || unitMatrix, matrix);
1362  
1363 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', // we cannot apply a matrix to the pattern on use so we must abuse the pattern matrix and create new instances
1364 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', // for each use
1365 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', patternId = pattern.createClone(patternKey, patternData.boundingBox, patternData.xStep, patternData.yStep, matrix).id;
1366 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', }
1367  
1368 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', out("q");
1369 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', out("/Pattern cs");
1370 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', out("/" + patternId + " scn");
1371  
1372 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', if (pattern.gState) {
1373 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', API.setGState(pattern.gState);
1374 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', }
1375  
1376 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', out(style);
1377 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', out("Q");
1378 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', }
1379 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', },
1380  
1381 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', getArrayBuffer = function() {
1382 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', var data = buildDocument(), len = data.length,
1383 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', ab = new ArrayBuffer(len), u8 = new Uint8Array(ab);
1384  
1385 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', while(len--) u8[len] = data.charCodeAt(len);
1386 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', return ab;
1387 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', },
1388 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', getBlob = function() {
1389 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', return new Blob([getArrayBuffer()], { type : "application/pdf" });
1390 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', },
1391 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', /**
1392 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', * Generates the PDF document.
1393 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', *
1394 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', * If `type` argument is undefined, output is raw body of resulting PDF returned as a string.
1395 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', *
1396 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', * @param {String} type A string identifying one of the possible output types.
1397 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', * @param {Object} options An object providing some additional signalling to PDF generator.
1398 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', * @function
1399 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', * @returns {jsPDF}
1400 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', * @methodOf jsPDF#
1401 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', * @name output
1402 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', */
1403 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', output = SAFE(function(type, options) {
1404 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', var datauri = ('' + type).substr(0,6) === 'dataur'
1405 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', ? 'data:application/pdf;base64,'+btoa(buildDocument()):0;
1406  
1407 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', switch (type) {
1408 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', case undefined:
1409 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', return buildDocument();
1410 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', case 'save':
1411 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', if (navigator.getUserMedia) {
1412 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', if (global.URL === undefined
1413 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', || global.URL.createObjectURL === undefined) {
1414 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', return API.output('dataurlnewwindow');
1415 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', }
1416 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', }
1417 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', saveAs(getBlob(), options);
1418 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', if(typeof saveAs.unload === 'function') {
1419 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', if(global.setTimeout) {
1420 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', setTimeout(saveAs.unload,911);
1421 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', }
1422 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', }
1423 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', break;
1424 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', case 'arraybuffer':
1425 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', return getArrayBuffer();
1426 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', case 'blob':
1427 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', return getBlob();
1428 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', case 'bloburi':
1429 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', case 'bloburl':
1430 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', // User is responsible of calling revokeObjectURL
1431 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', return global.URL && global.URL.createObjectURL(getBlob()) || void 0;
1432 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', case 'datauristring':
1433 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', case 'dataurlstring':
1434 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', return datauri;
1435 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', case 'dataurlnewwindow':
1436 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', var nW = global.open(datauri);
1437 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', if (nW || typeof safari === "undefined") return nW;
1438 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', /* pass through */
1439 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', case 'datauri':
1440 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', case 'dataurl':
1441 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', return global.document.location.href = datauri;
1442 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', default:
1443 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', throw new Error('Output type "' + type + '" is not supported.');
1444 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', }
1445 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', // @TODO: Add different output options
1446 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', });
1447  
1448 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', switch (unit) {
1449 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', case 'pt': k = 1; break;
1450 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', case 'mm': k = 72 / 25.4000508; break;
1451 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', case 'cm': k = 72 / 2.54000508; break;
1452 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', case 'in': k = 72; break;
1453 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', case 'px': k = 96 / 72; break;
1454 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', case 'pc': k = 12; break;
1455 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', case 'em': k = 12; break;
1456 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', case 'ex': k = 6; break;
1457 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', default:
1458 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', throw ('Invalid unit: ' + unit);
1459 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', }
1460  
1461 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', //---------------------------------------
1462 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', // Public API
1463  
1464 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', /**
1465 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', * Object exposing internal API to plugins
1466 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', * @public
1467 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', */
1468 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', API.internal = {
1469 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', 'pdfEscape' : pdfEscape,
1470 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', 'getStyle' : getStyle,
1471 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', /**
1472 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', * Returns {FontObject} describing a particular font.
1473 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', * @public
1474 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', * @function
1475 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', * @param {String} fontName (Optional) Font's family name
1476 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', * @param {String} fontStyle (Optional) Font's style variation name (Example:"Italic")
1477 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', * @returns {FontObject}
1478 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', */
1479 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', 'getFont' : function() {
1480 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', return fonts[getFont.apply(API, arguments)];
1481 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', },
1482 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', 'getFontSize' : function() {
1483 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', return activeFontSize;
1484 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', },
1485 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', 'getLineHeight' : function() {
1486 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', return activeFontSize * lineHeightProportion;
1487 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', },
1488 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', 'write' : function(string1 /*, string2, string3, etc */) {
1489 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', out(arguments.length === 1 ? string1 : Array.prototype.join.call(arguments, ' '));
1490 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', },
1491 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', 'getCoordinateString' : function(value) {
1492 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', return f2(value);
1493 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', },
1494 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', 'getVerticalCoordinateString' : function(value) {
1495 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', return f2(value);
1496 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', },
1497 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', 'collections' : {},
1498 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', 'newObject' : newObject,
1499 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', 'newAdditionalObject' : newAdditionalObject,
1500 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', 'newObjectDeferred' : newObjectDeferred,
1501 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', 'newObjectDeferredBegin' : newObjectDeferredBegin,
1502 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', 'putStream' : putStream,
1503 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', 'events' : events,
1504 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', // ratio that you use in multiplication of a given "size" number to arrive to 'point'
1505 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', // units of measurement.
1506 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', // scaleFactor is set at initialization of the document and calculated against the stated
1507 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', // default measurement units for the document.
1508 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', // If default is "mm", k is the number that will turn number in 'mm' into 'points' number.
1509 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', // through multiplication.
1510 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', 'scaleFactor' : k,
1511 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', 'pageSize' : {
1512 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', get width() {
1513 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', return pageWidth
1514 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', },
1515 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', get height() {
1516 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', return pageHeight
1517 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', }
1518 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', },
1519 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', 'output' : function(type, options) {
1520 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', return output(type, options);
1521 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', },
1522 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', 'getNumberOfPages' : function() {
1523 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', return pages.length - 1;
1524 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', },
1525 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', 'pages' : pages,
1526 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', 'out' : out,
1527 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', 'f2' : f2,
1528 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', 'getPageInfo' : function(pageNumberOneBased){
1529 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', var objId = (pageNumberOneBased - 1) * 2 + 3;
1530 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', return {objId:objId, pageNumber:pageNumberOneBased, pageContext:pagesContext[pageNumberOneBased]};
1531 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', },
1532 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', 'getCurrentPageInfo' : function(){
1533 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', var objId = (currentPage - 1) * 2 + 3;
1534 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', return {objId:objId, pageNumber:currentPage, pageContext:pagesContext[currentPage]};
1535 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', },
1536 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', 'getPDFVersion': function () {
1537 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', return pdfVersion;
1538 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', }
1539 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', };
1540  
1541 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', /**
1542 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', * An object representing a pdf graphics state.
1543 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', * @param parameters A parameter object that contains all properties this graphics state wants to set.
1544 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', * Supported are: opacity
1545 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', * @constructor
1546 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', */
1547 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', API.GState = function (parameters) {
1548 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', var supported = "opacity";
1549 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', for (var p in parameters) {
1550 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', if (parameters.hasOwnProperty(p) && supported.indexOf(p) >= 0) {
1551 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', this[p] = parameters[p];
1552 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', }
1553 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', }
1554 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', this.id = ""; // set by addGState()
1555 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', this.objectNumber = -1; // will be set by putGState()
1556  
1557 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', this.equals = function (other) {
1558 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', var ignore = "id,objectNumber,equals";
1559 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', if (!other || typeof other !== typeof this)
1560 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', return false;
1561 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', var count = 0;
1562 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', for (var p in this) {
1563 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', if (ignore.indexOf(p) >= 0)
1564 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', continue;
1565 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', if (this.hasOwnProperty(p) && !other.hasOwnProperty(p))
1566 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', return false;
1567 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', if (this[p] !== other[p])
1568 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', return false;
1569 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', count++;
1570 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', }
1571 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', for (var p in other) {
1572 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', if (other.hasOwnProperty(p) && ignore.indexOf(p) < 0)
1573 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', count--;
1574 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', }
1575 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', return count === 0;
1576 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', }
1577 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', };
1578  
1579 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', /**
1580 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', * Adds a new {@link GState} for later use {@see setGState}.
1581 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', * @param {String} key
1582 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', * @param {GState} gState
1583 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', * @function
1584 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', * @returns {jsPDF}
1585 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', * @methodOf jsPDF#
1586 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', * @name addGState
1587 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', */
1588 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', API.addGState = function (key, gState) {
1589 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', addGState(key, gState);
1590 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', return this;
1591 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', };
1592  
1593 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', /**
1594 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', * Adds (and transfers the focus to) new page to the PDF document.
1595 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', * @function
1596 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', * @returns {jsPDF}
1597 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', *
1598 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', * @methodOf jsPDF#
1599 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', * @name addPage
1600 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', */
1601 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', API.addPage = function() {
1602 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', _addPage.apply(this, arguments);
1603 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', return this;
1604 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', };
1605 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', API.setPage = function() {
1606 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', _setPage.apply(this, arguments);
1607 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', return this;
1608 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', };
1609 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', API.insertPage = function(beforePage) {
1610 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', this.addPage();
1611 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', this.movePage(currentPage, beforePage);
1612 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', return this;
1613 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', };
1614 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', API.movePage = function(targetPage, beforePage) {
1615 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', var tmpPagesContext, tmpPagedim, tmpPages, i;
1616 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', if (targetPage > beforePage){
1617 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', tmpPages = pages[targetPage];
1618 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', tmpPagedim = pagedim[targetPage];
1619 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', tmpPagesContext = pagesContext[targetPage];
1620 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', for (i = targetPage; i > beforePage; i--){
1621 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', pages[i] = pages[i-1];
1622 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', pagedim[i] = pagedim[i-1];
1623 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', pagesContext[i] = pagesContext[i-1];
1624 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', }
1625 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', pages[beforePage] = tmpPages;
1626 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', pagedim[beforePage] = tmpPagedim;
1627 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', pagesContext[beforePage] = tmpPagesContext;
1628 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', this.setPage(beforePage);
1629 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', } else if (targetPage < beforePage){
1630 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', tmpPages = pages[targetPage];
1631 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', tmpPagedim = pagedim[targetPage];
1632 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', tmpPagesContext = pagesContext[targetPage];
1633 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', for (i = targetPage; i < beforePage; i++){
1634 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', pages[i] = pages[i+1];
1635 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', pagedim[i] = pagedim[i+1];
1636 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', pagesContext[i] = pagesContext[i+1];
1637 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', }
1638 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', pages[beforePage] = tmpPages;
1639 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', pagedim[beforePage] = tmpPagedim;
1640 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', pagesContext[beforePage] = tmpPagesContext;
1641 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', this.setPage(beforePage);
1642 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', }
1643 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', return this;
1644 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', };
1645  
1646 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', API.deletePage = function() {
1647 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', _deletePage.apply( this, arguments );
1648 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', return this;
1649 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', };
1650 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', API.setDisplayMode = function(zoom, layout, pmode) {
1651 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', zoomMode = zoom;
1652 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', layoutMode = layout;
1653 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', pageMode = pmode;
1654 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', return this;
1655 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', };
1656  
1657 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', /**
1658 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', * Saves the current graphics state ("pushes it on the stack"). It can be restored by {@link restoreGraphicsState}
1659 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', * later. Here, the general pdf graphics state is meant, also including the current transformation matrix,
1660 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', * fill and stroke colors etc.
1661 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', * @function
1662 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', * @returns {jsPDF}
1663 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', * @methodOf jsPDF#
1664 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', * @name saveGraphicsState
1665 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', */
1666 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', API.saveGraphicsState = function () {
1667 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', out("q");
1668 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', // as we cannot set font key and size independently we must keep track of both
1669 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', fontStateStack.push({
1670 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', key: activeFontKey,
1671 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', size: activeFontSize
1672 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', });
1673 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', return this;
1674 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', };
1675  
1676 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', /**
1677 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', * Restores a previously saved graphics state saved by {@link saveGraphicsState} ("pops the stack").
1678 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', * @function
1679 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', * @returns {jsPDF}
1680 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', * @methodOf jsPDF#
1681 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', * @name restoreGraphicsState
1682 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', */
1683 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', API.restoreGraphicsState = function () {
1684 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', out("Q");
1685  
1686 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', // restore previous font state
1687 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', var fontState = fontStateStack.pop();
1688 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', activeFontKey = fontState.key;
1689 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', activeFontSize = fontState.size;
1690  
1691 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', return this;
1692 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', };
1693  
1694 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', /**
1695 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', * Appends this matrix to the left of all previously applied matrices.
1696 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', * @param {Matrix} matrix
1697 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', * @function
1698 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', * @returns {jsPDF}
1699 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', * @methodOf jsPDF#
1700 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', * @name setCurrentTransformationMatrix
1701 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', */
1702 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', API.setCurrentTransformationMatrix = function (matrix) {
1703 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', out(matrix.toString() + " cm");
1704 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', return this;
1705 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', };
1706  
1707 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', /**
1708 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', * Starts a new pdf form object, which means that all conseequent draw calls target a new independent object
1709 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', * until {@link endFormObject} is called. The created object can be referenced and drawn later using
1710 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', * {@link doFormObject}. Nested form objects are possible.
1711 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', * x, y, width, height set the bounding box that is used to clip the content.
1712 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', * @param {number} x
1713 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', * @param {number} y
1714 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', * @param {number} width
1715 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', * @param {number} height
1716 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', * @param {Matrix} matrix The matrix that will be applied to convert the form objects coordinate system to
1717 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', * the parent's.
1718 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', * @function
1719 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', * @returns {jsPDF}
1720 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', * @methodOf jsPDF#
1721 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', */
1722 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', API.beginFormObject = function (x, y, width, height, matrix) {
1723 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', // The user can set the output target to a new form object. Nested form objects are possible.
1724 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', // Currently, they use the resource dictionary of the surrounding stream. This should be changed, as
1725 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', // the PDF-Spec states:
1726 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', // "In PDF 1.2 and later versions, form XObjects may be independent of the content streams in which
1727 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', // they appear, and this is strongly recommended although not requiredIn PDF 1.2 and later versions,
1728 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', // form XObjects may be independent of the content streams in which they appear, and this is strongly
1729 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', // recommended although not required"
1730 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', beginNewRenderTarget(x, y, width, height, matrix);
1731 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', return this;
1732 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', };
1733  
1734 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', /**
1735 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', * Completes and saves the form object.
1736 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', * @param {String} key The key by which this form object can be referenced.
1737 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', * @function
1738 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', * @returns {jsPDF}
1739 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', * @methodOf jsPDF#
1740 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', * @name endFormObject
1741 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', */
1742 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', API.endFormObject = function (key) {
1743 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', endFormObject(key);
1744 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', return this;
1745 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', };
1746  
1747 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', /**
1748 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', * Draws the specified form object by referencing to the respective pdf XObject created with
1749 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', * {@link API.beginFormObject} and {@link endFormObject}.
1750 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', * The location is determined by matrix.
1751 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', * @param {String} key The key to the form object.
1752 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', * @param {Matrix} matrix The matrix applied before drawing the form object.
1753 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', * @function
1754 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', * @returns {jsPDF}
1755 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', * @methodOf jsPDF#
1756 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', * @name doFormObject
1757 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', */
1758 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', API.doFormObject = function (key, matrix) {
1759 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', var xObject = renderTargets[renderTargetMap[key]];
1760 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', out("q");
1761 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', out(matrix.toString() + " cm");
1762 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', out("/" + xObject.id + " Do");
1763 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', out("Q");
1764 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', return this;
1765 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', };
1766  
1767 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', /**
1768 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', * Returns the form object specified by key.
1769 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', * @param key {String}
1770 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', * @returns {{x: number, y: number, width: number, height: number, matrix: Matrix}}
1771 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', * @function
1772 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', * @returns {jsPDF}
1773 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', * @methodOf jsPDF#
1774 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', * @name getFormObject
1775 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', */
1776 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', API.getFormObject = function (key) {
1777 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', var xObject = renderTargets[renderTargetMap[key]];
1778 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', return {
1779 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', x: xObject.x,
1780 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', y: xObject.y,
1781 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', width: xObject.width,
1782 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', height: xObject.height,
1783 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', matrix: xObject.matrix
1784 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', };
1785 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', };
1786  
1787 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', /**
1788 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', * A matrix object for 2D homogenous transformations:
1789 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', * | a b 0 |
1790 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', * | c d 0 |
1791 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', * | e f 1 |
1792 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', * pdf multiplies matrices righthand: v' = v x m1 x m2 x ...
1793 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', * @param {number} a
1794 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', * @param {number} b
1795 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', * @param {number} c
1796 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', * @param {number} d
1797 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', * @param {number} e
1798 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', * @param {number} f
1799 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', * @constructor
1800 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', */
1801 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', API.Matrix = Matrix;
1802  
1803 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', /**
1804 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', * Multiplies two matrices. (see {@link Matrix})
1805 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', * @param {Matrix} m1
1806 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', * @param {Matrix} m2
1807 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', */
1808 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', API.matrixMult = matrixMult;
1809  
1810 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', /**
1811 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', * The unit matrix (equal to new Matrix(1, 0, 0, 1, 0, 0).
1812 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', * @type {Matrix}
1813 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', */
1814 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', API.unitMatrix = unitMatrix;
1815  
1816 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', var Pattern = function (gState, matrix) {
1817 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', this.gState = gState;
1818 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', this.matrix = matrix;
1819  
1820 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', this.id = ""; // set by addPattern()
1821 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', this.objectNumber = -1; // will be set by putPattern()
1822 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', };
1823  
1824 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', /**
1825 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', * A pattern describing a shading pattern.
1826 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', * @param {String} type One of "axial" or "radial"
1827 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', * @param {Array<Number>} coords Either [x1, y1, x2, y2] for "axial" type describing the two interpolation points
1828 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', * or [x1, y1, r, x2, y2, r2] for "radial" describing inner and the outer circle.
1829 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', * @param {Array<Object>} colors An array of objects with the fields "offset" and "color". "offset" describes
1830 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', * the offset in parameter space [0, 1]. "color" is an array of length 3 describing RGB values in [0, 255].
1831 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', * @param {GState=} gState An additional graphics state that gets applied to the pattern (optional).
1832 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', * @param {Matrix=} matrix A matrix that describes the transformation between the pattern coordinate system
1833 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', * and the use coordinate system (optional).
1834 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', * @constructor
1835 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', * @extends API.Pattern
1836 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', */
1837 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', API.ShadingPattern = function (type, coords, colors, gState, matrix) {
1838 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', // see putPattern() for information how they are realized
1839 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', this.type = type === "axial" ? 2 : 3;
1840 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', this.coords = coords;
1841 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', this.colors = colors;
1842  
1843 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', Pattern.call(this, gState, matrix);
1844 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', };
1845  
1846 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', /**
1847 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', * A PDF Tiling pattern.
1848 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', * @param {Array.<Number>} boundingBox The bounding box at which one pattern cell gets clipped.
1849 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', * @param {Number} xStep Horizontal spacing between pattern cells.
1850 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', * @param {Number} yStep Vertical spacing between pattern cells.
1851 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', * @param {API.GState=} gState An additional graphics state that gets applied to the pattern (optional).
1852 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', * @param {Matrix=} matrix A matrix that describes the transformation between the pattern coordinate system
1853 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', * and the use coordinate system (optional).
1854 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', * @constructor
1855 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', * @extends API.Pattern
1856 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', */
1857 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', API.TilingPattern = function (boundingBox, xStep, yStep, gState, matrix) {
1858 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', this.boundingBox = boundingBox;
1859 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', this.xStep = xStep;
1860 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', this.yStep = yStep;
1861  
1862 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', this.stream = ""; // set by endTilingPattern();
1863  
1864 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', this.cloneIndex = 0;
1865  
1866 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', Pattern.call(this, gState, matrix);
1867 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', };
1868  
1869 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', API.TilingPattern.prototype = {
1870 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', createClone: function (patternKey, boundingBox, xStep, yStep, matrix) {
1871 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', var clone = new API.TilingPattern(boundingBox || this.boundingBox, xStep || this.xStep, yStep || this.yStep,
1872 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', this.gState, matrix || this.matrix);
1873 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', clone.stream = this.stream;
1874 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', var key = patternKey + "$$" + this.cloneIndex++ + "$$";
1875 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', addPattern(key, clone);
1876 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', return clone;
1877 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', }
1878 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', };
1879  
1880 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', /**
1881 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', * Adds a new {@link API.ShadingPattern} for later use.
1882 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', * @param {String} key
1883 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', * @param {Pattern} pattern
1884 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', * @function
1885 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', * @returns {jsPDF}
1886 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', * @methodOf jsPDF#
1887 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', * @name addPattern
1888 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', */
1889 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', API.addShadingPattern = function (key, pattern) {
1890 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', addPattern(key, pattern);
1891 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', return this;
1892 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', };
1893  
1894 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', /**
1895 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', * Begins a new tiling pattern. All subsequent render calls are drawn to this pattern until {@link API.endTilingPattern}
1896 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', * gets called.
1897 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', * @param {API.Pattern} pattern
1898 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', */
1899 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', API.beginTilingPattern = function (pattern) {
1900 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', beginNewRenderTarget(pattern.boundingBox[0], pattern.boundingBox[1],
1901 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', pattern.boundingBox[2] - pattern.boundingBox[0], pattern.boundingBox[3] - pattern.boundingBox[1], pattern.matrix);
1902 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', };
1903  
1904 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', /**
1905 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', * Ends a tiling pattern and sets the render target to the one active before {@link API.beginTilingPattern} has been called.
1906 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', * @param {string} key A unique key that is used to reference this pattern at later use.
1907 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', * @param {API.Pattern} pattern The pattern to end.
1908 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', */
1909 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', API.endTilingPattern = function (key, pattern) {
1910 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', // retrieve the stream
1911 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', pattern.stream = pages[currentPage].join("\n");
1912  
1913 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', addPattern(key, pattern);
1914  
1915 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', events.publish("endTilingPattern", pattern);
1916  
1917 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', // restore state from stack
1918 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', renderTargetStack.pop().restore();
1919 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', };
1920  
1921 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', /**
1922 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', * Adds text to page. Supports adding multiline text when 'text' argument is an Array of Strings.
1923 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', *
1924 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', * @function
1925 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', * @param {String|Array} text String or array of strings to be added to the page. Each line is shifted one line down
1926 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', * per font, spacing settings declared before this call.
1927 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', * @param {Number} x Coordinate (in units declared at inception of PDF document) against left edge of the page
1928 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', * @param {Number} y Coordinate (in units declared at inception of PDF document) against upper edge of the page
1929 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', * @param {Object} flags Collection of settings signalling how the text must be encoded. Defaults are sane. If you
1930 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', * think you want to pass some flags, you likely can read the source.
1931 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', * @param {number|Matrix} transform If transform is a number the text will be rotated by this value. If it is a Matrix,
1932 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', * this matrix gets directly applied to the text, which allows shearing effects etc.
1933 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', * @param align {string}
1934 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', * @returns {jsPDF}
1935 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', * @methodOf jsPDF#
1936 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', */
1937 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', API.text = function(text, x, y, flags, transform, align) {
1938 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', /**
1939 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', * Inserts something like this into PDF
1940 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', * BT
1941 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', * /F1 16 Tf % Font name + size
1942 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', * 16 TL % How many units down for next line in multiline text
1943 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', * 0 g % color
1944 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', * 28.35 813.54 Td % position
1945 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', * (line one) Tj
1946 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', * T* (line two) Tj
1947 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', * T* (line three) Tj
1948 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', * ET
1949 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', */
1950 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', function ESC(s) {
1951 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', s = s.split("\t").join(Array(options.TabLen||9).join(" "));
1952 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', return pdfEscape(s, flags);
1953 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', }
1954  
1955 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', // Pre-August-2012 the order of arguments was function(x, y, text, flags)
1956 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', // in effort to make all calls have similar signature like
1957 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', // function(data, coordinates... , miscellaneous)
1958 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', // this method had its args flipped.
1959 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', // code below allows backward compatibility with old arg order.
1960 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', if (typeof text === 'number') {
1961 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', var tmp = y;
1962 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', y = x;
1963 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', x = text;
1964 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', text = tmp;
1965 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', }
1966  
1967 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', // If there are any newlines in text, we assume
1968 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', // the user wanted to print multiple lines, so break the
1969 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', // text up into an array. If the text is already an array,
1970 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', // we assume the user knows what they are doing.
1971 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', // Convert text into an array anyway to simplify
1972 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', // later code.
1973 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', if (typeof text === 'string') {
1974 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', if(text.match(/[\n\r]/)) {
1975 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', text = text.split( /\r\n|\r|\n/g);
1976 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', } else {
1977 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', text = [text];
1978 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', }
1979 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', }
1980 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', if (typeof transform === 'string') {
1981 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', align = transform;
1982 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', transform = null;
1983 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', }
1984 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', if (typeof flags === 'string') {
1985 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', align = flags;
1986 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', flags = null;
1987 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', }
1988 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', if (typeof flags === 'number') {
1989 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', transform = flags;
1990 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', flags = null;
1991 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', }
1992  
1993 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', var todo;
1994 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', if (transform && typeof transform === "number") {
1995 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', transform *= (Math.PI / 180);
1996 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', var c = Math.cos(transform),
1997 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', s = Math.sin(transform);
1998 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', transform = new Matrix(c, s , -s, c, 0, 0);
1999 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', } else if (!transform) {
2000 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', transform = unitMatrix;
2001 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', }
2002  
2003 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', flags = flags || {};
2004 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', if (!('noBOM' in flags))
2005 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', flags.noBOM = true;
2006 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', if (!('autoencode' in flags))
2007 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', flags.autoencode = true;
2008  
2009 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', var strokeOption = '';
2010 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', var pageContext = this.internal.getCurrentPageInfo().pageContext;
2011 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', if (true === flags.stroke){
2012 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', if (pageContext.lastTextWasStroke !== true){
2013 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', strokeOption = '1 Tr\n';
2014 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', pageContext.lastTextWasStroke = true;
2015 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', }
2016 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', }
2017 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', else{
2018 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', if (pageContext.lastTextWasStroke){
2019 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', strokeOption = '0 Tr\n';
2020 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', }
2021 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', pageContext.lastTextWasStroke = false;
2022 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', }
2023  
2024 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', if (typeof this._runningPageHeight === 'undefined'){
2025 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', this._runningPageHeight = 0;
2026 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', }
2027  
2028 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', if (typeof text === 'string') {
2029 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', text = ESC(text);
2030 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', } else if (Object.prototype.toString.call(text) === '[object Array]') {
2031 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', // we don't want to destroy original text array, so cloning it
2032 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', var sa = text.concat(), da = [], len = sa.length;
2033 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', // we do array.join('text that must not be PDFescaped")
2034 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', // thus, pdfEscape each component separately
2035 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', while (len--) {
2036 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', da.push(ESC(sa.shift()));
2037 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', }
2038 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', var linesLeft = Math.ceil((y - this._runningPageHeight) / (activeFontSize * lineHeightProportion));
2039 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', if (0 <= linesLeft && linesLeft < da.length + 1) {
2040 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', //todo = da.splice(linesLeft-1);
2041 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', }
2042  
2043 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', if( align ) {
2044 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', var left,
2045 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', prevX,
2046 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', maxLineLength,
2047 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', leading = activeFontSize * lineHeightProportion,
2048 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', lineWidths = text.map( function( v ) {
2049 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', return this.getStringUnitWidth( v ) * activeFontSize;
2050 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', }, this );
2051 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', maxLineLength = Math.max.apply( Math, lineWidths );
2052 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', // The first line uses the "main" Td setting,
2053 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', // and the subsequent lines are offset by the
2054 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', // previous line's x coordinate.
2055 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', if( align === "center" ) {
2056 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', // The passed in x coordinate defines
2057 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', // the center point.
2058 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', left = x - maxLineLength / 2;
2059 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', x -= lineWidths[0] / 2;
2060 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', } else if ( align === "right" ) {
2061 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', // The passed in x coordinate defines the
2062 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', // rightmost point of the text.
2063 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', left = x - maxLineLength;
2064 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', x -= lineWidths[0];
2065 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', } else {
2066 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', throw new Error('Unrecognized alignment option, use "center" or "right".');
2067 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', }
2068 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', prevX = x;
2069 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', text = da[0] + ") Tj\n";
2070 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', for ( i = 1, len = da.length ; i < len; i++ ) {
2071 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', var delta = maxLineLength - lineWidths[i];
2072 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', if( align === "center" ) delta /= 2;
2073 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', // T* = x-offset leading Td ( text )
2074 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', text += ( ( left - prevX ) + delta ) + " -" + leading + " Td (" + da[i];
2075 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', prevX = left + delta;
2076 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-', if( i < len - 1 ) {
2077 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) { text += ") Tj\n";
2078 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) { }
2079 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) { }
2080 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) { } else {
2081 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) { text = da.join(") Tj\nT* (");
2082 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) { }
2083 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) { } else {
2084 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) { throw new Error('Type of text must be string or Array. "' + text + '" is not recognized.');
2085 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) { }
2086 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) { // Using "'" ("go next line and render text" mark) would save space but would complicate our rendering code, templates
2087  
2088 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) { // BT .. ET does NOT have default settings for Tf. You must state that explicitely every time for BT .. ET
2089 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) { // if you want text transformation matrix (+ multiline) to work reliably (which reads sizes of things from font declarations)
2090 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) { // Thus, there is NO useful, *reliable* concept of "default" font for a page.
2091 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) { // The fact that "default" (reuse font used before) font worked before in basic cases is an accident
2092 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) { // - readers dealing smartly with brokenness of jsPDF's markup.
2093  
2094 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) { var curY;
2095  
2096 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) { if (todo){
2097 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) { //this.addPage();
2098 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) { //this._runningPageHeight += y - (activeFontSize * 1.7);
2099 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) { //curY = f2(activeFontSize * 1.7);
2100 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) { } else {
2101 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) { curY = f2(y);
2102 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) { }
2103 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) { //curY = f2(((y - this._runningPageHeight));
2104  
2105 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {// if (curY < 0){
2106 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){// console.log('auto page break');
2107 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){// this.addPage();
2108 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){// this._runningPageHeight = y - (activeFontSize * 1.7);
2109 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){// curY = f2(activeFontSize * 1.7);
2110 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){// }
2111  
2112 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){ var translate = new Matrix(1, 0, 0, -1, x, curY);
2113 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){ transform = matrixMult(translate, transform);
2114 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){ var position = transform.toString() + " Tm";
2115  
2116 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){ out(
2117 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){ 'BT\n' +
2118 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){ (activeFontSize * lineHeightProportion) + ' TL\n' + // line spacing
2119 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){ strokeOption +// stroke option
2120 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){ position + '\n(' +
2121 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){ text +
2122 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){ ') Tj\nET');
2123  
2124 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){ if (todo) {
2125 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){ //this.text( todo, x, activeFontSize * 1.7);
2126 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){ //this.text( todo, x, this._runningPageHeight + (activeFontSize * 1.7));
2127 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){ this.text( todo, x, y);// + (activeFontSize * 1.7));
2128 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){ }
2129  
2130 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){ return this;
2131 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){ };
2132  
2133  
2134 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){ API.lstext = function(text, x, y, spacing) {
2135 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){ for (var i = 0, len = text.length ; i < len; i++, x += spacing) this.text(text[i], x, y);
2136 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); };
2137  
2138 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); /**
2139 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * Draw a line
2140 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * @param {number} x1
2141 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * @param {number} y1
2142 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * @param {number} x2
2143 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * @param {number} y2
2144 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * @function
2145 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * @returns {jsPDF}
2146 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * @methodOf jsPDF#
2147 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * @name line
2148 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); */
2149 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); API.line = function(x1, y1, x2, y2) {
2150 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); return this.lines([[x2 - x1, y2 - y1]], x1, y1, [1, 1], "D");
2151 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); };
2152  
2153 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); API.clip = function() {
2154 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); // By patrick-roberts, github.com/MrRio/jsPDF/issues/328
2155 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); // Call .clip() after calling .rect() with a style argument of null
2156 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); out('W'); // clip
2157 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); out('S'); // stroke path; necessary for clip to work
2158 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); };
2159  
2160  
2161 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); /**
2162 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * @typedef {Object} PatternData
2163 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * {Matrix|undefined} matrix
2164 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * {Number|undefined} xStep
2165 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * {Number|undefined} yStep
2166 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * {Array.<Number>|undefined} boundingBox
2167 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); */
2168  
2169 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); /**
2170 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * Adds series of curves (straight lines or cubic bezier curves) to canvas, starting at `x`, `y` coordinates.
2171 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * All data points in `lines` are relative to last line origin.
2172 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * `x`, `y` become x1,y1 for first line / curve in the set.
2173 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * For lines you only need to specify [x2, y2] - (ending point) vector against x1, y1 starting point.
2174 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * For bezier curves you need to specify [x2,y2,x3,y3,x4,y4] - vectors to control points 1, 2, ending point. All vectors are against the start of the curve - x1,y1.
2175 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); *
2176 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * @example .lines([[2,2],[-2,2],[1,1,2,2,3,3],[2,1]], 212,110, 10) // line, line, bezier curve, line
2177 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * @param {Array} lines Array of *vector* shifts as pairs (lines) or sextets (cubic bezier curves).
2178 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * @param {Number} x Coordinate (in units declared at inception of PDF document) against left edge of the page
2179 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * @param {Number} y Coordinate (in units declared at inception of PDF document) against upper edge of the page
2180 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * @param {Number} scale (Defaults to [1.0,1.0]) x,y Scaling factor for all vectors. Elements can be any floating number Sub-one makes drawing smaller. Over-one grows the drawing. Negative flips the direction.
2181 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * @param {String} style A string specifying the painting style or null. Valid styles include: 'S' [default] - stroke, 'F' - fill, and 'DF' (or 'FD') - fill then stroke. A null value postpones setting the style so that a shape may be composed using multiple method calls. The last drawing method call used to define the shape should not have a null style argument.
2182 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * @param {Boolean} closed If true, the path is closed with a straight line from the end of the last curve to the starting point.
2183 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * @param {String} patternKey The pattern key for the pattern that should be used to fill the path.
2184 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * @param {Matrix|PatternData} patternData The matrix that transforms the pattern into user space, or an object that
2185 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * will modify the pattern on use.
2186 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * @function
2187 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * @returns {jsPDF}
2188 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * @methodOf jsPDF#
2189 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * @name lines
2190 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); */
2191 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); API.lines = function(lines, x, y, scale, style, closed, patternKey, patternData) {
2192 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); var scalex,scaley,i,l,leg,x2,y2,x3,y3,x4,y4;
2193  
2194 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); // Pre-August-2012 the order of arguments was function(x, y, lines, scale, style)
2195 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); // in effort to make all calls have similar signature like
2196 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); // function(content, coordinateX, coordinateY , miscellaneous)
2197 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); // this method had its args flipped.
2198 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); // code below allows backward compatibility with old arg order.
2199 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); if (typeof lines === 'number') {
2200 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); var tmp = y;
2201 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); y = x;
2202 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); x = lines;
2203 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); lines = tmp;
2204 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); }
2205  
2206 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); scale = scale || [1, 1];
2207  
2208 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); // starting point
2209 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); out(f3(x) + ' ' + f3(y) + ' m ');
2210  
2211 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); scalex = scale[0];
2212 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); scaley = scale[1];
2213 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); l = lines.length;
2214 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); //, x2, y2 // bezier only. In page default measurement "units", *after* scaling
2215 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); //, x3, y3 // bezier only. In page default measurement "units", *after* scaling
2216 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); // ending point for all, lines and bezier. . In page default measurement "units", *after* scaling
2217 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); x4 = x; // last / ending point = starting point for first item.
2218 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); y4 = y; // last / ending point = starting point for first item.
2219  
2220 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); for (i = 0; i < l; i++) {
2221 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); leg = lines[i];
2222 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); if (leg.length === 2) {
2223 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); // simple line
2224 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); x4 = leg[0] * scalex + x4; // here last x4 was prior ending point
2225 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); y4 = leg[1] * scaley + y4; // here last y4 was prior ending point
2226 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); out(f3(x4) + ' ' + f3(y4) + ' l');
2227 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); } else {
2228 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); // bezier curve
2229 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); x2 = leg[0] * scalex + x4; // here last x4 is prior ending point
2230 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); y2 = leg[1] * scaley + y4; // here last y4 is prior ending point
2231 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); x3 = leg[2] * scalex + x4; // here last x4 is prior ending point
2232 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); y3 = leg[3] * scaley + y4; // here last y4 is prior ending point
2233 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); x4 = leg[4] * scalex + x4; // here last x4 was prior ending point
2234 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); y4 = leg[5] * scaley + y4; // here last y4 was prior ending point
2235 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); out(
2236 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); f3(x2) + ' ' +
2237 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); f3(y2) + ' ' +
2238 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); f3(x3) + ' ' +
2239 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); f3(y3) + ' ' +
2240 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); f3(x4) + ' ' +
2241 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); f3(y4) + ' c');
2242 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); }
2243 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); }
2244  
2245 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); if (closed) {
2246 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); out('h');
2247 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); }
2248  
2249 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); putStyle(style, patternKey, patternData);
2250  
2251 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); return this;
2252 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); };
2253  
2254 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); /**
2255 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * Similar to {@link API.lines} but all coordinates are interpreted as absolute coordinates instead of relative.
2256 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * @param {Array<Object>} lines An array of {op: operator, c: coordinates} object, where op is one of "m" (move to), "l" (line to)
2257 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * "c" (cubic bezier curve) and "h" (close (sub)path)). c is an array of coordinates. "m" and "l" expect two, "c"
2258 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * six and "h" an empty array (or undefined).
2259 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * @param {String} style The style
2260 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * @param {String} patternKey The pattern key for the pattern that should be used to fill the path.
2261 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * @param {Matrix|PatternData} patternData The matrix that transforms the pattern into user space, or an object that
2262 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * will modify the pattern on use.
2263 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * @function
2264 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * @returns {jsPDF}
2265 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * @methodOf jsPDF#
2266 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * @name path
2267 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); */
2268 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); API.path = function (lines, style, patternKey, patternData) {
2269  
2270 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); for (var i = 0; i < lines.length; i++) {
2271 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); var leg = lines[i];
2272 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); var coords = leg.c;
2273 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); switch (leg.op) {
2274 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); case "m":
2275 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); // move
2276 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); out(f3(coords[0]) + ' ' + f3(coords[1]) + ' m');
2277 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); break;
2278 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); case "l":
2279 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); // simple line
2280 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); out(f3(coords[0]) + ' ' + f3(coords[1]) + ' l');
2281 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); break;
2282 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); case "c":
2283 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); // bezier curve
2284 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); out([
2285 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); f3(coords[0]),
2286 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); f3(coords[1]),
2287 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); f3(coords[2]),
2288 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); f3(coords[3]),
2289 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); f3(coords[4]),
2290 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); f3(coords[5]),
2291 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); "c"
2292 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); ].join(" "));
2293 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); break;
2294 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); case "h":
2295 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); // close path
2296 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); out("h");
2297 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); }
2298  
2299  
2300 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); }
2301  
2302 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); putStyle(style, patternKey, patternData);
2303  
2304 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); return this;
2305 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); };
2306  
2307 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); /**
2308 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * Adds a rectangle to PDF
2309 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); *
2310 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * @param {Number} x Coordinate (in units declared at inception of PDF document) against left edge of the page
2311 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * @param {Number} y Coordinate (in units declared at inception of PDF document) against upper edge of the page
2312 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * @param {Number} w Width (in units declared at inception of PDF document)
2313 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * @param {Number} h Height (in units declared at inception of PDF document)
2314 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * @param {String} style A string specifying the painting style or null. Valid styles include: 'S' [default] - stroke, 'F' - fill, and 'DF' (or 'FD') - fill then stroke. A null value postpones setting the style so that a shape may be composed using multiple method calls. The last drawing method call used to define the shape should not have a null style argument.
2315 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * @param {String} patternKey The pattern key for the pattern that should be used to fill the primitive.
2316 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * @param {Matrix|PatternData} patternData The matrix that transforms the pattern into user space, or an object that
2317 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * will modify the pattern on use.
2318 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * @function
2319 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * @returns {jsPDF}
2320 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * @methodOf jsPDF#
2321 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * @name rect
2322 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); */
2323 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); API.rect = function(x, y, w, h, style, patternKey, patternData) {
2324 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); out([
2325 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); f2(x),
2326 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); f2(y),
2327 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); f2(w),
2328 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); f2(-h),
2329 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); 're'
2330 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); ].join(' '));
2331  
2332 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); putStyle(style, patternKey, patternData);
2333  
2334 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); return this;
2335 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); };
2336  
2337 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); /**
2338 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * Adds a triangle to PDF
2339 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); *
2340 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * @param {Number} x1 Coordinate (in units declared at inception of PDF document) against left edge of the page
2341 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * @param {Number} y1 Coordinate (in units declared at inception of PDF document) against upper edge of the page
2342 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * @param {Number} x2 Coordinate (in units declared at inception of PDF document) against left edge of the page
2343 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * @param {Number} y2 Coordinate (in units declared at inception of PDF document) against upper edge of the page
2344 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * @param {Number} x3 Coordinate (in units declared at inception of PDF document) against left edge of the page
2345 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * @param {Number} y3 Coordinate (in units declared at inception of PDF document) against upper edge of the page
2346 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * @param {String} style A string specifying the painting style or null. Valid styles include: 'S' [default] - stroke, 'F' - fill, and 'DF' (or 'FD') - fill then stroke. A null value postpones setting the style so that a shape may be composed using multiple method calls. The last drawing method call used to define the shape should not have a null style argument.
2347 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * @param {String} patternKey The pattern key for the pattern that should be used to fill the primitive.
2348 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * @param {Matrix|PatternData} patternData The matrix that transforms the pattern into user space, or an object that
2349 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * will modify the pattern on use.
2350 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * @function
2351 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * @returns {jsPDF}
2352 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * @methodOf jsPDF#
2353 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * @name triangle
2354 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); */
2355 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); API.triangle = function(x1, y1, x2, y2, x3, y3, style, patternKey, patternData) {
2356 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); this.lines(
2357 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); [
2358 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); [x2 - x1, y2 - y1], // vector to point 2
2359 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); [x3 - x2, y3 - y2], // vector to point 3
2360 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); [x1 - x3, y1 - y3]// closing vector back to point 1
2361 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); ],
2362 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); x1,
2363 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); y1, // start of path
2364 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); [1, 1],
2365 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); style,
2366 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); true,
2367 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); patternKey,
2368 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); patternData
2369 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); );
2370 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); return this;
2371 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); };
2372  
2373 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); /**
2374 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * Adds a rectangle with rounded corners to PDF
2375 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); *
2376 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * @param {Number} x Coordinate (in units declared at inception of PDF document) against left edge of the page
2377 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * @param {Number} y Coordinate (in units declared at inception of PDF document) against upper edge of the page
2378 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * @param {Number} w Width (in units declared at inception of PDF document)
2379 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * @param {Number} h Height (in units declared at inception of PDF document)
2380 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * @param {Number} rx Radius along x axis (in units declared at inception of PDF document)
2381 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * @param {Number} ry Radius along y axis (in units declared at inception of PDF document)
2382 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * @param {String} style A string specifying the painting style or null. Valid styles include: 'S' [default] - stroke, 'F' - fill, and 'DF' (or 'FD') - fill then stroke. A null value postpones setting the style so that a shape may be composed using multiple method calls. The last drawing method call used to define the shape should not have a null style argument.
2383 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * @param {String} patternKey The pattern key for the pattern that should be used to fill the primitive.
2384 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * @param {Matrix|PatternData} patternData The matrix that transforms the pattern into user space, or an object that
2385 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * will modify the pattern on use.
2386 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * @function
2387 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * @returns {jsPDF}
2388 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * @methodOf jsPDF#
2389 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * @name roundedRect
2390 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); */
2391 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); API.roundedRect = function(x, y, w, h, rx, ry, style, patternKey, patternData) {
2392 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); var MyArc = 4 / 3 * (Math.SQRT2 - 1);
2393  
2394 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); rx = Math.min(rx, w * 0.5);
2395 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); ry = Math.min(ry, h * 0.5);
2396  
2397 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); this.lines(
2398 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); [
2399 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); [(w - 2 * rx), 0],
2400 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); [(rx * MyArc), 0, rx, ry - (ry * MyArc), rx, ry],
2401 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); [0, (h - 2 * ry)],
2402 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); [0, (ry * MyArc), - (rx * MyArc), ry, -rx, ry],
2403 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); [(-w + 2 * rx), 0],
2404 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); [ - (rx * MyArc), 0, -rx, - (ry * MyArc), -rx, -ry],
2405 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); [0, (-h + 2 * ry)],
2406 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); [0, - (ry * MyArc), (rx * MyArc), -ry, rx, -ry]
2407 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); ],
2408 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); x + rx,
2409 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); y, // start of path
2410 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); [1, 1],
2411 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); style,
2412 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); true,
2413 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); patternKey,
2414 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); patternData
2415 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); );
2416 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); return this;
2417 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); };
2418  
2419 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); /**
2420 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * Adds an ellipse to PDF
2421 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); *
2422 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * @param {Number} x Coordinate (in units declared at inception of PDF document) against left edge of the page
2423 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * @param {Number} y Coordinate (in units declared at inception of PDF document) against upper edge of the page
2424 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * @param {Number} rx Radius along x axis (in units declared at inception of PDF document)
2425 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * @param {Number} ry Radius along y axis (in units declared at inception of PDF document)
2426 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * @param {String} style A string specifying the painting style or null. Valid styles include: 'S' [default] - stroke, 'F' - fill, and 'DF' (or 'FD') - fill then stroke. A null value postpones setting the style so that a shape may be composed using multiple method calls. The last drawing method call used to define the shape should not have a null style argument.
2427 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * @param {String} patternKey The pattern key for the pattern that should be used to fill the primitive.
2428 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * @param {Matrix|PatternData} patternData The matrix that transforms the pattern into user space, or an object that
2429 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * will modify the pattern on use.
2430 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * @function
2431 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * @returns {jsPDF}
2432 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * @methodOf jsPDF#
2433 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * @name ellipse
2434 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); */
2435 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); API.ellipse = function(x, y, rx, ry, style, patternKey, patternData) {
2436 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); var lx = 4 / 3 * (Math.SQRT2 - 1) * rx,
2437 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); ly = 4 / 3 * (Math.SQRT2 - 1) * ry;
2438  
2439 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); out([
2440 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); f2(x + rx),
2441 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); f2(y),
2442 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); 'm',
2443 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); f2(x + rx),
2444 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); f2(y - ly),
2445 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); f2(x + lx),
2446 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); f2(y - ry),
2447 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); f2(x),
2448 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); f2(y - ry),
2449 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); 'c'
2450 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); ].join(' '));
2451 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); out([
2452 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); f2(x - lx),
2453 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); f2(y - ry),
2454 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); f2(x - rx),
2455 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); f2(y - ly),
2456 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); f2(x - rx),
2457 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); f2(y),
2458 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); 'c'
2459 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); ].join(' '));
2460 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); out([
2461 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); f2(x - rx),
2462 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); f2(y + ly),
2463 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); f2(x - lx),
2464 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); f2(y + ry),
2465 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); f2(x),
2466 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); f2(y + ry),
2467 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); 'c'
2468 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); ].join(' '));
2469 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); out([
2470 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); f2(x + lx),
2471 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); f2(y + ry),
2472 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); f2(x + rx),
2473 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); f2(y + ly),
2474 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); f2(x + rx),
2475 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); f2(y),
2476 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); 'c'
2477 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); ].join(' '));
2478  
2479 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); putStyle(style, patternKey, patternData);
2480  
2481 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); return this;
2482 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); };
2483  
2484 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); /**
2485 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * Adds an circle to PDF
2486 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); *
2487 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * @param {Number} x Coordinate (in units declared at inception of PDF document) against left edge of the page
2488 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * @param {Number} y Coordinate (in units declared at inception of PDF document) against upper edge of the page
2489 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * @param {Number} r Radius (in units declared at inception of PDF document)
2490 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * @param {String} style A string specifying the painting style or null. Valid styles include: 'S' [default] - stroke, 'F' - fill, and 'DF' (or 'FD') - fill then stroke. A null value postpones setting the style so that a shape may be composed using multiple method calls. The last drawing method call used to define the shape should not have a null style argument.
2491 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * @param {String} patternKey The pattern key for the pattern that should be used to fill the primitive.
2492 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * @param {Matrix|PatternData} patternData The matrix that transforms the pattern into user space, or an object that
2493 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * will modify the pattern on use.
2494 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * @function
2495 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * @returns {jsPDF}
2496 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * @methodOf jsPDF#
2497 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * @name circle
2498 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); */
2499 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); API.circle = function(x, y, r, style, patternKey, patternData) {
2500 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); return this.ellipse(x, y, r, r, style, patternKey, patternData);
2501 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); };
2502  
2503 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); /**
2504 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * Adds a properties to the PDF document
2505 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); *
2506 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * @param {Object} properties A property_name-to-property_value object structure.
2507 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * @function
2508 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * @returns {jsPDF}
2509 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * @methodOf jsPDF#
2510 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * @name setProperties
2511 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); */
2512 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); API.setProperties = function(properties) {
2513 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); // copying only those properties we can render.
2514 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); for (var property in documentProperties) {
2515 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); if (documentProperties.hasOwnProperty(property) && properties[property]) {
2516 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); documentProperties[property] = properties[property];
2517 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); }
2518 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); }
2519 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); return this;
2520 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); };
2521  
2522 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); /**
2523 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * Sets font size for upcoming text elements.
2524 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); *
2525 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * @param {Number} size Font size in points.
2526 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * @function
2527 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * @returns {jsPDF}
2528 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * @methodOf jsPDF#
2529 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * @name setFontSize
2530 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); */
2531 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); API.setFontSize = function(size) {
2532 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); activeFontSize = size;
2533 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); out("/" + activeFontKey + " " + activeFontSize + " Tf");
2534 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); return this;
2535 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); };
2536  
2537 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); API.getFontSize = function () {
2538 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); return activeFontSize;
2539 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); };
2540  
2541 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); /**
2542 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * Sets text font face, variant for upcoming text elements.
2543 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * See output of jsPDF.getFontList() for possible font names, styles.
2544 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); *
2545 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * @param {String} fontName Font name or family. Example: "times"
2546 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * @param {String} fontStyle Font style or variant. Example: "italic"
2547 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * @function
2548 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * @returns {jsPDF}
2549 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * @methodOf jsPDF#
2550 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * @name setFont
2551 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); */
2552 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); API.setFont = function(fontName, fontStyle) {
2553 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); activeFontKey = getFont(fontName, fontStyle);
2554 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); // if font is not found, the above line blows up and we never go further
2555 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); out("/" + activeFontKey + " " + activeFontSize + " Tf");
2556 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); return this;
2557 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); };
2558  
2559 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); /**
2560 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * Switches font style or variant for upcoming text elements,
2561 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * while keeping the font face or family same.
2562 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * See output of jsPDF.getFontList() for possible font names, styles.
2563 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); *
2564 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * @param {String} style Font style or variant. Example: "italic"
2565 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * @function
2566 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * @returns {jsPDF}
2567 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * @methodOf jsPDF#
2568 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * @name setFontStyle
2569 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); */
2570 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); API.setFontStyle = API.setFontType = function(style) {
2571 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); activeFontKey = getFont(undefined, style);
2572 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); // if font is not found, the above line blows up and we never go further
2573 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); return this;
2574 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); };
2575  
2576 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); /**
2577 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * Returns an object - a tree of fontName to fontStyle relationships available to
2578 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * active PDF document.
2579 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); *
2580 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * @public
2581 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * @function
2582 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * @returns {Object} Like {'times':['normal', 'italic', ... ], 'arial':['normal', 'bold', ... ], ... }
2583 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * @methodOf jsPDF#
2584 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * @name getFontList
2585 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); */
2586 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); API.getFontList = function() {
2587 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); // TODO: iterate over fonts array or return copy of fontmap instead in case more are ever added.
2588 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); var list = {},fontName,fontStyle,tmp;
2589  
2590 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); for (fontName in fontmap) {
2591 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); if (fontmap.hasOwnProperty(fontName)) {
2592 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); list[fontName] = tmp = [];
2593 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); for (fontStyle in fontmap[fontName]) {
2594 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); if (fontmap[fontName].hasOwnProperty(fontStyle)) {
2595 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); tmp.push(fontStyle);
2596 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); }
2597 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); }
2598 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); }
2599 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); }
2600  
2601 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); return list;
2602 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); };
2603  
2604 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); /**
2605 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * Add a custom font.
2606 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); *
2607 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * @param {String} postScriptName name of the Font. Example: "Menlo-Regular"
2608 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * @param {String} fontName of font-family from @font-face definition. Example: "Menlo Regular"
2609 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * @param {String} fontStyle style. Example: "normal"
2610 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * @function
2611 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * @returns the {fontKey} (same as the internal method)
2612 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * @methodOf jsPDF#
2613 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * @name addFont
2614 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); */
2615 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); API.addFont = function(postScriptName, fontName, fontStyle) {
2616 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); addFont(postScriptName, fontName, fontStyle, 'StandardEncoding');
2617 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); };
2618  
2619 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); /**
2620 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * Sets line width for upcoming lines.
2621 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); *
2622 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * @param {Number} width Line width (in units declared at inception of PDF document)
2623 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * @function
2624 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * @returns {jsPDF}
2625 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * @methodOf jsPDF#
2626 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * @name setLineWidth
2627 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); */
2628 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); API.setLineWidth = function(width) {
2629 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); out(width.toFixed(2) + ' w');
2630 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); return this;
2631 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); };
2632  
2633 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); /**
2634 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * Sets the stroke color for upcoming elements.
2635 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); *
2636 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * Depending on the number of arguments given, Gray, RGB, or CMYK
2637 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * color space is implied.
2638 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); *
2639 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * When only ch1 is given, "Gray" color space is implied and it
2640 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * must be a value in the range from 0.00 (solid black) to to 1.00 (white)
2641 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * if values are communicated as String types, or in range from 0 (black)
2642 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * to 255 (white) if communicated as Number type.
2643 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * The RGB-like 0-255 range is provided for backward compatibility.
2644 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); *
2645 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * When only ch1,ch2,ch3 are given, "RGB" color space is implied and each
2646 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * value must be in the range from 0.00 (minimum intensity) to to 1.00
2647 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * (max intensity) if values are communicated as String types, or
2648 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * from 0 (min intensity) to to 255 (max intensity) if values are communicated
2649 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * as Number types.
2650 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * The RGB-like 0-255 range is provided for backward compatibility.
2651 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); *
2652 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * When ch1,ch2,ch3,ch4 are given, "CMYK" color space is implied and each
2653 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * value must be a in the range from 0.00 (0% concentration) to to
2654 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * 1.00 (100% concentration)
2655 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); *
2656 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * Because JavaScript treats fixed point numbers badly (rounds to
2657 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * floating point nearest to binary representation) it is highly advised to
2658 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * communicate the fractional numbers as String types, not JavaScript Number type.
2659 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); *
2660 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * @param {Number|String} ch1 Color channel value
2661 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * @param {Number|String} ch2 Color channel value
2662 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * @param {Number|String} ch3 Color channel value
2663 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * @param {Number|String} ch4 Color channel value
2664 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); *
2665 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * @function
2666 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * @returns {jsPDF}
2667 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * @methodOf jsPDF#
2668 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * @name setDrawColor
2669 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); */
2670 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); API.setDrawColor = function(ch1, ch2, ch3, ch4) {
2671 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); var color;
2672 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); if (ch2 === undefined || (ch4 === undefined && ch1 === ch2 === ch3)) {
2673 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); // Gray color space.
2674 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); if (typeof ch1 === 'string') {
2675 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); color = ch1 + ' G';
2676 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); } else {
2677 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); color = f2(ch1 / 255) + ' G';
2678 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); }
2679 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); } else if (ch4 === undefined) {
2680 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); // RGB
2681 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); if (typeof ch1 === 'string') {
2682 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); color = [ch1, ch2, ch3, 'RG'].join(' ');
2683 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); } else {
2684 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); color = [f2(ch1 / 255), f2(ch2 / 255), f2(ch3 / 255), 'RG'].join(' ');
2685 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); }
2686 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); } else {
2687 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); // CMYK
2688 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); if (typeof ch1 === 'string') {
2689 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); color = [ch1, ch2, ch3, ch4, 'K'].join(' ');
2690 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); } else {
2691 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); color = [f2(ch1), f2(ch2), f2(ch3), f2(ch4), 'K'].join(' ');
2692 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); }
2693 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); }
2694  
2695 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); out(color);
2696 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); return this;
2697 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); };
2698  
2699 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); /**
2700 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * Sets the fill color for upcoming elements.
2701 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); *
2702 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * Depending on the number of arguments given, Gray, RGB, or CMYK
2703 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * color space is implied.
2704 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); *
2705 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * When only ch1 is given, "Gray" color space is implied and it
2706 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * must be a value in the range from 0.00 (solid black) to to 1.00 (white)
2707 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * if values are communicated as String types, or in range from 0 (black)
2708 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * to 255 (white) if communicated as Number type.
2709 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * The RGB-like 0-255 range is provided for backward compatibility.
2710 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); *
2711 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * When only ch1,ch2,ch3 are given, "RGB" color space is implied and each
2712 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * value must be in the range from 0.00 (minimum intensity) to to 1.00
2713 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * (max intensity) if values are communicated as String types, or
2714 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * from 0 (min intensity) to to 255 (max intensity) if values are communicated
2715 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * as Number types.
2716 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * The RGB-like 0-255 range is provided for backward compatibility.
2717 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); *
2718 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * When ch1,ch2,ch3,ch4 are given, "CMYK" color space is implied and each
2719 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * value must be a in the range from 0.00 (0% concentration) to to
2720 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * 1.00 (100% concentration)
2721 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); *
2722 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * Because JavaScript treats fixed point numbers badly (rounds to
2723 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * floating point nearest to binary representation) it is highly advised to
2724 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * communicate the fractional numbers as String types, not JavaScript Number type.
2725 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); *
2726 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * @param {Number|String} ch1 Color channel value
2727 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * @param {Number|String} ch2 Color channel value
2728 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * @param {Number|String} ch3 Color channel value
2729 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * @param {Number|String} ch4 Color channel value
2730 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); *
2731 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * @function
2732 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * @returns {jsPDF}
2733 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * @methodOf jsPDF#
2734 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * @name setFillColor
2735 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); */
2736 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); API.setFillColor = function(ch1, ch2, ch3, ch4) {
2737 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); var color;
2738  
2739 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); if (ch2 === undefined || (ch4 === undefined && ch1 === ch2 === ch3)) {
2740 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); // Gray color space.
2741 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); if (typeof ch1 === 'string') {
2742 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); color = ch1 + ' g';
2743 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); } else {
2744 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); color = f2(ch1 / 255) + ' g';
2745 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); }
2746 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); } else if (ch4 === undefined || typeof ch4 === 'object') {
2747 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); // RGB
2748 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); if (typeof ch1 === 'string') {
2749 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); color = [ch1, ch2, ch3, 'rg'].join(' ');
2750 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); } else {
2751 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); color = [f2(ch1 / 255), f2(ch2 / 255), f2(ch3 / 255), 'rg'].join(' ');
2752 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); }
2753 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); if (ch4 && ch4.a === 0){
2754 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); //TODO Implement transparency.
2755 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); //WORKAROUND use white for now
2756 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); color = ['255', '255', '255', 'rg'].join(' ');
2757 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); }
2758 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); } else {
2759 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); // CMYK
2760 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); if (typeof ch1 === 'string') {
2761 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); color = [ch1, ch2, ch3, ch4, 'k'].join(' ');
2762 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); } else {
2763 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); color = [f2(ch1), f2(ch2), f2(ch3), f2(ch4), 'k'].join(' ');
2764 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); }
2765 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); }
2766  
2767 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); out(color);
2768 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); return this;
2769 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); };
2770  
2771 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); /**
2772 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * Sets the text color for upcoming elements.
2773 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * If only one, first argument is given,
2774 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * treats the value as gray-scale color value.
2775 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); *
2776 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * @param {Number} r Red channel color value in range 0-255 or {String} r color value in hexadecimal, example: '#FFFFFF'
2777 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * @param {Number} g Green channel color value in range 0-255
2778 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * @param {Number} b Blue channel color value in range 0-255
2779 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * @function
2780 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * @returns {jsPDF}
2781 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * @methodOf jsPDF#
2782 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * @name setTextColor
2783 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); */
2784 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); API.setTextColor = function(r, g, b) {
2785 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); if ((typeof r === 'string') && /^#[0-9A-Fa-f]{6}$/.test(r)) {
2786 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); var hex = parseInt(r.substr(1), 16);
2787 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); r = (hex >> 16) & 255;
2788 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); g = (hex >> 8) & 255;
2789 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); b = (hex & 255);
2790 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); }
2791  
2792 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); if ((r === 0 && g === 0 && b === 0) || (typeof g === 'undefined')) {
2793 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); textColor = f3(r / 255) + ' g';
2794 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); } else {
2795 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); textColor = [f3(r / 255), f3(g / 255), f3(b / 255), 'rg'].join(' ');
2796 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); }
2797  
2798 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); out(textColor);
2799  
2800 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); return this;
2801 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); };
2802  
2803 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); /**
2804 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * Sets a either previously added {@link GState} (via {@link addGState}) or a new {@link GState}.
2805 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * @param {String|GState} gState If type is string, a previously added GState is used, if type is GState
2806 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * it will be added before use.
2807 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * @function
2808 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * @returns {jsPDF}
2809 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * @methodOf jsPDF#
2810 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * @name setGState
2811 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); */
2812 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); API.setGState = function (gState) {
2813 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); if (typeof gState === "string") {
2814 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); gState = gStates[gStatesMap[gState]];
2815 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); } else {
2816 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); gState = addGState(null, gState);
2817 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); }
2818  
2819 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); if (!gState.equals(activeGState)) {
2820 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); out("/" + gState.id + " gs");
2821 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); activeGState = gState;
2822 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); }
2823 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); };
2824  
2825 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); /**
2826 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * Is an Object providing a mapping from human-readable to
2827 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * integer flag values designating the varieties of line cap
2828 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * and join styles.
2829 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); *
2830 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * @returns {Object}
2831 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * @fieldOf jsPDF#
2832 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * @name CapJoinStyles
2833 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); */
2834 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); API.CapJoinStyles = {
2835  
2836 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); 'butt' : 0,
2837 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); 'but' : 0,
2838 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); 'miter' : 0,
2839 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); 1 : 1,
2840 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); 'round' : 1,
2841 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); 'rounded' : 1,
2842 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); 'circle' : 1,
2843 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); 2 : 2,
2844 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); 'projecting' : 2,
2845 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); 'project' : 2,
2846 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); 'square' : 2,
2847 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); 'bevel' : 2
2848 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); };
2849  
2850 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); /**
2851 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * Sets the line cap styles
2852 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * See {jsPDF.CapJoinStyles} for variants
2853 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); *
2854 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * @param {String|Number} style A string or number identifying the type of line cap
2855 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * @function
2856 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * @returns {jsPDF}
2857 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * @methodOf jsPDF#
2858 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * @name setLineCap
2859 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); */
2860 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); API.setLineCap = function(style) {
2861 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); var id = this.CapJoinStyles[style];
2862 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); if (id === undefined) {
2863 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); throw new Error("Line cap style of '" + style + "' is not recognized. See or extend .CapJoinStyles property for valid styles");
2864 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); }
2865 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); lineCapID = id;
2866 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); out(id + ' J');
2867  
2868 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); return this;
2869 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); };
2870  
2871 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); /**
2872 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * Sets the line join styles
2873 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * See {jsPDF.CapJoinStyles} for variants
2874 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); *
2875 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * @param {String|Number} style A string or number identifying the type of line join
2876 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * @function
2877 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * @returns {jsPDF}
2878 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * @methodOf jsPDF#
2879 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * @name setLineJoin
2880 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); */
2881 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); API.setLineJoin = function(style) {
2882 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); var id = this.CapJoinStyles[style];
2883 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); if (id === undefined) {
2884 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); throw new Error("Line join style of '" + style + "' is not recognized. See or extend .CapJoinStyles property for valid styles");
2885 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); }
2886 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); lineJoinID = id;
2887 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); out(id + ' j');
2888  
2889 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); return this;
2890 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); };
2891  
2892 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); /**
2893 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * Sets the miter limit.
2894 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * @param {number} miterLimit
2895 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * @function
2896 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * @returns {jsPDF}
2897 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * @methodOf jsPDF#
2898 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * @name setMiterLimit
2899 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); */
2900 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); API.setLineMiterLimit = function (miterLimit) {
2901 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); out(f2(miterLimit) + " M");
2902  
2903 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); return this;
2904 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); };
2905  
2906 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); /**
2907 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * Sets the line dash pattern.
2908 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * @param {Array<number>} array An array containing 0-2 numbers. The first number sets the length of the
2909 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * dashes, the second number the length of the gaps. If the second number is missing, the gaps are considered
2910 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * to be as long as the dashes. An empty array means solid, unbroken lines.
2911 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * @param phase The phase lines start with.
2912 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * @function
2913 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * @returns {jsPDF}
2914 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * @methodOf jsPDF#
2915 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * @name setLineDashPattern
2916 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); */
2917 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); API.setLineDashPattern = function (array, phase) {
2918 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); out([
2919 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); "[" + (array[0] !== undefined ? array[0] : ""),
2920 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); (array[1] !== undefined ? array[1] : "" ) + "]",
2921 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); phase,
2922 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); "d"
2923 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); ].join(" "));
2924  
2925 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); return this;
2926 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); };
2927  
2928 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); // Output is both an internal (for plugins) and external function
2929 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); API.output = output;
2930  
2931 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); /**
2932 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * Saves as PDF document. An alias of jsPDF.output('save', 'filename.pdf')
2933 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * @param {String} filename The filename including extension.
2934 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); *
2935 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * @function
2936 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * @returns {jsPDF}
2937 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * @methodOf jsPDF#
2938 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * @name save
2939 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); */
2940 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); API.save = function(filename) {
2941 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); API.output('save', filename);
2942 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); };
2943  
2944 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); // applying plugins (more methods) ON TOP of built-in API.
2945 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); // this is intentional as we allow plugins to override
2946 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); // built-ins
2947 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); for (var plugin in jsPDF.API) {
2948 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); if (jsPDF.API.hasOwnProperty(plugin)) {
2949 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); if (plugin === 'events' && jsPDF.API.events.length) {
2950 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); (function(events, newEvents) {
2951  
2952 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); // jsPDF.API.events is a JS Array of Arrays
2953 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); // where each Array is a pair of event name, handler
2954 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); // Events were added by plugins to the jsPDF instantiator.
2955 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); // These are always added to the new instance and some ran
2956 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); // during instantiation.
2957 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); var eventname,handler_and_args,i;
2958  
2959 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); for (i = newEvents.length - 1; i !== -1; i--) {
2960 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); // subscribe takes 3 args: 'topic', function, runonce_flag
2961 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); // if undefined, runonce is false.
2962 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); // users can attach callback directly,
2963 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); // or they can attach an array with [callback, runonce_flag]
2964 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); // that's what the "apply" magic is for below.
2965 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); eventname = newEvents[i][0];
2966 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); handler_and_args = newEvents[i][1];
2967 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); events.subscribe.apply(
2968 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); events,
2969 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); [eventname].concat(
2970 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); typeof handler_and_args === 'function' ?
2971 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); [handler_and_args] : handler_and_args));
2972 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); }
2973 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); }(events, jsPDF.API.events));
2974 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); } else {
2975 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); API[plugin] = jsPDF.API[plugin];
2976 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); }
2977 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); }
2978 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); }
2979  
2980 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); //////////////////////////////////////////////////////
2981 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); // continuing initialization of jsPDF Document object
2982 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); //////////////////////////////////////////////////////
2983 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); // Add the first page automatically
2984 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); addFonts();
2985 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); activeFontKey = 'F1';
2986 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); _addPage(format, orientation);
2987  
2988 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); events.publish('initialized');
2989 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); return API;
2990 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); }
2991  
2992 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); /**
2993 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * jsPDF.API is a STATIC property of jsPDF class.
2994 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * jsPDF.API is an object you can add methods and properties to.
2995 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * The methods / properties you add will show up in new jsPDF objects.
2996 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); *
2997 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * One property is prepopulated. It is the 'events' Object. Plugin authors can add topics,
2998 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * callbacks to this object. These will be reassigned to all new instances of jsPDF.
2999 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * Examples:
3000 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * jsPDF.API.events['initialized'] = function(){ 'this' is API object }
3001 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * jsPDF.API.events['addFont'] = function(added_font_object){ 'this' is API object }
3002 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); *
3003 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * @static
3004 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * @public
3005 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * @memberOf jsPDF
3006 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * @name API
3007 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); *
3008 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * @example
3009 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * jsPDF.API.mymethod = function(){
3010 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * // 'this' will be ref to internal API object. see jsPDF source
3011 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * // , so you can refer to built-in methods like so:
3012 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * // this.line(....)
3013 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * // this.text(....)
3014 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * }
3015 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * var pdfdoc = new jsPDF()
3016 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); * pdfdoc.mymethod() // <- !!!!!!
3017 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); */
3018 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); jsPDF.API = {events:[]};
3019 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); jsPDF.version = "1.0.0-trunk";
3020  
3021 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); if (typeof define === 'function' && define.amd) {
3022 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); define('jsPDF', function() {
3023 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); return jsPDF;
3024 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); });
3025 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); } else if (typeof module !== 'undefined' && module.exports) {
3026 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); module.exports = jsPDF;
3027 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); } else {
3028 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); global.jsPDF = jsPDF;
3029 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); }
3030 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y); return jsPDF;
3031 < 1.0; t += dT) {< tValues.length; i++) {< 0 ? '+' : '-',< len - 1 ) {< 0){< len; i++, x += spacing) this.text(text[i], x, y);}(typeof self !== "undefined" && self || typeof window !== "undefined" && window || this));