Skip to content

Commit d8b698c

Browse files
authored
Optimize addimage (#2018)
* Update addimage.js * Add files via upload
1 parent 1019eca commit d8b698c

File tree

3 files changed

+72
-13
lines changed

3 files changed

+72
-13
lines changed

plugins/addimage.js

Lines changed: 43 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -457,6 +457,32 @@
457457
return /^data:([\w]+?\/([\w]+?));\S*;*base64,(.+)$/g.exec(dataURI);
458458
};
459459

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+
460486
/**
461487
* Check to see if ArrayBuffer is supported
462488
*
@@ -709,7 +735,7 @@
709735
var options = imageData;
710736

711737
imageData = options.imageData;
712-
format = options.format || format;
738+
format = options.format || format || 'UNKNOWN';
713739
x = options.x || x || 0;
714740
y = options.y || y || 0;
715741
w = options.w || w;
@@ -795,18 +821,23 @@
795821
jsPDFAPI.convertStringToImageData = function (stringData) {
796822
var base64Info;
797823
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+
}
807839
}
808-
}
809-
return imageData;
840+
return imageData;
810841
}
811842
/**
812843
* JPEG SUPPORT

tests/addimage/base64.spec.js

Lines changed: 21 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

tests/addimage/filetypeRecognition.spec.js

Lines changed: 8 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)