|
457 | 457 | return /^data:([\w]+?\/([\w]+?));\S*;*base64,(.+)$/g.exec(dataURI);
|
458 | 458 | };
|
459 | 459 |
|
| 460 | + /** |
| 461 | + * Strips out and returns info from a valid base64 data URI |
| 462 | + * |
| 463 | + * @name extractInfoFromBase64DataURI |
| 464 | + * @function |
| 465 | + * @param {string} dataUrl a valid data URI of format 'data:[<MIME-type>][;base64],<data>' |
| 466 | + * @returns {Array}an Array containing the following |
| 467 | + * [0] the complete data URI |
| 468 | + * [1] <MIME-type> |
| 469 | + * [2] format - the second part of the mime-type i.e 'png' in 'image/png' |
| 470 | + * [4] <data> |
| 471 | + */ |
| 472 | + jsPDFAPI.extractImageFromDataUrl = function(dataURI) { |
| 473 | + dataURI = dataURI || ''; |
| 474 | + var extractedInfo = /^data:(\w*\/\w*);(charset=[\w=-]*)*;*base64,([\w\/+=]*)$/.exec(dataURI); |
| 475 | + var result = null; |
| 476 | + if (Array.isArray(extractedInfo)) { |
| 477 | + result = { |
| 478 | + mimeType : extractedInfo[1], |
| 479 | + charset : extractedInfo[2], |
| 480 | + data : extractedInfo[3] |
| 481 | + }; |
| 482 | + } |
| 483 | + return result; |
| 484 | + }; |
| 485 | + |
460 | 486 | /**
|
461 | 487 | * Check to see if ArrayBuffer is supported
|
462 | 488 | *
|
|
709 | 735 | var options = imageData;
|
710 | 736 |
|
711 | 737 | imageData = options.imageData;
|
712 |
| - format = options.format || format; |
| 738 | + format = options.format || format || 'UNKNOWN'; |
713 | 739 | x = options.x || x || 0;
|
714 | 740 | y = options.y || y || 0;
|
715 | 741 | w = options.w || w;
|
|
795 | 821 | jsPDFAPI.convertStringToImageData = function (stringData) {
|
796 | 822 | var base64Info;
|
797 | 823 | var imageData = '';
|
798 |
| - if(this.isString(stringData)) { |
799 |
| - var base64Info = this.extractInfoFromBase64DataURI(stringData); |
800 |
| - |
801 |
| - if(base64Info !== null) { |
802 |
| - if (jsPDFAPI.validateStringAsBase64(base64Info[3])) { |
803 |
| - imageData = atob(base64Info[3]);//convert to binary string |
804 |
| - } |
805 |
| - } else if (jsPDFAPI.validateStringAsBase64(stringData)){ |
806 |
| - imageData = atob(stringData); |
| 824 | + var rawData; |
| 825 | + |
| 826 | + if(this.isString(stringData)) { |
| 827 | + var base64Info = this.extractImageFromDataUrl(stringData); |
| 828 | + rawData = (base64Info !== null) ? base64Info.data : stringData; |
| 829 | + |
| 830 | + try { |
| 831 | + imageData = atob(rawData); |
| 832 | + } catch (e) { |
| 833 | + if (!jsPDFAPI.validateStringAsBase64(rawData)) { |
| 834 | + throw new Error('Supplied Data is not a valid base64-String jsPDF.convertStringToImageData '); |
| 835 | + } else { |
| 836 | + throw new Error('atob-Error in jsPDF.convertStringToImageData ' + e.message); |
| 837 | + } |
| 838 | + } |
807 | 839 | }
|
808 |
| - } |
809 |
| - return imageData; |
| 840 | + return imageData; |
810 | 841 | }
|
811 | 842 | /**
|
812 | 843 | * JPEG SUPPORT
|
|
0 commit comments