aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJakob Heher <jakob.heher@iaik.tugraz.at>2026-06-22 12:49:56 +0200
committerJakob Heher <jakob.heher@iaik.tugraz.at>2026-06-22 12:49:56 +0200
commit2f209e01da276e9862d6e0f63d02bcfb14728d9b (patch)
tree721c3f63ad91c0b43a836753d3669c43dbd13fd0
parentec1a6a0f04af82a1797a02316b5260d687c562fc (diff)
downloadpdf-as-4-2f209e01da276e9862d6e0f63d02bcfb14728d9b.tar.gz
pdf-as-4-2f209e01da276e9862d6e0f63d02bcfb14728d9b.tar.bz2
pdf-as-4-2f209e01da276e9862d6e0f63d02bcfb14728d9b.zip
fix placeholder parsing for pdfbox 3 (and test cases)
-rw-r--r--pdf-as-pdfbox-3/src/main/kotlin/at/gv/egiz/pdfas/lib/impl/pdfbox3/Placeholder.kt7
-rw-r--r--pdf-as-pdfbox-3/src/test/java/at/gv/egiz/pdfas/lib/impl/pdfbox3/SignVerifyTest.kt (renamed from pdf-as-pdfbox-3/src/test/kotlin/at/gv/egiz/pdfas/lib/impl/pdfbox3/SignVerifyTest.kt)0
-rw-r--r--pdf-as-pdfbox-3/src/test/java/at/gv/egiz/pdfas/lib/impl/sign/pdfbox3/PDFBoxPlaceholderExtractorTest.java (renamed from pdf-as-pdfbox-3/src/test/kotlin/at/gv/egiz/pdfas/lib/impl/sign/pdfbox3/PDFBoxPlaceholderExtractorTest.java)0
-rw-r--r--pdf-as-pdfbox-3/src/test/java/at/gv/egiz/pdfas/lib/impl/sign/pdfbox3/SignatureFieldsAndPlaceHolderExtractorTest.java (renamed from pdf-as-pdfbox-3/src/test/kotlin/at/gv/egiz/pdfas/lib/impl/sign/pdfbox3/SignatureFieldsAndPlaceHolderExtractorTest.java)110
-rw-r--r--pdf-as-pdfbox-3/src/test/java/at/gv/egiz/pdfas/lib/impl/verify/pdfbox3/PDFBox2To3Test.kt (renamed from pdf-as-pdfbox-3/src/test/kotlin/at/gv/egiz/pdfas/lib/impl/verify/pdfbox3/PDFBox2To3Test.kt)0
-rw-r--r--pdf-as-pdfbox-3/src/test/kotlin/at/gv/egiz/pdfas/lib/impl/sign/pdfbox3/TTFFontTest.java46
-rw-r--r--pdf-as-web/src/main/java/at/gv/egiz/pdfas/web/config/PdfAsWebSpringConfiguration.java5
7 files changed, 56 insertions, 112 deletions
diff --git a/pdf-as-pdfbox-3/src/main/kotlin/at/gv/egiz/pdfas/lib/impl/pdfbox3/Placeholder.kt b/pdf-as-pdfbox-3/src/main/kotlin/at/gv/egiz/pdfas/lib/impl/pdfbox3/Placeholder.kt
index 705eb1fa..873b0ccd 100644
--- a/pdf-as-pdfbox-3/src/main/kotlin/at/gv/egiz/pdfas/lib/impl/pdfbox3/Placeholder.kt
+++ b/pdf-as-pdfbox-3/src/main/kotlin/at/gv/egiz/pdfas/lib/impl/pdfbox3/Placeholder.kt
@@ -17,6 +17,7 @@ import com.google.zxing.ReaderException
import com.google.zxing.client.j2se.BufferedImageLuminanceSource
import com.google.zxing.common.HybridBinarizer
import org.apache.pdfbox.contentstream.PDFStreamEngine
+import org.apache.pdfbox.contentstream.operator.Operator
import org.apache.pdfbox.contentstream.operator.OperatorProcessor
import org.apache.pdfbox.cos.COSBase
import org.apache.pdfbox.cos.COSName
@@ -254,9 +255,9 @@ object PDFBoxPlaceholderExtractor : PlaceholderExtractor {
yieldAll((1..Int.MAX_VALUE).asSequence().map { i -> "${baseName}_${i}"})
}.first { !seenPlaceholderNames.contains(it) }
- override fun processOperator(operation: String, arguments: List<COSBase>) {
+ override fun processOperator(operator: Operator, arguments: List<COSBase>) {
run {
- if (operation != "Do") return@run
+ if (operator.name != "Do") return@run
val objectName = arguments[0] as COSName
val xObject = resources.getXObject(objectName)
if (xObject !is PDImageXObject) return@run
@@ -308,7 +309,7 @@ object PDFBoxPlaceholderExtractor : PlaceholderExtractor {
logger.debug("Found placeholder: {}", signaturePlaceholderData)
placeholders.add(signaturePlaceholderData)
}
- super.processOperator(operation, arguments)
+ super.processOperator(operator, arguments)
}
}
diff --git a/pdf-as-pdfbox-3/src/test/kotlin/at/gv/egiz/pdfas/lib/impl/pdfbox3/SignVerifyTest.kt b/pdf-as-pdfbox-3/src/test/java/at/gv/egiz/pdfas/lib/impl/pdfbox3/SignVerifyTest.kt
index 500b15ed..500b15ed 100644
--- a/pdf-as-pdfbox-3/src/test/kotlin/at/gv/egiz/pdfas/lib/impl/pdfbox3/SignVerifyTest.kt
+++ b/pdf-as-pdfbox-3/src/test/java/at/gv/egiz/pdfas/lib/impl/pdfbox3/SignVerifyTest.kt
diff --git a/pdf-as-pdfbox-3/src/test/kotlin/at/gv/egiz/pdfas/lib/impl/sign/pdfbox3/PDFBoxPlaceholderExtractorTest.java b/pdf-as-pdfbox-3/src/test/java/at/gv/egiz/pdfas/lib/impl/sign/pdfbox3/PDFBoxPlaceholderExtractorTest.java
index e766c385..e766c385 100644
--- a/pdf-as-pdfbox-3/src/test/kotlin/at/gv/egiz/pdfas/lib/impl/sign/pdfbox3/PDFBoxPlaceholderExtractorTest.java
+++ b/pdf-as-pdfbox-3/src/test/java/at/gv/egiz/pdfas/lib/impl/sign/pdfbox3/PDFBoxPlaceholderExtractorTest.java
diff --git a/pdf-as-pdfbox-3/src/test/kotlin/at/gv/egiz/pdfas/lib/impl/sign/pdfbox3/SignatureFieldsAndPlaceHolderExtractorTest.java b/pdf-as-pdfbox-3/src/test/java/at/gv/egiz/pdfas/lib/impl/sign/pdfbox3/SignatureFieldsAndPlaceHolderExtractorTest.java
index e1a7f09b..bdf5b760 100644
--- a/pdf-as-pdfbox-3/src/test/kotlin/at/gv/egiz/pdfas/lib/impl/sign/pdfbox3/SignatureFieldsAndPlaceHolderExtractorTest.java
+++ b/pdf-as-pdfbox-3/src/test/java/at/gv/egiz/pdfas/lib/impl/sign/pdfbox3/SignatureFieldsAndPlaceHolderExtractorTest.java
@@ -5,13 +5,15 @@ import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
-import org.apache.pdfbox.pdmodel.PDDocument;
+import at.gv.egiz.pdfas.lib.impl.pdfbox3.PDFBoxPlaceholderExtractor;
+import lombok.SneakyThrows;
+import lombok.val;
+import org.apache.pdfbox.Loader;
import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.JUnit4;
-import at.gv.egiz.pdfas.lib.impl.pdfbox2.placeholder.SignatureFieldsAndPlaceHolderExtractor;
import at.gv.egiz.pdfas.lib.impl.placeholder.SignaturePlaceholderData;
@RunWith(JUnit4.class)
@@ -27,156 +29,148 @@ public class SignatureFieldsAndPlaceHolderExtractorTest {
}
@Test
- public void notSigned(){
+ public void notSigned() {
SignaturePlaceholderData result = getNextSignaturePlaceHolder(getPath("new_qr_2-2.pdf"));
- Assert.assertEquals("Image5",result.getPlaceholderName());
+ Assert.assertEquals("Image5", result.getPlaceholderName());
}
+
@Test
- public void signedOnce(){
+ public void signedOnce() {
SignaturePlaceholderData result = getNextSignaturePlaceHolder(getPath("new_qr_2_signed.pdf"));
- Assert.assertEquals("Image8",result.getPlaceholderName());
+ Assert.assertEquals("Image8", result.getPlaceholderName());
}
+
@Test
- public void signedTwice(){
+ public void signedTwice() {
SignaturePlaceholderData result = getNextSignaturePlaceHolder(getPath("new_qr_2_signed_signed.pdf"));
- Assert.assertEquals(null,result);
+ Assert.assertEquals(null, result);
}
+
@Test
- public void signedThrice(){
+ public void signedThrice() {
SignaturePlaceholderData result = getNextSignaturePlaceHolder(getPath("new_qr_2_signed_signed_signed.pdf"));
- Assert.assertEquals(null,result);
+ Assert.assertEquals(null, result);
}
@Test
- public void noPlaceHolder(){
+ public void noPlaceHolder() {
SignaturePlaceholderData result = getNextSignaturePlaceHolder(getPath("manySignFields.pdf"));
- Assert.assertEquals(null,result);
+ Assert.assertEquals(null, result);
}
-
+
@Test
public void firstQrCodeOnUnsignedDoc() {
SignaturePlaceholderData result = getNextSignaturePlaceHolder(getPath("new_qr_2-2.pdf"));
- Assert.assertEquals("Image5",result.getPlaceholderName());
-
+ Assert.assertEquals("Image5", result.getPlaceholderName());
+
}
-
+
@Test
- public void subsequentCalls(){
+ public void subsequentCalls() {
SignaturePlaceholderData result = getNextSignaturePlaceHolder(getPath("new_qr_2_signed_signed_signed.pdf"));
- Assert.assertEquals(null,result);
+ Assert.assertEquals(null, result);
result = getNextSignaturePlaceHolder(getPath("new_qr_2_signed.pdf"));
- Assert.assertEquals("Image8",result.getPlaceholderName());
+ Assert.assertEquals("Image8", result.getPlaceholderName());
result = getNextSignaturePlaceHolder(getPath("new_qr_2-2.pdf"));
- Assert.assertEquals("Image5",result.getPlaceholderName());
+ Assert.assertEquals("Image5", result.getPlaceholderName());
result = getNextSignaturePlaceHolder(getPath("new_qr_2-2.pdf"));
- Assert.assertEquals("Image5",result.getPlaceholderName());
+ Assert.assertEquals("Image5", result.getPlaceholderName());
result = getNextSignaturePlaceHolder(getPath("new_qr_2-2.pdf"));
- Assert.assertEquals("Image5",result.getPlaceholderName());
+ Assert.assertEquals("Image5", result.getPlaceholderName());
result = getNextSignaturePlaceHolder(getPath("new_qr_2_signed.pdf"));
- Assert.assertEquals("Image8",result.getPlaceholderName());
+ Assert.assertEquals("Image8", result.getPlaceholderName());
result = getNextSignaturePlaceHolder(getPath("new_qr_2_signed_signed_signed.pdf"));
- Assert.assertEquals(null,result);
+ Assert.assertEquals(null, result);
result = getNextSignaturePlaceHolder(getPath("new_qr_2-2.pdf"));
- Assert.assertEquals("Image5",result.getPlaceholderName());
+ Assert.assertEquals("Image5", result.getPlaceholderName());
result = getNextSignaturePlaceHolder(getPath("new_qr_2_signed.pdf"));
- Assert.assertEquals("Image8",result.getPlaceholderName());
+ Assert.assertEquals("Image8", result.getPlaceholderName());
}
+
@Test
- public void notSignedAndNoFields(){
+ public void notSignedAndNoFields() {
List<String> result = getPlaceHolders(getPath("new_qr_2-2.pdf"));
List<String> expectedResult = new ArrayList<>();
- Assert.assertEquals(expectedResult,result);
+ Assert.assertEquals(expectedResult, result);
}
@Test
- public void notSignedFields(){
+ public void notSignedFields() {
List<String> result = getPlaceHolders(getPath("manySignFields.pdf"));
List<String> expectedResult = Arrays.asList("Signature_0", "Signature_1", "Signature_2", "Signature_3",
"Signature_4", "Signature_5", "Signature_6", "Signature_7");
- Assert.assertEquals(expectedResult,result);
+ Assert.assertEquals(expectedResult, result);
}
@Test
- public void signedOncePosition4FieldTest(){
+ public void signedOncePosition4FieldTest() {
List<String> result = getPlaceHolders(getPath("manySignFields_signed4.pdf"));
List<String> expectedResult = Arrays.asList("Signature_0", "Signature_1", "Signature_2", "Signature_3",
"Signature_5", "Signature_6", "Signature_7");
- Assert.assertEquals(expectedResult,result);
+ Assert.assertEquals(expectedResult, result);
}
@Test
- public void multipleCallsFieldTest(){
+ public void multipleCallsFieldTest() {
List<String> result = getPlaceHolders(getPath("manySignFields_signed4.pdf"));
List<String> expectedResult = Arrays.asList("Signature_0", "Signature_1", "Signature_2", "Signature_3",
"Signature_5", "Signature_6", "Signature_7");
- Assert.assertEquals(expectedResult,result);
+ Assert.assertEquals(expectedResult, result);
result = getPlaceHolders(getPath("manySignFields_signed4.pdf"));
expectedResult = Arrays.asList("Signature_0", "Signature_1", "Signature_2", "Signature_3",
"Signature_5", "Signature_6", "Signature_7");
- Assert.assertEquals(expectedResult,result);
+ Assert.assertEquals(expectedResult, result);
result = getPlaceHolders(getPath("manySignFields.pdf"));
expectedResult = Arrays.asList("Signature_0", "Signature_1", "Signature_2", "Signature_3",
"Signature_4", "Signature_5", "Signature_6", "Signature_7");
- Assert.assertEquals(expectedResult,result);
+ Assert.assertEquals(expectedResult, result);
result = getPlaceHolders(getPath("manySignFields.pdf"));
expectedResult = Arrays.asList("Signature_0", "Signature_1", "Signature_2", "Signature_3",
"Signature_4", "Signature_5", "Signature_6", "Signature_7");
- Assert.assertEquals(expectedResult,result);
+ Assert.assertEquals(expectedResult, result);
result = getPlaceHolders(getPath("manySignFields_signed4.pdf"));
expectedResult = Arrays.asList("Signature_0", "Signature_1", "Signature_2", "Signature_3",
"Signature_5", "Signature_6", "Signature_7");
- Assert.assertEquals(expectedResult,result);
+ Assert.assertEquals(expectedResult, result);
result = getPlaceHolders(getPath("manySignFields_signed4.pdf"));
expectedResult = Arrays.asList("Signature_0", "Signature_1", "Signature_2", "Signature_3",
"Signature_5", "Signature_6", "Signature_7");
- Assert.assertEquals(expectedResult,result);
+ Assert.assertEquals(expectedResult, result);
result = getPlaceHolders(getPath("manySignFields.pdf"));
expectedResult = Arrays.asList("Signature_0", "Signature_1", "Signature_2", "Signature_3",
"Signature_4", "Signature_5", "Signature_6", "Signature_7");
- Assert.assertEquals(expectedResult,result);
+ Assert.assertEquals(expectedResult, result);
}
+ @SneakyThrows
private static List<String> getPlaceHolders(String filePath) {
- try {
- PDDocument doc = PDDocument.load(new File(filePath));
- List<String> results = SignatureFieldsAndPlaceHolderExtractor.findEmptySignatureFields(doc);
-// System.out.println(filePath + ": " + result);
- return results;
- } catch (Throwable e) {
- e.printStackTrace();
+ try (val doc = Loader.loadPDF(new File(filePath))) {
+ return PDFBoxPlaceholderExtractor.findEmptySignatureFields(doc);
}
- return null;
}
+ @SneakyThrows
public static SignaturePlaceholderData getNextSignaturePlaceHolder(String filePath) {
- try {
- PDDocument doc = PDDocument.load(new File(filePath));
- SignaturePlaceholderData result =
- SignatureFieldsAndPlaceHolderExtractor.getNextUnusedSignaturePlaceHolder(doc);
-// System.out.println(filePath + ": " + result);
- return result;
- } catch (Throwable e) {
- e.printStackTrace();
+ try (val doc = Loader.loadPDF(new File(filePath))) {
+ return PDFBoxPlaceholderExtractor.getNextUnusedSignaturePlaceholder(doc);
}
- return null;
}
-
}
diff --git a/pdf-as-pdfbox-3/src/test/kotlin/at/gv/egiz/pdfas/lib/impl/verify/pdfbox3/PDFBox2To3Test.kt b/pdf-as-pdfbox-3/src/test/java/at/gv/egiz/pdfas/lib/impl/verify/pdfbox3/PDFBox2To3Test.kt
index 847018c4..847018c4 100644
--- a/pdf-as-pdfbox-3/src/test/kotlin/at/gv/egiz/pdfas/lib/impl/verify/pdfbox3/PDFBox2To3Test.kt
+++ b/pdf-as-pdfbox-3/src/test/java/at/gv/egiz/pdfas/lib/impl/verify/pdfbox3/PDFBox2To3Test.kt
diff --git a/pdf-as-pdfbox-3/src/test/kotlin/at/gv/egiz/pdfas/lib/impl/sign/pdfbox3/TTFFontTest.java b/pdf-as-pdfbox-3/src/test/kotlin/at/gv/egiz/pdfas/lib/impl/sign/pdfbox3/TTFFontTest.java
deleted file mode 100644
index ce395785..00000000
--- a/pdf-as-pdfbox-3/src/test/kotlin/at/gv/egiz/pdfas/lib/impl/sign/pdfbox3/TTFFontTest.java
+++ /dev/null
@@ -1,46 +0,0 @@
-package at.gv.egiz.pdfas.lib.impl.sign.pdfbox3;
-
-import java.io.File;
-import java.util.Iterator;
-import java.util.List;
-
-import org.apache.pdfbox.cos.COSBase;
-import org.apache.pdfbox.cos.COSDictionary;
-import org.apache.pdfbox.cos.COSName;
-import org.apache.pdfbox.cos.COSObject;
-import org.apache.pdfbox.pdmodel.PDDocument;
-
-public class TTFFontTest {
-
- public static void main(String[] args) {
- try {
- PDDocument doc = PDDocument.load(new File("/home/afitzek/Downloads/pdf_groesse/willenserklaerung_signedByUser.pdf"));
-
- List<COSObject> cosObjects = doc.getDocument().getObjectsByType(COSName.FONT);
-
- Iterator<COSObject> cosObjectIt = cosObjects.iterator();
-
- while(cosObjectIt.hasNext()) {
- COSObject cosObject = cosObjectIt.next();
- COSBase subType = ((COSDictionary)cosObject.getObject()).getItem(COSName.SUBTYPE);
- COSBase baseFont = ((COSDictionary)cosObject.getObject()).getItem(COSName.BASE_FONT);
- COSBase aTest = ((COSDictionary)cosObject.getObject()).getItem(COSName.A);
-
- System.out.println(aTest);
-
- if(subType.equals(COSName.TRUE_TYPE)) {
- System.out.println("Object Number: " + cosObject.getObjectNumber() +
- subType.toString());
- System.out.println(" BaseFont: " + baseFont.toString());
- }
-
-
- }
-
-
- } catch(Throwable e) {
- e.printStackTrace();
- }
- }
-
-}
diff --git a/pdf-as-web/src/main/java/at/gv/egiz/pdfas/web/config/PdfAsWebSpringConfiguration.java b/pdf-as-web/src/main/java/at/gv/egiz/pdfas/web/config/PdfAsWebSpringConfiguration.java
index 631247e2..2a64307a 100644
--- a/pdf-as-web/src/main/java/at/gv/egiz/pdfas/web/config/PdfAsWebSpringConfiguration.java
+++ b/pdf-as-web/src/main/java/at/gv/egiz/pdfas/web/config/PdfAsWebSpringConfiguration.java
@@ -15,9 +15,4 @@ public class PdfAsWebSpringConfiguration {
@Value("${pdf-as-web.conf}")
@Getter
@NonNull String pdfAsWebConfPath;
-
- /** then also add pdf-as-web.properties itself as a spring property source (so it supplements application.properties) */
- @Configuration
- @PropertySource("file:${pdf-as-web.conf}")
- public static class AsSpringPropertySource {}
}