aboutsummaryrefslogtreecommitdiff
path: root/pdf-as-lib/src
diff options
context:
space:
mode:
authorAndreas Fitzek <andreas.fitzek@iaik.tugraz.at>2014-07-08 09:55:12 +0200
committerAndreas Fitzek <andreas.fitzek@iaik.tugraz.at>2014-07-08 09:55:12 +0200
commitde6b5593bd28cf91ecef3b9ec1123fc06de1e49f (patch)
tree029985549957e6e52e1b988b588a494903b6f33a /pdf-as-lib/src
parent8e71c5c2fe0bbd588b95dd4158dd1e378c146e07 (diff)
downloadpdf-as-4-de6b5593bd28cf91ecef3b9ec1123fc06de1e49f.tar.gz
pdf-as-4-de6b5593bd28cf91ecef3b9ec1123fc06de1e49f.tar.bz2
pdf-as-4-de6b5593bd28cf91ecef3b9ec1123fc06de1e49f.zip
Fixed unique Signature field names, to make Adobe Reader happy
Diffstat (limited to 'pdf-as-lib/src')
-rw-r--r--pdf-as-lib/src/main/java/at/gv/egiz/pdfas/lib/impl/signing/pdfbox/PADESPDFBOXSigner.java71
-rw-r--r--pdf-as-lib/src/main/java/at/gv/egiz/pdfas/lib/util/SignatureUtils.java29
2 files changed, 69 insertions, 31 deletions
diff --git a/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/lib/impl/signing/pdfbox/PADESPDFBOXSigner.java b/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/lib/impl/signing/pdfbox/PADESPDFBOXSigner.java
index 1e33a3cb..146e4993 100644
--- a/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/lib/impl/signing/pdfbox/PADESPDFBOXSigner.java
+++ b/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/lib/impl/signing/pdfbox/PADESPDFBOXSigner.java
@@ -75,6 +75,7 @@ import at.gv.egiz.pdfas.lib.impl.stamping.pdfbox.PDFAsVisualSignatureProperties;
import at.gv.egiz.pdfas.lib.impl.stamping.pdfbox.PdfBoxVisualObject;
import at.gv.egiz.pdfas.lib.impl.status.PDFObject;
import at.gv.egiz.pdfas.lib.impl.status.RequestedSignature;
+import at.gv.egiz.pdfas.lib.util.SignatureUtils;
import at.knowcenter.wag.egov.egiz.pdf.PositioningInstruction;
import at.knowcenter.wag.egov.egiz.pdf.TablePos;
import at.knowcenter.wag.egov.egiz.table.Table;
@@ -172,15 +173,16 @@ public class PADESPDFBOXSigner implements IPdfSigner, IConfigurationConstants {
.getSignaturePosition();
TablePos signaturePos = null;
-
+
String signaturePosString = signatureProfileConfiguration
- .getDefaultPositioning();
+ .getDefaultPositioning();
- if(signaturePosString != null) {
- logger.debug("using signature Positioning: " + signaturePos);
+ if (signaturePosString != null) {
+ logger.debug("using signature Positioning: "
+ + signaturePos);
signaturePos = new TablePos(signaturePosString);
}
-
+
logger.debug("using Positioning: " + posString);
if (posString != null) {
@@ -190,8 +192,8 @@ public class PADESPDFBOXSigner implements IPdfSigner, IConfigurationConstants {
// Fallback to signature Position!
tablePos = signaturePos;
}
-
- if(tablePos == null) {
+
+ if (tablePos == null) {
// Last Fallback default position
tablePos = new TablePos();
}
@@ -288,8 +290,9 @@ public class PADESPDFBOXSigner implements IPdfSigner, IConfigurationConstants {
if (signatureProfileSettings.isPDFA()) {
PDDocumentCatalog root = doc.getDocumentCatalog();
- COSBase base = root.getCOSDictionary().getItem(COSName.OUTPUT_INTENTS);
- if(base == null) {
+ COSBase base = root.getCOSDictionary().getItem(
+ COSName.OUTPUT_INTENTS);
+ if (base == null) {
InputStream colorProfile = PDDocumentCatalog.class
.getResourceAsStream("/icm/sRGB Color Space Profile.icm");
try {
@@ -335,33 +338,39 @@ public class PADESPDFBOXSigner implements IPdfSigner, IConfigurationConstants {
String sigFieldName = signatureProfileSettings.getSignFieldValue();
- if (sigFieldName != null) {
- PDAcroForm acroForm = doc.getDocumentCatalog().getAcroForm();
- if (acroForm != null) {
- @SuppressWarnings("unchecked")
- List<PDField> fields = acroForm.getFields();
- PDSignatureField signatureField = null;
-
- if (fields != null) {
- for (PDField pdField : fields) {
- if (pdField instanceof PDSignatureField) {
- if (((PDSignatureField) pdField).getSignature()
- .getDictionary()
- .equals(signature.getDictionary())) {
- signatureField = (PDSignatureField) pdField;
- }
+ if (sigFieldName == null) {
+ sigFieldName = "PDF-AS Signatur";
+ }
+
+ int count = SignatureUtils.countSignatures(doc);
+
+ sigFieldName = sigFieldName + count;
+
+ PDAcroForm acroFormm = doc.getDocumentCatalog().getAcroForm();
+ if (acroFormm != null) {
+ @SuppressWarnings("unchecked")
+ List<PDField> fields = acroFormm.getFields();
+ PDSignatureField signatureField = null;
+
+ if (fields != null) {
+ for (PDField pdField : fields) {
+ if (pdField instanceof PDSignatureField) {
+ if (((PDSignatureField) pdField).getSignature()
+ .getDictionary()
+ .equals(signature.getDictionary())) {
+ signatureField = (PDSignatureField) pdField;
}
}
- } else {
- logger.warn("Failed to name Signature Field! [Cannot find Field list in acroForm!]");
- }
-
- if (signatureField != null) {
- signatureField.setPartialName(sigFieldName);
}
} else {
- logger.warn("Failed to name Signature Field! [Cannot find acroForm!]");
+ logger.warn("Failed to name Signature Field! [Cannot find Field list in acroForm!]");
+ }
+
+ if (signatureField != null) {
+ signatureField.setPartialName(sigFieldName);
}
+ } else {
+ logger.warn("Failed to name Signature Field! [Cannot find acroForm!]");
}
if (requestedSignature.isVisual()) {
diff --git a/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/lib/util/SignatureUtils.java b/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/lib/util/SignatureUtils.java
new file mode 100644
index 00000000..28713e1a
--- /dev/null
+++ b/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/lib/util/SignatureUtils.java
@@ -0,0 +1,29 @@
+package at.gv.egiz.pdfas.lib.util;
+
+import org.apache.pdfbox.cos.COSArray;
+import org.apache.pdfbox.cos.COSDictionary;
+import org.apache.pdfbox.cos.COSName;
+import org.apache.pdfbox.pdmodel.PDDocument;
+
+public class SignatureUtils {
+
+ public static int countSignatures(PDDocument doc) {
+ int count = 0;
+ COSDictionary trailer = doc.getDocument().getTrailer();
+ COSDictionary root = (COSDictionary) trailer
+ .getDictionaryObject(COSName.ROOT);
+ COSDictionary acroForm = (COSDictionary) root
+ .getDictionaryObject(COSName.ACRO_FORM);
+ COSArray fields = (COSArray) acroForm
+ .getDictionaryObject(COSName.FIELDS);
+ for (int i = 0; i < fields.size(); i++) {
+ COSDictionary field = (COSDictionary) fields.getObject(i);
+ String type = field.getNameAsString("FT");
+ if ("Sig".equals(type)) {
+ count++;
+ }
+ }
+
+ return count;
+ }
+}