ExtGState
data class ExtGState(val fillAlpha: Double? = null, val strokeAlpha: Double? = null, val blendMode: KiteBlendMode? = null, val softMask: SoftMask? = null, val lineWidth: Double? = null, val lineCap: Int? = null, val lineJoin: Int? = null, val miterLimit: Double? = null, val dashArray: List<Double>? = null, val dashPhase: Double = 0.0)
Parsed Extended Graphics State (ISO 32000-1 §8.4.5).
Each /ExtGState /<name> resource is a dict of state-modifier entries. The gs content-stream operator merges them into the current GraphicsState. We extract only the fields we actually act on:
/CA: stroke alpha (0..1)/ca: fill alpha (0..1)/BM: blend mode (name or array of names)/SMask: soft-mask dict ("None" / Mask dict)/LW/LC/LJ/ML/D: line width, cap, join, miter limit and dash/AIS,/SA,/OP,/op,/OPM,/Font,/RI: accepted but ignored (rare)
Missing fields stay at their previous values; that's the spec's "ExtGState modifies the current state" rule.