poppler/Catalog.cc | 19 +++++++++++++++++++ poppler/Catalog.h | 9 +++++++++ qt4/src/poppler-document.cc | 16 ++++++++++++++++ qt4/src/poppler-qt4.h | 18 ++++++++++++++++++ utils/pdfinfo.cc | 19 ++++++++++--------- 5 files changed, 72 insertions(+), 9 deletions(-)
New commits: commit 0f7c17d7f92d4cdfbd8816dba666aeed924d8bc2 Author: Fabio D'Urso <[email protected]> Date: Fri Nov 2 10:54:17 2012 +0100 qt4: Export information about the document form type This patch also wraps the code that checks the form type and moves it from pdfinfo to the Catalog class. diff --git a/poppler/Catalog.cc b/poppler/Catalog.cc index 0f42356..cf6dff0 100644 --- a/poppler/Catalog.cc +++ b/poppler/Catalog.cc @@ -24,6 +24,7 @@ // Copyright (C) 2008, 2011 Pino Toscano <[email protected]> // Copyright (C) 2009 Ilya Gorenbein <[email protected]> // Copyright (C) 2010 Hib Eris <[email protected]> +// Copyright (C) 2012 Fabio D'Urso <[email protected]> // // To see a description of the changes please see the Changelog file that // came with your tarball or type make ChangeLog if you are building from git @@ -864,6 +865,24 @@ Object *Catalog::getDests() return &dests; } +Catalog::FormType Catalog::getFormType() +{ + Object xfa; + FormType res = NoForm; + + if (acroForm.isDict()) { + acroForm.dictLookup("XFA", &xfa); + if (xfa.isStream() || xfa.isArray()) { + res = XfaForm; + } else { + res = AcroForm; + } + xfa.free(); + } + + return res; +} + Form *Catalog::getForm() { if (!form) { diff --git a/poppler/Catalog.h b/poppler/Catalog.h index cdb1f13..ef469ec 100644 --- a/poppler/Catalog.h +++ b/poppler/Catalog.h @@ -20,6 +20,7 @@ // Copyright (C) 2007 Julien Rebetez <[email protected]> // Copyright (C) 2008, 2011 Pino Toscano <[email protected]> // Copyright (C) 2010 Hib Eris <[email protected]> +// Copyright (C) 2012 Fabio D'Urso <[email protected]> // // To see a description of the changes please see the Changelog file that // came with your tarball or type make ChangeLog if you are building from git @@ -153,6 +154,14 @@ public: OCGs *getOptContentConfig() { return optContent; } + enum FormType + { + NoForm, + AcroForm, + XfaForm + }; + + FormType getFormType(); Form* getForm(); ViewerPreferences *getViewerPreferences(); diff --git a/qt4/src/poppler-document.cc b/qt4/src/poppler-document.cc index 0cf1d45..ee56ed6 100644 --- a/qt4/src/poppler-document.cc +++ b/qt4/src/poppler-document.cc @@ -6,6 +6,7 @@ * Copyright (C) 2010, 2011 Hib Eris <[email protected]> * Copyright (C) 2012 Koji Otani <[email protected]> * Copyright (C) 2012 Thomas Freitag <[email protected]> + * Copyright (C) 2012 Fabio D'Urso <[email protected]> * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -612,6 +613,21 @@ namespace Poppler { return true; } + Document::FormType Document::formType() const + { + switch ( m_doc->doc->getCatalog()->getFormType() ) + { + case Catalog::NoForm: + return Document::NoForm; + case Catalog::AcroForm: + return Document::AcroForm; + case Catalog::XfaForm: + return Document::XfaForm; + } + + return Document::NoForm; // make gcc happy + } + QDateTime convertDate( char *dateString ) { int year, mon, day, hour, min, sec, tzHours, tzMins; diff --git a/qt4/src/poppler-qt4.h b/qt4/src/poppler-qt4.h index 3002e65..f4f6fc6 100644 --- a/qt4/src/poppler-qt4.h +++ b/qt4/src/poppler-qt4.h @@ -853,6 +853,17 @@ delete it; Q_DECLARE_FLAGS( RenderHints, RenderHint ) /** + Form types + + \since 0.22 + */ + enum FormType { + NoForm, ///< Document doesn't contain forms + AcroForm, ///< AcroForm + XfaForm ///< Adobe XML Forms Architecture (XFA), currently unsupported + }; + + /** Set a color display profile for the current document. \param outputProfileA is a \c cmsHPROFILE of the LCMS library. @@ -1364,6 +1375,13 @@ QString subject = m_doc->info("Subject"); bool getPdfId(QByteArray *permanentId, QByteArray *updateId) const; /** + Returns the type of forms contained in the document + + \since 0.22 + */ + FormType formType() const; + + /** Destructor. */ ~Document(); diff --git a/utils/pdfinfo.cc b/utils/pdfinfo.cc index 799a35c..bd8b56d 100644 --- a/utils/pdfinfo.cc +++ b/utils/pdfinfo.cc @@ -229,16 +229,17 @@ int main(int argc, char *argv[]) { doc->getStructTreeRoot()->isDict() ? "yes" : "no"); // print form info - if ((acroForm = doc->getCatalog()->getAcroForm())->isDict()) { - acroForm->dictLookup("XFA", &xfa); - if (xfa.isStream() || xfa.isArray()) { - printf("Form: XFA\n"); - } else { + switch (doc->getCatalog()->getFormType()) + { + case Catalog::NoForm: + printf("Form: none\n"); + break; + case Catalog::AcroForm: printf("Form: AcroForm\n"); - } - xfa.free(); - } else { - printf("Form: none\n"); + break; + case Catalog::XfaForm: + printf("Form: XFA\n"); + break; } // print page count _______________________________________________ poppler mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/poppler
