From 683f42f194a30e70d4d09f4bac779d15526e1436 Mon Sep 17 00:00:00 2001 From: Tobias Kellner Date: Fri, 12 Dec 2014 13:48:28 +0100 Subject: Make PDF/A compatibility configurable --- .../main/java/at/asit/pdfover/gui/Constants.java | 8 ++- .../composites/AdvancedConfigurationComposite.java | 47 ++++++++++++-- .../gui/composites/ConfigurationComposite.java | 17 +++-- .../composites/SimpleConfigurationComposite.java | 45 +++++--------- .../gui/utils/SignaturePlaceholderCache.java | 18 +++++- .../gui/workflow/config/ConfigManipulator.java | 8 ++- .../gui/workflow/config/ConfigProvider.java | 8 ++- .../gui/workflow/config/ConfigProviderImpl.java | 72 ++++++++++++++-------- .../workflow/config/ConfigurationContainer.java | 16 ++++- .../config/ConfigurationContainerImpl.java | 35 ++++++++--- .../workflow/config/PersistentConfigProvider.java | 8 ++- .../gui/workflow/states/PositioningState.java | 24 +++++--- .../gui/workflow/states/PrepareSigningState.java | 5 +- .../at/asit/pdfover/gui/messages.properties | 2 + .../at/asit/pdfover/gui/messages_de.properties | 2 + .../asit/pdfover/signator/SignatureParameter.java | 25 +++++++- .../signer/pdfas/PdfAs4SignatureParameter.java | 33 ++++++---- 17 files changed, 267 insertions(+), 106 deletions(-) diff --git a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/Constants.java b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/Constants.java index dffcec0f..16c5f7cf 100644 --- a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/Constants.java +++ b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/Constants.java @@ -101,6 +101,9 @@ public class Constants { /** Update URL */ public static final String UPDATE_URL = "http://webstart.buergerkarte.at/PDF-Over/"; //$NON-NLS-1$ + /** True */ + public static final String TRUE = "true"; //$NON-NLS-1$ + /** False */ public static final String FALSE = "false"; //$NON-NLS-1$ @@ -121,7 +124,7 @@ public class Constants { */ public static final String CFG_SIGNATURE_POSITION = "SIGNATURE_POSITION"; //$NON-NLS-1$ - /** This signature placeholder transparency config parameter (0-255) */ + /** The signature placeholder transparency config parameter (0-255) */ public static final String CFG_SIGNATURE_PLACEHOLDER_TRANSPARENCY = "SIGNATURE_PLACEHOLDER_TRANSPARENCY"; //$NON-NLS-1$ /** The mobile number config parameter */ @@ -133,6 +136,9 @@ public class Constants { /** The signature locale config parameter */ public static final String CFG_SIGNATURE_LOCALE = "SIGNLOCALE"; //$NON-NLS-1$ + /** The PDF/A-compatibility config parameter */ + public static final String CFG_SIGNATURE_PDFA_COMPAT = "SIGNATURE_PDFA_COMPAT"; //$NON-NLS-1$ + /** Mobile bku url config parameter */ public static final String CFG_MOBILE_BKU_URL = "MOBILE_BKU_URL"; //$NON-NLS-1$ diff --git a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/composites/AdvancedConfigurationComposite.java b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/composites/AdvancedConfigurationComposite.java index 548d5767..8ca12de1 100644 --- a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/composites/AdvancedConfigurationComposite.java +++ b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/composites/AdvancedConfigurationComposite.java @@ -73,6 +73,7 @@ public class AdvancedConfigurationComposite extends BaseConfigurationComposite { private Group grpSignatur; Button btnAutomatischePositionierung; + Button btnPdfACompat; private Label lblTransparenz; private Label lblTransparenzLinks; private Label lblTransparenzRechts; @@ -162,10 +163,36 @@ public class AdvancedConfigurationComposite extends BaseConfigurationComposite { } }); + this.btnPdfACompat = new Button(this.grpSignatur, SWT.CHECK); + FormData fd_btnPdfACompat = new FormData(); + fd_btnPdfACompat.right = new FormAttachment(100, -5); + fd_btnPdfACompat.top = new FormAttachment( + this.btnAutomatischePositionierung, 5); + fd_btnPdfACompat.left = new FormAttachment(0, 5); + this.btnPdfACompat + .setLayoutData(fd_btnPdfACompat); + + FontData[] fD_btnPdfACompat = this.btnPdfACompat + .getFont().getFontData(); + fD_btnPdfACompat[0] + .setHeight(Constants.TEXT_SIZE_BUTTON); + this.btnPdfACompat.setFont(new Font(Display + .getCurrent(), fD_btnPdfACompat[0])); + + this.btnPdfACompat + .addSelectionListener(new SelectionAdapter() { + @Override + public void widgetSelected(SelectionEvent e) { + AdvancedConfigurationComposite.this + .performPdfACompatSelection(AdvancedConfigurationComposite.this.btnPdfACompat + .getSelection()); + } + }); + this.lblTransparenz = new Label(this.grpSignatur, SWT.HORIZONTAL); FormData fd_lblTransparenz = new FormData(); fd_lblTransparenz.top = new FormAttachment( - this.btnAutomatischePositionierung, 5); + this.btnPdfACompat, 5); fd_lblTransparenz.left = new FormAttachment(0, 5); this.lblTransparenz.setLayoutData(fd_lblTransparenz); @@ -775,6 +802,11 @@ public class AdvancedConfigurationComposite extends BaseConfigurationComposite { this.btnAutomatischePositionierung.setSelection(automatic); } + void performPdfACompatSelection(boolean compat) { + this.configurationContainer.setSignaturePdfACompat(compat); + this.btnPdfACompat.setSelection(compat); + } + void performPlaceholderTransparency(int transparency) { this.configurationContainer.setPlaceholderTransparency(transparency); } @@ -890,19 +922,20 @@ public class AdvancedConfigurationComposite extends BaseConfigurationComposite { @Override public void loadConfiguration() { // load advanced settings - this.performBKUSelectionChanged(this.configurationContainer + performBKUSelectionChanged(this.configurationContainer .getDefaultBKU()); String outputFolder = this.configurationContainer.getOutputFolder(); if (outputFolder != null) { - this.performOutputFolderChanged(outputFolder); + performOutputFolderChanged(outputFolder); } SignaturePosition pos = this.configurationContainer .getDefaultSignaturePosition(); - this.performPositionSelection(pos != null && pos.useAutoPositioning()); + performPositionSelection(pos != null && pos.useAutoPositioning()); this.sclTransparenz.setSelection(this.configurationContainer .getPlaceholderTransparency()); - this.performLocaleSelectionChanged(this.configurationContainer.getLocale()); - this.performUpdateCheckSelection(this.configurationContainer.getUpdateCheck()); + performLocaleSelectionChanged(this.configurationContainer.getLocale()); + performPdfACompatSelection(this.configurationContainer.getSignaturePdfACompat()); + performUpdateCheckSelection(this.configurationContainer.getUpdateCheck()); int port = this.configurationContainer.getProxyPort(); if (port > 0) { @@ -972,6 +1005,8 @@ public class AdvancedConfigurationComposite extends BaseConfigurationComposite { .getString("advanced_config.Signature_Title")); //$NON-NLS-1$ this.btnAutomatischePositionierung.setText(Messages .getString("advanced_config.AutoPosition")); //$NON-NLS-1$ + this.btnPdfACompat.setText(Messages + .getString("advanced_config.PdfACompat")); //$NON-NLS-1$ this.btnAutomatischePositionierung.setToolTipText(Messages .getString("advanced_config.AutoPosition_ToolTip")); //$NON-NLS-1$ this.lblTransparenz.setText(Messages diff --git a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/composites/ConfigurationComposite.java b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/composites/ConfigurationComposite.java index 2f8abadb..407b493b 100644 --- a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/composites/ConfigurationComposite.java +++ b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/composites/ConfigurationComposite.java @@ -288,11 +288,13 @@ public class ConfigurationComposite extends StateComposite { this.configurationContainer.setSignatureNote( this.configProvider.getSignatureNote()); - + this.configurationContainer.setLocale(this.configProvider.getLocale()); - - this.configurationContainer.setSignLocale(this.configProvider.getSignLocale()); - + + this.configurationContainer.setSignatureLocale(this.configProvider.getSignatureLocale()); + + this.configurationContainer.setSignaturePdfACompat(this.configProvider.getSignaturePdfACompat()); + this.configurationContainer.setDefaultBKU(this.configProvider .getDefaultBKUPersistent()); try { @@ -410,8 +412,11 @@ public class ConfigurationComposite extends StateComposite { .setDefaultSignaturePosition(this.configurationContainer.getDefaultSignaturePosition()); this.configManipulator.setLocale(this.configurationContainer.getLocale()); - this.configManipulator.setSignLocale(this.configurationContainer.getSignLocale()); - + + this.configManipulator.setSignatureLocale(this.configurationContainer.getSignatureLocale()); + + this.configManipulator.setSignaturePdfACompat(this.configurationContainer.getSignaturePdfACompat()); + this.configManipulator .setPlaceholderTransparency(this.configurationContainer .getPlaceholderTransparency()); diff --git a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/composites/SimpleConfigurationComposite.java b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/composites/SimpleConfigurationComposite.java index a5e0461e..9f1f53a5 100644 --- a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/composites/SimpleConfigurationComposite.java +++ b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/composites/SimpleConfigurationComposite.java @@ -420,7 +420,7 @@ public class SimpleConfigurationComposite extends BaseConfigurationComposite { @Override public void widgetSelected(SelectionEvent e) { Locale currentLocale = SimpleConfigurationComposite.this.configurationContainer - .getSignLocale(); + .getSignatureLocale(); Locale selectedLocale = Constants. SUPPORTED_LOCALES[SimpleConfigurationComposite.this.cmbSignatureLang .getSelectionIndex()]; @@ -512,7 +512,7 @@ public class SimpleConfigurationComposite extends BaseConfigurationComposite { public void widgetSelected(SelectionEvent e) { SimpleConfigurationComposite.this.txtSignatureNote.setText( Messages.getString("simple_config.Note_Default", //$NON-NLS-1$ - SimpleConfigurationComposite.this.configurationContainer.getSignLocale())); + SimpleConfigurationComposite.this.configurationContainer.getSignatureLocale())); } }); @@ -663,34 +663,21 @@ public class SimpleConfigurationComposite extends BaseConfigurationComposite { ImageData logo = null; try { - - if (image == null || image.trim().isEmpty()) { - if (this.signer != null) { - SignatureParameter param = this.signer.getPDFSigner() - .newParameter(); - if(this.configurationContainer.getSignatureNote() != null && !this.configurationContainer.getSignatureNote().isEmpty()) { - param.setProperty("SIG_NOTE", this.configurationContainer.getSignatureNote()); //$NON-NLS-1$ - } - - param.setSignatureLanguage(this.configurationContainer.getSignLocale().getLanguage()); - - img = SignaturePlaceholderCache.getSWTPlaceholder(param); + if (this.signer != null) { + SignatureParameter param = this.signer.getPDFSigner() + .newParameter(); + if(this.configurationContainer.getSignatureNote() != null && !this.configurationContainer.getSignatureNote().isEmpty()) { + param.setProperty("SIG_NOTE", this.configurationContainer.getSignatureNote()); //$NON-NLS-1$ } - } else { - if (this.signer != null) { - SignatureParameter param = this.signer.getPDFSigner() - .newParameter(); - if(this.configurationContainer.getSignatureNote() != null && !this.configurationContainer.getSignatureNote().isEmpty()) { - param.setProperty("SIG_NOTE", this.configurationContainer.getSignatureNote()); //$NON-NLS-1$ - } - - param.setSignatureLanguage(this.configurationContainer.getSignLocale().getLanguage()); + + param.setSignatureLanguage(this.configurationContainer.getSignatureLocale().getLanguage()); + param.setSignaturePdfACompat(this.configurationContainer.getSignaturePdfACompat()); + if (image != null && !image.trim().isEmpty()) { + logo = new ImageData(image); param.setEmblem(new FileNameEmblem(image)); - img = SignaturePlaceholderCache.getSWTPlaceholder(param); - } else { - img = new ImageData(image); } - logo = new ImageData(image); + + img = SignaturePlaceholderCache.getSWTPlaceholder(param); } } catch (Exception e) { log.error("Failed to load image for display...", e); //$NON-NLS-1$ @@ -751,7 +738,7 @@ public class SimpleConfigurationComposite extends BaseConfigurationComposite { void performSignatureLangSelectionChanged(Locale selected) { log.debug("Selected Sign Locale: " + selected); //$NON-NLS-1$ - this.configurationContainer.setSignLocale(selected); + this.configurationContainer.setSignatureLocale(selected); this.cmbSignatureLang.select(this.getLocaleElementIndex(selected)); } @@ -850,7 +837,7 @@ public class SimpleConfigurationComposite extends BaseConfigurationComposite { this.setVisibleImage(); - this.performSignatureLangSelectionChanged(this.configurationContainer.getSignLocale()); + this.performSignatureLangSelectionChanged(this.configurationContainer.getSignatureLocale()); } /* diff --git a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/utils/SignaturePlaceholderCache.java b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/utils/SignaturePlaceholderCache.java index 769c477b..a468f0e2 100644 --- a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/utils/SignaturePlaceholderCache.java +++ b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/utils/SignaturePlaceholderCache.java @@ -68,19 +68,30 @@ public class SignaturePlaceholderCache { final String sigLangProp = "LANG"; //$NON-NLS-1$ final String sigEmblProp = "EMBL"; //$NON-NLS-1$ final String sigNoteProp = "NOTE"; //$NON-NLS-1$ + final String sigPdfAProp = "PDFA"; //$NON-NLS-1$ + String sigLang = param.getSignatureLanguage(); String sigEmbl = (param.getEmblem() == null ? "" : param.getEmblem().getFileName()); //$NON-NLS-1$ String sigNote = param.getProperty("SIG_NOTE"); //$NON-NLS-1$ + String sigPdfA = param.getSignaturePdfACompat() ? Constants.TRUE : Constants.FALSE; Properties sigProps = new Properties(); // compare cache, try to load if match try { InputStream in = new FileInputStream(new File(fileDir, propFileName)); sigProps.load(in); - if (sigProps.getProperty(sigLangProp).equals(sigLang) && - sigProps.getProperty(sigEmblProp).equals(sigEmbl) && - sigProps.getProperty(sigNoteProp).equals(sigNote)) + if (sigLang.equals(sigProps.getProperty(sigLangProp)) && + sigEmbl.equals(sigProps.getProperty(sigEmblProp)) && + sigNote.equals(sigProps.getProperty(sigNoteProp)) && + sigPdfA.equals(sigProps.getProperty(sigPdfAProp))) { + log.debug("Placeholder cache hit"); //$NON-NLS-1$ return loadImage(fileDir, imgFileName, imgFileExt); + } + log.debug("Placeholder cache miss (" + //$NON-NLS-1$ + sigLang + "|" + sigProps.getProperty(sigLangProp) + " - " +//$NON-NLS-1$ //$NON-NLS-2$ + sigEmbl + "|" + sigProps.getProperty(sigEmblProp) + " - " + //$NON-NLS-1$ //$NON-NLS-2$ + sigNote + "|" + sigProps.getProperty(sigNoteProp) + " - " + //$NON-NLS-1$ //$NON-NLS-2$ + sigPdfA + "|" + sigProps.getProperty(sigPdfAProp) + ")"); //$NON-NLS-1$ //$NON-NLS-2$ } catch (Exception e) { log.debug("Can't load signature Placeholder", e); //$NON-NLS-1$ } @@ -90,6 +101,7 @@ public class SignaturePlaceholderCache { sigProps.setProperty(sigLangProp, sigLang); sigProps.setProperty(sigEmblProp, sigEmbl); sigProps.setProperty(sigNoteProp, sigNote); + sigProps.setProperty(sigPdfAProp, sigPdfA); OutputStream out = new FileOutputStream(new File(fileDir, propFileName)); sigProps.store(out, null); Image img = param.getPlaceholder(); diff --git a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/workflow/config/ConfigManipulator.java b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/workflow/config/ConfigManipulator.java index d04d59c1..346c59ae 100644 --- a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/workflow/config/ConfigManipulator.java +++ b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/workflow/config/ConfigManipulator.java @@ -109,7 +109,13 @@ public interface ConfigManipulator { * Sets the signature locale to be used * @param locale the signature locale */ - public void setSignLocale(Locale locale); + public void setSignatureLocale(Locale locale); + + /** + * Set the signature PDF/A compatibility setting + * @param compat whether to use PDF/A compatibility + */ + public void setSignaturePdfACompat(boolean compat); /** * Sets whether to automatically check for application updates diff --git a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/workflow/config/ConfigProvider.java b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/workflow/config/ConfigProvider.java index c9a8d616..d4489e27 100644 --- a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/workflow/config/ConfigProvider.java +++ b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/workflow/config/ConfigProvider.java @@ -148,7 +148,13 @@ public interface ConfigProvider { * Gets the configured locale * @return the configured locale */ - public Locale getSignLocale(); + public Locale getSignatureLocale(); + + /** + * Get the signature PDF/A compatibility setting + * @return the signature PDF/A compatibility setting + */ + public boolean getSignaturePdfACompat(); /** * Gets whether to automatically check for application updates diff --git a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/workflow/config/ConfigProviderImpl.java b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/workflow/config/ConfigProviderImpl.java index b5175141..5ec55555 100644 --- a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/workflow/config/ConfigProviderImpl.java +++ b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/workflow/config/ConfigProviderImpl.java @@ -119,14 +119,18 @@ public class ConfigProviderImpl implements ConfigProvider, ConfigManipulator, if (targetLocale != null) { setLocale(targetLocale); } + + String signatureLocaleString = config.getProperty(Constants.CFG_SIGNATURE_LOCALE); - String signlocalString = config.getProperty(Constants.CFG_SIGNATURE_LOCALE); - - Locale signtargetLocale = LocaleSerializer.parseFromString(signlocalString); - if (signtargetLocale != null) { - setSignLocale(signtargetLocale); + Locale signatureTargetLocale = LocaleSerializer.parseFromString(signatureLocaleString); + if (signatureTargetLocale != null) { + setSignatureLocale(signatureTargetLocale); } - + + String compat = config.getProperty(Constants.CFG_SIGNATURE_PDFA_COMPAT); + if (compat != null) + setSignaturePdfACompat(!compat.equalsIgnoreCase(Constants.FALSE)); + String bkuUrl = config .getProperty(Constants.CFG_MOBILE_BKU_URL); @@ -288,16 +292,16 @@ public class ConfigProviderImpl implements ConfigProvider, ConfigManipulator, Properties props = new Properties(); props.clear(); - props.setProperty(Constants.CFG_BKU, this.getDefaultBKUPersistent().toString()); - props.setProperty(Constants.CFG_PROXY_HOST, this.getProxyHostPersistent()); + props.setProperty(Constants.CFG_BKU, getDefaultBKUPersistent().toString()); + props.setProperty(Constants.CFG_PROXY_HOST, getProxyHostPersistent()); props.setProperty(Constants.CFG_PROXY_PORT, Integer.toString(getProxyPortPersistent())); - props.setProperty(Constants.CFG_PROXY_USER, this.getProxyUserPersistent()); - props.setProperty(Constants.CFG_PROXY_PASS, this.getProxyPassPersistent()); - props.setProperty(Constants.CFG_EMBLEM, this.getDefaultEmblemPersistent()); - props.setProperty(Constants.CFG_SIGNATURE_NOTE, this.getSignatureNote()); - props.setProperty(Constants.CFG_MOBILE_NUMBER, this.getDefaultMobileNumberPersistent()); - props.setProperty(Constants.CFG_OUTPUT_FOLDER, this.getDefaultOutputFolderPersistent()); + props.setProperty(Constants.CFG_PROXY_USER, getProxyUserPersistent()); + props.setProperty(Constants.CFG_PROXY_PASS, getProxyPassPersistent()); + props.setProperty(Constants.CFG_EMBLEM, getDefaultEmblemPersistent()); + props.setProperty(Constants.CFG_SIGNATURE_NOTE, getSignatureNote()); + props.setProperty(Constants.CFG_MOBILE_NUMBER, getDefaultMobileNumberPersistent()); + props.setProperty(Constants.CFG_OUTPUT_FOLDER, getDefaultOutputFolderPersistent()); props.setProperty(Constants.CFG_SIGNATURE_PLACEHOLDER_TRANSPARENCY, Integer.toString(getPlaceholderTransparency())); @@ -309,13 +313,15 @@ public class ConfigProviderImpl implements ConfigProvider, ConfigManipulator, props.setProperty(Constants.CFG_LOCALE, LocaleSerializer.getParsableString(configLocale)); } - Locale signLocale = this.getSignLocale(); - if(signLocale != null) { - props.setProperty(Constants.CFG_SIGNATURE_LOCALE, LocaleSerializer.getParsableString(signLocale)); + Locale signatureLocale = this.getSignatureLocale(); + if(signatureLocale != null) { + props.setProperty(Constants.CFG_SIGNATURE_LOCALE, LocaleSerializer.getParsableString(signatureLocale)); } - SignaturePosition pos = getDefaultSignaturePositionPersistent(); + if (!getSignaturePdfACompat()) + props.setProperty(Constants.CFG_SIGNATURE_PDFA_COMPAT, Constants.FALSE); + SignaturePosition pos = getDefaultSignaturePositionPersistent(); if (pos == null) { props.setProperty(Constants.CFG_SIGNATURE_POSITION, ""); //$NON-NLS-1$ } else if (pos.useAutoPositioning()) { @@ -999,28 +1005,44 @@ public class ConfigProviderImpl implements ConfigProvider, ConfigManipulator, } /* (non-Javadoc) - * @see at.asit.pdfover.gui.workflow.ConfigManipulator#setSignLocale(java.util.Locale) + * @see at.asit.pdfover.gui.workflow.ConfigManipulator#setSignatureLocale(java.util.Locale) */ @Override - public void setSignLocale(Locale locale) { + public void setSignatureLocale(Locale locale) { if(locale == null) { - this.configuration.setSignLocale(Messages.getDefaultLocale()); + this.configuration.setSignatureLocale(Messages.getDefaultLocale()); } else { - this.configuration.setSignLocale(locale); + this.configuration.setSignatureLocale(locale); } } /* (non-Javadoc) - * @see at.asit.pdfover.gui.workflow.ConfigProvider#getSignLocale() + * @see at.asit.pdfover.gui.workflow.ConfigProvider#getSignatureLocale() */ @Override - public Locale getSignLocale() { - Locale locale = this.configuration.getSignLocale(); + public Locale getSignatureLocale() { + Locale locale = this.configuration.getSignatureLocale(); if (locale == null) locale = Messages.getDefaultLocale(); return locale; } + /* (non-Javadoc) + * @see at.asit.pdfover.gui.workflow.config.ConfigManipulator#setSignaturePdfACompat(boolean) + */ + @Override + public void setSignaturePdfACompat(boolean compat) { + this.configuration.setSignaturePdfACompat(compat); + } + + /* (non-Javadoc) + * @see at.asit.pdfover.gui.workflow.config.ConfigProvider#getSignaturePdfACompat() + */ + @Override + public boolean getSignaturePdfACompat() { + return this.configuration.getSignaturePdfACompat(); + } + /* (non-Javadoc) * @see at.asit.pdfover.gui.workflow.config.ConfigManipulator#setUpdateCheck(boolean) */ diff --git a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/workflow/config/ConfigurationContainer.java b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/workflow/config/ConfigurationContainer.java index 24cd46bb..6d5e888e 100644 --- a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/workflow/config/ConfigurationContainer.java +++ b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/workflow/config/ConfigurationContainer.java @@ -187,13 +187,25 @@ public interface ConfigurationContainer { * Gets the signature locale * @return the signature locale */ - public Locale getSignLocale(); + public Locale getSignatureLocale(); /** * Sets the signature locale * @param locale the signature locale */ - public void setSignLocale(Locale locale); + public void setSignatureLocale(Locale locale); + + /** + * Gets the signature PDF/A compatibility setting + * @return the signature PDF/A compatibility setting + */ + public boolean getSignaturePdfACompat(); + + /** + * Sets the signature PDF/A compatibility setting + * @param compat the signature PDF/A compatibility setting + */ + public void setSignaturePdfACompat(boolean compat); /** * Gets the mobile BKU URL diff --git a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/workflow/config/ConfigurationContainerImpl.java b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/workflow/config/ConfigurationContainerImpl.java index 83f35b65..726e5b4b 100644 --- a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/workflow/config/ConfigurationContainerImpl.java +++ b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/workflow/config/ConfigurationContainerImpl.java @@ -77,7 +77,10 @@ public class ConfigurationContainerImpl implements ConfigurationContainer { protected Locale locale = null; /** Holds the signature locale */ - protected Locale signLocale = null; + protected Locale signatureLocale = null; + + /** Holds the PDF/A compatibility setting */ + protected boolean pdfACompat = true; /** Holds the output folder */ protected String folder = null; @@ -360,20 +363,38 @@ public class ConfigurationContainerImpl implements ConfigurationContainer { /* (non-Javadoc) - * @see at.asit.pdfover.gui.workflow.ConfigurationContainer#getSignLocale() + * @see at.asit.pdfover.gui.workflow.ConfigurationContainer#getSignatureLocale() + */ + @Override + public Locale getSignatureLocale() { + return this.signatureLocale; + } + + + /* (non-Javadoc) + * @see at.asit.pdfover.gui.workflow.ConfigurationContainer#setSignatureLocale(java.util.Locale) + */ + @Override + public void setSignatureLocale(Locale locale) { + this.signatureLocale = locale; + } + + + /* (non-Javadoc) + * @see at.asit.pdfover.gui.workflow.config.ConfigurationContainer#getSignaturePdfACompat() */ @Override - public Locale getSignLocale() { - return this.signLocale; + public boolean getSignaturePdfACompat() { + return this.pdfACompat; } /* (non-Javadoc) - * @see at.asit.pdfover.gui.workflow.ConfigurationContainer#setSignLocale(java.util.Locale) + * @see at.asit.pdfover.gui.workflow.config.ConfigurationContainer#setSignaturePdfACompat(boolean) */ @Override - public void setSignLocale(Locale locale) { - this.signLocale = locale; + public void setSignaturePdfACompat(boolean compat) { + this.pdfACompat = compat; } diff --git a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/workflow/config/PersistentConfigProvider.java b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/workflow/config/PersistentConfigProvider.java index 9b857fa7..26a98def 100644 --- a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/workflow/config/PersistentConfigProvider.java +++ b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/workflow/config/PersistentConfigProvider.java @@ -125,7 +125,13 @@ public interface PersistentConfigProvider { * Gets the configured locale * @return the configured locale */ - public Locale getSignLocale(); + public Locale getSignatureLocale(); + + /** + * Get the signature PDF/A compatibility setting + * @return the signature PDF/A compatibility setting + */ + public boolean getSignaturePdfACompat(); /** * Gets whether to automatically check for application updates diff --git a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/workflow/states/PositioningState.java b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/workflow/states/PositioningState.java index 6c3d11a8..ae1303c8 100644 --- a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/workflow/states/PositioningState.java +++ b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/workflow/states/PositioningState.java @@ -35,6 +35,7 @@ import at.asit.pdfover.gui.utils.Messages; import at.asit.pdfover.gui.utils.SignaturePlaceholderCache; import at.asit.pdfover.gui.workflow.StateMachine; import at.asit.pdfover.gui.workflow.Status; +import at.asit.pdfover.gui.workflow.config.ConfigProvider; import at.asit.pdfover.signator.Emblem; import at.asit.pdfover.signator.FileNameEmblem; import at.asit.pdfover.signator.SignatureParameter; @@ -93,27 +94,30 @@ public class PositioningState extends State { } private PositioningComposite getPositioningComposite(PDFFile document) { + StateMachine stateMachine = getStateMachine(); if (this.positionComposite == null) { this.positionComposite = - getStateMachine().getGUIProvider().createComposite(PositioningComposite.class, SWT.RESIZE, this); - log.debug("Displaying " + getStateMachine().getStatus().getDocument()); //$NON-NLS-1$ + stateMachine.getGUIProvider().createComposite(PositioningComposite.class, SWT.RESIZE, this); + log.debug("Displaying " + stateMachine.getStatus().getDocument()); //$NON-NLS-1$ this.positionComposite.displayDocument(document); } // Update possibly changed values - SignatureParameter param = getStateMachine().getPDFSigner().getPDFSigner().newParameter(); - Emblem emblem = new FileNameEmblem(getStateMachine().getConfigProvider().getDefaultEmblem()); + ConfigProvider config = stateMachine.getConfigProvider(); + SignatureParameter param = stateMachine.getPDFSigner().getPDFSigner().newParameter(); + Emblem emblem = new FileNameEmblem(config.getDefaultEmblem()); param.setEmblem(emblem); - if(getStateMachine().getConfigProvider().getSignatureNote() != null && !getStateMachine().getConfigProvider().getSignatureNote().isEmpty()) { - param.setProperty("SIG_NOTE", getStateMachine().getConfigProvider().getSignatureNote()); //$NON-NLS-1$ + if(config.getSignatureNote() != null && !config.getSignatureNote().isEmpty()) { + param.setProperty("SIG_NOTE", config.getSignatureNote()); //$NON-NLS-1$ } - - param.setSignatureLanguage(getStateMachine().getConfigProvider().getSignLocale().getLanguage()); - + + param.setSignatureLanguage(config.getSignatureLocale().getLanguage()); + param.setSignaturePdfACompat(config.getSignaturePdfACompat()); + this.positionComposite.setPlaceholder( SignaturePlaceholderCache.getPlaceholder(param), param.getPlaceholderDimension().getWidth(), param.getPlaceholderDimension().getHeight(), - getStateMachine().getConfigProvider().getPlaceholderTransparency()); + config.getPlaceholderTransparency()); if (this.previousPosition != null && !this.previousPosition.useAutoPositioning()) this.positionComposite.setPosition( this.previousPosition.getX(), diff --git a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/workflow/states/PrepareSigningState.java b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/workflow/states/PrepareSigningState.java index d64c1843..21664d85 100644 --- a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/workflow/states/PrepareSigningState.java +++ b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/workflow/states/PrepareSigningState.java @@ -155,9 +155,12 @@ public class PrepareSigningState extends State { } this.state.signatureParameter - .setSignatureLanguage(configuration.getSignLocale() + .setSignatureLanguage(configuration.getSignatureLocale() .getLanguage()); + this.state.signatureParameter + .setSignaturePdfACompat(configuration.getSignaturePdfACompat()); + this.state.signingState = this.state.signer .prepare(this.state.signatureParameter); diff --git a/pdf-over-gui/src/main/resources/at/asit/pdfover/gui/messages.properties b/pdf-over-gui/src/main/resources/at/asit/pdfover/gui/messages.properties index 4db02e9a..42744584 100644 --- a/pdf-over-gui/src/main/resources/at/asit/pdfover/gui/messages.properties +++ b/pdf-over-gui/src/main/resources/at/asit/pdfover/gui/messages.properties @@ -16,6 +16,8 @@ advanced_config.OutputFolder.Dialog=Select a folder advanced_config.OutputFolder.Dialog_Title=Select Output folder advanced_config.OutputFolder_Title=&Output location advanced_config.OutputFolder_ToolTip=Select the folder where the signed document will be saved automatically (clear this field to disable automatic saving, enter a single dot (".") to denote the input document directory) +advanced_config.PdfACompat=PDF/A compatibility +advanced_config.PdfACompat_Tooltip=Whether to make signature PDF/A compatible (increases pdf size) advanced_config.Proxy_Title=&Proxy advanced_config.ProxyHost=Host: advanced_config.ProxyHost_ToolTip=To use a proxy server enter the hostname or the IP here diff --git a/pdf-over-gui/src/main/resources/at/asit/pdfover/gui/messages_de.properties b/pdf-over-gui/src/main/resources/at/asit/pdfover/gui/messages_de.properties index 86696107..d99aaa7e 100644 --- a/pdf-over-gui/src/main/resources/at/asit/pdfover/gui/messages_de.properties +++ b/pdf-over-gui/src/main/resources/at/asit/pdfover/gui/messages_de.properties @@ -16,6 +16,8 @@ advanced_config.OutputFolder.Dialog=W advanced_config.OutputFolder.Dialog_Title=Ausgabeordner Wählen advanced_config.OutputFolder_Title=Ausgabe&ort advanced_config.OutputFolder_ToolTip=Wählen Sie einen Ordner, in dem signierte Dokumente automatisch abgelegt werden (deaktivert, wenn das Feld leer ist; ein einzelner Punkt (".") wählt das Verzeichnis des Ursprungsdokuments) +advanced_config.PdfACompat=PDF/A-Kompatibilität +advanced_config.PdfACompat_Tooltip=Ob die Signatur PDF/A-kompatibel sein soll (erhöht PDF-Größe) advanced_config.Proxy_Title=&Proxy advanced_config.ProxyHost=Host: advanced_config.ProxyHost_Template=Hostname oder IP des Proxy-Servers diff --git a/pdf-over-signator/src/main/java/at/asit/pdfover/signator/SignatureParameter.java b/pdf-over-signator/src/main/java/at/asit/pdfover/signator/SignatureParameter.java index 7db164c6..8b08e3dd 100644 --- a/pdf-over-signator/src/main/java/at/asit/pdfover/signator/SignatureParameter.java +++ b/pdf-over-signator/src/main/java/at/asit/pdfover/signator/SignatureParameter.java @@ -36,12 +36,14 @@ public abstract class SignatureParameter { /** The input document */ protected DocumentSource documentSource = null; - /** holds the emblem */ + /** Holds the emblem */ protected Emblem emblem; + /** Whether to use PDF/A compatibility */ + protected boolean pdfACompat; + /** The signature device */ protected BKUs signatureDevice; - /** * @return the signatureDevice */ @@ -95,6 +97,25 @@ public abstract class SignatureParameter { this.signatureLanguage = signatureLanguage; } + /** + * Getter of the property signaturePdfACompat + * + * @return Returns the PDF/A compatibility setting. + */ + public boolean getSignaturePdfACompat() { + return this.pdfACompat; + } + + /** + * Setter of the property signaturePdfACompat + * + * @param compat + * The the PDF/A compatibility setting to set. + */ + public void setSignaturePdfACompat(boolean compat) { + this.pdfACompat = compat; + } + /** * Getter of the property keyIdentifier * diff --git a/pdf-over-signer/pdf-over-sigpdfas4/src/main/java/at/asit/pdfover/signer/pdfas/PdfAs4SignatureParameter.java b/pdf-over-signer/pdf-over-sigpdfas4/src/main/java/at/asit/pdfover/signer/pdfas/PdfAs4SignatureParameter.java index 38aabadd..0403de2f 100644 --- a/pdf-over-signer/pdf-over-sigpdfas4/src/main/java/at/asit/pdfover/signer/pdfas/PdfAs4SignatureParameter.java +++ b/pdf-over-signer/pdf-over-sigpdfas4/src/main/java/at/asit/pdfover/signer/pdfas/PdfAs4SignatureParameter.java @@ -38,14 +38,16 @@ import at.gv.egiz.pdfas.lib.api.sign.SignParameter; * Implementation of SignatureParameter for PDF-AS 4 Library */ public class PdfAs4SignatureParameter extends SignatureParameter { - /** The profile ID for the German signature block */ - private static final String PROFILE_ID_DE = "SIGNATURBLOCK_SMALL_DE_PDFA"; - /** The profile ID for the German signature block if a signature note is set */ - private static final String PROFILE_ID_DE_NOTE = "SIGNATURBLOCK_SMALL_DE_NOTE_PDFA"; - /** The profile ID for the English signature block */ - private static final String PROFILE_ID_EN = "SIGNATURBLOCK_SMALL_EN_PDFA"; - /** The profile ID for the English signature block if a signature note is set */ - private static final String PROFILE_ID_EN_NOTE = "SIGNATURBLOCK_SMALL_EN_NOTE_PDFA"; + /** The base profile ID */ + private static final String PROFILE_ID_BASE = "SIGNATURBLOCK_SMALL"; + /** The profile ID extension for the German signature block */ + private static final String PROFILE_ID_LANG_DE = "_DE"; + /** The profile ID extension for the English signature block */ + private static final String PROFILE_ID_LANG_EN = "_EN"; + /** The profile ID extension for the signature note */ + private static final String PROFILE_ID_NOTE = "_NOTE"; + /** The profile ID extension for PDF/A compatibility */ + private static final String PROFILE_ID_PDFA = "_PDFA"; private HashMap genericProperties = new HashMap(); @@ -152,10 +154,19 @@ public class PdfAs4SignatureParameter extends SignatureParameter { public String getPdfAsSignatureProfileId() { String lang = getSignatureLanguage(); boolean useNote = (getProperty("SIG_NOTE") != null); + boolean usePdfACompat = (getSignaturePdfACompat()); - if (lang != null && lang.equals("en")) - return useNote ? PROFILE_ID_EN_NOTE : PROFILE_ID_EN; + String profileId = PROFILE_ID_BASE; + profileId += (lang != null && lang.equals("en")) ? + PROFILE_ID_LANG_EN : PROFILE_ID_LANG_DE; - return useNote ? PROFILE_ID_DE_NOTE : PROFILE_ID_DE; + if (useNote) + profileId += PROFILE_ID_NOTE; + + if (usePdfACompat) + profileId += PROFILE_ID_PDFA; + + log.debug("Profile ID: " + profileId); + return profileId; } } -- cgit v1.2.3