From 082ad213879fab4b96e4658b00f0a8ec02777f91 Mon Sep 17 00:00:00 2001 From: Calixte Denizet Date: Sun, 14 Jun 2026 22:04:23 +0200 Subject: [PATCH] Draw non-isolated blend-mode groups against their backdrop (bug 1873345) A non-isolated transparency group must blend with its backdrop, but a group containing a blend mode was forced onto a transparent intermediate canvas; e.g. a /Multiply highlight then painted opaquely over the text behind it, making that text invisible. --- src/core/annotation.js | 11 +---------- src/core/evaluator.js | 2 ++ src/core/operator_list.js | 17 +++++++++++------ src/display/canvas.js | 23 ++++++++++++++++++----- test/pdfs/.gitignore | 1 + test/pdfs/bug1873345.pdf | Bin 0 -> 36918 bytes test/test_manifest.json | 7 +++++++ 7 files changed, 40 insertions(+), 21 deletions(-) create mode 100644 test/pdfs/bug1873345.pdf diff --git a/src/core/annotation.js b/src/core/annotation.js index 78624d6bf..b2f4cb82e 100644 --- a/src/core/annotation.js +++ b/src/core/annotation.js @@ -5025,16 +5025,7 @@ class HighlightAnnotation extends MarkupAnnotation { const quadPoints = (this.data.quadPoints = getQuadPoints(dict, null)); if (quadPoints) { - const resources = this.appearance?.dict.get("Resources"); - - if (!this.appearance || !resources?.has("ExtGState")) { - if (this.appearance) { - // Workaround for cases where there's no /ExtGState-entry directly - // available, e.g. when the appearance stream contains a /XObject of - // the /Form-type, since that causes the highlighting to completely - // obscure the PDF content below it (fixes issue13242.pdf). - warn("HighlightAnnotation - ignoring built-in appearance stream."); - } + if (!this.appearance) { // Default color is yellow in Acrobat Reader const fillColor = getPdfColorArray(this.color, [1, 1, 0]); const fillAlpha = dict.get("CA"); diff --git a/src/core/evaluator.js b/src/core/evaluator.js index c07284aee..be6031937 100644 --- a/src/core/evaluator.js +++ b/src/core/evaluator.js @@ -523,6 +523,7 @@ class PartialEvaluator { isolated: false, knockout: false, needsIsolation: false, + hasSoftMask: false, isGray: false, }; @@ -573,6 +574,7 @@ class PartialEvaluator { if (group) { groupOptions.needsIsolation = newOpList.needsIsolation || !!smask; + groupOptions.hasSoftMask = newOpList.hasSoftMask || !!smask; operatorList.addOp(OPS.beginGroup, [groupOptions]); operatorList.addOp(OPS.paintFormXObjectBegin, args); operatorList.addOpList(newOpList); diff --git a/src/core/operator_list.js b/src/core/operator_list.js index f63ac0718..5f679a3f6 100644 --- a/src/core/operator_list.js +++ b/src/core/operator_list.js @@ -830,24 +830,29 @@ class OperatorList { * operations require being drawn in isolation (i.e. on a separate canvas). * A group/pattern needs isolation when it uses non-default compositing * (blend mode) or a soft mask. The result is exposed via `needsIsolation`. + * + * `hasSoftMask` separately flags the use of a soft mask: unlike a plain blend + * mode, which a non-isolated group can apply directly against its backdrop, a + * soft mask always requires a real intermediate canvas (see bug 1873345). */ class CheckedOperatorList extends OperatorList { needsIsolation = false; + hasSoftMask = false; + addOp(fn, args) { - if (!this.needsIsolation) { + if (!this.needsIsolation || !this.hasSoftMask) { if (fn === OPS.beginGroup) { // Propagate isolation only if the nested group itself needs it. - this.needsIsolation = args[0].needsIsolation; + this.needsIsolation ||= args[0].needsIsolation; + this.hasSoftMask ||= args[0].hasSoftMask; } else if (fn === OPS.setGState) { for (const [key, val] of args[0]) { if (key === "BM" && val !== "source-over") { this.needsIsolation = true; - break; - } - if (key === "SMask" && val !== false) { + } else if (key === "SMask" && val !== false) { this.needsIsolation = true; - break; + this.hasSoftMask = true; } } } diff --git a/src/display/canvas.js b/src/display/canvas.js index e1d7b3b76..dc6eb165a 100644 --- a/src/display/canvas.js +++ b/src/display/canvas.js @@ -3210,12 +3210,13 @@ class CanvasGraphics { } const currentCtx = this.ctx; - if (!group.isolated && !group.knockout && this.#knockoutGroupLevel === 0) { - info("TODO: Fully support non-isolated non-knockout groups."); - } - if ( - !group.needsIsolation && + // A non-isolated group blends with its backdrop, so drawing it directly + // on the parent canvas (rather than on a transparent intermediate one) + // is correct even when it contains blend modes (bug 1873345). A soft + // mask still needs its own canvas though, and an isolated group requires + // a transparent backdrop, so both keep the intermediate canvas. + (!group.needsIsolation || (!group.isolated && !group.hasSoftMask)) && !group.knockout && !group.isGray && this.#knockoutGroupLevel === 0 && @@ -3234,12 +3235,24 @@ class CanvasGraphics { } currentCtx.clip(clip); } + // Unlike the intermediate-canvas path below, the content is drawn + // straight onto the parent canvas with no later compositing step, so the + // inherited blend mode, alpha constants and transfer function must stay + // active here rather than being reset (issue 20722); the conditions + // above already guarantee a Normal blend and an opaque (ca === 1) state. this.groupStack.push(null); // null = no intermediate canvas this.#groupStackMeta.push(null); this.groupLevel++; return; } + // Reached only when the direct path above didn't apply, e.g. a soft mask, + // non-default group alpha or blend mode: we still composite on a + // transparent intermediate canvas rather than the real backdrop. + if (!group.isolated && !group.knockout && this.#knockoutGroupLevel === 0) { + info("TODO: Fully support non-isolated non-knockout groups."); + } + const currentTransform = getCurrentTransform(currentCtx); if (group.matrix) { currentCtx.transform(...group.matrix); diff --git a/test/pdfs/.gitignore b/test/pdfs/.gitignore index 9a2a95fe0..9d265fbf6 100644 --- a/test/pdfs/.gitignore +++ b/test/pdfs/.gitignore @@ -936,3 +936,4 @@ !bug1802506.pdf !checkbox_no_appearance.pdf !opt_demo.pdf +!bug1873345.pdf diff --git a/test/pdfs/bug1873345.pdf b/test/pdfs/bug1873345.pdf new file mode 100644 index 0000000000000000000000000000000000000000..6eb9a2cdfa51c13fb150285e61a5e5d0b0c22419 GIT binary patch literal 36918 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 Lq{h=t)5BCF7I=xl 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