aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/at/knowcenter/wag/egov/egiz/pdf/AdobeSignatureHelper.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/at/knowcenter/wag/egov/egiz/pdf/AdobeSignatureHelper.java')
-rw-r--r--src/main/java/at/knowcenter/wag/egov/egiz/pdf/AdobeSignatureHelper.java31
1 files changed, 29 insertions, 2 deletions
diff --git a/src/main/java/at/knowcenter/wag/egov/egiz/pdf/AdobeSignatureHelper.java b/src/main/java/at/knowcenter/wag/egov/egiz/pdf/AdobeSignatureHelper.java
index 6a7c545..9a52a84 100644
--- a/src/main/java/at/knowcenter/wag/egov/egiz/pdf/AdobeSignatureHelper.java
+++ b/src/main/java/at/knowcenter/wag/egov/egiz/pdf/AdobeSignatureHelper.java
@@ -1,12 +1,14 @@
package at.knowcenter.wag.egov.egiz.pdf;
import java.util.HashMap;
+import java.util.Iterator;
import javax.xml.datatype.DatatypeFactory;
import javax.xml.datatype.XMLGregorianCalendar;
import org.apache.log4j.Logger;
+import at.gv.egiz.pdfas.api.commons.Constants;
import at.gv.egiz.pdfas.exceptions.ErrorCode;
import at.gv.egiz.pdfas.framework.signator.SignatorInformation;
import at.gv.egiz.pdfas.utils.OgnlUtil;
@@ -16,9 +18,11 @@ import at.knowcenter.wag.egov.egiz.exceptions.SettingsException;
import at.knowcenter.wag.egov.egiz.sig.SignatureObject;
import com.lowagie.text.Rectangle;
+import com.lowagie.text.pdf.AcroFields;
import com.lowagie.text.pdf.PdfDate;
import com.lowagie.text.pdf.PdfDictionary;
import com.lowagie.text.pdf.PdfName;
+import com.lowagie.text.pdf.PdfObject;
import com.lowagie.text.pdf.PdfSignature;
import com.lowagie.text.pdf.PdfSignatureAppearance;
import com.lowagie.text.pdf.PdfStamper;
@@ -31,7 +35,7 @@ import com.lowagie.text.pdf.PdfString;
*
*/
public class AdobeSignatureHelper {
- private static final String ADOBE_SIGN_FIELDNAME_KEY = "adobeSignFieldName";
+ private static final String ADOBE_SIGN_FIELDNAME_KEY = "adobeSignFieldValue";
private static final String ADOBE_SIG_ENABLED_KEY = "adobeSignEnabled";
@@ -54,17 +58,36 @@ public class AdobeSignatureHelper {
SignatureObject so, ActualTablePos atp) throws PresentableException {
try {
- logger.info("create adobe signature field");
+ logger.debug("Creating adobe signature field.");
PdfSignatureAppearance sap = stamper.getSignatureAppearance();
String fieldName = getAdobeFieldName(so.getSignatureTypeDefinition().getType());
// find field num
+ /*
int nexSigNum = 1;
String finalFieldName = fieldName + " #" + nexSigNum;
+
while (stamper.getAcroFields().getField(finalFieldName) != null) {
nexSigNum++;
finalFieldName = fieldName + " #" + nexSigNum;
}
+ */
+
+ AcroFields af = stamper.getAcroFields();
+ Iterator signatureNamesIt = af.getSignatureNames().iterator();
+ PdfName referenceFilterName = new PdfName(ADOBE_SIG_FILTER);
+ int nextSigNum = 1;
+ while (signatureNamesIt.hasNext()) {
+ PdfDictionary dictionary = (PdfDictionary) af.getSignatureDictionary((String) signatureNamesIt.next());
+ PdfObject filterName = dictionary.get(PdfName.FILTER);
+ if (filterName != null && filterName.isName()) {
+ PdfName name = (PdfName) filterName;
+ if (referenceFilterName.equals(name)) {
+ nextSigNum++;
+ }
+ }
+ }
+ String finalFieldName = fieldName + " #" + nextSigNum;
sap.setCrypto(null, null, null, null);
// supress overlay text for visible signatures
@@ -88,11 +111,15 @@ public class AdobeSignatureHelper {
// sig.setReason("reason is not visible");
// sig.setContact("contact is not visible");
// sig.setDate(new PdfDate());
+
+ /* disabled in order to align adobe signature appearance for textual signatures with binary signatures
if (si != null) {
XMLGregorianCalendar c = DatatypeFactory.newInstance().newXMLGregorianCalendar(
si.getSignSignatureObject().date);
sig.setDate(new PdfDate(c.toGregorianCalendar()));
}
+ */
+
sig.setName(getAdobeSignText(so.getSignatureTypeDefinition().getType(), si));
sap.setCryptoDictionary(sig);