From 8e0ccca7cfd1680e33737e0db8d6e1091661568c Mon Sep 17 00:00:00 2001 From: Thomas <> Date: Mon, 26 Jun 2023 21:11:26 +0200 Subject: refact(placeholder): clean-up, bugfix and optimize QR-Code placeholder detection Major re-factoring of QR-Code detection with huge clean-up of code. --- .../SignatureFieldsAndPlaceHolderExtractor.java | 134 +++++++-------------- 1 file changed, 43 insertions(+), 91 deletions(-) (limited to 'pdf-as-pdfbox-2/src/main/java/at/gv/egiz/pdfas/lib/impl/pdfbox2/placeholder/SignatureFieldsAndPlaceHolderExtractor.java') diff --git a/pdf-as-pdfbox-2/src/main/java/at/gv/egiz/pdfas/lib/impl/pdfbox2/placeholder/SignatureFieldsAndPlaceHolderExtractor.java b/pdf-as-pdfbox-2/src/main/java/at/gv/egiz/pdfas/lib/impl/pdfbox2/placeholder/SignatureFieldsAndPlaceHolderExtractor.java index 609f8254..8e5e5d4e 100644 --- a/pdf-as-pdfbox-2/src/main/java/at/gv/egiz/pdfas/lib/impl/pdfbox2/placeholder/SignatureFieldsAndPlaceHolderExtractor.java +++ b/pdf-as-pdfbox-2/src/main/java/at/gv/egiz/pdfas/lib/impl/pdfbox2/placeholder/SignatureFieldsAndPlaceHolderExtractor.java @@ -1,106 +1,58 @@ package at.gv.egiz.pdfas.lib.impl.pdfbox2.placeholder; -import at.gv.egiz.pdfas.lib.impl.placeholder.PlaceholderExtractorConstants; -import at.gv.egiz.pdfas.lib.impl.placeholder.SignaturePlaceholderData; +import java.util.ArrayList; +import java.util.List; + import org.apache.pdfbox.pdmodel.PDDocument; import org.apache.pdfbox.pdmodel.interactive.digitalsignature.PDSignature; import org.apache.pdfbox.pdmodel.interactive.form.PDAcroForm; import org.apache.pdfbox.pdmodel.interactive.form.PDField; import org.apache.pdfbox.pdmodel.interactive.form.PDSignatureField; -import java.io.IOException; -import java.util.ArrayList; -import java.util.List; +import at.gv.egiz.pdfas.lib.impl.placeholder.PlaceholderExtractorConstants; +import at.gv.egiz.pdfas.lib.impl.placeholder.SignaturePlaceholderData; public class SignatureFieldsAndPlaceHolderExtractor { - //Search for empty signature fields - public static List findEmptySignatureFields(PDDocument doc) - { - PDSignature signature; - List signatureField; - List signatureFieldNames = new ArrayList<>(); - PDAcroForm acroForm = doc.getDocumentCatalog().getAcroForm(); - if (acroForm != null) { - signatureField = acroForm.getFields(); - for (PDField pdField : signatureField) { - if(pdField instanceof PDSignatureField && pdField.getPartialName()!=null) - { - signature = ((PDSignatureField) pdField).getSignature(); - if(signature == null) signatureFieldNames.add(pdField.getPartialName()); - } - } - } - return signatureFieldNames; - } - /* - Needed by PDF-OVER - */ - - /** - * Returns the next unused signature placeholder - * @param doc The document to be searched for signature placeholders - * @return The next unused signature placeholder or null in case there is none - */ - public static SignaturePlaceholderData getNextUnusedSignaturePlaceHolder(PDDocument doc) { - try { - String placeholderId = "1"; - int mode = PlaceholderExtractorConstants.PLACEHOLDER_MATCH_MODE_SORTED; - SignaturePlaceholderExtractor signaturePlaceholderExtractor = new SignaturePlaceholderExtractor( placeholderId, - mode, doc); - List results = signaturePlaceholderExtractor.extractList(doc, placeholderId, - mode); - if (results == null) { - return null; - } - List used = getExistingSignatureLocations(doc); - //return first not used - for(SignaturePlaceholderData result : results) { - if(!used.contains(result.getPlaceholderName())) - return result; - } - return null; - } catch (Exception e) { - e.printStackTrace(); - return null; - } - } - - public static SignaturePlaceholderData getSignaturePlaceHolder(PDDocument doc, String placeholderId, - int mode) { - try { - SignaturePlaceholderExtractor signaturePlaceholderExtractor = new SignaturePlaceholderExtractor( placeholderId, - mode, doc); - return signaturePlaceholderExtractor.extract(doc, placeholderId, mode); - } catch (Exception e) { - e.printStackTrace(); - return null; + // Search for empty signature fields + public static List findEmptySignatureFields(PDDocument doc) { + PDSignature signature; + List signatureField; + final List signatureFieldNames = new ArrayList<>(); + final PDAcroForm acroForm = doc.getDocumentCatalog().getAcroForm(); + if (acroForm != null) { + signatureField = acroForm.getFields(); + for (final PDField pdField : signatureField) { + if (pdField instanceof PDSignatureField && pdField.getPartialName() != null) { + signature = ((PDSignatureField) pdField).getSignature(); + if (signature == null) { + signatureFieldNames.add(pdField.getPartialName()); + } } + } } - - public static List getSignaturePlaceHolderList(PDDocument doc, String placeholderId, int mode) { - try { - SignaturePlaceholderExtractor signaturePlaceholderExtractor = new SignaturePlaceholderExtractor( placeholderId, - mode, doc); - return signaturePlaceholderExtractor.extractList(doc, placeholderId, mode); - } catch (Exception e) { - e.printStackTrace(); - return null; - } - } - - public static List getExistingSignatureLocations(PDDocument doc) { - List existingLocations = new ArrayList<>(); - try { - List pdSignatureList = doc.getSignatureDictionaries(); - if(pdSignatureList.size() != 0) { - for(PDSignature sig : pdSignatureList) { - existingLocations.add(sig.getLocation()); - } - } - } catch (IOException e) { - e.printStackTrace(); - } - return existingLocations; + return signatureFieldNames; + } + /* + * Needed by PDF-OVER + */ + + /** + * Returns the next unused signature placeholder + * + * @param doc The document to be searched for signature placeholders + * @return The next unused signature placeholder or null in case there is none + */ + public static SignaturePlaceholderData getNextUnusedSignaturePlaceHolder(PDDocument doc) { + try { + final String placeholderId = "1"; + final int mode = PlaceholderExtractorConstants.PLACEHOLDER_MATCH_MODE_SORTED; + final SignaturePlaceholderExtractor signaturePlaceholderExtractor = new SignaturePlaceholderExtractor(); + return signaturePlaceholderExtractor.extract(doc, placeholderId, mode); + + } catch (final Exception e) { + e.printStackTrace(); + return null; } + } } -- cgit v1.2.3