diff --git a/src/display/canvas.js b/src/display/canvas.js index f9ca1721b..00153986a 100644 --- a/src/display/canvas.js +++ b/src/display/canvas.js @@ -507,20 +507,15 @@ var CanvasGraphics = (function CanvasGraphicsClosure() { } else if (imgData.kind === ImageKind.RGBA_32BPP) { // RGBA, 32-bits per pixel. - var haveSetAndSubarray = 'set' in dest && 'subarray' in src; for (var i = 0; i < totalChunks; i++) { var thisChunkHeight = (i < fullChunks) ? fullChunkHeight : partialChunkHeight; var elemsInThisChunk = imgData.width * thisChunkHeight * 4; - if (haveSetAndSubarray) { - dest.set(src.subarray(srcPos, srcPos + elemsInThisChunk)); - srcPos += elemsInThisChunk; - } else { - for (var j = 0; j < elemsInThisChunk; j++) { - dest[j] = src[srcPos++]; - } - } + + dest.set(src.subarray(srcPos, srcPos + elemsInThisChunk)); + srcPos += elemsInThisChunk; + ctx.putImageData(chunkImgData, 0, i * fullChunkHeight); } diff --git a/web/compatibility.js b/web/compatibility.js index bec2635d4..dd0edcf48 100644 --- a/web/compatibility.js +++ b/web/compatibility.js @@ -524,3 +524,15 @@ if (typeof PDFJS === 'undefined') { PDFJS.disableHistory = true; } })(); + +(function checkSetPresenceInImageData() { + if (window.CanvasPixelArray) { + if (typeof window.CanvasPixelArray.prototype.set !== 'function') { + window.CanvasPixelArray.prototype.set = function(arr) { + for (var i = 0, ii = this.length; i < ii; i++) { + this[i] = arr[i]; + } + }; + } + } +})();