From f57727190889007a6cd648c67f7e009603350756 Mon Sep 17 00:00:00 2001 From: Jonas Jenwald Date: Fri, 28 Mar 2025 15:02:16 +0100 Subject: [PATCH] Simplify the `compileType3Glyph` function to just return the `Path2D` objects Originally this function would "manually" invoke the rendering commands for Type3-glyphs, however that was changed some time ago: - Initial `Path2D` support was added in PR 14858, but the old code kept for Node.js compatibility. - Since PR 15951 we've been using a `Path2D` polyfill in Node.js environments. Hence, after the previous commit, we can further simplify this function by *directly* returning/using the `Path2D` object when rendering Type3-glyphs; see also https://github.com/mozilla/pdf.js/pull/19731#discussion_r2018712695 While this won't improve performance significantly, when compared to the introduction of `Path2D`, it definately cannot hurt. --- src/display/canvas.js | 21 +++++---------------- test/pdfs/bug810214.pdf.link | 1 + test/test_manifest.json | 9 +++++++++ 3 files changed, 15 insertions(+), 16 deletions(-) create mode 100644 test/pdfs/bug810214.pdf.link diff --git a/src/display/canvas.js b/src/display/canvas.js index 9690976dc..024f6b945 100644 --- a/src/display/canvas.js +++ b/src/display/canvas.js @@ -308,13 +308,13 @@ function compileType3Glyph(imgData) { ]); const width1 = width + 1; - let points = new Uint8Array(width1 * (height + 1)); + const points = new Uint8Array(width1 * (height + 1)); let i, j, j0; // decodes bit-packed mask data const lineSize = (width + 7) & ~7; - let data = new Uint8Array(lineSize * height), - pos = 0; + const data = new Uint8Array(lineSize * height); + let pos = 0; for (const elem of imgData.data) { let mask = 128; while (mask > 0) { @@ -456,18 +456,7 @@ function compileType3Glyph(imgData) { --i; } - // Immediately release the, potentially large, `Uint8Array`s after parsing. - data = null; - points = null; - - const drawOutline = function (ctx) { - ctx.save(); - ctx.fill(path); - ctx.beginPath(); - ctx.restore(); - }; - - return drawOutline; + return path; } class CanvasExtraState { @@ -2726,7 +2715,7 @@ class CanvasGraphics { } if (glyph.compiled) { - glyph.compiled(ctx); + ctx.fill(glyph.compiled); return; } } diff --git a/test/pdfs/bug810214.pdf.link b/test/pdfs/bug810214.pdf.link new file mode 100644 index 000000000..8bc4539b0 --- /dev/null +++ b/test/pdfs/bug810214.pdf.link @@ -0,0 +1 @@ +https://bugzilla.mozilla.org/attachment.cgi?id=9254990 diff --git a/test/test_manifest.json b/test/test_manifest.json index 249582b00..a6fcbcad4 100644 --- a/test/test_manifest.json +++ b/test/test_manifest.json @@ -2834,6 +2834,15 @@ "rounds": 1, "type": "eq" }, + { + "id": "bug810214", + "file": "pdfs/bug810214.pdf", + "md5": "2b7243178f5dd5fd3edc7b6649e4bdf3", + "link": true, + "rounds": 1, + "lastPage": 1, + "type": "eq" + }, { "id": "issue13372", "file": "pdfs/issue13372.pdf",