poppler/Gfx.cc | 13 +++++++++++++ poppler/GfxState.h | 1 + 2 files changed, 14 insertions(+)
New commits: commit 173451730948c320f16a0f5924a58302603eca0b Author: Albert Astals Cid <aa...@kde.org> Date: Sat Aug 1 15:13:35 2009 +0200 Try to workaround some incorrect PDF Fixes rendering of PDF where forms/patterns have more q than Q. Fixes rendering in splash of pdf in bugs #22835, #21899 and #16402 diff --git a/poppler/Gfx.cc b/poppler/Gfx.cc index eeefcac..ccf818a 100644 --- a/poppler/Gfx.cc +++ b/poppler/Gfx.cc @@ -4274,8 +4274,21 @@ void Gfx::doForm1(Object *str, Dict *resDict, double *matrix, double *bbox, baseMatrix[i] = state->getCTM()[i]; } + GfxState *stateBefore = state; + // draw the form display(str, gFalse); + + if (stateBefore != state) { + if (state->isParentState(stateBefore)) { + error(-1, "There's a form with more q than Q, trying to fix"); + while (stateBefore != state) { + restoreState(); + } + } else { + error(-1, "There's a form with more Q than q"); + } + } if (softMask || transpGroup) { out->endTransparencyGroup(state); diff --git a/poppler/GfxState.h b/poppler/GfxState.h index 536c86a..51a317d 100644 --- a/poppler/GfxState.h +++ b/poppler/GfxState.h @@ -1269,6 +1269,7 @@ public: GfxState *save(); GfxState *restore(); GBool hasSaves() { return saved != NULL; } + GBool isParentState(GfxState *state) { return saved == state || (saved && saved->isParentState(state)); } // Misc GBool parseBlendMode(Object *obj, GfxBlendMode *mode); _______________________________________________ poppler mailing list poppler@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/poppler