Skip to content

Commit 35a9bbd

Browse files
authored
Merge pull request #852 from MrRio/pr/801
Pr/801 - Fix PNG compression
2 parents 5acfc8c + e76f566 commit 35a9bbd

File tree

6 files changed

+89
-42
lines changed

6 files changed

+89
-42
lines changed

dist/jspdf.debug.js

+34-14
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,8 @@
1212

1313
/** @preserve
1414
* jsPDF - PDF Document creation from JavaScript
15-
* Version 1.2.61 Built on 2016-09-25T22:32:35.622Z
16-
* CommitID 33aab1469e
15+
* Version 1.2.61 Built on 2016-09-26T11:22:48.682Z
16+
* CommitID bd60b2f4b9
1717
*
1818
* Copyright (c) 2010-2014 James Hall <james@parall.ax>, https://github.com/MrRio/jsPDF
1919
* 2010 Aaron Spike, https://github.com/acspike
@@ -2026,7 +2026,7 @@
20262026
* pdfdoc.mymethod() // <- !!!!!!
20272027
*/
20282028
jsPDF.API = { events: [] };
2029-
jsPDF.version = "1.2.61 2016-09-25T22:32:35.622Z:jameshall";
2029+
jsPDF.version = "1.2.61 2016-09-26T11:22:48.682Z:jameshall";
20302030

20312031
if (typeof define === 'function' && define.amd) {
20322032
define('jsPDF', function () {
@@ -3862,7 +3862,7 @@ Q\n";
38623862

38633863
// Soft mask
38643864
if ('smask' in img) {
3865-
var dp = '/Predictor 15 /Colors 1 /BitsPerComponent ' + img['bpc'] + ' /Columns ' + img['w'];
3865+
var dp = '/Predictor ' + img['p'] + ' /Colors 1 /BitsPerComponent ' + img['bpc'] + ' /Columns ' + img['w'];
38663866
var smask = { 'w': img['w'], 'h': img['h'], 'cs': 'DeviceGray', 'bpc': img['bpc'], 'dp': dp, 'data': img['smask'] };
38673867
if ('f' in img) smask.f = img['f'];
38683868
putImage.call(this, smask);
@@ -4178,10 +4178,10 @@ Q\n";
41784178
* Async method using Blob and FileReader could be best, but i'm not sure how to fit it into the flow?
41794179
*/
41804180
jsPDFAPI.arrayBufferToBinaryString = function (buffer) {
4181-
if ('TextDecoder' in window) {
4182-
var decoder = new TextDecoder('ascii');
4183-
return decoder.decode(buffer);
4184-
}
4181+
/*if('TextDecoder' in window){
4182+
var decoder = new TextDecoder('ascii');
4183+
return decoder.decode(buffer);
4184+
}*/
41854185

41864186
if (this.isArrayBuffer(buffer)) buffer = new Uint8Array(buffer);
41874187

@@ -4259,7 +4259,7 @@ Q\n";
42594259
return base64;
42604260
};
42614261

4262-
jsPDFAPI.createImageInfo = function (data, wd, ht, cs, bpc, f, imageIndex, alias, dp, trns, pal, smask) {
4262+
jsPDFAPI.createImageInfo = function (data, wd, ht, cs, bpc, f, imageIndex, alias, dp, trns, pal, smask, p) {
42634263
var info = {
42644264
alias: alias,
42654265
w: wd,
@@ -4276,6 +4276,7 @@ Q\n";
42764276
if (trns) info.trns = trns;
42774277
if (pal) info.pal = pal;
42784278
if (smask) info.smask = smask;
4279+
if (p) info.p = p; // predictor parameter for PNG compression
42794280

42804281
return info;
42814282
};
@@ -7145,9 +7146,9 @@ Q\n";
71457146
value = listCount++ + '. ' + value;
71467147
} else {
71477148
var fontSize = fragmentCSS["font-size"];
7148-
offsetX = (3 - fontSize * 0.75) * renderer.pdf.internal.scaleFactor;
7149-
offsetY = fontSize * 0.75 * renderer.pdf.internal.scaleFactor;
7150-
radius = fontSize * 1.74 / renderer.pdf.internal.scaleFactor;
7149+
var offsetX = (3 - fontSize * 0.75) * renderer.pdf.internal.scaleFactor;
7150+
var offsetY = fontSize * 0.75 * renderer.pdf.internal.scaleFactor;
7151+
var radius = fontSize * 1.74 / renderer.pdf.internal.scaleFactor;
71517152
cb = function cb(x, y) {
71527153
this.pdf.circle(x + offsetX, y + offsetY, radius, 'FD');
71537154
};
@@ -8265,6 +8266,23 @@ Q\n";
82658266
while (i < len) {
82668267
sum += Math.abs(array[i++]);
82678268
}return sum;
8269+
},
8270+
getPredictorFromCompression = function getPredictorFromCompression(compression) {
8271+
var predictor;
8272+
switch (compression) {
8273+
case jsPDFAPI.image_compression.FAST:
8274+
predictor = 11;
8275+
break;
8276+
8277+
case jsPDFAPI.image_compression.MEDIUM:
8278+
predictor = 13;
8279+
break;
8280+
8281+
case jsPDFAPI.image_compression.SLOW:
8282+
predictor = 14;
8283+
break;
8284+
}
8285+
return predictor;
82688286
},
82698287
logImg = function logImg(img) {
82708288
console.log("width: " + img.width);
@@ -8446,15 +8464,17 @@ Q\n";
84468464
}
84478465
}
84488466

8449-
if (decode === this.decode.FLATE_DECODE) dp = '/Predictor 15 /Colors ' + colors + ' /BitsPerComponent ' + bpc + ' /Columns ' + img.width;else
8467+
var predictor = getPredictorFromCompression(compression);
8468+
8469+
if (decode === this.decode.FLATE_DECODE) dp = '/Predictor ' + predictor + ' /Colors ' + colors + ' /BitsPerComponent ' + bpc + ' /Columns ' + img.width;else
84508470
//remove 'Predictor' as it applies to the type of png filter applied to its IDAT - we only apply with compression
84518471
dp = '/Colors ' + colors + ' /BitsPerComponent ' + bpc + ' /Columns ' + img.width;
84528472

84538473
if (this.isArrayBuffer(imageData) || this.isArrayBufferView(imageData)) imageData = this.arrayBufferToBinaryString(imageData);
84548474

84558475
if (smask && this.isArrayBuffer(smask) || this.isArrayBufferView(smask)) smask = this.arrayBufferToBinaryString(smask);
84568476

8457-
return this.createImageInfo(imageData, img.width, img.height, colorSpace, bpc, decode, imageIndex, alias, dp, trns, pal, smask);
8477+
return this.createImageInfo(imageData, img.width, img.height, colorSpace, bpc, decode, imageIndex, alias, dp, trns, pal, smask, predictor);
84588478
}
84598479

84608480
throw new Error("Unsupported PNG image data, try using JPEG instead.");

0 commit comments

Comments
 (0)