From 0ae3d40a79c25feb5cb9bce6fc8cc48c30bfd1b6 Mon Sep 17 00:00:00 2001 From: Albert Astals Cid Date: Thu, 2 Mar 2017 00:52:21 +0100 Subject: Parse AcroForm CO (calculateOrder) --- poppler/Form.cc | 19 +++++++++++++++++++ poppler/Form.h | 4 ++++ 2 files changed, 23 insertions(+) diff --git a/poppler/Form.cc b/poppler/Form.cc index b73f52d1..ced3140c 100644 --- a/poppler/Form.cc +++ b/poppler/Form.cc @@ -1640,6 +1640,25 @@ Form::Form(PDFDoc *docA, Object* acroFormA) } obj1.free (); + acroForm->dictLookup("CO", &obj1); + if (obj1.isArray()) { + Array *array = obj1.getArray(); + calculateOrder.reserve(array->getLength()); + for(int i=0; igetLength(); i++) { + Object oref; + array->getNF(i, &oref); + if (!oref.isRef()) { + error(errSyntaxWarning, -1, "Direct object in CO"); + oref.free(); + continue; + } + calculateOrder.push_back(oref.getRef()); + + oref.free(); + } + } + obj1.free (); + #ifdef DEBUG_FORMS for (int i = 0; i < numFields; i++) rootFields[i]->printTree(); diff --git a/poppler/Form.h b/poppler/Form.h index 52651336..8696d2f5 100644 --- a/poppler/Form.h +++ b/poppler/Form.h @@ -540,6 +540,9 @@ public: FormWidget* findWidgetByRef (Ref aref); void postWidgetsLoad(); + + const std::vector &getCalculateOrder() const { return calculateOrder; } + private: FormField** rootFields; int numFields; @@ -550,6 +553,7 @@ private: GBool needAppearances; GfxResources *defaultResources; Object resDict; + std::vector calculateOrder; // Variable Text GooString *defaultAppearance; -- cgit v1.2.3