Merge f0964c7dfde6c0c8c006b55c5ed0cdd2bc131554 into ec71e4ed651e659b06a4fa46ef0b18ff9ab2a8c7
This commit is contained in:
commit
9a8641a59a
@ -511,6 +511,27 @@ class PartialEvaluator {
|
|||||||
smask.backdrop = colorSpace.getRgbHex(smask.backdrop, 0);
|
smask.backdrop = colorSpace.getRgbHex(smask.backdrop, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Parse group blend mode from ExtGState if it's in FormX Resources
|
||||||
|
const localResources = dict.get("Resources");
|
||||||
|
if (localResources instanceof Dict) {
|
||||||
|
const extGState = localResources.get("ExtGState");
|
||||||
|
if (extGState instanceof Dict) {
|
||||||
|
for (const val of extGState.getRawValues()) {
|
||||||
|
if (val instanceof Dict && val.has("BM")) {
|
||||||
|
const blendMode = val.get("BM");
|
||||||
|
if (blendMode != null) {
|
||||||
|
try {
|
||||||
|
groupOptions.blendMode = normalizeBlendMode(blendMode);
|
||||||
|
break;
|
||||||
|
} catch (ex) {
|
||||||
|
console.error(`Invalid blend mode in ExtGState: ${blendMode}`, ex);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
operatorList.addOp(OPS.beginGroup, [groupOptions]);
|
operatorList.addOp(OPS.beginGroup, [groupOptions]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -2700,7 +2700,12 @@ class CanvasGraphics {
|
|||||||
currentMtx,
|
currentMtx,
|
||||||
dirtyBox
|
dirtyBox
|
||||||
);
|
);
|
||||||
|
|
||||||
|
// Apply the group blend mode and alpha when compositing the group
|
||||||
|
const prevBlendMode = this.pushGroupBlendMode(this.ctx, group.blendMode);
|
||||||
this.ctx.drawImage(groupCtx.canvas, 0, 0);
|
this.ctx.drawImage(groupCtx.canvas, 0, 0);
|
||||||
|
this.popGroupBlendMode(this.ctx, prevBlendMode);
|
||||||
|
|
||||||
this.ctx.restore();
|
this.ctx.restore();
|
||||||
this.compose(dirtyBox);
|
this.compose(dirtyBox);
|
||||||
}
|
}
|
||||||
@ -3336,6 +3341,22 @@ class CanvasGraphics {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pushGroupBlendMode(ctx, blendMode) {
|
||||||
|
if (!ctx || !blendMode) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
const prev = ctx.globalCompositeOperation;
|
||||||
|
ctx.globalCompositeOperation = blendMode;
|
||||||
|
return prev;
|
||||||
|
}
|
||||||
|
|
||||||
|
popGroupBlendMode(ctx, prev) {
|
||||||
|
if (ctx && prev !== null) {
|
||||||
|
ctx.globalCompositeOperation = prev;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
isContentVisible() {
|
isContentVisible() {
|
||||||
for (let i = this.markedContentStack.length - 1; i >= 0; i--) {
|
for (let i = this.markedContentStack.length - 1; i >= 0; i--) {
|
||||||
if (!this.markedContentStack[i].visible) {
|
if (!this.markedContentStack[i].visible) {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user