aboutsummaryrefslogtreecommitdiff
path: root/pdf-as-pdfbox-2/src/main/java
diff options
context:
space:
mode:
authorThomas Lenz <thomas.lenz@egiz.gv.at>2026-03-04 17:52:59 +0100
committerThomas Lenz <thomas.lenz@egiz.gv.at>2026-03-04 17:52:59 +0100
commit422bfc5c6083ae57257f09e0c0ad1b208094e903 (patch)
tree6e43226568be012a34af77006da4ef83b2faeda4 /pdf-as-pdfbox-2/src/main/java
parentbbb7dc4aec8ad9108b66eeb99e88bb52c8a4966f (diff)
parent2b9646cbb9d9627ec7abbac797e5fe19d7f79cf7 (diff)
downloadpdf-as-4-422bfc5c6083ae57257f09e0c0ad1b208094e903.tar.gz
pdf-as-4-422bfc5c6083ae57257f09e0c0ad1b208094e903.tar.bz2
pdf-as-4-422bfc5c6083ae57257f09e0c0ad1b208094e903.zip
Merge branch 'feature/placeholder_fix' into development
Diffstat (limited to 'pdf-as-pdfbox-2/src/main/java')
-rw-r--r--pdf-as-pdfbox-2/src/main/java/at/gv/egiz/pdfas/lib/impl/pdfbox2/placeholder/SignaturePlaceholderExtractor.java43
1 files changed, 13 insertions, 30 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 e954b654..dd1be61e 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
@@ -50,15 +50,8 @@ import java.awt.geom.AffineTransform;
import java.awt.geom.NoninvertibleTransformException;
import java.awt.image.BufferedImage;
import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Hashtable;
-import java.util.List;
+import java.util.*;
import java.util.Map.Entry;
-import java.util.Objects;
-import java.util.Properties;
-import java.util.Set;
-import java.util.Vector;
import java.util.stream.Collectors;
import org.apache.pdfbox.contentstream.PDFStreamEngine;
@@ -107,7 +100,8 @@ import lombok.extern.slf4j.Slf4j;
public class SignaturePlaceholderExtractor extends PDFStreamEngine implements PlaceholderExtractorConstants {
public static final String PREFIX = "PDF-AS_";
-
+
+ private final Set<String> placeholderNames = new HashSet<>();
private final List<SignaturePlaceholderData> placeholders = new ArrayList<>();
private int currentPage = 0;
@@ -153,7 +147,7 @@ public class SignaturePlaceholderExtractor extends PDFStreamEngine implements Pl
pageNr++;
try {
- this.currentPage = pageNr;
+ this.currentPage = pageNr;
if (page.getContents() != null && page.getResources() != null && page.getContentStreams() != null) {
processPage(page); // TODO: pdfbox2 - right?
@@ -246,14 +240,10 @@ public class SignaturePlaceholderExtractor extends PDFStreamEngine implements Pl
try {
data.setTablePos(new TablePos(posString));
- boolean idExists = placeholders.stream()
- .filter(el -> el.getPlaceholderName().equals(objectName.getName()))
- .findFirst()
- .isPresent();
-
- data.setPlaceholderName(buildUniqueObjectName(objectName, idExists));
+ data.setPlaceholderName(buildUniqueObjectName(objectName));
log.debug("Found Placeholder at: {}", data.toString());
placeholders.add(data);
+ placeholderNames.add(data.getPlaceholderName());
} catch (final PdfAsException e) {
throw new IOException();
@@ -306,23 +296,16 @@ 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, boolean idExists) {
- if (idExists) {
- COSDictionary dict = getResources().getCOSObject().getCOSDictionary(COSName.XOBJECT);
- if (dict != null) {
- COSBase base = dict.getItem(name);
- if (base instanceof COSObject) {
- return name.getName() + "_" + String.valueOf(((COSObject) base).getObjectNumber());
-
- }
- }
+ private String buildUniqueObjectName(COSName name) {
+ final String baseName = name.getName();
+ int i = 0;
+ String candidate = baseName;
+ while (placeholderNames.contains(candidate)) {
+ candidate = baseName + "_" + (++i);
}
-
- return name.getName();
-
+ return candidate;
}
private SignaturePlaceholderData matchPlaceholderPage(