@@ -78,7 +78,29 @@ var jsPDF = function(/** String */ orientation, /** String */ unit, /** String *
7878 , fontType = NORMAL // Default type
7979 , textColor = "0 g"
8080
81+ /////////////////////
8182 // Private functions
83+ /////////////////////
84+ // simplified (speedier) replacement for sprintf's %.2f conversion
85+ , f2 = function ( number ) {
86+ return number . toFixed ( 2 )
87+ }
88+ // simplified (speedier) replacement for sprintf's %.3f conversion
89+ , f3 = function ( number ) {
90+ return number . toFixed ( 3 )
91+ }
92+ // simplified (speedier) replacement for sprintf's %02d
93+ , padd2 = function ( number ) {
94+ var n = ( number ) . toFixed ( 0 )
95+ if ( number < 10 ) return '0' + n
96+ else return n
97+ }
98+ // simplified (speedier) replacement for sprintf's %02d
99+ , padd10 = function ( number ) {
100+ var n = ( number ) . toFixed ( 0 )
101+ if ( n . length < 10 ) return new Array ( 11 - n . length ) . join ( '0' ) + n
102+ else return n
103+ }
82104 , out = function ( string ) {
83105 if ( outToPages /* set by beginPage */ ) {
84106 pages [ page ] . push ( string )
@@ -123,7 +145,7 @@ var jsPDF = function(/** String */ orientation, /** String */ unit, /** String *
123145 }
124146 out ( kids + ']' )
125147 out ( '/Count ' + page )
126- out ( sprintf ( '/MediaBox [0 0 %.2f %.2f]' , wPt , hPt ) )
148+ out ( '/MediaBox [0 0 ' + f2 ( wPt ) + ' ' + f2 ( hPt ) + ']' )
127149 out ( '>>' )
128150 out ( 'endobj' ) ;
129151 }
@@ -206,15 +228,17 @@ var jsPDF = function(/** String */ orientation, /** String */ unit, /** String *
206228 out ( '/Creator (' + pdfEscape ( documentProperties . creator ) + ')' )
207229 }
208230 var created = new Date ( )
209- out ( '/CreationDate (D:' + sprintf (
210- '%02d%02d%02d%02d%02d%02d'
211- , created . getFullYear ( )
212- , ( created . getMonth ( ) + 1 )
213- , created . getDate ( )
214- , created . getHours ( )
215- , created . getMinutes ( )
216- , created . getSeconds ( )
217- ) + ')' )
231+ out ( '/CreationDate (D:' +
232+ [
233+ created . getFullYear ( )
234+ , padd2 ( created . getMonth ( ) + 1 )
235+ , padd2 ( created . getDate ( ) )
236+ , padd2 ( created . getHours ( ) )
237+ , padd2 ( created . getMinutes ( ) )
238+ , padd2 ( created . getSeconds ( ) )
239+ ] . join ( '' ) +
240+ ')'
241+ )
218242 }
219243 , putCatalog = function ( ) {
220244 out ( '/Type /Catalog' )
@@ -237,7 +261,7 @@ var jsPDF = function(/** String */ orientation, /** String */ unit, /** String *
237261 , _addPage = function ( ) {
238262 beginPage ( )
239263 // Set line width
240- out ( sprintf ( '%.2f w' , ( lineWidth * k ) ) )
264+ out ( f2 ( lineWidth * k ) + ' w' )
241265 // Set draw color
242266 out ( drawColor )
243267 }
@@ -282,7 +306,7 @@ var jsPDF = function(/** String */ orientation, /** String */ unit, /** String *
282306 out ( '0 ' + ( objectNumber + 1 ) )
283307 out ( '0000000000 65535 f ' )
284308 for ( var i = 1 ; i <= objectNumber ; i ++ ) {
285- out ( sprintf ( '%010d 00000 n ', offsets [ i ] ) )
309+ out ( padd10 ( offsets [ i ] ) + ' 00000 n ')
286310 }
287311 // Trailer
288312 out ( 'trailer' )
@@ -362,14 +386,21 @@ var jsPDF = function(/** String */ orientation, /** String */ unit, /** String *
362386 getFont ( ) + ' ' + fontSize + ' Tf\n' +
363387 fontSize + ' TL\n' +
364388 textColor +
365- sprintf ( '\n%.2f %.2f Td\n(' , x * k , ( pageHeight - y ) * k ) +
389+ '\n' + f2 ( x * k ) + ' ' + f2 ( ( pageHeight - y ) * k ) + ' Td\n(' +
366390 str +
367391 ') Tj\nET'
368392 )
369393 return _jsPDF
370394 } ,
371395 line : function ( x1 , y1 , x2 , y2 ) {
372- var str = sprintf ( '%.2f %.2f m %.2f %.2f l S' , x1 * k , ( pageHeight - y1 ) * k , x2 * k , ( pageHeight - y2 ) * k )
396+ var str = [
397+ f2 ( x1 * k )
398+ , f2 ( ( pageHeight - y1 ) * k )
399+ , 'm'
400+ , f2 ( x2 * k )
401+ , f2 ( ( pageHeight - y2 ) * k )
402+ , 'l S'
403+ ] . join ( ' ' )
373404 out ( str )
374405 return _jsPDF
375406 } ,
@@ -380,7 +411,14 @@ var jsPDF = function(/** String */ orientation, /** String */ unit, /** String *
380411 } else if ( style === 'FD' || style === 'DF' ) {
381412 op = 'B'
382413 }
383- out ( sprintf ( '%.2f %.2f %.2f %.2f re %s' , x * k , ( pageHeight - y ) * k , w * k , - h * k , op ) )
414+ out ( [
415+ f2 ( x * k )
416+ , f2 ( ( pageHeight - y ) * k )
417+ , f2 ( w * k )
418+ , f2 ( - h * k )
419+ , 're'
420+ , op
421+ ] . join ( ' ' ) )
384422 return _jsPDF
385423 } ,
386424 ellipse : function ( x , y , rx , ry , style ) {
@@ -391,25 +429,48 @@ var jsPDF = function(/** String */ orientation, /** String */ unit, /** String *
391429 op = 'B'
392430 }
393431 var lx = 4 / 3 * ( Math . SQRT2 - 1 ) * rx
394- var ly = 4 / 3 * ( Math . SQRT2 - 1 ) * ry
395- out ( sprintf ( '%.2f %.2f m %.2f %.2f %.2f %.2f %.2f %.2f c' ,
396- ( x + rx ) * k , ( pageHeight - y ) * k ,
397- ( x + rx ) * k , ( pageHeight - ( y - ly ) ) * k ,
398- ( x + lx ) * k , ( pageHeight - ( y - ry ) ) * k ,
399- x * k , ( pageHeight - ( y - ry ) ) * k ) )
400- out ( sprintf ( '%.2f %.2f %.2f %.2f %.2f %.2f c' ,
401- ( x - lx ) * k , ( pageHeight - ( y - ry ) ) * k ,
402- ( x - rx ) * k , ( pageHeight - ( y - ly ) ) * k ,
403- ( x - rx ) * k , ( pageHeight - y ) * k ) ) ;
404- out ( sprintf ( '%.2f %.2f %.2f %.2f %.2f %.2f c' ,
405- ( x - rx ) * k , ( pageHeight - ( y + ly ) ) * k ,
406- ( x - lx ) * k , ( pageHeight - ( y + ry ) ) * k ,
407- x * k , ( pageHeight - ( y + ry ) ) * k ) )
408- out ( sprintf ( '%.2f %.2f %.2f %.2f %.2f %.2f c %s' ,
409- ( x + lx ) * k , ( pageHeight - ( y + ry ) ) * k ,
410- ( x + rx ) * k , ( pageHeight - ( y + ly ) ) * k ,
411- ( x + rx ) * k , ( pageHeight - y ) * k ,
412- op ) )
432+ , ly = 4 / 3 * ( Math . SQRT2 - 1 ) * ry
433+
434+ out ( [
435+ f2 ( ( x + rx ) * k )
436+ , f2 ( ( pageHeight - y ) * k )
437+ , 'm'
438+ , f2 ( ( x + rx ) * k )
439+ , f2 ( ( pageHeight - ( y - ly ) ) * k )
440+ , f2 ( ( x + lx ) * k )
441+ , f2 ( ( pageHeight - ( y - ry ) ) * k )
442+ , f2 ( x * k )
443+ , f2 ( ( pageHeight - ( y - ry ) ) * k )
444+ , 'c'
445+ ] . join ( ' ' ) )
446+ out ( [
447+ f2 ( ( x - lx ) * k )
448+ , f2 ( ( pageHeight - ( y - ry ) ) * k )
449+ , f2 ( ( x - rx ) * k )
450+ , f2 ( ( pageHeight - ( y - ly ) ) * k )
451+ , f2 ( ( x - rx ) * k )
452+ , f2 ( ( pageHeight - y ) * k )
453+ , 'c'
454+ ] . join ( ' ' ) )
455+ out ( [
456+ f2 ( ( x - rx ) * k )
457+ , f2 ( ( pageHeight - ( y + ly ) ) * k )
458+ , f2 ( ( x - lx ) * k )
459+ , f2 ( ( pageHeight - ( y + ry ) ) * k )
460+ , f2 ( x * k )
461+ , f2 ( ( pageHeight - ( y + ry ) ) * k )
462+ , 'c'
463+ ] . join ( ' ' ) )
464+ out ( [
465+ f2 ( ( x + lx ) * k )
466+ , f2 ( ( pageHeight - ( y + ry ) ) * k )
467+ , f2 ( ( x + rx ) * k )
468+ , f2 ( ( pageHeight - ( y + ly ) ) * k )
469+ , f2 ( ( x + rx ) * k )
470+ , f2 ( ( pageHeight - y ) * k )
471+ , 'c'
472+ , op
473+ ] . join ( ' ' ) )
413474 return _jsPDF
414475 } ,
415476 circle : function ( x , y , r , style ) {
@@ -463,34 +524,34 @@ var jsPDF = function(/** String */ orientation, /** String */ unit, /** String *
463524 return _jsPDF
464525 } ,
465526 setLineWidth : function ( width ) {
466- out ( sprintf ( '%.2f w' , ( width * k ) ) )
527+ out ( ( width * k ) . toFixed ( 2 ) + ' w' )
467528 return _jsPDF
468529 } ,
469530 setDrawColor : function ( r , g , b ) {
470531 var color
471532 if ( ( r === 0 && g === 0 && b === 0 ) || ( typeof g === 'undefined' ) ) {
472- color = sprintf ( '%.3f G' , r / 255 )
533+ color = f3 ( r / 255 ) + ' G'
473534 } else {
474- color = sprintf ( '%.3f %.3f %.3f RG' , r / 255 , g / 255 , b / 255 )
535+ color = [ f3 ( r / 255 ) , f3 ( g / 255 ) , f3 ( b / 255 ) , 'RG' ] . join ( ' ' )
475536 }
476537 out ( color )
477538 return _jsPDF
478539 } ,
479540 setFillColor : function ( r , g , b ) {
480541 var color
481542 if ( ( r === 0 && g === 0 && b === 0 ) || ( typeof g === 'undefined' ) ) {
482- color = sprintf ( '%.3f g' , r / 255 )
543+ color = f3 ( r / 255 ) + ' g'
483544 } else {
484- color = sprintf ( '%.3f %.3f %.3f rg' , r / 255 , g / 255 , b / 255 )
545+ color = [ f3 ( r / 255 ) , f3 ( g / 255 ) , f3 ( b / 255 ) , 'rg' ] . join ( ' ' )
485546 }
486547 out ( color )
487548 return _jsPDF
488549 } ,
489550 setTextColor : function ( r , g , b ) {
490551 if ( ( r === 0 && g === 0 && b === 0 ) || ( typeof g === 'undefined' ) ) {
491- textColor = sprintf ( '%.3f g' , r / 255 )
552+ textColor = f3 ( r / 255 ) + ' g'
492553 } else {
493- textColor = sprintf ( '%.3f %.3f %.3f rg' , r / 255 , g / 255 , b / 255 )
554+ textColor = [ f3 ( r / 255 ) , f3 ( g / 255 ) , f3 ( b / 255 ) , 'rg' ] . join ( ' ' )
494555 }
495556 return _jsPDF
496557 }
0 commit comments