aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--pdf-as-pdfbox-2/src/main/java/at/gv/egiz/pdfas/lib/impl/pdfbox2/placeholder/SignaturePlaceholderExtractor.java34
-rw-r--r--pdf-as-pdfbox-2/src/test/java/at/gv/egiz/pdfas/lib/testpdfbox/PDFBoxPlaceholderExtractorTest.java13
-rw-r--r--pdf-as-pdfbox-2/src/test/java/at/gv/egiz/pdfas/lib/testpdfbox/SignatureFieldsAndPlaceHolderExtractorTest.java20
-rw-r--r--pdf-as-pdfbox-2/src/test/resources/data/cmd_test-pdf-signed.pdfbin0 -> 170173 bytes
-rw-r--r--pdf-as-pdfbox-2/src/test/resources/data/cmd_test-pdf-signed_2.pdfbin0 -> 255597 bytes
-rw-r--r--pdf-as-pdfbox-2/src/test/resources/data/cmd_test-pdf-signed_3.pdfbin0 -> 340901 bytes
-rw-r--r--pdf-as-pdfbox-2/src/test/resources/data/own_Testdoc+Signatur-sign-sign.pdfbin0 -> 172302 bytes
-rw-r--r--pdf-as-pdfbox-2/src/test/resources/data/own_Testdoc+Signatur-sign.pdfbin0 -> 128804 bytes
-rw-r--r--pdf-as-pdfbox-2/src/test/resources/new_qr_2_signed.pdfbin267402 -> 225097 bytes
-rw-r--r--pdf-as-pdfbox-2/src/test/resources/new_qr_2_signed_signed.pdfbin352501 -> 267093 bytes
-rw-r--r--pdf-as-pdfbox-2/src/test/resources/new_qr_2_signed_signed_signed.pdfbin437946 -> 310607 bytes
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
new file mode 100644
index 00000000..03b8f4f9
--- /dev/null
+++ b/pdf-as-pdfbox-2/src/test/resources/data/cmd_test-pdf-signed.pdf
Binary files differ
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
new file mode 100644
index 00000000..e6ac3b6c
--- /dev/null
+++ b/pdf-as-pdfbox-2/src/test/resources/data/cmd_test-pdf-signed_2.pdf
Binary files differ
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
new file mode 100644
index 00000000..1768400f
--- /dev/null
+++ b/pdf-as-pdfbox-2/src/test/resources/data/cmd_test-pdf-signed_3.pdf
Binary files differ
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
new file mode 100644
index 00000000..910d16ab
--- /dev/null
+++ b/pdf-as-pdfbox-2/src/test/resources/data/own_Testdoc+Signatur-sign-sign.pdf
Binary files differ
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
new file mode 100644
index 00000000..1bda36c6
--- /dev/null
+++ b/pdf-as-pdfbox-2/src/test/resources/data/own_Testdoc+Signatur-sign.pdf
Binary files differ
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
index 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
Binary files differ
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
index 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
Binary files differ
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
index 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
Binary files differ