diff options
11 files changed, 41 insertions, 26 deletions
diff --git a/pdf-as-pdfbox-2/src/main/java/at/gv/egiz/pdfas/lib/impl/pdfbox2/placeholder/SignaturePlaceholderExtractor.java b/pdf-as-pdfbox-2/src/main/java/at/gv/egiz/pdfas/lib/impl/pdfbox2/placeholder/SignaturePlaceholderExtractor.java index 8716603b..e954b654 100644 --- a/pdf-as-pdfbox-2/src/main/java/at/gv/egiz/pdfas/lib/impl/pdfbox2/placeholder/SignaturePlaceholderExtractor.java +++ b/pdf-as-pdfbox-2/src/main/java/at/gv/egiz/pdfas/lib/impl/pdfbox2/placeholder/SignaturePlaceholderExtractor.java @@ -245,7 +245,13 @@ public class SignaturePlaceholderExtractor extends PDFStreamEngine implements Pl try { data.setTablePos(new TablePos(posString)); - data.setPlaceholderName(buildUniqueObjectName(objectName)); + + boolean idExists = placeholders.stream() + .filter(el -> el.getPlaceholderName().equals(objectName.getName())) + .findFirst() + .isPresent(); + + data.setPlaceholderName(buildUniqueObjectName(objectName, idExists)); log.debug("Found Placeholder at: {}", data.toString()); placeholders.add(data); @@ -272,10 +278,13 @@ public class SignaturePlaceholderExtractor extends PDFStreamEngine implements Pl private static String readPlaceHolderId(PDSignature signature) { PDPropBuild sigProps = getOrNew(signature); PDPropBuildDataDict appProps = getOrNew(sigProps); - return appProps.getName() != null && appProps.getName().startsWith(PREFIX) + String newHolderId = appProps.getName() != null && appProps.getName().startsWith(PREFIX) ? appProps.getName().substring(PREFIX.length()) : appProps.getName(); + // read placeHolderId from old location element as backup + return newHolderId != null ? newHolderId : signature.getLocation(); + } /** @@ -297,25 +306,22 @@ public class SignaturePlaceholderExtractor extends PDFStreamEngine implements Pl * Builds unique placeholderId from PDF element. * * @param name PDF element name + * @param idExists <code>true</code> if same name already found, otherwise false * @return unique identifier */ - private String buildUniqueObjectName(COSName name) - { + private String buildUniqueObjectName(COSName name, boolean idExists) { + if (idExists) { COSDictionary dict = getResources().getCOSObject().getCOSDictionary(COSName.XOBJECT); - if (dict == null) - { - return name.getName(); - - } - - COSBase base = dict.getItem(name); - if (base instanceof COSObject) - { + if (dict != null) { + COSBase base = dict.getItem(name); + if (base instanceof COSObject) { return name.getName() + "_" + String.valueOf(((COSObject) base).getObjectNumber()); + } } + } - return name.getName(); + return name.getName(); } diff --git a/pdf-as-pdfbox-2/src/test/java/at/gv/egiz/pdfas/lib/testpdfbox/PDFBoxPlaceholderExtractorTest.java b/pdf-as-pdfbox-2/src/test/java/at/gv/egiz/pdfas/lib/testpdfbox/PDFBoxPlaceholderExtractorTest.java index d0c215ae..6a5b4962 100644 --- a/pdf-as-pdfbox-2/src/test/java/at/gv/egiz/pdfas/lib/testpdfbox/PDFBoxPlaceholderExtractorTest.java +++ b/pdf-as-pdfbox-2/src/test/java/at/gv/egiz/pdfas/lib/testpdfbox/PDFBoxPlaceholderExtractorTest.java @@ -21,8 +21,7 @@ public class PDFBoxPlaceholderExtractorTest { @SneakyThrows public void nextPlaceholder() { SignaturePlaceholderData result = getNextSignaturePlaceHolder("/data/platzhalter_en_de_test.pdf"); - assertEquals("Im48_48", result.getPlaceholderName()); - + assertEquals("Im48", result.getPlaceholderName()); } @Test @@ -35,6 +34,16 @@ public class PDFBoxPlaceholderExtractorTest { } @Test + @SneakyThrows + public void nextPlaceholderDuplicateElements() { + assertEquals("Im1", getNextSignaturePlaceHolder("/data/own_Testdoc+Signatur-sign-sign.pdf").getPlaceholderName()); + assertEquals("Im1", getNextSignaturePlaceHolder("/data/cmd_test-pdf-signed.pdf").getPlaceholderName()); + assertEquals("Im0_48", getNextSignaturePlaceHolder("/data/cmd_test-pdf-signed_2.pdf").getPlaceholderName()); + assertEquals("Im1_49", getNextSignaturePlaceHolder("/data/cmd_test-pdf-signed_3.pdf").getPlaceholderName()); + + } + + @Test @Ignore @SneakyThrows public void placeHolderInAnnotation() { diff --git a/pdf-as-pdfbox-2/src/test/java/at/gv/egiz/pdfas/lib/testpdfbox/SignatureFieldsAndPlaceHolderExtractorTest.java b/pdf-as-pdfbox-2/src/test/java/at/gv/egiz/pdfas/lib/testpdfbox/SignatureFieldsAndPlaceHolderExtractorTest.java index 2e5e475c..0ed05eb5 100644 --- a/pdf-as-pdfbox-2/src/test/java/at/gv/egiz/pdfas/lib/testpdfbox/SignatureFieldsAndPlaceHolderExtractorTest.java +++ b/pdf-as-pdfbox-2/src/test/java/at/gv/egiz/pdfas/lib/testpdfbox/SignatureFieldsAndPlaceHolderExtractorTest.java @@ -29,12 +29,12 @@ public class SignatureFieldsAndPlaceHolderExtractorTest { @Test public void notSigned(){ SignaturePlaceholderData result = getNextSignaturePlaceHolder(getPath("new_qr_2-2.pdf")); - Assert.assertEquals("Image5_5",result.getPlaceholderName()); + Assert.assertEquals("Image5",result.getPlaceholderName()); } @Test public void signedOnce(){ SignaturePlaceholderData result = getNextSignaturePlaceHolder(getPath("new_qr_2_signed.pdf")); - Assert.assertEquals("Image8_8",result.getPlaceholderName()); + Assert.assertEquals("Image8",result.getPlaceholderName()); } @Test public void signedTwice(){ @@ -56,7 +56,7 @@ public class SignatureFieldsAndPlaceHolderExtractorTest { @Test public void firstQrCodeOnUnsignedDoc() { SignaturePlaceholderData result = getNextSignaturePlaceHolder(getPath("new_qr_2-2.pdf")); - Assert.assertEquals("Image5_5",result.getPlaceholderName()); + Assert.assertEquals("Image5",result.getPlaceholderName()); } @@ -66,28 +66,28 @@ public class SignatureFieldsAndPlaceHolderExtractorTest { Assert.assertEquals(null,result); result = getNextSignaturePlaceHolder(getPath("new_qr_2_signed.pdf")); - Assert.assertEquals("Image8_8",result.getPlaceholderName()); + Assert.assertEquals("Image8",result.getPlaceholderName()); result = getNextSignaturePlaceHolder(getPath("new_qr_2-2.pdf")); - Assert.assertEquals("Image5_5",result.getPlaceholderName()); + Assert.assertEquals("Image5",result.getPlaceholderName()); result = getNextSignaturePlaceHolder(getPath("new_qr_2-2.pdf")); - Assert.assertEquals("Image5_5",result.getPlaceholderName()); + Assert.assertEquals("Image5",result.getPlaceholderName()); result = getNextSignaturePlaceHolder(getPath("new_qr_2-2.pdf")); - Assert.assertEquals("Image5_5",result.getPlaceholderName()); + Assert.assertEquals("Image5",result.getPlaceholderName()); result = getNextSignaturePlaceHolder(getPath("new_qr_2_signed.pdf")); - Assert.assertEquals("Image8_8",result.getPlaceholderName()); + Assert.assertEquals("Image8",result.getPlaceholderName()); result = getNextSignaturePlaceHolder(getPath("new_qr_2_signed_signed_signed.pdf")); Assert.assertEquals(null,result); result = getNextSignaturePlaceHolder(getPath("new_qr_2-2.pdf")); - Assert.assertEquals("Image5_5",result.getPlaceholderName()); + Assert.assertEquals("Image5",result.getPlaceholderName()); result = getNextSignaturePlaceHolder(getPath("new_qr_2_signed.pdf")); - Assert.assertEquals("Image8_8",result.getPlaceholderName()); + Assert.assertEquals("Image8",result.getPlaceholderName()); } @Test public void notSignedAndNoFields(){ diff --git a/pdf-as-pdfbox-2/src/test/resources/data/cmd_test-pdf-signed.pdf b/pdf-as-pdfbox-2/src/test/resources/data/cmd_test-pdf-signed.pdf Binary files differnew file mode 100644 index 00000000..03b8f4f9 --- /dev/null +++ b/pdf-as-pdfbox-2/src/test/resources/data/cmd_test-pdf-signed.pdf diff --git a/pdf-as-pdfbox-2/src/test/resources/data/cmd_test-pdf-signed_2.pdf b/pdf-as-pdfbox-2/src/test/resources/data/cmd_test-pdf-signed_2.pdf Binary files differnew file mode 100644 index 00000000..e6ac3b6c --- /dev/null +++ b/pdf-as-pdfbox-2/src/test/resources/data/cmd_test-pdf-signed_2.pdf diff --git a/pdf-as-pdfbox-2/src/test/resources/data/cmd_test-pdf-signed_3.pdf b/pdf-as-pdfbox-2/src/test/resources/data/cmd_test-pdf-signed_3.pdf Binary files differnew file mode 100644 index 00000000..1768400f --- /dev/null +++ b/pdf-as-pdfbox-2/src/test/resources/data/cmd_test-pdf-signed_3.pdf diff --git a/pdf-as-pdfbox-2/src/test/resources/data/own_Testdoc+Signatur-sign-sign.pdf b/pdf-as-pdfbox-2/src/test/resources/data/own_Testdoc+Signatur-sign-sign.pdf Binary files differnew file mode 100644 index 00000000..910d16ab --- /dev/null +++ b/pdf-as-pdfbox-2/src/test/resources/data/own_Testdoc+Signatur-sign-sign.pdf diff --git a/pdf-as-pdfbox-2/src/test/resources/data/own_Testdoc+Signatur-sign.pdf b/pdf-as-pdfbox-2/src/test/resources/data/own_Testdoc+Signatur-sign.pdf Binary files differnew file mode 100644 index 00000000..1bda36c6 --- /dev/null +++ b/pdf-as-pdfbox-2/src/test/resources/data/own_Testdoc+Signatur-sign.pdf diff --git a/pdf-as-pdfbox-2/src/test/resources/new_qr_2_signed.pdf b/pdf-as-pdfbox-2/src/test/resources/new_qr_2_signed.pdf Binary files differindex c3a53b23..be6fdddb 100644 --- a/pdf-as-pdfbox-2/src/test/resources/new_qr_2_signed.pdf +++ b/pdf-as-pdfbox-2/src/test/resources/new_qr_2_signed.pdf diff --git a/pdf-as-pdfbox-2/src/test/resources/new_qr_2_signed_signed.pdf b/pdf-as-pdfbox-2/src/test/resources/new_qr_2_signed_signed.pdf Binary files differindex 1b831a73..ee0f140f 100644 --- a/pdf-as-pdfbox-2/src/test/resources/new_qr_2_signed_signed.pdf +++ b/pdf-as-pdfbox-2/src/test/resources/new_qr_2_signed_signed.pdf diff --git a/pdf-as-pdfbox-2/src/test/resources/new_qr_2_signed_signed_signed.pdf b/pdf-as-pdfbox-2/src/test/resources/new_qr_2_signed_signed_signed.pdf Binary files differindex 6468ada7..34769dd0 100644 --- a/pdf-as-pdfbox-2/src/test/resources/new_qr_2_signed_signed_signed.pdf +++ b/pdf-as-pdfbox-2/src/test/resources/new_qr_2_signed_signed_signed.pdf |
