From 8b6eeda673ab545dadf6ffedde1654f6a0604428 Mon Sep 17 00:00:00 2001 From: Andreas Fitzek Date: Thu, 15 May 2014 10:11:39 +0200 Subject: TTF Fonts width fix, null value in signature block fix, Signature reason from config --- .../pdfas/common/settings/IProfileConstants.java | 1 + .../common/settings/SignatureProfileSettings.java | 10 ++++++- .../at/gv/egiz/pdfas/common/utils/StringUtils.java | 6 ++++ .../lib/impl/signing/pdfbox/PADESPDFBOXSigner.java | 34 ++++++++++++++++++++-- .../lib/impl/stamping/pdfbox/PDFBoxTable.java | 5 ++-- 5 files changed, 51 insertions(+), 5 deletions(-) diff --git a/pdf-as-common/src/main/java/at/gv/egiz/pdfas/common/settings/IProfileConstants.java b/pdf-as-common/src/main/java/at/gv/egiz/pdfas/common/settings/IProfileConstants.java index 02780b8c..aaa00ed6 100644 --- a/pdf-as-common/src/main/java/at/gv/egiz/pdfas/common/settings/IProfileConstants.java +++ b/pdf-as-common/src/main/java/at/gv/egiz/pdfas/common/settings/IProfileConstants.java @@ -89,5 +89,6 @@ public interface IProfileConstants { public final static String TMP_DIR_DEFAULT_VALUE = "pdfastmp"; public final static String SIGNING_REASON = "adobeSignReasonValue"; + public final static String SIGNFIELD_VALUE = "adobeSignFieldValue"; public final static String SIG_PDFA1B_VALID = "SIG_PDFA1B_VALID"; } diff --git a/pdf-as-common/src/main/java/at/gv/egiz/pdfas/common/settings/SignatureProfileSettings.java b/pdf-as-common/src/main/java/at/gv/egiz/pdfas/common/settings/SignatureProfileSettings.java index 84a9e6f8..45b5c375 100644 --- a/pdf-as-common/src/main/java/at/gv/egiz/pdfas/common/settings/SignatureProfileSettings.java +++ b/pdf-as-common/src/main/java/at/gv/egiz/pdfas/common/settings/SignatureProfileSettings.java @@ -133,7 +133,7 @@ public class SignatureProfileSettings implements IProfileConstants { String value = others.get(key); key = key.substring(key.lastIndexOf('.') + 1); - profileSettings.put(key, others.get(value)); + profileSettings.put(key, value); logger.debug(" Settings: " + key + " : " + value); } @@ -180,6 +180,10 @@ public class SignatureProfileSettings implements IProfileConstants { return value; } + String v = profileSettings.get(key); + if (v != null) { + return v; + } return getDefaultValue(key); } @@ -191,6 +195,10 @@ public class SignatureProfileSettings implements IProfileConstants { return this.getValue(SIGNING_REASON); } + public String getSignFieldValue() { + return this.getValue(SIGNFIELD_VALUE); + } + public boolean isPDFA() { SignatureProfileEntry entry = profileInformations.get(SIG_PDFA1B_VALID); if (entry != null) { diff --git a/pdf-as-common/src/main/java/at/gv/egiz/pdfas/common/utils/StringUtils.java b/pdf-as-common/src/main/java/at/gv/egiz/pdfas/common/utils/StringUtils.java index d0a9fee7..c110b93d 100644 --- a/pdf-as-common/src/main/java/at/gv/egiz/pdfas/common/utils/StringUtils.java +++ b/pdf-as-common/src/main/java/at/gv/egiz/pdfas/common/utils/StringUtils.java @@ -62,6 +62,12 @@ public class StringUtils { public static String convertStringToPDFFormat(String value) throws UnsupportedEncodingException { + + if(value == null) { + logger.warn("Trying to convert null string!"); + return value; + } + byte[] replace_bytes = applyWinAnsiEncoding(value); String restored_value = unapplyWinAnsiEncoding(replace_bytes); 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 44919b1c..8694017f 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 @@ -128,7 +128,7 @@ public class PADESPDFBOXSigner implements IPdfSigner, IConfigurationConstants { if (signerReason == null) { signerReason = "PAdES Signature"; } - + signature.setReason(signerReason); logger.debug("Signing reason: " + signerReason); @@ -139,7 +139,7 @@ public class PADESPDFBOXSigner implements IPdfSigner, IConfigurationConstants { signer.setPDSignature(signature); SignatureOptions options = new SignatureOptions(); - + // Is visible Signature if (requestedSignature.isVisual()) { logger.info("Creating visual siganture block"); @@ -321,6 +321,36 @@ public class PADESPDFBOXSigner implements IPdfSigner, IConfigurationConstants { doc.addSignature(signature, signer, options); + String sigFieldName = signatureProfileSettings.getSignFieldValue(); + + if(sigFieldName != null) { + PDAcroForm acroForm = doc.getDocumentCatalog().getAcroForm(); + if (acroForm != null) { + @SuppressWarnings("unchecked") + List 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; + } + } + } + } 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!]"); + } + } + if (requestedSignature.isVisual()) { // if(requestedSignature.getSignaturePosition().) diff --git a/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/lib/impl/stamping/pdfbox/PDFBoxTable.java b/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/lib/impl/stamping/pdfbox/PDFBoxTable.java index 1d8928aa..c6d515f9 100644 --- a/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/lib/impl/stamping/pdfbox/PDFBoxTable.java +++ b/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/lib/impl/stamping/pdfbox/PDFBoxTable.java @@ -374,9 +374,10 @@ public class PDFBoxTable { float fwidth; if (c instanceof PDType1Font) { fwidth = c.getFontDescriptor().getFontBoundingBox().getWidth() - / 1000 * fontSize; + / 1000.0f * fontSize; } else { - fwidth = c.getFontDescriptor().getMaxWidth(); + fwidth = c.getStringWidth("abcdefghijklmnopqrstuvwxyz ") / 1000.0f * fontSize; + fwidth = fwidth / (float)"abcdefghijklmnopqrstuvwxyz".length(); } logger.debug("Font Width: {}", fwidth); -- cgit v1.2.3