diff --git a/src/canvas.js b/src/canvas.js index 38111c7d3..61209293f 100644 --- a/src/canvas.js +++ b/src/canvas.js @@ -187,6 +187,7 @@ var CanvasExtraState = (function CanvasExtraStateClosure() { this.fillAlpha = 1; this.strokeAlpha = 1; this.lineWidth = 1; + this.paintFormXObjectDepth = 0; this.old = old; } @@ -1102,6 +1103,7 @@ var CanvasGraphics = (function CanvasGraphicsClosure() { paintFormXObjectBegin: function CanvasGraphics_paintFormXObjectBegin(matrix, bbox) { this.save(); + this.current.paintFormXObjectDepth++; if (matrix && isArray(matrix) && 6 == matrix.length) this.transform.apply(this, matrix); @@ -1116,7 +1118,12 @@ var CanvasGraphics = (function CanvasGraphicsClosure() { }, paintFormXObjectEnd: function CanvasGraphics_paintFormXObjectEnd() { - this.restore(); + var depth = this.current.paintFormXObjectDepth; + do { + this.restore(); + // some pdf don't close all restores inside object + // closing those for them + } while (this.current.paintFormXObjectDepth >= depth); }, paintJpegXObject: function CanvasGraphics_paintJpegXObject(objId, w, h) { diff --git a/test/pdfs/.gitignore b/test/pdfs/.gitignore index 3feac4d88..8b110cfe9 100644 --- a/test/pdfs/.gitignore +++ b/test/pdfs/.gitignore @@ -24,6 +24,7 @@ !pdfkit_compressed.pdf !TAMReview.pdf !issue918.pdf +!issue1905.pdf !issue1249.pdf !smaskdim.pdf !type4psfunc.pdf diff --git a/test/pdfs/issue1905.pdf b/test/pdfs/issue1905.pdf new file mode 100644 index 000000000..1659a0a8c Binary files /dev/null and b/test/pdfs/issue1905.pdf differ diff --git a/test/test_manifest.json b/test/test_manifest.json index bf438c44c..6ce576337 100644 --- a/test/test_manifest.json +++ b/test/test_manifest.json @@ -367,6 +367,12 @@ "pageLimit": 3, "type": "eq" }, + { "id": "issue1905", + "file": "pdfs/issue1905.pdf", + "md5": "b1bbd72ca6522ae1502aa26320f81994", + "rounds": 1, + "type": "eq" + }, { "id": "issue918", "file": "pdfs/issue918.pdf", "md5": "d582cc0f2592ae82936589ced2a47e55",