aboutsummaryrefslogtreecommitdiff
path: root/pdf-as-pdfbox-2/src/main/java/at/gv/egiz/pdfas
diff options
context:
space:
mode:
authorAlexander Marsalek <amarsalek@iaik.tugraz.at>2021-04-20 21:12:16 +0200
committerAlexander Marsalek <amarsalek@iaik.tugraz.at>2021-04-20 21:23:59 +0200
commitaa45585a4cb9e7aff0ef3da3c6a6fe43b9ace98c (patch)
treeadbd5148432a702578c36fbf0bf5bf7a0a5409a3 /pdf-as-pdfbox-2/src/main/java/at/gv/egiz/pdfas
parent649b3cd196987eac24a519d987676a0ba09e2432 (diff)
downloadpdf-as-4-aa45585a4cb9e7aff0ef3da3c6a6fe43b9ace98c.tar.gz
pdf-as-4-aa45585a4cb9e7aff0ef3da3c6a6fe43b9ace98c.tar.bz2
pdf-as-4-aa45585a4cb9e7aff0ef3da3c6a6fe43b9ace98c.zip
fix?
Diffstat (limited to 'pdf-as-pdfbox-2/src/main/java/at/gv/egiz/pdfas')
-rw-r--r--pdf-as-pdfbox-2/src/main/java/at/gv/egiz/pdfas/lib/impl/pdfbox2/placeholder/PDFBoxPlaceholderExtractor.java32
-rw-r--r--pdf-as-pdfbox-2/src/main/java/at/gv/egiz/pdfas/lib/impl/pdfbox2/placeholder/SignaturePlaceholderExtractor.java95
-rw-r--r--pdf-as-pdfbox-2/src/main/java/at/gv/egiz/pdfas/lib/impl/signing/pdfbox2/PADESPDFBOXSigner.java10
3 files changed, 108 insertions, 29 deletions
diff --git a/pdf-as-pdfbox-2/src/main/java/at/gv/egiz/pdfas/lib/impl/pdfbox2/placeholder/PDFBoxPlaceholderExtractor.java b/pdf-as-pdfbox-2/src/main/java/at/gv/egiz/pdfas/lib/impl/pdfbox2/placeholder/PDFBoxPlaceholderExtractor.java
index 256400a0..63b006bf 100644
--- a/pdf-as-pdfbox-2/src/main/java/at/gv/egiz/pdfas/lib/impl/pdfbox2/placeholder/PDFBoxPlaceholderExtractor.java
+++ b/pdf-as-pdfbox-2/src/main/java/at/gv/egiz/pdfas/lib/impl/pdfbox2/placeholder/PDFBoxPlaceholderExtractor.java
@@ -1,19 +1,47 @@
package at.gv.egiz.pdfas.lib.impl.pdfbox2.placeholder;
+import at.gv.egiz.pdfas.common.exceptions.PDFIOException;
import at.gv.egiz.pdfas.common.exceptions.PdfAsException;
import at.gv.egiz.pdfas.lib.impl.pdfbox2.PDFBOXObject;
import at.gv.egiz.pdfas.lib.impl.placeholder.PlaceholderExtractor;
import at.gv.egiz.pdfas.lib.impl.placeholder.SignaturePlaceholderData;
import at.gv.egiz.pdfas.lib.impl.status.PDFObject;
+import java.io.IOException;
+import java.util.List;
+
public class PDFBoxPlaceholderExtractor implements PlaceholderExtractor {
+
@Override
public SignaturePlaceholderData extract(PDFObject doc, String placeholderId, int matchMode) throws PdfAsException {
if (doc instanceof PDFBOXObject) {
PDFBOXObject object = (PDFBOXObject) doc;
- return SignaturePlaceholderExtractor.extract(object.getDocument(),
- placeholderId, matchMode);
+ try {
+ SignaturePlaceholderExtractor extractor = new SignaturePlaceholderExtractor(placeholderId,
+ matchMode, object.getDocument());
+ return extractor.extract(object.getDocument(),
+ placeholderId, matchMode);
+ } catch (IOException | ClassNotFoundException | InstantiationException | IllegalAccessException e2) {
+ throw new PDFIOException("error.pdf.io.04", e2);
+ }
+
+ }
+ throw new PdfAsException("INVALID STATE");
+ }
+
+ @Override
+ public List<SignaturePlaceholderData> extractList(PDFObject doc, String placeholderId, int matchMode) throws PdfAsException {
+ if (doc instanceof PDFBOXObject) {
+ PDFBOXObject object = (PDFBOXObject) doc;
+ try {
+ SignaturePlaceholderExtractor extractor = new SignaturePlaceholderExtractor(placeholderId,
+ matchMode, object.getDocument());
+ return extractor.extractList(object.getDocument(),
+ placeholderId, matchMode);
+ } catch (IOException | ClassNotFoundException | InstantiationException | IllegalAccessException e2) {
+ throw new PDFIOException("error.pdf.io.04", e2);
+ }
}
throw new PdfAsException("INVALID STATE");
}
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 8a2c1cff..4031d07f 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
@@ -103,11 +103,11 @@ public class SignaturePlaceholderExtractor extends PDFStreamEngine implements Pl
private static Logger logger = LoggerFactory
.getLogger(SignaturePlaceholderExtractor.class);
- private static List<SignaturePlaceholderData> placeholders = new ArrayList<>();
+ private List<SignaturePlaceholderData> placeholders = new ArrayList<>();
private int currentPage = 0;
private PDDocument doc;
- private SignaturePlaceholderExtractor(String placeholderId,
+ protected SignaturePlaceholderExtractor(String placeholderId,
int placeholderMatchMode, PDDocument doc) throws IOException, ClassNotFoundException, InstantiationException, IllegalAccessException {
super();
@@ -126,9 +126,9 @@ public class SignaturePlaceholderExtractor extends PDFStreamEngine implements Pl
this.doc = doc;
}
- public static List<SignaturePlaceholderData> getPlaceholders() {
- return placeholders;
- }
+// public static List<SignaturePlaceholderData> getPlaceholders() {
+// return placeholders;
+// }
/**
@@ -136,38 +136,36 @@ public class SignaturePlaceholderExtractor extends PDFStreamEngine implements Pl
* additional info.<br/>
* Searches only for the first placeholder page after page from top.
*
- * @param inputStream
* @return all available info from the first found placeholder.
- * @throws PDFDocumentException
+ * @throws PdfAsException
* if the document could not be read.
* @throws PlaceholderExtractionException
* if STRICT matching mode was requested and no suitable
* placeholder could be found.
*/
- public static SignaturePlaceholderData extract(PDDocument doc,
+ public SignaturePlaceholderData extract(PDDocument doc,
String placeholderId, int matchMode) throws PdfAsException {
SignaturePlaceholderContext.setSignaturePlaceholderData(null);
-
- SignaturePlaceholderExtractor extractor;
- try {
- extractor = new SignaturePlaceholderExtractor(placeholderId,
- matchMode, doc);
- } catch (IOException | ClassNotFoundException | InstantiationException | IllegalAccessException e2) {
- throw new PDFIOException("error.pdf.io.04", e2);
- }
+// SignaturePlaceholderExtractor extractor;
+// try {
+// extractor = new SignaturePlaceholderExtractor(placeholderId,
+// matchMode, doc);
+// } catch (IOException | ClassNotFoundException | InstantiationException | IllegalAccessException e2) {
+// throw new PDFIOException("error.pdf.io.04", e2);
+// }
int pageNr = 0;
for(PDPage page : doc.getPages()){
pageNr++;
try {
- extractor.setCurrentPage(pageNr);
+ setCurrentPage(pageNr);
if(page.getContents() != null && page.getResources() != null && page.getContentStreams() != null) {
- extractor.processPage(page); //TODO: pdfbox2 - right?
+ processPage(page); //TODO: pdfbox2 - right?
}
SignaturePlaceholderData ret = matchPlaceholderPage(
- extractor.placeholders, placeholderId, matchMode);
+ placeholders, placeholderId, matchMode);
if (ret != null) {
SignaturePlaceholderContext
.setSignaturePlaceholderData(ret);
@@ -179,9 +177,9 @@ public class SignaturePlaceholderExtractor extends PDFStreamEngine implements Pl
throw new PDFIOException("error.pdf.io.04", e);
}
}
- if (extractor.placeholders.size() > 0) {
+ if (placeholders.size() > 0) {
SignaturePlaceholderData ret = matchPlaceholderDocument(
- extractor.placeholders, placeholderId, matchMode);
+ placeholders, placeholderId, matchMode);
SignaturePlaceholderContext.setSignaturePlaceholderData(ret);
return ret;
}
@@ -193,7 +191,56 @@ public class SignaturePlaceholderExtractor extends PDFStreamEngine implements Pl
return null;
}
- private static SignaturePlaceholderData matchPlaceholderDocument(
+ public List<SignaturePlaceholderData> extractList(PDDocument doc,
+ String placeholderId, int matchMode) throws PdfAsException {
+ SignaturePlaceholderContext.setSignaturePlaceholderData(null);
+// List<SignaturePlaceholderData> placeholders = new ArrayList<>();
+// SignaturePlaceholderExtractor extractor;
+// try {
+// extractor = new SignaturePlaceholderExtractor(placeholderId,
+// matchMode, doc);
+// } catch (IOException | ClassNotFoundException | InstantiationException | IllegalAccessException e2) {
+// throw new PDFIOException("error.pdf.io.04", e2);
+// }
+
+ int pageNr = 0;
+ for(PDPage page : doc.getPages()){
+ pageNr++;
+
+ try {
+ setCurrentPage(pageNr);
+ if(page.getContents() != null && page.getResources() != null && page.getContentStreams() != null) {
+ processPage(page); //TODO: pdfbox2 - right?
+
+ }
+ SignaturePlaceholderData ret = matchPlaceholderPage(
+ placeholders, placeholderId, matchMode);
+ if (ret != null) {
+ SignaturePlaceholderContext
+ .setSignaturePlaceholderData(ret);
+ return placeholders;
+ }
+ } catch (IOException e1) {
+ throw new PDFIOException("error.pdf.io.04", e1);
+ } catch(Throwable e) {
+ throw new PDFIOException("error.pdf.io.04", e);
+ }
+ }
+ if (placeholders.size() > 0) {
+ SignaturePlaceholderData ret = matchPlaceholderDocument(
+ placeholders, placeholderId, matchMode);
+ SignaturePlaceholderContext.setSignaturePlaceholderData(ret);
+ return placeholders;
+ }
+ // no placeholders found, apply strict mode if set
+ if (matchMode == PLACEHOLDER_MATCH_MODE_STRICT) {
+ throw new PlaceholderExtractionException("error.pdf.stamp.09");
+ }
+
+ return null;
+ }
+
+ private SignaturePlaceholderData matchPlaceholderDocument(
List<SignaturePlaceholderData> placeholders, String placeholderId,
int matchMode) throws PlaceholderExtractionException {
@@ -247,7 +294,7 @@ public class SignaturePlaceholderExtractor extends PDFStreamEngine implements Pl
return null;
}
- private static SignaturePlaceholderData matchPlaceholderPage(
+ private SignaturePlaceholderData matchPlaceholderPage(
List<SignaturePlaceholderData> placeholders, String placeholderId,
int matchMode) {
@@ -266,6 +313,8 @@ public class SignaturePlaceholderExtractor extends PDFStreamEngine implements Pl
return null;
}
+
+
private void setCurrentPage(int pageNr) {
this.currentPage = pageNr;
}
diff --git a/pdf-as-pdfbox-2/src/main/java/at/gv/egiz/pdfas/lib/impl/signing/pdfbox2/PADESPDFBOXSigner.java b/pdf-as-pdfbox-2/src/main/java/at/gv/egiz/pdfas/lib/impl/signing/pdfbox2/PADESPDFBOXSigner.java
index 94f70a4c..6345a714 100644
--- a/pdf-as-pdfbox-2/src/main/java/at/gv/egiz/pdfas/lib/impl/signing/pdfbox2/PADESPDFBOXSigner.java
+++ b/pdf-as-pdfbox-2/src/main/java/at/gv/egiz/pdfas/lib/impl/signing/pdfbox2/PADESPDFBOXSigner.java
@@ -157,9 +157,11 @@ public class PADESPDFBOXSigner implements IPdfSigner, IConfigurationConstants {
signature.setFilter(COSName.getPDFName(signer.getPDFFilter()));
signature.setSubFilter(COSName.getPDFName(signer.getPDFSubFilter()));
- SignaturePlaceholderData signaturePlaceholderDataInit = PlaceholderFilter.checkPlaceholderSignatureLocation(pdfObject.getStatus(), pdfObject.getStatus().getSettings(), placeholder_id);
+// SignaturePlaceholderData signaturePlaceholderDataInit =
+ placeholders =PlaceholderFilter.checkPlaceholderSignatureLocationList(pdfObject.getStatus(),
+ pdfObject.getStatus().getSettings(), placeholder_id);
- placeholders = SignaturePlaceholderExtractor.getPlaceholders();
+// placeholders = SignaturePlaceholderExtractor.getPlaceholders();
availablePlaceholders = listAvailablePlaceholders(placeholders, existingSignatureLocations(doc));
@@ -653,7 +655,7 @@ public class PADESPDFBOXSigner implements IPdfSigner, IConfigurationConstants {
if (doc != null) {
try {
doc.close();
- SignaturePlaceholderExtractor.getPlaceholders().clear();
+ //SignaturePlaceholderExtractor.getPlaceholders().clear();
} catch (IOException e) {
logger.debug("Failed to close COS Doc!", e);
// Ignore
@@ -936,7 +938,7 @@ public class PADESPDFBOXSigner implements IPdfSigner, IConfigurationConstants {
//find first placeholder_id
public List<SignaturePlaceholderData> listAvailablePlaceholders(List<SignaturePlaceholderData> placeholders, List<String> existingPlaceholders) {
- List<SignaturePlaceholderData> result = null;
+ List<SignaturePlaceholderData> result = new ArrayList<>();
if(placeholders!=null) {
for(int i = 0; i < placeholders.size(); ++i) {