aboutsummaryrefslogtreecommitdiff
path: root/pdf-as-pdfbox-2/src/main/java/at/gv/egiz/pdfas/lib/impl/signing/pdfbox2/PADESPDFBOXSigner.java
diff options
context:
space:
mode:
authorAndreas Fitzek <andreas.fitzek@iaik.tugraz.at>2016-12-12 07:50:25 +0100
committerAndreas Fitzek <andreas.fitzek@iaik.tugraz.at>2016-12-12 07:50:25 +0100
commit65eb7054679d63a4f519bd31eb37805666e6fef8 (patch)
tree132ec9504a268e44e801e6bd1c26fcc49bd57e7d /pdf-as-pdfbox-2/src/main/java/at/gv/egiz/pdfas/lib/impl/signing/pdfbox2/PADESPDFBOXSigner.java
parent57ffbe830705003caa2af2e12f7e38c38d3a2ff8 (diff)
downloadpdf-as-4-65eb7054679d63a4f519bd31eb37805666e6fef8.tar.gz
pdf-as-4-65eb7054679d63a4f519bd31eb37805666e6fef8.tar.bz2
pdf-as-4-65eb7054679d63a4f519bd31eb37805666e6fef8.zip
added PDF/A-3b support, and PDF/A version detection
Diffstat (limited to 'pdf-as-pdfbox-2/src/main/java/at/gv/egiz/pdfas/lib/impl/signing/pdfbox2/PADESPDFBOXSigner.java')
-rw-r--r--pdf-as-pdfbox-2/src/main/java/at/gv/egiz/pdfas/lib/impl/signing/pdfbox2/PADESPDFBOXSigner.java40
1 files changed, 39 insertions, 1 deletions
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 8965ce0e..901e47db 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
@@ -48,6 +48,7 @@ import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDDocumentCatalog;
import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.pdmodel.PDResources;
+import org.apache.pdfbox.pdmodel.common.PDMetadata;
import org.apache.pdfbox.pdmodel.common.PDNumberTreeNode;
import org.apache.pdfbox.pdmodel.common.PDRectangle;
import org.apache.pdfbox.pdmodel.documentinterchange.logicalstructure.PDStructureElement;
@@ -68,6 +69,9 @@ import org.apache.pdfbox.preflight.exception.ValidationException;
import org.apache.pdfbox.preflight.parser.PreflightParser;
import org.apache.pdfbox.rendering.ImageType;
import org.apache.pdfbox.rendering.PDFRenderer;
+import org.apache.xmpbox.XMPMetadata;
+import org.apache.xmpbox.schema.PDFAIdentificationSchema;
+import org.apache.xmpbox.xml.DomXmpParser;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -132,6 +136,8 @@ public class PADESPDFBOXSigner implements IPdfSigner, IConfigurationConstants {
PDFASPDFBOXSignatureInterface signer = (PDFASPDFBOXSignatureInterface) genericSigner;
+ String pdfaVersion = null;
+
PDDocument doc = null;
SignatureOptions options = new SignatureOptions();
COSDocument visualSignatureDocumentGuard = null;
@@ -221,6 +227,11 @@ public class PADESPDFBOXSigner implements IPdfSigner, IConfigurationConstants {
}
options.setPreferredSignatureSize(signatureSize);
+ if(signatureProfileSettings.isPDFA() || signatureProfileSettings.isPDFA3()) {
+ pdfaVersion = getPDFAVersion(doc);
+ signatureProfileSettings.setPDFAVersion(pdfaVersion);
+ }
+
// Is visible Signature
if (requestedSignature.isVisual()) {
logger.info("Creating visual siganture block");
@@ -352,7 +363,7 @@ public class PADESPDFBOXSigner implements IPdfSigner, IConfigurationConstants {
}
- if (signatureProfileSettings.isPDFA()) {
+ if (signatureProfileSettings.isPDFA() || signatureProfileSettings.isPDFA3()) {
PDDocumentCatalog root = doc.getDocumentCatalog();
COSBase base = root.getCOSObject().getItem(COSName.OUTPUT_INTENTS);
if (base == null) {
@@ -807,4 +818,31 @@ public class PADESPDFBOXSigner implements IPdfSigner, IConfigurationConstants {
throw ErrorExtractor.searchPdfAsError(e, status);
}
}
+
+ private String getPDFAVersion(PDDocument doc) {
+ try {
+ PDDocumentCatalog cat = doc.getDocumentCatalog();
+ PDMetadata metadata = cat.getMetadata();
+
+ if(metadata != null) {
+ DomXmpParser xmpParser = new DomXmpParser();
+ XMPMetadata xmpMetadata = xmpParser.parse(metadata.exportXMPMetadata());
+ if(xmpMetadata != null) {
+ PDFAIdentificationSchema pdfaIdentificationSchema = xmpMetadata.getPDFIdentificationSchema();
+ if (pdfaIdentificationSchema != null) {
+ Integer pdfaversion = pdfaIdentificationSchema.getPart();
+ String conformance = pdfaIdentificationSchema.getConformance();
+ logger.info("Detected PDF/A Version: {} - {}", pdfaversion, conformance);
+
+ if(pdfaversion != null) {
+ return String.valueOf(pdfaversion);
+ }
+ }
+ }
+ }
+ } catch (Throwable e) {
+ logger.warn("Failed to determine PDF/A Version!", e);
+ }
+ return null;
+ }
}