poppler/PDFDoc.cc | 27 +++++++++++++++++++++++++-- 1 file changed, 25 insertions(+), 2 deletions(-)
New commits: commit 3e5737bfa1fc00dd6ee6895f19cab6d4c768421a Author: Marek Kasik <[email protected]> Date: Fri Jan 7 14:48:33 2022 +0100 PDFDoc: Count only signature fields in getNumSignatureFields Previous version returned number of all fields instead of just the ones with signatures. diff --git a/poppler/PDFDoc.cc b/poppler/PDFDoc.cc index 71360a50..dab2add1 100644 --- a/poppler/PDFDoc.cc +++ b/poppler/PDFDoc.cc @@ -50,7 +50,7 @@ // Copyright (C) 2021 Mahmoud Khalil <[email protected]> // Copyright (C) 2021 RM <[email protected]> // Copyright (C) 2021 Georgiy Sgibnev <[email protected]>. Work sponsored by lab50.net. -// Copyright (C) 2021 Marek Kasik <[email protected]> +// Copyright (C) 2021-2022 Marek Kasik <[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 @@ -633,6 +633,23 @@ std::vector<FormFieldSignature *> PDFDoc::getSignatureFields() return res; } +static int sumSignatureFields(FormField *ff) +{ + int sum = 0; + + if (ff->getNumChildren() == 0) { + if (ff->getType() == formSignature) { + sum = 1; + } + } else { + for (int i = 0; i < ff->getNumChildren(); ++i) { + FormField *children = ff->getChildren(i); + sum += sumSignatureFields(children); + } + } + return sum; +} + int PDFDoc::getNumSignatureFields() { const Form *f = catalog->getForm(); @@ -640,7 +657,13 @@ int PDFDoc::getNumSignatureFields() if (!f) return 0; - return f->getNumFields(); + const int nRootFields = f->getNumFields(); + int sum = 0; + for (int i = 0; i < nRootFields; ++i) { + FormField *ff = f->getRootField(i); + sum += sumSignatureFields(ff); + } + return sum; } void PDFDoc::displayPage(OutputDev *out, int page, double hDPI, double vDPI, int rotate, bool useMediaBox, bool crop, bool printing, bool (*abortCheckCbk)(void *data), void *abortCheckCbkData,
