aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authortknall <tknall@7b5415b0-85f9-ee4d-85bd-d5d0c3b42d1c>2013-03-22 08:57:51 +0000
committertknall <tknall@7b5415b0-85f9-ee4d-85bd-d5d0c3b42d1c>2013-03-22 08:57:51 +0000
commitdb52e4d66d60184d53a27ba4d6772461daacc03d (patch)
treeb83e1024bc356dd9c612151082ccaa718781a524
parent725749c85e2c4a0dca235e7b89a5c3b2752e5d54 (diff)
downloadpdf-as-3-db52e4d66d60184d53a27ba4d6772461daacc03d.tar.gz
pdf-as-3-db52e4d66d60184d53a27ba4d6772461daacc03d.tar.bz2
pdf-as-3-db52e4d66d60184d53a27ba4d6772461daacc03d.zip
Maintenance update (bugfixes, new features, cleanup...)
Refer to /dok/RELEASE_NOTES-3.3.txt for further information. git-svn-id: https://joinup.ec.europa.eu/svn/pdf-as/pdf-as/trunk@931 7b5415b0-85f9-ee4d-85bd-d5d0c3b42d1c
-rw-r--r--dok/RELEASE_NOTES-3.3.txt280
-rw-r--r--dok/Spezifikation/PDF-AS-Spezifikation-2.3.pdfbin0 -> 1761912 bytes
-rw-r--r--dok/Spezifikation/PDF-AS-Spezifikation.docbin2341888 -> 2381312 bytes
-rw-r--r--maven2-repository/maven2-repository.zipbin26056597 -> 0 bytes
-rw-r--r--pdf-as-cli/pom.xml4
-rw-r--r--pdf-as-cli/src/main/assembly/cli.xml14
-rw-r--r--pdf-as-cli/src/main/resources/sign.bat2
-rw-r--r--pdf-as-cli/src/main/resources/sign.sh2
-rw-r--r--pdf-as-lib/pom.xml41
-rw-r--r--pdf-as-lib/src/main/assembly/lib.xml25
-rw-r--r--pdf-as-lib/src/main/java/at/gv/egiz/pdfas/api/commons/Constants.java33
-rw-r--r--pdf-as-lib/src/main/java/at/gv/egiz/pdfas/api/commons/DynamicSignatureProfileImpl.java8
-rw-r--r--pdf-as-lib/src/main/java/at/gv/egiz/pdfas/api/commons/SignatureProfile.java11
-rw-r--r--pdf-as-lib/src/main/java/at/gv/egiz/pdfas/api/sign/SignParameters.java78
-rw-r--r--pdf-as-lib/src/main/java/at/gv/egiz/pdfas/commandline/Main.java123
-rw-r--r--pdf-as-lib/src/main/java/at/gv/egiz/pdfas/exceptions/ErrorCode.java13
-rw-r--r--pdf-as-lib/src/main/java/at/gv/egiz/pdfas/framework/logging/CsvStatisticLogger.java105
-rw-r--r--pdf-as-lib/src/main/java/at/gv/egiz/pdfas/framework/logging/StatisticData.java314
-rw-r--r--pdf-as-lib/src/main/java/at/gv/egiz/pdfas/framework/logging/StatisticLogFactory.java63
-rw-r--r--pdf-as-lib/src/main/java/at/gv/egiz/pdfas/framework/logging/StatisticLogger.java47
-rw-r--r--pdf-as-lib/src/main/java/at/gv/egiz/pdfas/impl/api/PdfAsObject.java441
-rw-r--r--pdf-as-lib/src/main/java/at/gv/egiz/pdfas/impl/api/commons/DataSinkAdapter.java6
-rw-r--r--pdf-as-lib/src/main/java/at/gv/egiz/pdfas/impl/api/commons/SignatureProfileImpl.java49
-rw-r--r--pdf-as-lib/src/main/java/at/gv/egiz/pdfas/impl/input/correction/InternalCorrector.java9
-rw-r--r--pdf-as-lib/src/main/java/at/gv/egiz/pdfas/impl/signator/binary/BinarySignator_1_0_0.java16
-rw-r--r--pdf-as-lib/src/main/java/at/gv/egiz/pdfas/impl/signator/detached/DetachedTextualSignator_1_0_0.java7
-rw-r--r--pdf-as-lib/src/main/java/at/gv/egiz/pdfas/impl/vfilter/VerificationFilterImpl.java218
-rw-r--r--pdf-as-lib/src/main/java/at/gv/egiz/pdfas/impl/vfilter/helper/VerificationFilterBinaryHelper.java19
-rw-r--r--pdf-as-lib/src/main/java/at/gv/egiz/pdfas/io/FileBasedTextBasedDataSource.java3
-rw-r--r--pdf-as-lib/src/main/java/at/gv/egiz/pdfas/io/StringTextBasedDataSource.java5
-rw-r--r--pdf-as-lib/src/main/java/at/gv/egiz/pdfas/placeholder/SignaturePlaceholderExtractor.java37
-rw-r--r--pdf-as-lib/src/main/java/at/gv/egiz/pdfas/utils/CsvUtils.java82
-rw-r--r--pdf-as-lib/src/main/java/at/gv/egiz/pdfas/utils/PDFASUtils.java268
-rw-r--r--pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/PdfAS.java245
-rw-r--r--pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/cfg/CircularIncludeException.java44
-rw-r--r--pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/cfg/NestedProperties.java255
-rw-r--r--pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/cfg/PropertyTree.java82
-rw-r--r--pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/cfg/SettingsReader.java207
-rw-r--r--pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/commandline/Main.java116
-rw-r--r--pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/framework/signators/BinarySignator_1_0_0.java29
-rw-r--r--pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/framework/signators/DetachedSignator_1_0_0.java11
-rw-r--r--pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/framework/signators/DetachedfTextualSignator_1_0_0.java15
-rw-r--r--pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/pdf/AbsoluteTextSignature.java4
-rw-r--r--pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/pdf/BinarySignature.java215
-rw-r--r--pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/pdf/PDFPage.java249
-rw-r--r--pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/pdf/PDFSignatureObjectIText.java70
-rw-r--r--pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/pdf/PDFUtilities.java25
-rw-r--r--pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/pdf/StructContentHelper.java47
-rw-r--r--pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/pdf/TextualSignature.java56
-rw-r--r--pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/pdf/operator/path/PathConstructionOperatorProcessor.java62
-rw-r--r--pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/pdf/operator/path/PathPaintingOperatorProcessor.java43
-rw-r--r--pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/pdf/operator/path/construction/ClosePath.java68
-rw-r--r--pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/pdf/operator/path/construction/CurveTo.java85
-rw-r--r--pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/pdf/operator/path/construction/CurveToReplicateFinalPoint.java82
-rw-r--r--pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/pdf/operator/path/construction/CurveToReplicateInitialPoint.java84
-rw-r--r--pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/pdf/operator/path/construction/LineTo.java71
-rw-r--r--pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/pdf/operator/path/construction/MoveTo.java73
-rw-r--r--pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/pdf/operator/path/painting/CloseAndStrokePath.java59
-rw-r--r--pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/pdf/operator/path/painting/CloseFillEvenOddAndStrokePath.java60
-rw-r--r--pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/pdf/operator/path/painting/CloseFillNonZeroAndStrokePath.java60
-rw-r--r--pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/pdf/operator/path/painting/EndPath.java68
-rw-r--r--pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/pdf/operator/path/painting/FillEvenOddAndStrokePath.java72
-rw-r--r--pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/pdf/operator/path/painting/FillNonZeroAndStrokePath.java72
-rw-r--r--pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/pdf/operator/path/painting/FillPathEvenOddRule.java71
-rw-r--r--pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/pdf/operator/path/painting/FillPathNonZeroWindingNumberRule.java72
-rw-r--r--pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/pdf/operator/path/painting/StrokePath.java70
-rw-r--r--pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/sig/SignatureObject.java171
-rw-r--r--pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/sig/SignatureTypes.java167
-rw-r--r--pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/sig/X509Cert.java32
-rw-r--r--pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/sig/connectors/BKUConnector.java81
-rw-r--r--pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/sig/connectors/MOAConnector.java47
-rw-r--r--pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/sig/connectors/bku/BKUHelper.java75
-rw-r--r--pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/sig/connectors/bku/DetachedBKUConnector.java122
-rw-r--r--pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/sig/connectors/bku/EnvelopedBase64BKUConnector.java68
-rw-r--r--pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/sig/connectors/moa/DetachedLocRefMOAConnector.java48
-rw-r--r--pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/sig/connectors/moa/EnvelopingBase64MOAConnector.java72
-rw-r--r--pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/sig/connectors/moa/MOASoapWithAttachmentConnector.java104
-rw-r--r--pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/sig/connectors/mocca/LocRefDetachedMOCCAConnector.java108
-rw-r--r--pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/sig/sigkz/SigKZIDHelper.java53
-rw-r--r--pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/sig/signaturelayout/mocca/MoccaXades14SignatureLayoutHandler.java53
-rw-r--r--pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/tools/CodingHelper.java34
-rw-r--r--pdf-as-lib/src/main/java/demo/SignatureVerificationDemo.java38
-rw-r--r--pdf-as-lib/src/main/resources/DefaultConfiguration.zipbin957949 -> 978161 bytes
-rw-r--r--pdf-as-lib/src/main/resources/config/defaultconfig.properties209
-rw-r--r--pdf-as-lib/src/main/resources/config/help_text.properties90
-rw-r--r--pdf-as-lib/src/main/resources/config/pdf-as.properties25
-rw-r--r--pdf-as-lib/src/main/resources/config/templates/moc.etsi-moc-1.2.verify.template.xml1
-rw-r--r--pdf-as-lib/src/test/java/at/gv/egiz/pdfas/utils/CsvUtilsTest.java59
-rw-r--r--pdf-as-lib/src/test/java/at/knowcenter/wag/egov/egiz/cfg/NestedPropertiesTest.java263
-rw-r--r--pdf-as-lib/src/test/java/at/knowcenter/wag/egov/egiz/sig/SignatureTypesStateTest.java101
-rw-r--r--pdf-as-lib/src/test/java/at/knowcenter/wag/egov/egiz/sig/signaturelayout/SignatureLayoutHandlerFactoryTests.java131
-rw-r--r--pdf-as-lib/src/test/resources/at/knowcenter/wag/egov/egiz/cfg/circular/profile.1.properties1
-rw-r--r--pdf-as-lib/src/test/resources/at/knowcenter/wag/egov/egiz/cfg/circular/profile.2.properties1
-rw-r--r--pdf-as-lib/src/test/resources/at/knowcenter/wag/egov/egiz/cfg/config_nested_includes.properties252
-rw-r--r--pdf-as-lib/src/test/resources/at/knowcenter/wag/egov/egiz/cfg/config_noincludes.properties1643
-rw-r--r--pdf-as-lib/src/test/resources/at/knowcenter/wag/egov/egiz/cfg/config_single_includes.properties272
-rw-r--r--pdf-as-lib/src/test/resources/at/knowcenter/wag/egov/egiz/cfg/config_subdir_includes.properties250
-rw-r--r--pdf-as-lib/src/test/resources/at/knowcenter/wag/egov/egiz/cfg/config_wildcard_includes.properties249
-rw-r--r--pdf-as-lib/src/test/resources/at/knowcenter/wag/egov/egiz/cfg/includeOrder/include.properties6
-rw-r--r--pdf-as-lib/src/test/resources/at/knowcenter/wag/egov/egiz/cfg/includeOrder/include_1.properties5
-rw-r--r--pdf-as-lib/src/test/resources/at/knowcenter/wag/egov/egiz/cfg/includeOrder/include_2.properties4
-rw-r--r--pdf-as-lib/src/test/resources/at/knowcenter/wag/egov/egiz/cfg/includeOrder/include_3.properties3
-rw-r--r--pdf-as-lib/src/test/resources/at/knowcenter/wag/egov/egiz/cfg/includeOrder/include_abc.properties2
-rw-r--r--pdf-as-lib/src/test/resources/at/knowcenter/wag/egov/egiz/cfg/includeOrder/include_xyz.properties1
-rw-r--r--pdf-as-lib/src/test/resources/at/knowcenter/wag/egov/egiz/cfg/include_order.properties14
-rw-r--r--pdf-as-lib/src/test/resources/at/knowcenter/wag/egov/egiz/cfg/local_vs_included_properties.properties8
-rw-r--r--pdf-as-lib/src/test/resources/at/knowcenter/wag/egov/egiz/cfg/local_vs_included_properties_include.properties1
-rw-r--r--pdf-as-lib/src/test/resources/at/knowcenter/wag/egov/egiz/cfg/profile.AMTSSIGNATURBLOCK_DE.properties56
-rw-r--r--pdf-as-lib/src/test/resources/at/knowcenter/wag/egov/egiz/cfg/profile.AMTSSIGNATURBLOCK_DE_DEPRECATED.properties56
-rw-r--r--pdf-as-lib/src/test/resources/at/knowcenter/wag/egov/egiz/cfg/profile.AMTSSIGNATURBLOCK_EN.properties57
-rw-r--r--pdf-as-lib/src/test/resources/at/knowcenter/wag/egov/egiz/cfg/profile.AMTSSIGNATURBLOCK_EN_DEPRECATED.properties56
-rw-r--r--pdf-as-lib/src/test/resources/at/knowcenter/wag/egov/egiz/cfg/profile.BAIK_ARCHIV_SIGNATUR.properties71
-rw-r--r--pdf-as-lib/src/test/resources/at/knowcenter/wag/egov/egiz/cfg/profile.BAIK_URKUNDE_SIGNATUR.properties69
-rw-r--r--pdf-as-lib/src/test/resources/at/knowcenter/wag/egov/egiz/cfg/profile.INVISIBLE.properties14
-rw-r--r--pdf-as-lib/src/test/resources/at/knowcenter/wag/egov/egiz/cfg/profile.SIGNATURBLOCK_DE.properties60
-rw-r--r--pdf-as-lib/src/test/resources/at/knowcenter/wag/egov/egiz/cfg/profile.SIGNATURBLOCK_DE_DEPRECATED.properties55
-rw-r--r--pdf-as-lib/src/test/resources/at/knowcenter/wag/egov/egiz/cfg/profile.SIGNATURBLOCK_DE_NOTE.properties62
-rw-r--r--pdf-as-lib/src/test/resources/at/knowcenter/wag/egov/egiz/cfg/profile.SIGNATURBLOCK_DE_PDFA.properties59
-rw-r--r--pdf-as-lib/src/test/resources/at/knowcenter/wag/egov/egiz/cfg/profile.SIGNATURBLOCK_DE_PDFA_NOTE.properties62
-rw-r--r--pdf-as-lib/src/test/resources/at/knowcenter/wag/egov/egiz/cfg/profile.SIGNATURBLOCK_EN.properties56
-rw-r--r--pdf-as-lib/src/test/resources/at/knowcenter/wag/egov/egiz/cfg/profile.SIGNATURBLOCK_EN_DEPRECATED.properties55
-rw-r--r--pdf-as-lib/src/test/resources/at/knowcenter/wag/egov/egiz/cfg/profile.SIGNATURBLOCK_EN_NOTE.properties60
-rw-r--r--pdf-as-lib/src/test/resources/at/knowcenter/wag/egov/egiz/cfg/profile.SIGNATURBLOCK_EN_PDFA.properties59
-rw-r--r--pdf-as-lib/src/test/resources/at/knowcenter/wag/egov/egiz/cfg/profile.SIGNATURBLOCK_EN_PDFA_NOTE.properties62
-rw-r--r--pdf-as-lib/src/test/resources/at/knowcenter/wag/egov/egiz/cfg/profile.SIGNATURBLOCK_MINIMAL_DE.properties33
-rw-r--r--pdf-as-lib/src/test/resources/at/knowcenter/wag/egov/egiz/cfg/profile.SIGNATURBLOCK_MINIMAL_EN.properties33
-rw-r--r--pdf-as-lib/src/test/resources/at/knowcenter/wag/egov/egiz/cfg/profile.SIGNATURBLOCK_SMALL_DE.properties56
-rw-r--r--pdf-as-lib/src/test/resources/at/knowcenter/wag/egov/egiz/cfg/profile.SIGNATURBLOCK_SMALL_DE_NOTE.properties59
-rw-r--r--pdf-as-lib/src/test/resources/at/knowcenter/wag/egov/egiz/cfg/profile.SIGNATURBLOCK_SMALL_EN.properties56
-rw-r--r--pdf-as-lib/src/test/resources/at/knowcenter/wag/egov/egiz/cfg/profile.SIGNATURBLOCK_SMALL_EN_NOTE.properties59
-rw-r--r--pdf-as-lib/src/test/resources/at/knowcenter/wag/egov/egiz/cfg/profile.VARIABLER_AMTSSIGNATURBLOCK_DE.properties62
-rw-r--r--pdf-as-lib/src/test/resources/at/knowcenter/wag/egov/egiz/cfg/profiles.amtssignatur.properties5
-rw-r--r--pdf-as-lib/src/test/resources/at/knowcenter/wag/egov/egiz/cfg/profiles.baik.properties2
-rw-r--r--pdf-as-lib/src/test/resources/at/knowcenter/wag/egov/egiz/cfg/profiles.default.properties15
-rw-r--r--pdf-as-lib/src/test/resources/at/knowcenter/wag/egov/egiz/cfg/profiles.deprecated.properties2
-rw-r--r--pdf-as-lib/src/test/resources/at/knowcenter/wag/egov/egiz/cfg/subdir1/profile.AMTSSIGNATURBLOCK_DE.properties56
-rw-r--r--pdf-as-lib/src/test/resources/at/knowcenter/wag/egov/egiz/cfg/subdir1/profile.AMTSSIGNATURBLOCK_DE_DEPRECATED.properties56
-rw-r--r--pdf-as-lib/src/test/resources/at/knowcenter/wag/egov/egiz/cfg/subdir1/profile.AMTSSIGNATURBLOCK_EN.properties57
-rw-r--r--pdf-as-lib/src/test/resources/at/knowcenter/wag/egov/egiz/cfg/subdir1/profile.AMTSSIGNATURBLOCK_EN_DEPRECATED.properties56
-rw-r--r--pdf-as-lib/src/test/resources/at/knowcenter/wag/egov/egiz/cfg/subdir1/profile.BAIK.properties1
-rw-r--r--pdf-as-lib/src/test/resources/at/knowcenter/wag/egov/egiz/cfg/subdir1/subdir2/profile.BAIK_ARCHIV_SIGNATUR.properties71
-rw-r--r--pdf-as-lib/src/test/resources/at/knowcenter/wag/egov/egiz/cfg/subdir1/subdir2/profile.BAIK_URKUNDE_SIGNATUR.properties69
-rw-r--r--pdf-as-lib/src/test/resources/at/knowcenter/wag/egov/egiz/cfg/subdir1/subdir2/profile.MISC.properties1
-rw-r--r--pdf-as-lib/src/test/resources/at/knowcenter/wag/egov/egiz/cfg/subdir1/subdir2/subdir3/profile.INVISIBLE.properties14
-rw-r--r--pdf-as-lib/src/test/resources/at/knowcenter/wag/egov/egiz/cfg/subdir1/subdir2/subdir3/profile.VARIABLER_AMTSSIGNATURBLOCK_DE.properties62
-rw-r--r--pdf-as-lib/src/test/resources/at/knowcenter/wag/egov/egiz/signaturelayout/cfg/config.properties1
-rw-r--r--pdf-as-lib/src/test/resources/log4j.properties13
-rw-r--r--pdf-as-release/pom.xml10
-rw-r--r--pdf-as-release/src/main/assembly/release.xml25
-rw-r--r--pdf-as-web/pom.xml97
-rw-r--r--pdf-as-web/src/main/assembly/tomcat/ROOT/index.html14
-rw-r--r--pdf-as-web/src/main/assembly/tomcat/configuration/default/Catalina/localhost/pdf-as.xml18
-rw-r--r--pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/cfg/advancedconfig.properties273
-rw-r--r--pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/cfg/config.properties156
-rw-r--r--pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/cfg/log4j.properties33
-rw-r--r--pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/cfg/pdf-as-web.properties12
-rw-r--r--pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/cfg/profiles/AMTSSIGNATURBLOCK_DE.properties56
-rw-r--r--pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/cfg/profiles/AMTSSIGNATURBLOCK_DE_DEPRECATED.properties56
-rw-r--r--pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/cfg/profiles/AMTSSIGNATURBLOCK_EN.properties57
-rw-r--r--pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/cfg/profiles/AMTSSIGNATURBLOCK_EN_DEPRECATED.properties56
-rw-r--r--pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/cfg/profiles/BAIK_ARCHIV_SIGNATUR.properties69
-rw-r--r--pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/cfg/profiles/BAIK_URKUNDE_SIGNATUR.properties67
-rw-r--r--pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/cfg/profiles/INVISIBLE.properties14
-rw-r--r--pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/cfg/profiles/SIGNATURBLOCK_DE.properties155
-rw-r--r--pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/cfg/profiles/SIGNATURBLOCK_DE_DEPRECATED.properties53
-rw-r--r--pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/cfg/profiles/SIGNATURBLOCK_DE_NOTE.properties60
-rw-r--r--pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/cfg/profiles/SIGNATURBLOCK_DE_PDFA.properties57
-rw-r--r--pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/cfg/profiles/SIGNATURBLOCK_DE_PDFA_NOTE.properties60
-rw-r--r--pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/cfg/profiles/SIGNATURBLOCK_EN.properties54
-rw-r--r--pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/cfg/profiles/SIGNATURBLOCK_EN_DEPRECATED.properties53
-rw-r--r--pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/cfg/profiles/SIGNATURBLOCK_EN_NOTE.properties58
-rw-r--r--pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/cfg/profiles/SIGNATURBLOCK_EN_PDFA.properties57
-rw-r--r--pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/cfg/profiles/SIGNATURBLOCK_EN_PDFA_NOTE.properties60
-rw-r--r--pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/cfg/profiles/SIGNATURBLOCK_MINIMAL_DE.properties33
-rw-r--r--pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/cfg/profiles/SIGNATURBLOCK_MINIMAL_EN.properties33
-rw-r--r--pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/cfg/profiles/SIGNATURBLOCK_SMALL_DE.properties54
-rw-r--r--pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/cfg/profiles/SIGNATURBLOCK_SMALL_DE_NOTE.properties57
-rw-r--r--pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/cfg/profiles/SIGNATURBLOCK_SMALL_EN.properties54
-rw-r--r--pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/cfg/profiles/SIGNATURBLOCK_SMALL_EN_NOTE.properties57
-rw-r--r--pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/cfg/profiles/VARIABLER_AMTSSIGNATURBLOCK_DE.properties62
-rw-r--r--pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/fonts/DejaVuSans-Bold.ttfbin0 -> 561576 bytes
-rw-r--r--pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/fonts/DejaVuSans-BoldOblique.ttfbin0 -> 511900 bytes
-rw-r--r--pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/fonts/DejaVuSans-ExtraLight.ttfbin0 -> 323456 bytes
-rw-r--r--pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/fonts/DejaVuSans-Oblique.ttfbin0 -> 512140 bytes
-rw-r--r--pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/fonts/DejaVuSans.ttfbin0 -> 611552 bytes
-rw-r--r--pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/fonts/DejaVuSansCondensed-Bold.ttfbin0 -> 522704 bytes
-rw-r--r--pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/fonts/DejaVuSansCondensed-BoldOblique.ttfbin0 -> 480764 bytes
-rw-r--r--pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/fonts/DejaVuSansCondensed-Oblique.ttfbin0 -> 476512 bytes
-rw-r--r--pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/fonts/DejaVuSansCondensed.ttfbin0 -> 533412 bytes
-rw-r--r--pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/fonts/DejaVuSansMono-Bold.ttfbin0 -> 298052 bytes
-rw-r--r--pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/fonts/DejaVuSansMono-BoldOblique.ttfbin0 -> 219552 bytes
-rw-r--r--pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/fonts/DejaVuSansMono-Oblique.ttfbin0 -> 225500 bytes
-rw-r--r--pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/fonts/DejaVuSansMono.ttfbin0 -> 317336 bytes
-rw-r--r--pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/fonts/DejaVuSerif-Bold.ttfbin0 -> 281984 bytes
-rw-r--r--pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/fonts/DejaVuSerif-BoldItalic.ttfbin0 -> 268544 bytes
-rw-r--r--pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/fonts/DejaVuSerif-Italic.ttfbin0 -> 277644 bytes
-rw-r--r--pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/fonts/DejaVuSerif.ttfbin0 -> 307316 bytes
-rw-r--r--pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/fonts/DejaVuSerifCondensed-Bold.ttfbin0 -> 257664 bytes
-rw-r--r--pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/fonts/DejaVuSerifCondensed-BoldItalic.ttfbin0 -> 267916 bytes
-rw-r--r--pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/fonts/DejaVuSerifCondensed-Italic.ttfbin0 -> 277148 bytes
-rw-r--r--pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/fonts/DejaVuSerifCondensed.ttfbin0 -> 274316 bytes
-rw-r--r--pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/images/Baik_Archiv.gifbin0 -> 19334 bytes
-rw-r--r--pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/images/Baik_Urkunde.gifbin0 -> 13914 bytes
-rw-r--r--pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/images/signatur-logo_de.pngbin0 -> 22372 bytes
-rw-r--r--pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/images/signatur-logo_de_highest_resolution.pngbin0 -> 37120 bytes
-rw-r--r--pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/images/signatur-logo_en.pngbin0 -> 22233 bytes
-rw-r--r--pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/images/signatur-logo_en_highest_resolution.pngbin0 -> 36360 bytes
-rw-r--r--pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/licenses/adobe/AFM_License.html1
-rw-r--r--pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/licenses/ant/LICENSE203
-rw-r--r--pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/licenses/ant/LICENSE.dom71
-rw-r--r--pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/licenses/ant/LICENSE.sax20
-rw-r--r--pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/licenses/ant/LICENSE.xerces56
-rw-r--r--pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/licenses/apache/LICENSE202
-rw-r--r--pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/licenses/checkstyle/LICENSE504
-rw-r--r--pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/licenses/checkstyle/LICENSE.apache60
-rw-r--r--pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/licenses/dejavu-font/LICENSE99
-rw-r--r--pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/licenses/fonts/BitStream.txt17
-rw-r--r--pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/licenses/ikvm/LICENSE34
-rw-r--r--pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/licenses/junit/cpl-v10.html125
-rw-r--r--pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/licenses/log4j/LICENSE.txt48
-rw-r--r--pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/licenses/lucene/LICENSE.txt15
-rw-r--r--pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/licenses/pdfbox/LICENSE25
-rw-r--r--pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/licenses/sun-jaicmm/JAI-LICENSE283
-rw-r--r--pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/licenses/sun-jaicmm/LICENSE186
-rw-r--r--pdf-as-web/src/main/assembly/tomcat/default.xml116
-rw-r--r--pdf-as-web/src/main/assembly/tomcat/logs/pdf-as-statistic.csv1
-rw-r--r--pdf-as-web/src/main/assembly/tomcat/scripts/catalina.env11
-rw-r--r--pdf-as-web/src/main/assembly/tomcat/scripts/setVariables.bat62
-rw-r--r--pdf-as-web/src/main/assembly/tomcat/scripts/startTomcat.bat5
-rw-r--r--pdf-as-web/src/main/assembly/tomcat/scripts/startTomcat.sh7
-rw-r--r--pdf-as-web/src/main/assembly/tomcat/scripts/stopTomcat.bat5
-rw-r--r--pdf-as-web/src/main/assembly/tomcat/scripts/stopTomcat.sh7
-rw-r--r--pdf-as-web/src/main/java/at/gv/egiz/pdfas/web/helper/LocalRequestHelper.java29
-rw-r--r--pdf-as-web/src/main/java/at/gv/egiz/pdfas/web/servlets/DataURLServlet.java164
-rw-r--r--pdf-as-web/src/main/java/at/gv/egiz/pdfas/web/servlets/SignServlet.java32
-rw-r--r--pdf-as-web/src/main/java/at/gv/egiz/pdfas/web/servlets/VerifyPreviewServlet.java33
-rw-r--r--pdf-as-web/src/main/java/at/gv/egiz/pdfas/web/servlets/VerifyServlet.java7
-rw-r--r--pdf-as-web/src/main/webapp/META-INF/context.xml11
-rw-r--r--pdf-as-web/src/main/webapp/WEB-INF/decorators.xml9
-rw-r--r--pdf-as-web/src/main/webapp/WEB-INF/sitemesh.xml21
-rw-r--r--pdf-as-web/src/main/webapp/jsp/null_request_page.jsp7
-rw-r--r--pdf-as-web/src/main/webapp/sitemesh/buergerkarte_at.jsp227
-rw-r--r--pdf-as-web/src/main/webapp/sitemesh/standalone.jsp234
-rw-r--r--pom.xml80
-rw-r--r--test-files/blindtext.pdfbin44339 -> 0 bytes
-rw-r--r--test-files/blindtext_pdfa-1b-2005-rgb.pdfbin37725 -> 0 bytes
-rw-r--r--work/cfg/advancedconfig.properties273
-rw-r--r--work/cfg/config.properties1725
-rw-r--r--work/cfg/log4j.properties12
-rw-r--r--work/cfg/profiles/AMTSSIGNATURBLOCK_DE.properties56
-rw-r--r--work/cfg/profiles/AMTSSIGNATURBLOCK_DE_DEPRECATED.properties58
-rw-r--r--work/cfg/profiles/AMTSSIGNATURBLOCK_EN.properties57
-rw-r--r--work/cfg/profiles/AMTSSIGNATURBLOCK_EN_DEPRECATED.properties58
-rw-r--r--work/cfg/profiles/BAIK_ARCHIV_SIGNATUR.properties69
-rw-r--r--work/cfg/profiles/BAIK_URKUNDE_SIGNATUR.properties67
-rw-r--r--work/cfg/profiles/INVISIBLE.properties14
-rw-r--r--work/cfg/profiles/SIGNATURBLOCK_DE.properties155
-rw-r--r--work/cfg/profiles/SIGNATURBLOCK_DE_DEPRECATED.properties55
-rw-r--r--work/cfg/profiles/SIGNATURBLOCK_DE_NOTE.properties60
-rw-r--r--work/cfg/profiles/SIGNATURBLOCK_DE_PDFA.properties57
-rw-r--r--work/cfg/profiles/SIGNATURBLOCK_DE_PDFA_NOTE.properties60
-rw-r--r--work/cfg/profiles/SIGNATURBLOCK_EN.properties54
-rw-r--r--work/cfg/profiles/SIGNATURBLOCK_EN_DEPRECATED.properties55
-rw-r--r--work/cfg/profiles/SIGNATURBLOCK_EN_NOTE.properties58
-rw-r--r--work/cfg/profiles/SIGNATURBLOCK_EN_PDFA.properties57
-rw-r--r--work/cfg/profiles/SIGNATURBLOCK_EN_PDFA_NOTE.properties60
-rw-r--r--work/cfg/profiles/SIGNATURBLOCK_MINIMAL_DE.properties33
-rw-r--r--work/cfg/profiles/SIGNATURBLOCK_MINIMAL_EN.properties33
-rw-r--r--work/cfg/profiles/SIGNATURBLOCK_SMALL_DE.properties54
-rw-r--r--work/cfg/profiles/SIGNATURBLOCK_SMALL_DE_NOTE.properties57
-rw-r--r--work/cfg/profiles/SIGNATURBLOCK_SMALL_EN.properties54
-rw-r--r--work/cfg/profiles/SIGNATURBLOCK_SMALL_EN_NOTE.properties57
-rw-r--r--work/cfg/profiles/VARIABLER_AMTSSIGNATURBLOCK_DE.properties62
273 files changed, 16583 insertions, 3711 deletions
diff --git a/dok/RELEASE_NOTES-3.3.txt b/dok/RELEASE_NOTES-3.3.txt
new file mode 100644
index 0000000..3682884
--- /dev/null
+++ b/dok/RELEASE_NOTES-3.3.txt
@@ -0,0 +1,280 @@
+RELEASE NOTES für PDF-AS 3.3
+
+
+MIGRATION VON PDF-AS 3.2
+
+ - Die Voraussetzung für eine Migration von PDF-AS 3.2 ist mindestens eine Java Laufzeitumgebung mit Version 1.5.
+
+ - Bestehende Konfigurationen können unverändert verwendet werden. Es wird jedoch empfohlen, die
+ Referenzkonfiguration bzw. eine darauf aufbauende Konfiguration zu verwenden. Die Referenzkonfiguration ist nun
+ wesentlich übersichtlicher gestaltet und ausführlicher inline dokumentiert (siehe auch Abschnitt "KONFIGURATION"
+ unten).
+
+ - Folgende abhängige Bibliotheken müssen ersetzt werden:
+ commons-codec-1.3.jar -> commons-codec-1.6.jar
+ commons-io-1.1.jar -> commons-io-2.2.jar
+ commons-lang-2.3.jar -> commons-lang-2.6.jar
+ core-1.6-SNAPSHOT.jar -> core-1.6-jdk14.jar
+ javase-1.6-SNAPSHOT.jar -> javase-1.6-jdk14.jar
+ itext-2.1.5-rev3628-pdfas-1.1.jar -> itext-2.1.5-rev3628-pdfas-1.2.jar
+ Die neuen Versionen finden sich in den jeweiligen Release-Paketen.
+
+ - Wird die Referenzkonfiguration verwendet, muss berücksichtigt werden, dass mit folgenden Signaturprofilen keine
+ Signaturen mehr erzeugt werden dürfen bzw. können:
+
+ AMTSSIGNATURBLOCK_DE_DEPRECATED
+ AMTSSIGNATURBLOCK_EN_DEPRECATED
+ SIGNATURBLOCK_DE_DEPRECATED
+ SIGNATURBLOCK_EN_DEPRECATED
+
+
+ALLGEMEINE ÄNDERUNGEN
+
+ - Java 1.4 wird nicht mehr unterstützt. Die Mindestvoraussetzung ist nun Java 1.5.
+
+ - Das ursprüngliche Single-Modul Maven Projekt ist nun als Multi-Modul Projekt ausgeführt, bestehend aus den
+ Modulen:
+ pdf-as-lib:
+ Die PDF-AS Core API. Die Bibliothek kann von Fachapplikationen wie bisher verwendet werden.
+ pdf-as-web:
+ Eine eigenständige PDF-AS Webanwendung (siehe auch http://www.buergerkarte.at/pdf-as).
+ pdf-as-cli:
+ Eine Commandline Version von PDF-AS.
+ pdf-as-release:
+ Release-Modul, das die drei o.g. Module in einem Release-Paket vereint.
+
+ - Die Webanwendung wird bereits inkl. Apache Tomcat sowie entsprechender Konfiguration und StartScripts erstellt
+ und kann sofort verwendet werden.
+
+ - Die PDF-AS API wird nun wie folgt als Maven Dependency referenziert (groupId und artifactId haben sich geändert):
+ <dependency>
+ <groupId>eu.europa.ec.joinup.egovlabs.pdf-as</groupId>
+ <artifactId>pdf-as-lib</artifactId>
+ <version>3.3</version>
+ <dependency>
+
+ - Sonderzeichen wurden aus dem Source-Code entfernt und dieser auf UTF-8 Encoding umgestellt.
+
+ - Sämtliche .printStackTrace() Anweisungen wurden entfernt.
+
+ - Einführung einer internen Standard-Konfiguration (classpath:/config/defaultconfig.properties). Diese Standard-
+ Konfiguration entspricht der PDF-AS Referenz-Konfiguration (config.properties), enthält jedoch keine
+ Signaturprofile. Sämtliche Einträge werden von der jeweilig verwendeten Konfiguration überschrieben.
+
+ - Folgende abhängige, d.h. von PDF-AS verwendete Bibliotheken wurden aktualisiert:
+ commons-codec-1.3.jar -> commons-codec-1.6.jar
+ commons-io-1.1.jar -> commons-io-2.2.jar
+ commons-lang-2.3.jar -> commons-lang-2.6.jar
+ core-1.6-SNAPSHOT.jar -> core-1.6-jdk14.jar
+ javase-1.6-SNAPSHOT.jar -> javase-1.6-jdk14.jar
+ itext-2.1.5-rev3628-pdfas-1.1.jar -> itext-2.1.5-rev3628-pdfas-1.2.jar
+ Hinweis: Diese Abhängigkeiten müssen bei der Migration von PDF-AS 3.2 auf 3.3 berücksichtigt werden. Siehe auch
+ Abschnitt "MIGRATION".
+
+ - Abhängigkeiten zu folgenden Bibliotheken wurden entfernt:
+ xml-apis-1.3.02.jar
+
+ - Die folgenden Signaturprofile gelten als veraltet:
+ AMTSSIGNATURBLOCK_DE_DEPRECATED
+ AMTSSIGNATURBLOCK_EN_DEPRECATED
+ SIGNATURBLOCK_DE_DEPRECATED
+ SIGNATURBLOCK_EN_DEPRECATED
+ Diese sind in der Referenzkonfiguration nun so konfiguriert, dass sie nur noch zur Signaturprüfung, nicht aber zum
+ Erzeugen von Signaturen verwendet werden können.
+
+ - Folgende Bürgerkartenumgebungen werden unterstützt (Liste der Identifier entsprechend nach
+ http://www.buergerkarte.at/konzept/securitylayer/spezifikation/aktuell/bindings/bindings.html#http.kodierung.response):
+
+ A-Trust
+ lokale BKU
+ citizen-card-environment/1.2 asignSecurityLayer/1.3.3
+ citizen-card-environment/1.2 asignSecurityLayer/1.4.1
+ citizen-card-environment/1.2 asignSecurityLayer/1.4.2
+ Handy-Signatur
+ citizen-card-environment/1.2 asignMobileBku/1.1.0
+ Handy-Signatur (Test)
+ citizen-card-environment/1.2 atrustHandyBku/1.1.0
+
+ IT-Solution trustDesk Basic
+ citizen-card-environment/1.2 trustDeskbasic[-OSX|-Linux]/2.7.*|2.8.*|3.0.*
+
+ MOCCA
+ citizen-card-environment/1.2 MOCCA/*[-X14]
+
+
+NEUE FUNKTIONEN
+
+ - Unterstützung von XAdES 1.4 basierten Signaturen durch MOCCA. Dazu wurde ein neuer Signaturparameter
+ "etsi-moc-1.2" eingeführt (siehe auch aktualisierte PDF-AS Spezifikation 2.3).
+
+ - Erkennung verschlüsselter Dokumente.
+
+ - Spezieller Logger für statistische Informationen.
+
+ - Import von Konfigurationsdateien via Include-Anweisung.
+
+ - Vereinfachung der Konfiguration durch Beschränkung auf die wesentlichen Optionen sowie durch Trennung der
+ Signaturprofile in einzelne Konfigurationsdateien (z.B. SIGNATURBLOCK_DE.properties), die nun mittels
+ Include-Anweisung eingebunden werden.
+
+ - Verwendung einer fortgeschrittenen Konfiguration (advancedconfig.properties), die sämtliche
+ Konfigurationsmöglichkeiten bietet.
+
+ - Möglichkeit, einzelne Profile zusätzlich zum bisherigen Ein- bzw. Ausschalten nun auch nur für die Signatur oder
+ nur für die Verifikation zuzulassen. So können veraltete Profile noch für die Verifikation verwendet werden, ohne
+ damit die Möglichkeit zu erlauben, neue Signaturen zu erzeugen.
+
+ - Web-Applikation: Verbesserung der Integrationsmöglichkeit in bestehende Webseiten.
+
+
+BEHOBENE BUGS
+
+ Modul pdf-as-web:
+
+ - null_request_page.jsp: NullPointerException behoben.
+
+ Modul pdf-as-lib:
+
+ - Leere Signatur-Parameter im Signaturblock führten bisher zu einem Fehler. Leere Signatur-Parameter müssen laut
+ PDF-AS Spezifikation (Abschnitt 5.1.1) als MOA-SS Signaturen interpretiert werden.
+
+ - Die Konfiguration der QR-Code Signaturplatzhalter "enable_placeholder_search=true|false" wurde bisher
+ ignoriert.
+
+ - Einige Dokumente mit strukturiertem Inhalt ("tagged documents") führten zu internen Fehlern. Nun wurde ein
+ Fallback-Mechanismus integriert, der Dokumente mit fehlerhaften oder fehlenden Strukturinformationen dennoch
+ signiert.
+
+ - Das verarbeitete PDF-Dokument wurde bisher in einigen Fällen nicht geschlossen, bzw. damit PdfBox/iText
+ Ressourcen nicht freigegeben.
+
+ - Im Falle von unsichtbaren Signaturen wurden bisher unter Umständen leere Seiten hinzugefügt.
+
+ - Fehlerhafte Verarbeitung von Signaturen behoben, deren Zertifikat einen Issuer-Namen mit Beistrich in einem
+ der RDNs (Relative Distinguished Name) aufwies, z.B.
+ "...,CN=Go Daddy Secure Certification Authority,O=GoDaddy.com\, Inc.,L=Scottsdale,..."
+
+ - Die PDF/A-1b-Konformität eines Dokuments war bisher nach der Signatur mit PDF-AS trotz Verwendung eines
+ PDF/A-aktivieren Signaturprofils (z.B. SIGNATURBLOCK_DE_PDFA) unter Umständen nicht mehr gegeben. PDF/A setzt
+ die Verwendung von geräteunabhängigen Farbräumen voraus. PDF-AS bzw. die zugrundeliegende iText-Library
+ verwendet grundsätzlich jedoch geräteabhängige Farbräume. Deshalb wird nun bei der Signatur mit einem
+ PDF/A-aktivierten Signaturprofil ein geräteunabhängiges ICC-Farbprofil in das Dokument eingebettet, wodurch
+ dieses PDF/A-konform bleibt.
+
+ - Fehlerhafte Verarbeitung von signierten Dokumenten mit Inkrementellen Updates behoben. Spezielle
+ Konstellationen von Trailer und Cross-Reference Tabelle eines Inkrementellen Updates führten zu einem internen
+ Fehler.
+
+ - Fehlerhafte Verarbeitung verschlüsselter Dokumente behoben: Beim Versuch, ein verschlüsseltes Dokument zu
+ laden wird nun statt einem undefinierten internen Fehler ein entsprechender Fehler mit Fehlercode (231)
+ generiert.
+
+ - Automatische Positionierung des Signaturblocks verbessert bzw. Probleme mit speziellen PDF-Elementen behoben.
+
+
+KONFIGURATION
+
+ - Die PDF-AS Konfiguration ist abwärtskompatibel zu älteren PDF-AS Versionen. Eine bestehende Konfiguration kann
+ ohne Anpassung verwendet werden, nutzt dann allerdings unter Umständen auch nicht die neuen Features.
+
+ - Die PDF-AS Konfiguration erfolgt wie bisher auch über die Datei config.properties. Die Referenzkonfiguration wurde
+ jedoch sehr stark vereinfacht, d.h. selten verwendete Konfigurationsschlüssel wurden in eine "fortgeschrittene
+ Konfiguration" (advancedconfig.properties) ausgelagert. Diese fortgeschrittene Konfiguration wird mittels mit der
+ neuen Include-Funktion (siehe unten) von config.properties aus eingelesen.
+
+ Konkret wurden folgende Konfigurationsschlüssel von config.properties nach advancedconfig.properties verschoben:
+ assume_only_signature_blocks = false
+ binary_only = false
+ bku.available_for_commandline = true
+ bku.available_for_web = true
+ bku.sign.KeyboxIdentifier = SecureSignatureKeypair
+ check_document = true
+ check_old_textual_sigs = true
+ correct_document_if_necessary = true
+ correct_document_on_verify_if_necessary = true
+ corrector = internal
+ default.SIG_BAIK_ENABLED = false
+ default.SIG_PDFA1B_VALID = false
+ default.adobeSignFieldValue = PDF-AS Signatur
+ default.adobeSignReasonValue = Informationen zur Pr\u00FCfung finden Sie unter http://www.signaturpruefung.gv.at
+ default.adobeSignText.binary = PDF-AS
+ default.adobeSignText.textual = PDF-AS
+ default.sigLogoAltText = Abgebildet ist eine Standard-Signaturbildmarke.
+ default.signature_block_width_warning_threshold = 150
+ default.verifyURL = http://www.signaturpruefung.gv.at
+ defaults.phlength.SIG_ALG = 100
+ defaults.phlength.SIG_ID = 70
+ defaults.phlength.SIG_NAME = 210
+ defaults.phlength.certificate = 10000
+ defaults.phlength.line_break_tolerance = 10
+ defaults.phlength.timestamp = 5000
+ enable_placeholder_search = false
+ external_corrector_commandline = C:/correct.exe "##input_document##" "##output_document##"
+ external_corrector_timeout = 15000
+ moa.available_for_commandline = true
+ moa.available_for_commandline = true
+ moa.available_for_web = true
+ moa.available_for_web = true
+ moa.sign.console.detached.enabled = false
+ mobiletest.sign.KeyboxIdentifier = SecureSignatureKeypair
+ moc.available_for_commandline = false
+ moc.available_for_web = true
+ moc.sign.KeyboxIdentifier = SecureSignatureKeypair
+ strict_mode = false
+ supress_exception_when_last_iublock_is_no_signature = false
+
+ - Grundsätzlich gibt es in PDF-AS vier Konfigurationsebenen (zwei interne und zwei lokale):
+
+ (a) Eine interne Konfiguration (classpath:/config/pdf-as.properties), die ausschließlich Eigenschaften der
+ spezifischen PDF-AS Implementierung definiert (z.B. unterstützte BKUs, verwendete Templates, usw.). Diese
+ Konfiguration kann nicht durch andere Konfigurationsebenen überschrieben werden. Es wird ausdrücklich davon
+ abgeraten, diese Einstellungen zu verändern!
+
+ (b) Eine interne Standard-Konfiguration (classpath:/config/defaultconfig.properties), die inhaltlich exakt
+ der Einstellungen der fortgeschrittenen Konfiguration (c) entspricht, genau wie diese jedoch keine
+ Signaturprofile definiert. Sämtliche Einstellungen aus der internen Standard-Konfiguration können durch (c)
+ bzw. (d) überschrieben werden.
+
+ (c) Eine lokale Datei advancedconfig.properties, die ein vollständiges Set an möglichen Konfigurationsschlüssel
+ enthält. Die Datei wird durch die Include Anweisung in (d) "include.advancedconfig = advancedconfig.properties"
+ eingebunden.
+
+ (d) Die bereits bekannte lokale Datei config.properties. Diese setzt ggf. Konfigurationsschlüssel die von den
+ Standardwerten aus (b) abweichen sowie lädt Signaturprofile mittels Include-Anweisung.
+
+ - Include Mechanismus: Es ist nun möglich von einer Konfigurationsdatei aus, weitere Konfigurationsdateien zu laden.
+ Dies erfolgt beispielsweise bereits in der Datei config.properties (d) der Referenzkonfiguration dieses Releases:
+
+ z.B.
+ # Standard-Profile
+ include.01 = profiles/INVISIBLE.properties
+ include.02 = profiles/SIGNATURBLOCK_DE.properties
+ include.03 = profiles/SIGNATURBLOCK_DE_DEPRECATED.properties
+ include.04 = profiles/SIGNATURBLOCK_DE_NOTE.properties
+
+ Die Anweisung besteht aus dem Schlüsselwort "include.BELIEBIGER_BEZEICHNER" sowie dem relativen Pfad zur
+ einzubindenden Datei, der auch aus Wildcards bestehen kann. "BELIEBIGER_BEZEICHNER" muss durch ein beliebiges
+ Schlüsselwort ersetzt werden. Dieses muss zusammen mit dem Prefix "include." einen eindeutigen Schlüssel darstellen:
+
+ z.B.
+ # Amtssignatur-Profile
+ include.amtssignaturprofile = profiles/AMTSSIGNATURBLOCK*.properties
+ # PDF/A Profile
+ include.pdfa = profiles/*PDFA.properties
+ # Unsichtbares Profil
+ include.invisible = profiles/INVISIBLE.properties
+
+ - Eine ausführliche Beschreibung sämtlicher Konfigurationsparameter findet sich inline in den jeweiligen lokalen
+ Konfigurationsdateien (c) und (d).
+
+ - Der folgende Konfigurationsschlüssel wurde aus der lokalen Konfiguration (d) entfernt und fix in die interne
+ Konfiguration (a) eingetragen. Diese Einstellung kann nicht überschrieben werden:
+
+ default.adobeSignEnabled = true
+
+ (Diese Einstellung fügt eine Signaturkennzeichnung - so wie von Adobe eigentlich vorgesehen - in das Dokument ein.
+ Signierte Dokumente sind dadurch vor versehentlichen Änderungen geschützt. Würde dies nicht erfolgen, könnten binäre
+ Signaturen beim Abspeichern der Dokumente versehentlich entfernt werden.)
+
+
+Thomas Knall, Datentechnik Innovation GmbH
diff --git a/dok/Spezifikation/PDF-AS-Spezifikation-2.3.pdf b/dok/Spezifikation/PDF-AS-Spezifikation-2.3.pdf
new file mode 100644
index 0000000..6223499
--- /dev/null
+++ b/dok/Spezifikation/PDF-AS-Spezifikation-2.3.pdf
Binary files differ
diff --git a/dok/Spezifikation/PDF-AS-Spezifikation.doc b/dok/Spezifikation/PDF-AS-Spezifikation.doc
index 55393f2..f890d38 100644
--- a/dok/Spezifikation/PDF-AS-Spezifikation.doc
+++ b/dok/Spezifikation/PDF-AS-Spezifikation.doc
Binary files differ
diff --git a/maven2-repository/maven2-repository.zip b/maven2-repository/maven2-repository.zip
deleted file mode 100644
index faf0c91..0000000
--- a/maven2-repository/maven2-repository.zip
+++ /dev/null
Binary files differ
diff --git a/pdf-as-cli/pom.xml b/pdf-as-cli/pom.xml
index a2a89c4..86afd96 100644
--- a/pdf-as-cli/pom.xml
+++ b/pdf-as-cli/pom.xml
@@ -4,7 +4,7 @@
<modelVersion>4.0.0</modelVersion>
<parent>
- <groupId>at.gv.egiz</groupId>
+ <groupId>eu.europa.ec.joinup.egovlabs.pdf-as</groupId>
<artifactId>pdf-as</artifactId>
<version>3.3-SNAPSHOT</version>
</parent>
@@ -48,7 +48,7 @@
<dependencies>
<dependency>
- <groupId>at.gv.egiz</groupId>
+ <groupId>eu.europa.ec.joinup.egovlabs.pdf-as</groupId>
<artifactId>pdf-as-lib</artifactId>
</dependency>
diff --git a/pdf-as-cli/src/main/assembly/cli.xml b/pdf-as-cli/src/main/assembly/cli.xml
index c4f7189..4a01867 100644
--- a/pdf-as-cli/src/main/assembly/cli.xml
+++ b/pdf-as-cli/src/main/assembly/cli.xml
@@ -20,7 +20,7 @@
<moduleSet>
<useAllReactorProjects>true</useAllReactorProjects>
<includes>
- <include>at.gv.egiz:pdf-as-lib:jar</include>
+ <include>eu.europa.ec.joinup.egovlabs.pdf-as:pdf-as-lib:jar</include>
</includes>
<binaries>
<unpack>false</unpack>
@@ -39,7 +39,7 @@
<outputDirectory>lib</outputDirectory>
<useProjectArtifact>false</useProjectArtifact>
<excludes>
- <exclude>at.gv.egiz:pdf-as-lib:jar</exclude>
+ <exclude>eu.europa.ec.joinup.egovlabs.pdf-as:pdf-as-lib:jar</exclude>
</excludes>
</dependencySet>
@@ -95,6 +95,16 @@
<include>Spezifikation-Layout-Amtssignatur-las-v1.4.0.pdf</include>
</includes>
</fileSet>
+
+ <!-- Add release notes. -->
+ <fileSet>
+ <directory>../dok</directory>
+ <outputDirectory>doc</outputDirectory>
+ <includes>
+ <include>RELEASE_NOTES*.txt</include>
+ </includes>
+ </fileSet>
+
</fileSets>
</assembly>
diff --git a/pdf-as-cli/src/main/resources/sign.bat b/pdf-as-cli/src/main/resources/sign.bat
index e25213b..0e54be0 100644
--- a/pdf-as-cli/src/main/resources/sign.bat
+++ b/pdf-as-cli/src/main/resources/sign.bat
@@ -1 +1 @@
-call pdf-as.bat -mode sign -sigmode textual -connector bku %1 %2 %3 %4 %5 %6 %7 %8 %9
+call pdf-as.bat -mode sign -sigmode binary -connector bku %1 %2 %3 %4 %5 %6 %7 %8 %9
diff --git a/pdf-as-cli/src/main/resources/sign.sh b/pdf-as-cli/src/main/resources/sign.sh
index 410b3fe..7aea96e 100644
--- a/pdf-as-cli/src/main/resources/sign.sh
+++ b/pdf-as-cli/src/main/resources/sign.sh
@@ -1,3 +1,3 @@
#!/bin/bash
-./pdf-as.sh -mode sign -sigmode textual -connector bku $@
+./pdf-as.sh -mode sign -sigmode binary -connector bku $@
diff --git a/pdf-as-lib/pom.xml b/pdf-as-lib/pom.xml
index 93e585b..64bb993 100644
--- a/pdf-as-lib/pom.xml
+++ b/pdf-as-lib/pom.xml
@@ -6,7 +6,7 @@
<modelVersion>4.0.0</modelVersion>
<parent>
- <groupId>at.gv.egiz</groupId>
+ <groupId>eu.europa.ec.joinup.egovlabs.pdf-as</groupId>
<artifactId>pdf-as</artifactId>
<version>3.3-SNAPSHOT</version>
</parent>
@@ -61,6 +61,17 @@
</configuration>
</plugin>
+ <plugin>
+ <artifactId>maven-surefire-plugin</artifactId>
+ <configuration>
+ <includes>
+ <include>at/knowcenter/wag/egov/egiz/**/*.java</include>
+ <include>at/gv/egiz/pdfas/algorithmSuite/**/*.java</include>
+ <include>at/gv/egiz/pdfas/utils/**/*.java</include>
+ </includes>
+ </configuration>
+ </plugin>
+
</plugins>
</build>
@@ -83,7 +94,7 @@
</dependency>
<dependency>
- <groupId>lucene</groupId>
+ <groupId>eu.europa.ec.joinup.egovlabs.pdf-as.lucene</groupId>
<artifactId>lucene-demos</artifactId>
</dependency>
@@ -108,17 +119,17 @@
</dependency>
<dependency>
- <groupId>axis</groupId>
+ <groupId>eu.europa.ec.joinup.egovlabs.pdf-as.axis</groupId>
<artifactId>axis-saaj</artifactId>
</dependency>
<dependency>
- <groupId>axis</groupId>
+ <groupId>eu.europa.ec.joinup.egovlabs.pdf-as.axis</groupId>
<artifactId>axis-wsdl4j</artifactId>
</dependency>
<dependency>
- <groupId>axis</groupId>
+ <groupId>eu.europa.ec.joinup.egovlabs.pdf-as.axis</groupId>
<artifactId>axis-jaxrpc</artifactId>
</dependency>
@@ -133,12 +144,12 @@
</dependency>
<dependency>
- <groupId>iaik</groupId>
+ <groupId>eu.europa.ec.joinup.egovlabs.pdf-as.iaik</groupId>
<artifactId>iaik_jce_eval_signed</artifactId>
</dependency>
<dependency>
- <groupId>iaik</groupId>
+ <groupId>eu.europa.ec.joinup.egovlabs.pdf-as.iaik</groupId>
<artifactId>iaik_ecc_eval_signed</artifactId>
</dependency>
@@ -147,23 +158,15 @@
<artifactId>commons-lang</artifactId>
</dependency>
- <!-- nur falls jdk < 1.5 verwendet wird -->
- <!--
- <dependency>
- <groupId>xml-apis</groupId>
- <artifactId>xml-apis</artifactId>
- </dependency>
- -->
-
<!-- iText -->
<dependency>
- <groupId>com.lowagie</groupId>
+ <groupId>eu.europa.ec.joinup.egovlabs.pdf-as.com.lowagie</groupId>
<artifactId>itext-2.1.5-rev3628-pdfas</artifactId>
</dependency>
<!-- pdfbox -->
<dependency>
- <groupId>pdfbox</groupId>
+ <groupId>eu.europa.ec.joinup.egovlabs.pdf-as.pdfbox</groupId>
<artifactId>pdfbox-0.7.2-pdfas</artifactId>
</dependency>
@@ -178,13 +181,13 @@
</dependency>
<dependency>
- <groupId>com.google.zxing</groupId>
+ <groupId>eu.europa.ec.joinup.egovlabs.pdf-as.com.google.zxing</groupId>
<artifactId>core</artifactId>
<classifier>jdk14</classifier>
</dependency>
<dependency>
- <groupId>com.google.zxing</groupId>
+ <groupId>eu.europa.ec.joinup.egovlabs.pdf-as.com.google.zxing</groupId>
<artifactId>javase</artifactId>
<classifier>jdk14</classifier>
</dependency>
diff --git a/pdf-as-lib/src/main/assembly/lib.xml b/pdf-as-lib/src/main/assembly/lib.xml
index f9efd00..dcf665b 100644
--- a/pdf-as-lib/src/main/assembly/lib.xml
+++ b/pdf-as-lib/src/main/assembly/lib.xml
@@ -20,7 +20,7 @@
<moduleSet>
<useAllReactorProjects>true</useAllReactorProjects>
<includes>
- <include>at.gv.egiz:pdf-as-lib:jar</include>
+ <include>eu.europa.ec.joinup.egovlabs.pdf-as:pdf-as-lib:jar</include>
</includes>
<binaries>
<unpack>false</unpack>
@@ -39,7 +39,7 @@
<outputDirectory>lib</outputDirectory>
<useProjectArtifact>false</useProjectArtifact>
<excludes>
- <exclude>at.gv.egiz:pdf-as-lib:jar</exclude>
+ <exclude>eu.europa.ec.joinup.egovlabs.pdf-as:pdf-as-lib:jar</exclude>
</excludes>
</dependencySet>
@@ -84,7 +84,7 @@
</includes>
</fileSet>
- <!-- Add specification. -->
+ <!-- Add layout specification. -->
<fileSet>
<directory>../dok/Spezifikation/Spezifikation-Layout-Amtssignatur-las-v1.4.0</directory>
<outputDirectory>doc</outputDirectory>
@@ -92,6 +92,25 @@
<include>Spezifikation-Layout-Amtssignatur-las-v1.4.0.pdf</include>
</includes>
</fileSet>
+
+ <!-- Add core specification. -->
+ <fileSet>
+ <directory>../dok/Spezifikation</directory>
+ <outputDirectory>doc</outputDirectory>
+ <includes>
+ <include>PDF-AS-Spezifikation-2.3.pdf</include>
+ </includes>
+ </fileSet>
+
+ <!-- Add release notes. -->
+ <fileSet>
+ <directory>../dok</directory>
+ <outputDirectory>doc</outputDirectory>
+ <includes>
+ <include>RELEASE_NOTES*.txt</include>
+ </includes>
+ </fileSet>
+
</fileSets>
</assembly>
diff --git a/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/api/commons/Constants.java b/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/api/commons/Constants.java
index b351d50..4afec65 100644
--- a/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/api/commons/Constants.java
+++ b/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/api/commons/Constants.java
@@ -27,7 +27,7 @@ import at.knowcenter.wag.egov.egiz.pdf.AdobeSignatureHelper;
/**
* Contains commonly used constants.
- *
+ *
* @author wprinz
*/
public final class Constants
@@ -52,7 +52,7 @@ public final class Constants
* This value should not be modified due to external dependencies!
*/
public static final String SIGNATURE_TYPE_TEXTUAL = "textual";
-
+
/**
* The default signature type (one of "textual", "binary", "detachedtextual").
*/
@@ -60,7 +60,7 @@ public final class Constants
/**
* A "detached" textual signature.
- *
+ *
* <p>
* The document text is signed, but instead of returning the pdf with the signature block,
* the sign result XML of the connector is returned.
@@ -98,14 +98,14 @@ public final class Constants
* This value should not be modified due to external dependencies!
*/
public static final String SIGNATURE_DEVICE_MOBILE = "mobile";
-
+
/**
* Added by rpiazzi
* The signature device MOBILETEST for the test version of the MOBILE CCS.
* This value should not be modified due to external dependencies!
*/
public static final String SIGNATURE_DEVICE_MOBILETEST = "mobiletest";
-
+
/**
* Only binary signatures are verified.
*/
@@ -113,7 +113,7 @@ public final class Constants
/**
* Binary and textual signatures are verified with time optimization.
- *
+ *
* <p>
* This mode of operation tries to minimize the numbers of text extractions,
* which are very time intensive, at the cost of some rare cases, in which some
@@ -141,19 +141,19 @@ public final class Constants
* The zip file containing the default configuration.
*/
public static final String DEFAULT_CONFIGURATION_ZIP_RESOURCE = "DefaultConfiguration.zip";
-
+
/**
* The configuration folder for pdf-as within the user's home folder.
*/
public static final String USERHOME_CONFIG_FOLDER = "PDF-AS";
-
+
/**
* The name of the directory, where temporary files are stored.
*/
public static final String TEMP_DIR_NAME = "pdfastmp";
-
+
public static final String BKU_HEADER_SIGNATURE_LAYOUT = "SignatureLayout";
-
+
public static final String ADOBE_SIG_FILTER = AdobeSignatureHelper.ADOBE_SIG_FILTER;
/**
@@ -161,25 +161,30 @@ public final class Constants
* If the placeholder with the given id is not found in the document, an exception will be thrown.
*/
public static final int PLACEHOLDER_MATCH_MODE_STRICT = 0;
-
+
/**
* A moderate matching mode for placeholder extraction.<br/>
* If the placeholder with the given id is not found in the document, the first placeholder without an id will be taken.<br/>
* If there is no such placeholder, the signature will be placed as usual, according to the pos parameter of the signature profile used.
*/
public static final int PLACEHOLDER_MATCH_MODE_MODERATE = 1;
-
+
/**
* A more lenient matching mode for placeholder extraction.<br/>
* If the placeholder with the given id is not found in the document, the first found placeholder will be taken, regardless if it has an id set, or not.<br/>
* If there is no placeholder at all, the signature will be placed as usual, according to the pos parameter of the signature profile used.
*/
public static final int PLACEHOLDER_MATCH_MODE_LENIENT = 2;
-
+
/**
* Identifier for QR based placeholders.
*/
public static final String QR_PLACEHOLDER_IDENTIFIER = "PDF-AS-POS";
-
+
+ /**
+ * The name of a logger used for statistical logging.
+ */
+ public static final String STATISTIC_LOGGER_NAME = "statistic";
+
}
diff --git a/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/api/commons/DynamicSignatureProfileImpl.java b/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/api/commons/DynamicSignatureProfileImpl.java
index 7e1672a..e1f31f7 100644
--- a/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/api/commons/DynamicSignatureProfileImpl.java
+++ b/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/api/commons/DynamicSignatureProfileImpl.java
@@ -159,8 +159,10 @@ public class DynamicSignatureProfileImpl implements DynamicSignatureProfile {
cfg = SettingsReader.getInstance();
- Properties props = cfg.getProperties();
- for (Enumeration e = props.keys(); e.hasMoreElements();) {
+ Properties props = cfg.getProperties();
+ // DTI: props.keys() does not support default properties, therefore we should better use props.propertyNames()
+// for (Enumeration e = props.keys(); e.hasMoreElements();) {
+ for (Enumeration e = props.propertyNames(); e.hasMoreElements();) {
String oldKey = (String) e.nextElement();
if (oldKey.startsWith("sig_obj." + parentProfile + ".")) {
String newKey = StringUtils.replace(oldKey, parentProfile, name);
@@ -168,7 +170,7 @@ public class DynamicSignatureProfileImpl implements DynamicSignatureProfile {
this.newProps.put(newKey, val);
}
}
- this.newProps.put("sig_obj.types." + name, "on");
+ this.newProps.put("sig_obj.types." + name, "on");
} catch (Exception e) {
throw new RuntimeException(e);
}
diff --git a/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/api/commons/SignatureProfile.java b/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/api/commons/SignatureProfile.java
index 8cd3108..1325d04 100644
--- a/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/api/commons/SignatureProfile.java
+++ b/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/api/commons/SignatureProfile.java
@@ -25,6 +25,8 @@ package at.gv.egiz.pdfas.api.commons;
import java.util.Properties;
+import at.knowcenter.wag.egov.egiz.sig.SignatureTypes.State;
+
/**
* Definition of a signature profile.
*
@@ -73,4 +75,13 @@ public interface SignatureProfile {
* @return
*/
public boolean isDefault();
+
+ /**
+ * Returns the state of the signature profile. Signature profiles may be restricted to signature (
+ * {@link State#SIGN_ONLY}) or to verification ({@link State#VERIFY_ONLY}).
+ *
+ * @return The state of the profile.
+ */
+ public State getState();
+
}
diff --git a/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/api/sign/SignParameters.java b/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/api/sign/SignParameters.java
index 8834481..5533b8b 100644
--- a/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/api/sign/SignParameters.java
+++ b/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/api/sign/SignParameters.java
@@ -34,16 +34,16 @@ import at.knowcenter.wag.egov.egiz.sig.SignatureTypes;
/**
* Parameter object that holds the sign parameters.
- *
+ *
* @author wprinz
*/
public class SignParameters
{
// 23.11.2010 changed by exthex - added parameters for placeholder handling
-
+
/**
* The document to be signed.
- *
+ *
* <p>
* The DataSource implementation encapsulates the actual representaion of the
* data. E.g. the DataSource may be File based or byte array based. See
@@ -54,7 +54,7 @@ public class SignParameters
/**
* The type of the signature.
- *
+ *
* <p>
* May be {@link Constants#SIGNATURE_TYPE_BINARY} or
* {@link Constants#SIGNATURE_TYPE_TEXTUAL}.
@@ -64,7 +64,7 @@ public class SignParameters
/**
* The signature device to perform the actual signature.
- *
+ *
* <p>
* May be {@link Constants#SIGNATURE_DEVICE_MOA} or
* {@link Constants#SIGNATURE_DEVICE_BKU}.
@@ -75,18 +75,18 @@ public class SignParameters
/**
* The signature profile identifier identifying the profile to be used in the
* config file.
- *
+ *
* <p>
* Note: In near future it will be possible to provide a full specified
* profile here instead of the profile id.
* </p>
*/
protected String signatureProfileId = null;
-
+
/**
* The signature key identifier specifying which signature key should be used
* by the signature device to perform the signature.
- *
+ *
* <p>
* Providing a null value (default) means that no explicit signature key
* identifier is provided. The selected signature device will then use its
@@ -122,7 +122,7 @@ public class SignParameters
* The output DataSink that will receive the signed document.
*/
protected DataSink output = null;
-
+
protected TimeStamper timeStamperImpl;
/**
@@ -142,12 +142,12 @@ public class SignParameters
* Defaults to {@link Constants#PLACEHOLDER_MATCH_MODE_MODERATE}.
*/
protected int placeholderMatchMode = Constants.PLACEHOLDER_MATCH_MODE_MODERATE;
-
+
protected Properties overrideProps = new Properties();
-
-
+
+
/**
* {@link #setTimeStamperImpl(TimeStamper)}
@@ -158,7 +158,7 @@ public class SignParameters
}
/**
- * Set a {@link TimeStamper} to create a timestamp on the signature value. Will be
+ * Set a {@link TimeStamper} to create a timestamp on the signature value. Will be
* called after sign. For binary signatures only. Timestamp will be embedded in egiz dict /TimeStamp.
* @param timeStamperImpl
*/
@@ -285,21 +285,21 @@ public class SignParameters
}
/**
- * Override user defined values from the used signature profile like "value.SIG_META".
- * You cannot override pre defined values like SIG_VALUE, SIG_DATE {@link SignatureTypes#REQUIRED_SIG_KEYS}.
+ * Override user defined values from the used signature profile like "value.SIG_META".
+ * You cannot override pre defined values like SIG_VALUE, SIG_DATE {@link SignatureTypes#REQUIRED_SIG_KEYS}.
* The override values are bound to the {@link SignParameters} instance.
* <p>
* Sample usage:
* <pre>
SignParameters sp = new SignParameters();
. . .
-
- sp.setSignatureProfileId("SIGNATURBLOCK_DE");
-
+
+ sp.setSignatureProfileId("SIGNATURBLOCK_DE");
+
// expressions do not work on binary signature fields without phlength setting!!
sp.setProfileOverrideValue("SIG_META", "It's nice to be important, but it is more important to be nice ${subject.L}");;
- sp.setProfileOverrideValue("SIG_LABEL", "./images/signatur-logo_en.png");
-
+ sp.setProfileOverrideValue("SIG_LABEL", "./images/signatur-logo_en.png");
+
// execute sign using the overrides
pdfAs.sign(sp);
</pre>
@@ -311,51 +311,51 @@ public class SignParameters
if (SignatureTypes.isRequredSigTypeKey(key)) {
throw new RuntimeException("cannot set value for pre defined signature field names");
}
- this.overrideProps.put(key, value);
+ this.overrideProps.put(key, value);
}
-
+
/**
* Get override values created via {@link #setProfileOverrideValue(String, String)}
* @return
*/
public Properties getProfileOverrideProperties() {
return this.overrideProps;
-
+
}
/**
* Get the value of the checkForPlaceholder flag.
- *
+ *
* @return
*/
public Boolean isCheckForPlaceholder() {
return this.checkForPlaceholder;
}
-
+
/**
- * Set this to true, if you want a search for placeholder images to be performed and
+ * Set this to true, if you want a search for placeholder images to be performed and
* appropriate images to be replaced.
* If this is not set, a search will only be performed if the configuration property "enable_placeholder_search" is set to true.
- *
+ *
* @param check
*/
- public void setCheckForPlaceholder(boolean check) {
- this.checkForPlaceholder = Boolean.valueOf(check);
+ public void setCheckForPlaceholder(Boolean searchForPlaceHolder) {
+ this.checkForPlaceholder = searchForPlaceHolder;
}
/**
- * Set an explicit placeholder id.
+ * Set an explicit placeholder id.
* Only placeholder images that have a matching ID property embedded will be considered for replacement.
- *
+ *
* @param placeholderId
*/
public void setPlaceholderId(String placeholderId) {
- this.placeholderId = placeholderId;
+ this.placeholderId = placeholderId;
}
-
+
/**
* The id of the placeholder to replace.
- *
+ *
* @return the placeholderId
*/
public String getPlaceholderId() {
@@ -367,13 +367,13 @@ public class SignParameters
* Exactly matching meaning:<br/>
* <ul><li>If a placeholderId is set: a placeholder which has exactly this id embedded</li>
* <li>If no placeholderId is set: a placeholder without an embedded id is found</li></ul>
- *
+ *
* @see Constants#PLACEHOLDER_MATCH_MODE_LENIENT
* @see Constants#PLACEHOLDER_MATCH_MODE_MODERATE
* @see Constants#PLACEHOLDER_MATCH_MODE_STRICT
- *
+ *
* Defaults to {@link Constants#PLACEHOLDER_MATCH_MODE_MODERATE}.
- *
+ *
* @param placeholderMatchMode
*/
public void setPlaceholderMatchMode(int placeholderMatchMode) {
@@ -382,12 +382,12 @@ public class SignParameters
/**
* Get the placeholder matching mode.
- *
+ *
* @see SignParameters#getPlaceholderMatchMode()
* @return the placeholderMatchMode
*/
public int getPlaceholderMatchMode() {
return this.placeholderMatchMode;
}
-
+
}
diff --git a/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/commandline/Main.java b/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/commandline/Main.java
index 52355f8..d5f7e2f 100644
--- a/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/commandline/Main.java
+++ b/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/commandline/Main.java
@@ -36,6 +36,7 @@ import java.util.Iterator;
import java.util.List;
import java.util.Set;
+import org.apache.commons.lang.BooleanUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@@ -78,11 +79,11 @@ import at.knowcenter.wag.egov.egiz.sig.SignatureTypes;
/**
* The main program entry point of the commandline tool.
- *
+ *
* <p>
* The commandline uses the PDF-AS API.
* </p>
- *
+ *
* @author wprinz
*/
public abstract class Main
@@ -127,12 +128,12 @@ public abstract class Main
* Command line parameter signaling to search the source document for a placeholder for the signature
*/
protected static final String PARAMETER_PLACEHOLDER_SEARCH = "-searchplaceholder";
-
+
/**
* Command line parameter selecting the id of the placeholder to use
*/
protected static final String PARAMETER_PLACEHOLDER_ID = "-placeholder_id";
-
+
/**
* Command line parameter selecting the match mode for the placeholder
*/
@@ -143,7 +144,7 @@ public abstract class Main
* verified.
*/
protected static final String PARAMETER_VERIFY_WHICH = "-verify_which";
-
+
/**
* Command line parameter that starts the deployment of the default configuration to the current
* user's home folder.
@@ -195,7 +196,7 @@ public abstract class Main
* The placeholder match mode STRICT
*/
public static final String VALUE_PLACEHOLDER_MATCH_MODE_LENIENT = "lenient";
-
+
/**
* The log.
*/
@@ -203,7 +204,7 @@ public abstract class Main
/**
* Main program entry point.
- *
+ *
* @param args
* The commandline arguments.
* @throws IOException
@@ -216,7 +217,7 @@ public abstract class Main
for (int i = 0; i < args.length; i++) {
if (args[i].trim().equals(PARAMETER_DEPLOY_DEFAULT_CONFIGURATION)) {
try {
- String defaultConfigurationDeployedTo = ConfigUtils.deployDefaultConfiguration();
+ String defaultConfigurationDeployedTo = ConfigUtils.deployDefaultConfiguration();
if (defaultConfigurationDeployedTo != null) {
System.out.println("Default configuration successfully deployed to \"" + defaultConfigurationDeployedTo + "\".");
} else {
@@ -229,7 +230,7 @@ public abstract class Main
} catch (ConfigUtilsException e) {
System.err.println("Deployment of default configuration failed: " + e.getMessage());
System.exit(1);
- }
+ }
}
}
@@ -247,7 +248,8 @@ public abstract class Main
String user_password = null;
String pos_string = null;
- boolean search_placeholder = true;
+ // DTI: fixed searchplaceholder parameter handling preventing consideration of respective configuration parameter
+ Boolean searchPlaceHolder = null;
String placeholderId = null;
int placeholderMatchMode = Constants.PLACEHOLDER_MATCH_MODE_MODERATE;
@@ -274,7 +276,7 @@ public abstract class Main
// already applied
continue;
}
-
+
if (cur_arg.equals(PARAMETER_MODE))
{
i++;
@@ -351,7 +353,8 @@ public abstract class Main
printNoValue(PARAMETER_PLACEHOLDER_SEARCH);
return;
}
- search_placeholder = Boolean.valueOf(args[i]).booleanValue();
+// search_placeholder = Boolean.valueOf(args[i]).booleanValue();
+ searchPlaceHolder = BooleanUtils.toBooleanObject(args[i]);
continue;
}
@@ -522,7 +525,7 @@ public abstract class Main
output = generateOutputFileNameFromInput(input, signature_mode);
}
- carryOutCommand(mode, signature_mode, connector, signature_type, user_name, user_password, verify_which, input, output, pos_string, search_placeholder, placeholderId, placeholderMatchMode);
+ carryOutCommand(mode, signature_mode, connector, signature_type, user_name, user_password, verify_which, input, output, pos_string, searchPlaceHolder, placeholderId, placeholderMatchMode);
}
catch (PdfAsException e)
@@ -549,7 +552,7 @@ public abstract class Main
}
protected static void carryOutCommand(final String mode, final String signature_mode, final String connector, final String signature_type, final String user_name, final String user_password,
- final int verify_which, final String input, String output, final String pos_string, boolean search_placeholder, String placeholderId, int placeholderMatchMode) throws PdfAsException
+ final int verify_which, final String input, String output, final String pos_string, Boolean searchPlaceHolder, String placeholderId, int placeholderMatchMode) throws PdfAsException
{
// File file = new File(input);
//
@@ -570,7 +573,7 @@ public abstract class Main
if (mode.equals(VALUE_MODE_SIGN))
{
- carryOutSign(input, connector, signature_mode, signature_type, pos_string, user_name, user_password, output, messageOutput, search_placeholder, placeholderId, placeholderMatchMode);
+ carryOutSign(input, connector, signature_mode, signature_type, pos_string, user_name, user_password, output, messageOutput, searchPlaceHolder, placeholderId, placeholderMatchMode);
}
else
{
@@ -580,7 +583,7 @@ public abstract class Main
}
public static void carryOutSign(String input, String connector, String signature_mode, String signature_type, String pos_string, String user_name, String user_password, String output,
- PrintWriter messageOutput, boolean search_placeholder, String placeholderId, int placeholderMatchMode) throws PdfAsException
+ PrintWriter messageOutput, Boolean searchPlaceHolder, String placeholderId, int placeholderMatchMode) throws PdfAsException
{
messageOutput.println("Signing " + input + "...");
@@ -621,7 +624,7 @@ public abstract class Main
}
try {
- processSign(dataSource, connector, signature_mode, signature_type, pos_string, search_placeholder, placeholderId, placeholderMatchMode, dataSink);
+ processSign(dataSource, connector, signature_mode, signature_type, pos_string, searchPlaceHolder, placeholderId, placeholderMatchMode, dataSink);
} catch (Exception e) {
// Exception caught in order to delete file based datasink
if (outputFile != null && outputFile.exists())
@@ -641,14 +644,6 @@ public abstract class Main
}
}
- // for performance measurement
- if (logger_.isInfoEnabled())
- {
- long endTime = System.currentTimeMillis();
- String toReport = "SIGN;" + signature_mode + ";" + input + ";" + fileSize + ";" + (endTime - startTime);
- logger_.info(toReport);
- }
-
messageOutput.println("Signing was successful (" + output + ").");
}
@@ -656,22 +651,10 @@ public abstract class Main
{
messageOutput.println("Verifying " + input + "...");
- // for performance measurement
- long startTime = 0;
- long fileSize = 0;
- if (logger_.isInfoEnabled())
- {
- startTime = System.currentTimeMillis();
- }
-
DataSource dataSource = null;
try
{
File file = new File(input);
- if (logger_.isDebugEnabled())
- {
- fileSize = file.length();
- }
String extension = extractExtension(input);
if (extension != null && extension.equals("txt"))
{
@@ -705,23 +688,15 @@ public abstract class Main
messageOutput.println("Verification results:");
formatVerifyResults(results, messageOutput);
- // for performance measurement
- if (logger_.isInfoEnabled())
- {
- long endTime = System.currentTimeMillis();
- String toReport = "VERIFY;" + input + ";" + fileSize + ";" + (endTime - startTime) + ";" + debugVerifyResults(results);
- logger_.info(toReport);
- }
-
}
-
+
/**
* Extracts the extension from a file name string.
- *
+ *
* <p>
* The extension of a file name is whatever text follows the last '.'.
* </p>
- *
+ *
* @param file_name
* The file name.
* @return Returns the extension. If the file name ends with the '.', then an
@@ -743,7 +718,7 @@ public abstract class Main
return file_name.substring(dot_index + 1);
}
- public static void processSign(DataSource dataSource, String connector, String signature_mode, String signature_type, String pos_string, boolean search_placeholder, String placeholderId, int placeholderMatchMode, DataSink dataSink) throws PdfAsException
+ public static void processSign(DataSource dataSource, String connector, String signature_mode, String signature_type, String pos_string, Boolean searchPlaceHolder, String placeholderId, int placeholderMatchMode, DataSink dataSink) throws PdfAsException
{
TablePos pos = null;
if (pos_string != null)
@@ -795,7 +770,7 @@ public abstract class Main
sp.setSignatureDevice(connector);
sp.setSignatureProfileId(signature_type);
sp.setSignaturePositioning(posi);
- sp.setCheckForPlaceholder(search_placeholder);
+ sp.setCheckForPlaceholder(searchPlaceHolder);
sp.setPlaceholderId(placeholderId);
sp.setPlaceholderMatchMode(placeholderMatchMode);
pdfAs.sign(sp);
@@ -853,7 +828,7 @@ public abstract class Main
/**
* Prints that the provided option was unrecognized.
- *
+ *
* @param option
* The unrecognized option.
* @throws PresentableException
@@ -867,7 +842,7 @@ public abstract class Main
/**
* Prints that the provided value was unrecognized.
- *
+ *
* @param parameter
* The parameter, which is missing a value.
* @throws PresentableException
@@ -881,7 +856,7 @@ public abstract class Main
/**
* Prints that the provided value was unrecognized.
- *
+ *
* @param value
* The unrecognized value.
* @throws PresentableException
@@ -895,7 +870,7 @@ public abstract class Main
/**
* Prints that the provided additional commandline argument was unrecognized.
- *
+ *
* @param argument
* The unrecognized argument.
* @throws PresentableException
@@ -909,7 +884,7 @@ public abstract class Main
/**
* Prints that a certain parameter was missing.
- *
+ *
* @param missing_term
* A description of the missing parameter ("e.g. a mode").
* @param parameter
@@ -924,7 +899,7 @@ public abstract class Main
/**
* Prints that something is missing.
- *
+ *
* @param missing_term
* A descriptive message of the missing thing.
* @throws PresentableException
@@ -938,7 +913,7 @@ public abstract class Main
/**
* Prints out the ErrorCodeException in a descriptive form.
- *
+ *
* @param ece
* The ErrorCodeException to be printed.
*/
@@ -974,7 +949,7 @@ public abstract class Main
/**
* Prints the usage text.
- *
+ *
* @param writer
* The writer to print the text to.
* @throws PresentableException
@@ -991,7 +966,7 @@ public abstract class Main
writer.print(" " + PARAMETER_CONNECTOR + " ");
ConnectorInformation[] ci = ConnectorFactory.getConnectorInformationArray();
-
+
// prepare list of connectors available for commandline
ArrayList ciList = new ArrayList();
for (int i = 0; i < ci.length; i++) {
@@ -1000,7 +975,7 @@ public abstract class Main
ciList.add(ci[i]);
}
}
-
+
// list available connectors wrapped in <...|...>
Iterator ciIt = ciList.iterator();
writer.print("<");
@@ -1012,7 +987,7 @@ public abstract class Main
}
writer.print(">");
writer.println();
-
+
// for (int i = 0; i < ci.length; i++)
// {
// String id = ci[i].getIdentifier();
@@ -1046,7 +1021,7 @@ public abstract class Main
writer.println(" " + PARAMETER_DEPLOY_DEFAULT_CONFIGURATION + " ... deploys the default configuration to the current user's home");
- writer.println(" OPTIONS for signation:");
+ writer.println(" OPTIONS for signature:");
writer.println(" " + PARAMETER_SIGNATURE_MODE + " <" + VALUE_SIGNATURE_MODE_BINARY + "|" + VALUE_SIGNATURE_MODE_TEXTUAL + "> [optional]");
writer.println(" " + VALUE_SIGNATURE_MODE_BINARY + " ... signs the complete binary document" + (Constants.DEFAULT_SIGNATURE_TYPE.equals(VALUE_SIGNATURE_MODE_BINARY) ? " (default)" : ""));
@@ -1056,7 +1031,9 @@ public abstract class Main
writer.print(" " + PARAMETER_SIGNATURE_TYPE + " <");
SignatureTypes sig_types = SignatureTypes.getInstance();
SettingsReader settings = SettingsReader.getInstance();
- Set types_array = sig_types.getSignatureTypes();
+ // show only signature profiles that can be used for signature
+// Set types_array = sig_types.getSignatureTypes();
+ Set types_array = sig_types.getSignatureTypesForSignature();
Iterator it = types_array.iterator();
while (it.hasNext())
{
@@ -1117,7 +1094,7 @@ public abstract class Main
/**
* Checks the value for correctness.
- *
+ *
* @param mode
* The parameter's value.
* @return Returns true, if the value is correct, false otherwise.
@@ -1129,7 +1106,7 @@ public abstract class Main
/**
* Checks the value for correctness.
- *
+ *
* @param signature_mode
* The parameter's value.
* @return Returns true, if the value is correct, false otherwise.
@@ -1143,7 +1120,7 @@ public abstract class Main
/**
* Checks the value for correctness.
- *
+ *
* @param connector
* The parameter's value.
* @return Returns true, if the value is correct, false otherwise.
@@ -1157,7 +1134,7 @@ public abstract class Main
/**
* Checks the value for correctness (meaning if it exists)
- *
+ *
* @param signature_type
* The parameter's value.
* @return Returns true, if the value is correct, false otherwise.
@@ -1166,10 +1143,10 @@ public abstract class Main
{
return SignatureTypes.getInstance().getSignatureTypes().contains(signature_type);
}
-
+
/**
* Translates the commandline argument to a PDF-AS-ID.
- *
+ *
* @param signature_mode
* The signator mode commandline argument.
* @return Returns the corresponding PDFASID.
@@ -1197,7 +1174,7 @@ public abstract class Main
/**
* Formats the verification results.
- *
+ *
* @param results
* The List of SignatureResponse verification results.
* @param writer
@@ -1223,9 +1200,9 @@ public abstract class Main
/**
* Formats the verification results for debugging. Returns 0 if no error
* occurs or the sum of all error-codes.
- *
+ *
* @param results
- *
+ *
* @param writer
* The output sink to write the formatted text to.
* @throws SettingNotFoundException
@@ -1259,7 +1236,7 @@ public abstract class Main
String public_property = (String) it.next();
writer.println(" Eigenschaft: " + public_property);
}
-
+
writer.println(" Zertifikat-Check:");
writer.println(" " + result.getCertificateCheck().getCode() + " - " + result.getCertificateCheck().getMessage());
writer.println(" Signatur-Check:");
diff --git a/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/exceptions/ErrorCode.java b/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/exceptions/ErrorCode.java
index e0ddbf2..e7d2b47 100644
--- a/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/exceptions/ErrorCode.java
+++ b/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/exceptions/ErrorCode.java
@@ -23,6 +23,8 @@
*/
package at.gv.egiz.pdfas.exceptions;
+import at.knowcenter.wag.egov.egiz.exceptions.SignatureException;
+
/**
* Contains constants for the error codes.
*
@@ -44,6 +46,8 @@ public final class ErrorCode
public static final int NO_EMBEDABLE_TTF_CONFIGURED_FOR_PDFA = 103;
public static final int INVALID_SIGNATURE_LAYOUT_IMPL_CONFIGURED = 104;
public static final int MISSING_HEADER_SERVER_USER_AGENT = 105;
+ public static final int CIRCULAR_INCLUDE_INSTRUCTION_DETECTED = 106;
+ public static final int UNABLE_TO_LOAD_DEFAULT_CONFIG = 107;
public static final int DOCUMENT_CANNOT_BE_READ = 201;
public static final int TEXT_EXTRACTION_EXCEPTION = 202;
@@ -56,6 +60,15 @@ public final class ErrorCode
//23.11.2010 changed by exthex - added error code for failed extraction
public static final int SIGNATURE_PLACEHOLDER_EXTRACTION_FAILED = 233;
+ /**
+ * Error code for {@code SignatureException}s occurring when trying to sign with a certain signature profile that
+ * is not allowed to be used for signature, e.g. because ist has been set to
+ * <p/>
+ * {@code sig_obj.types.<PROFILE_ID> = verify_only}
+ * @author Datentechnik Innovation GmbH
+ */
+ public static final int SIGNATURE_PROFILE_IS_NOT_ALLOWED_FOR_SIGNATURE = 234;
+
public static final int INVALID_SIGNATURE_POSITION = 224;
public static final int NO_TEXTUAL_CONTENT = 251;
diff --git a/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/framework/logging/CsvStatisticLogger.java b/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/framework/logging/CsvStatisticLogger.java
new file mode 100644
index 0000000..a295a7b
--- /dev/null
+++ b/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/framework/logging/CsvStatisticLogger.java
@@ -0,0 +1,105 @@
+/**
+ * <copyright> Copyright 2006 by Know-Center, Graz, Austria </copyright>
+ * PDF-AS has been contracted by the E-Government Innovation Center EGIZ, a
+ * joint initiative of the Federal Chancellery Austria and Graz University of
+ * Technology.
+ *
+ * Licensed under the EUPL, Version 1.1 or - as soon they will be approved by
+ * the European Commission - subsequent versions of the EUPL (the "Licence");
+ * You may not use this work except in compliance with the Licence.
+ * You may obtain a copy of the Licence at:
+ * http://www.osor.eu/eupl/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the Licence is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the Licence for the specific language governing permissions and
+ * limitations under the Licence.
+ *
+ * This product combines work with different licenses. See the "NOTICE" text
+ * file for details on the various modules and licenses.
+ * The "NOTICE" text file is part of the distribution. Any derivative works
+ * that you distribute must include a readable copy of the "NOTICE" text file.
+ */
+package at.gv.egiz.pdfas.framework.logging;
+
+import org.apache.commons.logging.Log;
+
+import at.gv.egiz.pdfas.api.exceptions.PdfAsException;
+import at.gv.egiz.pdfas.exceptions.external.ExternalErrorException;
+import at.gv.egiz.pdfas.utils.CsvUtils;
+
+/**
+ * A statistic logger implementation that prodoces csv based logging entries.
+ *
+ * @author Datentechnik Innovation GmbH
+ */
+public class CsvStatisticLogger implements StatisticLogger {
+
+ /**
+ * The underlying logging implementation.
+ */
+ private Log log;
+
+ /**
+ * A csv value indication error conditions.
+ */
+ private static final String VALUE_ERROR = "ERROR";
+
+ /**
+ * A csv value indication success conditions.
+ */
+ private static final String VALUE_OK = "OK";
+
+ /**
+ * Creates a new instance.
+ *
+ * @param log
+ * The underlying logger.
+ */
+ CsvStatisticLogger(Log log) {
+ this.log = log;
+ }
+
+ public void log(StatisticData data) {
+ if (isEnabled()) {
+ StringBuffer msg = new StringBuffer();
+
+ // add escapted fields
+ msg.append(CsvUtils.escapeCsvValue(data.operation)).append(CsvUtils.DEFAULT_DELIMITER);
+ msg.append(CsvUtils.escapeCsvValue(data.signatureMode)).append(CsvUtils.DEFAULT_DELIMITER);
+ msg.append(CsvUtils.escapeCsvValue(data.connector)).append(CsvUtils.DEFAULT_DELIMITER);
+ msg.append(CsvUtils.escapeCsvValue(data.signatureProfileId)).append(CsvUtils.DEFAULT_DELIMITER);
+ msg.append(CsvUtils.escapeCsvValue(data.fileSize)).append(CsvUtils.DEFAULT_DELIMITER);
+ msg.append(CsvUtils.escapeCsvValue(data.userAgent)).append(CsvUtils.DEFAULT_DELIMITER);
+
+ // handle error conditions
+ Integer errorCode = null;
+ String externalErrorCode = null;
+ if (data.exception != null) {
+ msg.append(VALUE_ERROR).append(CsvUtils.DEFAULT_DELIMITER);
+ if (data.exception instanceof PdfAsException) {
+ PdfAsException pdfAsException = (PdfAsException) data.exception;
+ errorCode = pdfAsException.getErrorCode();
+ if (pdfAsException instanceof ExternalErrorException) {
+ externalErrorCode = ((ExternalErrorException) pdfAsException).getExternalErrorCode();
+ }
+ }
+ msg.append(CsvUtils.escapeCsvValue(data.exception.getClass().getName())).append(CsvUtils.DEFAULT_DELIMITER);
+ } else {
+ msg.append(VALUE_OK).append(CsvUtils.DEFAULT_DELIMITER).append(CsvUtils.DEFAULT_DELIMITER);
+ }
+ msg.append(CsvUtils.escapeCsvValue(errorCode)).append(CsvUtils.DEFAULT_DELIMITER);
+ msg.append(CsvUtils.escapeCsvValue(externalErrorCode)).append(CsvUtils.DEFAULT_DELIMITER);
+
+ msg.append(CsvUtils.escapeCsvValue(data.duration));
+
+ log.info(msg);
+ }
+ }
+
+ public boolean isEnabled() {
+ return log.isInfoEnabled();
+ }
+
+}
diff --git a/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/framework/logging/StatisticData.java b/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/framework/logging/StatisticData.java
new file mode 100644
index 0000000..3cb1c66
--- /dev/null
+++ b/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/framework/logging/StatisticData.java
@@ -0,0 +1,314 @@
+/**
+ * <copyright> Copyright 2006 by Know-Center, Graz, Austria </copyright>
+ * PDF-AS has been contracted by the E-Government Innovation Center EGIZ, a
+ * joint initiative of the Federal Chancellery Austria and Graz University of
+ * Technology.
+ *
+ * Licensed under the EUPL, Version 1.1 or - as soon they will be approved by
+ * the European Commission - subsequent versions of the EUPL (the "Licence");
+ * You may not use this work except in compliance with the Licence.
+ * You may obtain a copy of the Licence at:
+ * http://www.osor.eu/eupl/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the Licence is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the Licence for the specific language governing permissions and
+ * limitations under the Licence.
+ *
+ * This product combines work with different licenses. See the "NOTICE" text
+ * file for details on the various modules and licenses.
+ * The "NOTICE" text file is part of the distribution. Any derivative works
+ * that you distribute must include a readable copy of the "NOTICE" text file.
+ */
+package at.gv.egiz.pdfas.framework.logging;
+
+import at.gv.egiz.pdfas.api.analyze.AnalyzeParameters;
+import at.gv.egiz.pdfas.api.commons.Constants;
+import at.gv.egiz.pdfas.api.sign.SignParameters;
+import at.gv.egiz.pdfas.api.verify.VerifyAfterAnalysisParameters;
+import at.gv.egiz.pdfas.api.verify.VerifyAfterReconstructXMLDsigParameters;
+import at.gv.egiz.pdfas.api.verify.VerifyParameters;
+import at.gv.egiz.pdfas.api.xmldsig.ReconstructXMLDsigAfterAnalysisParameters;
+import at.gv.egiz.pdfas.api.xmldsig.ReconstructXMLDsigParameters;
+
+public class StatisticData {
+
+ String operation;
+ String connector;
+ String signatureMode;
+ String signatureProfileId;
+ Integer fileSize;
+ Long duration;
+ String userAgent;
+ Exception exception;
+
+ /**
+ * Creates new data for statistical logging purposes.
+ */
+ public StatisticData() {
+ }
+
+ /**
+ * Creates new data for statistical logging purposes.
+ *
+ * @param operation
+ * The operation (one of 'SIGN' and 'VERIFY').
+ * @param connector
+ * The connector being used for the certain operation (one of {@link Constants#SIGNATURE_DEVICE_BKU},
+ * {@link Constants#SIGNATURE_DEVICE_MOA}, {@link Constants#SIGNATURE_DEVICE_MOC},
+ * {@link Constants#SIGNATURE_DEVICE_MOBILE}...)
+ * @param fileSize
+ * The size of the file being processed.
+ * @param signatureMode
+ * The signature mode (one of {@link Constants#SIGNATURE_TYPE_BINARY},
+ * {@link Constants#SIGNATURE_TYPE_BINARY} or {@code null} in case of verification.
+ * @param duration
+ * The duration the certain operation took (in ms).
+ * @param userAgent
+ * The user agent String.
+ * @param errorCode
+ * The error code resulting from the current operation (0 means no error).
+ */
+ public StatisticData(String operation, String connector, Integer fileSize, String signatureMode, Long duration,
+ String userAgent, Integer errorCode) {
+ this();
+ this.operation = operation;
+ this.connector = connector;
+ this.signatureMode = signatureMode;
+ this.fileSize = fileSize;
+ this.duration = duration;
+ this.userAgent = userAgent;
+ }
+
+ /**
+ * Creates new data for statistical logging purposes.
+ *
+ * @param operation
+ * The operation (one of 'SIGN' and 'VERIFY').
+ * @param connector
+ * The connector being used for the certain operation (one of {@link Constants#SIGNATURE_DEVICE_BKU},
+ * {@link Constants#SIGNATURE_DEVICE_MOA}, {@link Constants#SIGNATURE_DEVICE_MOC},
+ * {@link Constants#SIGNATURE_DEVICE_MOBILE}...)
+ * @param fileSize
+ * The size of the file being processed.
+ */
+ public StatisticData(String operation, String connector, Integer fileSize) {
+ this();
+ this.operation = operation;
+ this.connector = connector;
+ this.fileSize = fileSize;
+ }
+
+ /**
+ * Creates new data for statistical logging purposes.
+ *
+ * @param operation
+ * The operation (one of 'SIGN' and 'VERIFY').
+ * @param connector
+ * The connector being used for the certain operation (one of {@link Constants#SIGNATURE_DEVICE_BKU},
+ * {@link Constants#SIGNATURE_DEVICE_MOA}, {@link Constants#SIGNATURE_DEVICE_MOC},
+ * {@link Constants#SIGNATURE_DEVICE_MOBILE}...)
+ * @param fileSize
+ * The size of the file being processed.
+ * @param signatureMode
+ * The signature mode (one of {@link Constants#SIGNATURE_TYPE_BINARY},
+ * {@link Constants#SIGNATURE_TYPE_BINARY} or {@code null} in case of verification.
+ * @param duration
+ * The duration the certain operation took (in ms).
+ * @param userAgent
+ * The user agent String.
+ */
+ public StatisticData(String operation, String connector, Integer fileSize, String signatureMode, Long duration,
+ String userAgent) {
+ this(operation, connector, fileSize, signatureMode, duration, userAgent, null);
+ }
+
+ /**
+ * Creates statistical data based on given sign parameters.
+ *
+ * @param signParameters
+ * The given sign parameters.
+ */
+ public StatisticData(SignParameters signParameters) {
+ this();
+ operation = "SIGN";
+ connector = signParameters.getSignatureDevice();
+ signatureMode = signParameters.getSignatureType();
+ fileSize = signParameters.getDocument().getLength();
+ signatureProfileId = signParameters.getSignatureProfileId();
+ }
+
+ /**
+ * Creates statistical data based on given verify parameters.
+ *
+ * @param verifyParameters
+ * The given verify parameters.
+ */
+ public StatisticData(VerifyParameters verifyParameters) {
+ this();
+ operation = "VERIFY";
+ connector = verifyParameters.getSignatureDevice();
+ fileSize = verifyParameters.getDocument().getLength();
+ }
+
+ /**
+ * Creates statistical data based on given analyze parameters.
+ *
+ * @param varxdp
+ * The given analyze parameters.
+ */
+ public StatisticData(AnalyzeParameters analyzeParameters) {
+ this();
+ operation = "ANALYZE";
+ fileSize = analyzeParameters.getDocument().getLength();
+ }
+
+ /**
+ * Creates statistical data based on given reconstruction parameters.
+ *
+ * @param rxdaap
+ * The given reconstruction parameters.
+ */
+ public StatisticData(ReconstructXMLDsigAfterAnalysisParameters rxdaap) {
+ this();
+ operation = "RECONSTRUCT";
+ connector = rxdaap.getSignatureDevice();
+ }
+
+ /**
+ * Creates statistical data based on given reconstruction parameters.
+ *
+ * @param reconstructParameters
+ * The given reconstruction parameters.
+ */
+ public StatisticData(ReconstructXMLDsigParameters reconstructParameters) {
+ this();
+ operation = "RECONSTRUCT";
+ fileSize = reconstructParameters.getDocument().getLength();
+ connector = reconstructParameters.getSignatureDevice();
+ }
+
+ /**
+ * Creates statistical data based on given parameters.
+ *
+ * @param vaaParameters
+ * The given verify parameters after analysis.
+ */
+ public StatisticData(VerifyAfterAnalysisParameters vaaParameters) {
+ this();
+ operation = "VERIFY";
+ connector = vaaParameters.getSignatureDevice();
+ }
+
+ /**
+ * Creates statistical data based on given verify parameters after reconstruction.
+ *
+ * @param varxdp
+ * The given verify parameters after reconstruction.
+ */
+ public StatisticData(VerifyAfterReconstructXMLDsigParameters varxdp) {
+ this();
+ operation = "VERIFY";
+ connector = varxdp.getSignatureDevice();
+ }
+
+ /**
+ * Sets the current operation name.
+ *
+ * @param operation
+ * The operation name.
+ */
+ public StatisticData setOperation(String operation) {
+ this.operation = operation;
+ return this;
+ }
+
+ /**
+ * Sets the connector.
+ *
+ * @param connector
+ * The connector.
+ */
+ public StatisticData setConnector(String connector) {
+ this.connector = connector;
+ return this;
+ }
+
+ /**
+ * Sets the file size of the processed document.
+ *
+ * @param fileSize
+ * The file size in bytes.
+ */
+ public StatisticData setFileSize(Integer fileSize) {
+ this.fileSize = fileSize;
+ return this;
+ }
+
+ /**
+ * Sets the duration of the performed operation.
+ *
+ * @param duration
+ * The duration in ms.
+ */
+ public StatisticData setDuration(Long duration) {
+ this.duration = duration;
+ return this;
+ }
+
+ /**
+ * Sets the user agent identifier.
+ *
+ * @param userAgent
+ * The user agent identifier.
+ */
+ public StatisticData setUserAgent(String userAgent) {
+ this.userAgent = userAgent;
+ return this;
+ }
+
+ /**
+ * Sets the signature mode.
+ *
+ * @param signatureMode
+ * The signature mode (one of {@link Constants#SIGNATURE_TYPE_TEXTUAL} and
+ * {@link Constants#SIGNATURE_TYPE_BINARY}).
+ */
+ public StatisticData setSignatureMode(String signatureMode) {
+ this.signatureMode = signatureMode;
+ return this;
+ }
+
+ /**
+ * Sets the profile id.
+ *
+ * @param profileId
+ * The profile id.
+ */
+ public StatisticData setSignatureProfileId(String signatureProfileId) {
+ this.signatureProfileId = signatureProfileId;
+ return this;
+ }
+
+ /**
+ * Sets the exception that has been thrown.
+ *
+ * @param exception
+ * The exception.
+ */
+ public StatisticData setException(Exception exception) {
+ this.exception = exception;
+ return this;
+ }
+
+ /**
+ * Returns {@code true} if an error condition has been set, {@code false} otherwise.
+ *
+ * @return {@code true} in case of an error, {@code false} if not.
+ */
+ public boolean isError() {
+ return exception != null;
+ }
+
+}
diff --git a/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/framework/logging/StatisticLogFactory.java b/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/framework/logging/StatisticLogFactory.java
new file mode 100644
index 0000000..2b6671c
--- /dev/null
+++ b/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/framework/logging/StatisticLogFactory.java
@@ -0,0 +1,63 @@
+/**
+ * <copyright> Copyright 2006 by Know-Center, Graz, Austria </copyright>
+ * PDF-AS has been contracted by the E-Government Innovation Center EGIZ, a
+ * joint initiative of the Federal Chancellery Austria and Graz University of
+ * Technology.
+ *
+ * Licensed under the EUPL, Version 1.1 or - as soon they will be approved by
+ * the European Commission - subsequent versions of the EUPL (the "Licence");
+ * You may not use this work except in compliance with the Licence.
+ * You may obtain a copy of the Licence at:
+ * http://www.osor.eu/eupl/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the Licence is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the Licence for the specific language governing permissions and
+ * limitations under the Licence.
+ *
+ * This product combines work with different licenses. See the "NOTICE" text
+ * file for details on the various modules and licenses.
+ * The "NOTICE" text file is part of the distribution. Any derivative works
+ * that you distribute must include a readable copy of the "NOTICE" text file.
+ */
+package at.gv.egiz.pdfas.framework.logging;
+
+import org.apache.commons.logging.LogFactory;
+
+/**
+ * This factory creates statistic logger implementations.<br/>
+ * Note that it exclusively creates {@link CsvStatisticLogger} implementations at the moment. It should just be regarded
+ * as template for further factory implementations. Strictly speaking this factory does not fulfil the respective GoF
+ * pattern.
+ *
+ * @see StatisticLogger
+ * @author Datentechnik Innovation GmbH
+ */
+public class StatisticLogFactory {
+
+ /**
+ * Returns a statistic logger implementation.
+ *
+ * @param clazz
+ * The class.
+ * @return A statistic logger implementation.
+ */
+ public static StatisticLogger getLog(Class<?> clazz) {
+ return getLog(clazz.getName());
+ }
+
+ /**
+ * Returns a statistic logger implementation.
+ *
+ * @param name
+ * The name of the logger.
+ * @return A statistic logger implementation.
+ */
+ public static StatisticLogger getLog(String name) {
+
+ // to be changed some day, producing various logger implementations
+ return new CsvStatisticLogger(LogFactory.getLog(name));
+ }
+
+}
diff --git a/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/framework/logging/StatisticLogger.java b/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/framework/logging/StatisticLogger.java
new file mode 100644
index 0000000..6e2c587
--- /dev/null
+++ b/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/framework/logging/StatisticLogger.java
@@ -0,0 +1,47 @@
+/**
+ * <copyright> Copyright 2006 by Know-Center, Graz, Austria </copyright>
+ * PDF-AS has been contracted by the E-Government Innovation Center EGIZ, a
+ * joint initiative of the Federal Chancellery Austria and Graz University of
+ * Technology.
+ *
+ * Licensed under the EUPL, Version 1.1 or - as soon they will be approved by
+ * the European Commission - subsequent versions of the EUPL (the "Licence");
+ * You may not use this work except in compliance with the Licence.
+ * You may obtain a copy of the Licence at:
+ * http://www.osor.eu/eupl/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the Licence is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the Licence for the specific language governing permissions and
+ * limitations under the Licence.
+ *
+ * This product combines work with different licenses. See the "NOTICE" text
+ * file for details on the various modules and licenses.
+ * The "NOTICE" text file is part of the distribution. Any derivative works
+ * that you distribute must include a readable copy of the "NOTICE" text file.
+ */
+package at.gv.egiz.pdfas.framework.logging;
+
+/**
+ *
+ * @author Datentechnik Innovation GmbH
+ */
+public interface StatisticLogger {
+
+ /**
+ * Creates a log entry with the given statistical data.
+ *
+ * @param statisticData
+ * The statistical data.
+ */
+ public void log(StatisticData statisticData);
+
+ /**
+ * Returns {@code true} in case the logger is enabled, {@code false} if not.
+ *
+ * @return {@code true} in case the logger is enabled, {@code false} if not.
+ */
+ public boolean isEnabled();
+
+}
diff --git a/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/impl/api/PdfAsObject.java b/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/impl/api/PdfAsObject.java
index eda94c0..a2bcd15 100644
--- a/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/impl/api/PdfAsObject.java
+++ b/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/impl/api/PdfAsObject.java
@@ -33,6 +33,7 @@ import java.util.Properties;
import java.util.Vector;
import org.apache.commons.lang.math.NumberUtils;
+import org.apache.commons.lang.time.StopWatch;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@@ -66,6 +67,9 @@ import at.gv.egiz.pdfas.framework.DataSourceHolder;
import at.gv.egiz.pdfas.framework.config.SettingsHelper;
import at.gv.egiz.pdfas.framework.input.ExtractionStage;
import at.gv.egiz.pdfas.framework.input.PdfDataSource;
+import at.gv.egiz.pdfas.framework.logging.StatisticData;
+import at.gv.egiz.pdfas.framework.logging.StatisticLogFactory;
+import at.gv.egiz.pdfas.framework.logging.StatisticLogger;
import at.gv.egiz.pdfas.framework.signator.Signator;
import at.gv.egiz.pdfas.framework.signator.SignatorInformation;
import at.gv.egiz.pdfas.framework.vfilter.VerificationFilterParameters;
@@ -87,6 +91,7 @@ import at.gv.egiz.pdfas.placeholder.SignaturePlaceholderContext;
import at.gv.egiz.pdfas.placeholder.SignaturePlaceholderData;
import at.gv.egiz.pdfas.placeholder.SignaturePlaceholderExtractor;
import at.gv.egiz.pdfas.utils.ConfigUtils;
+import at.gv.egiz.pdfas.utils.PDFASUtils;
import at.knowcenter.wag.egov.egiz.PdfAS;
import at.knowcenter.wag.egov.egiz.PdfASID;
import at.knowcenter.wag.egov.egiz.cfg.OverridePropertyHolder;
@@ -111,12 +116,13 @@ import at.knowcenter.wag.egov.egiz.sig.SignatureDataImpl;
import at.knowcenter.wag.egov.egiz.sig.SignatureResponse;
import at.knowcenter.wag.egov.egiz.sig.SignatureTypeDefinition;
import at.knowcenter.wag.egov.egiz.sig.SignatureTypes;
+import at.knowcenter.wag.egov.egiz.sig.SignatureTypes.State;
import at.knowcenter.wag.egov.egiz.sig.connectors.Connector;
import at.knowcenter.wag.egov.egiz.sig.connectors.bku.SignSignatureObject;
/**
* Implementation of the {@link PdfAs} interface.
- *
+ *
* @author wprinz
*/
public class PdfAsObject implements PdfAs
@@ -127,25 +133,26 @@ public class PdfAsObject implements PdfAs
* The log.
*/
private static Log log = LogFactory.getLog(PdfAsObject.class);
-
+ private static StatisticLogger statLog = StatisticLogFactory.getLog(Constants.STATISTIC_LOGGER_NAME);
+
private static final String ENABLE_PLACEHOLDER_SEARCH_KEY = "enable_placeholder_search";
-
+
/**
* Configuration key for minimal signature block width threshold. Any width below this certain value will lead to a warning log entry."
*/
private static final String SIGNATURE_BLOCK_WIDTH_THRESHOLD_FOR_WARNING_KEY = "signature_block_width_warning_threshold";
-
+
/**
* Minimal signature block width. If a width below that value is defined (by parameter, by placeholder or by configuration) a warning log entry is created.
*/
public static final float DEFAULT_SIGNATURE_BLOCK_WIDTH_THRESHOLD = 150;
-
+
/**
* This constructor is for internal use only - use
* {@link at.gv.egiz.pdfas.PdfAsFactory} instead.
* Note: IAIK JCE and IAIK ECC security providers are automatically registered.
- *
+ *
* @param workDirectory
* The work directory.
* @throws PdfAsException
@@ -155,16 +162,16 @@ public class PdfAsObject implements PdfAs
{
this(workDirectory, SettingsReader.REGISTER_IAIK_PROVIDERS_ON_DEFAULT);
}
-
+
/**
* This constructor is for internal use only - use
* {@link at.gv.egiz.pdfas.PdfAsFactory} instead.
- *
+ *
* @param workDirectory
* The work directory.
* @param registerProvider <code>true</code>: automatically registers IAIK JCE and ECC Provider;
* <code>false</code>: providers will NOT be automatically registered, providers
- * needed have to be registered by the API user
+ * needed have to be registered by the API user
* @throws PdfAsException
* Thrown, if the configuration cannot be processed.
*/
@@ -174,12 +181,12 @@ public class PdfAsObject implements PdfAs
SettingsReader.initialize(path, path);
reloadConfig(registerProvider);
}
-
+
/**
* This constructor is for internal use only - use
* {@link at.gv.egiz.pdfas.PdfAsFactory} instead.
* Note: IAIK JCE and IAIK ECC security providers are automatically registered.
- *
+ *
* @throws PdfAsException
* Thrown, if the configuration cannot be processed.
*/
@@ -187,7 +194,7 @@ public class PdfAsObject implements PdfAs
{
this(null);
}
-
+
/**
* @see at.gv.egiz.pdfas.api.PdfAs#reloadConfig()
*/
@@ -197,11 +204,11 @@ public class PdfAsObject implements PdfAs
SettingsReader.createInstance();
SignatureTypes.createInstance();
}
-
+
/**
* @param registerProvider <code>true</code>: automatically registers IAIK JCE and ECC Provider;
* <code>false</code>: providers will NOT be automatically registered, providers
- * needed have to be registered by the API user
+ * needed have to be registered by the API user
* @see at.gv.egiz.pdfas.api.PdfAs#reloadConfig()
*/
private void reloadConfig(boolean registerProvider) throws PdfAsException
@@ -228,7 +235,7 @@ public class PdfAsObject implements PdfAs
List profileInformation = new ArrayList(profiles.size());
String default_type = settings.getValueFromKey(SignatureTypes.DEFAULT_TYPE);
-
+
Iterator it = profiles.iterator();
while (it.hasNext())
{
@@ -240,14 +247,17 @@ public class PdfAsObject implements PdfAs
final String profileDescription = settings.getSetting("sig_obj." + profileId + "." + SignatureTypes.SIG_DESCR, null);
boolean isDefault = (default_type != null && default_type.equals(profileId));
+
+ State state = State.fromString(settings.getSetting(SignatureTypes.TYPES + "." + profileId));
+
// modified by tknall
- SignatureProfileImpl signatureProfile = new SignatureProfileImpl(profileId, profileDescription, moaKeyIdentifier, isDefault);
+ SignatureProfileImpl signatureProfile = new SignatureProfileImpl(profileId, state, profileDescription, moaKeyIdentifier, isDefault);
// start - added by tknall
-
+
// signature entries relevant to the search algorithm
Properties signatureEntries = new Properties();
-
+
// search for table entries
String parentPropertyKey = "sig_obj." + profileId + ".table";
log.debug("Looking for subkeys of \"" + parentPropertyKey + "\".");
@@ -275,7 +285,7 @@ public class PdfAsObject implements PdfAs
}
}
}
-
+
// search for table entries
parentPropertyKey = "sig_obj." + profileId + ".key";
log.debug("Looking for subkeys of \"" + parentPropertyKey + "\".");
@@ -295,46 +305,89 @@ public class PdfAsObject implements PdfAs
}
}
}
-
+
// set properties
signatureProfile.setSignatureBlockEntries(signatureEntries);
// stop - added by tknall
-
+
profileInformation.add(signatureProfile);
}
return profileInformation;
}
- /**
- * @see at.gv.egiz.pdfas.api.PdfAs#sign(at.gv.egiz.pdfas.api.sign.SignParameters)
- */
- public SignResult sign(SignParameters signParameters) throws PdfAsException
+ public SignResult sign(SignParameters signParameters) throws PdfAsException {
+ // prepare log data
+ StatisticData sd = new StatisticData(signParameters);
+ StopWatch sw = new StopWatch();
+ try {
+ sw.start();
+ return performSign(signParameters);
+ } catch (PdfAsException e) {
+ sd.setException(e);
+ throw e;
+ } catch (RuntimeException e) {
+ sd.setException(e);
+ throw e;
+ } finally {
+ sw.stop();
+ sd.setDuration(sw.getTime());
+ statLog.log(sd);
+ }
+ }
+
+ private SignResult performSign(SignParameters signParameters) throws PdfAsException
{
CheckHelper.checkSignParameters(signParameters, false);
-
+
+ // make sure that the selected profile is allowed to be used for signature
+ SettingsReader settings = SettingsReader.getInstance();
+ if (!State.fromString(settings.getSetting(SignatureTypes.TYPES + "." + signParameters.getSignatureProfileId()))
+ .canSign()) {
+ throw new SignatureException(ErrorCode.SIGNATURE_PROFILE_IS_NOT_ALLOWED_FOR_SIGNATURE,
+ "The signature profile '" + signParameters.getSignatureProfileId()
+ + "' is not allowed to be used for signature.");
+ }
+
try {
- SignatureDetailInformation signatorInfo = prepareSign(signParameters);
-
- return sign(signParameters, signatorInfo);
-
+
+ SignatureDetailInformation signatorInfo = performPrepareSign(signParameters);
+ return performSign(signParameters, signatorInfo);
+
} catch (java.lang.OutOfMemoryError e) {
throw new OutOfMemoryException(ErrorCode.OUT_OF_MEMORY_ERROR, "Insufficient memory allocated to virtual machine. Start Java with parameters \"-Xms128m -Xmx786m -XX:MaxPermSize=256m\".", e);
}
}
- /**
- * @see at.gv.egiz.pdfas.api.PdfAs#verify(at.gv.egiz.pdfas.api.verify.VerifyParameters)
- */
- public VerifyResults verify(VerifyParameters verifyParameters) throws PdfAsException
+ public VerifyResults verify(VerifyParameters verifyParameters) throws PdfAsException {
+ // prepare log data
+ StatisticData sd = new StatisticData(verifyParameters);
+ StopWatch sw = new StopWatch();
+ try {
+ sw.start();
+ return performVerify(verifyParameters);
+ } catch (PdfAsException e) {
+ sd.setException(e);
+ throw e;
+ } catch (RuntimeException e) {
+ sd.setException(e);
+ throw e;
+ } finally {
+ sw.stop();
+ sd.setDuration(sw.getTime());
+ statLog.log(sd);
+ }
+ }
+
+ private VerifyResults performVerify(VerifyParameters verifyParameters) throws PdfAsException
{
CheckHelper.checkVerifyParameters(verifyParameters);
AnalyzeParameters ap = new AnalyzeParameters();
fillAnalyzeParametersWithVerifyParameters(ap, verifyParameters);
- AnalyzeResult analyzeResult = analyze(ap);
+ AnalyzeResult analyzeResult = performAnalyze(ap);
if (verifyParameters.getSignatureToVerify() != Constants.VERIFY_ALL)
{
@@ -352,17 +405,17 @@ public class PdfAsObject implements PdfAs
VerifyAfterAnalysisParameters vaap = new VerifyAfterAnalysisParameters();
vaap.setAnalyzeResult(analyzeResult);
fillVerifyAfterAnalysisParametersWithVerifyParameters(vaap, verifyParameters);
- VerifyResults res = verify(vaap);
-
+ VerifyResults res = performVerify(vaap);
+
return res;
-
+
}
-
+
/**
* Copies all adequate parameters from the {@link VerifyParameters} to the
* {@link AnalyzeParameters}.
- *
+ *
* @param ap
* The {@link AnalyzeParameters}.
* @param vp
@@ -385,7 +438,7 @@ public class PdfAsObject implements PdfAs
/**
* Copies all adequate parameters from the {@link VerifyParameters} to the
* {@link VerifyAfterAnalysisParameters}.
- *
+ *
* @param vaap
* The {@link VerifyAfterAnalysisParameters}.
* @param vp
@@ -406,10 +459,30 @@ public class PdfAsObject implements PdfAs
reconstructParams.setSignatureDevice(verifyAfterAnalysisParameters.getSignatureDevice());
}
- /**
- * @see at.gv.egiz.pdfas.api.PdfAs#analyze(at.gv.egiz.pdfas.api.analyze.AnalyzeParameters)
- */
- public AnalyzeResult analyze(AnalyzeParameters analyzeParameters) throws PdfAsException
+ public AnalyzeResult analyze(AnalyzeParameters analyzeParameters) throws PdfAsException {
+ // prepare log data
+ StatisticData sd = new StatisticData(analyzeParameters);
+ StopWatch sw = new StopWatch();
+ try {
+ sw.start();
+ return performAnalyze(analyzeParameters);
+ } catch (PdfAsException e) {
+ sd.setException(e);
+ throw e;
+ } catch (RuntimeException e) {
+ sd.setException(e);
+ throw e;
+ } finally {
+ sw.stop();
+ sd.setDuration(sw.getTime());
+ // only log in case of error
+ if (sd.isError()) {
+ statLog.log(sd);
+ }
+ }
+ }
+
+ private AnalyzeResult performAnalyze(AnalyzeParameters analyzeParameters) throws PdfAsException
{
CheckHelper.checkAnalyzeParameters(analyzeParameters);
@@ -429,10 +502,12 @@ public class PdfAsObject implements PdfAs
assumeOnlySB = false;
}
VerificationFilterParameters parameters = new VerificationFilterParametersImpl(binaryOnly, assumeOnlySB, parametersConfig.scanForOldSignatures());
-
+
at.gv.egiz.pdfas.framework.input.DataSource inputDataSource = null;
if (analyzeParameters.getDocument().getMimeType().equals("application/pdf"))
{
+ // check document permissions
+ PDFASUtils.createPdfReaderCheckingPermissions(analyzeParameters.getDocument());
inputDataSource = new PdfDataSourceAdapter(analyzeParameters.getDocument());
}
else
@@ -447,13 +522,13 @@ public class PdfAsObject implements PdfAs
}
}
assert inputDataSource != null;
-
+
try {
ExtractionStage es = new ExtractionStage();
DataSourceHolder dsh = new DataSourceHolder(inputDataSource);
List signature_holders = es.extractSignatureHolders(dsh, parameters);
-
-
+
+
// List sigInfs = new ArrayList(signature_holders.size());
List sigInfs = new ArrayList();
List noSigs = new ArrayList();
@@ -461,24 +536,24 @@ public class PdfAsObject implements PdfAs
while (it.hasNext())
{
SignatureHolder sh = (SignatureHolder)it.next();
-
+
if(sh instanceof NoSignatureHolder) {
noSigs.add(sh);
} else {
-
+
SignatureInformation si = new SignatureInformationAdapter(sh);
sigInfs.add(si);
- if (analyzeParameters.isReturnNonTextualObjects()) {
- si.setNonTextualObjects(doExtractNonTexualObjects(sh, (PdfDataSource) dsh.getDataSource()));
- }
-
+ if (analyzeParameters.isReturnNonTextualObjects()) {
+ si.setNonTextualObjects(doExtractNonTexualObjects(sh, (PdfDataSource) dsh.getDataSource()));
+ }
+
}
}
return new AnalyzeResultImpl(sigInfs, noSigs, parameters.hasBeenCorrected());
} catch (java.lang.OutOfMemoryError e) {
throw new OutOfMemoryException(ErrorCode.OUT_OF_MEMORY_ERROR, "Insufficient memory allocated to virtual machine. Start Java with parameters \"-Xms128m -Xmx786m -XX:MaxPermSize=256m\".", e);
}
-
+
}
private List doExtractNonTexualObjects(SignatureHolder sh, PdfDataSource pdfDataSource) {
@@ -499,30 +574,47 @@ public class PdfAsObject implements PdfAs
}
}
-/**
- * @see at.gv.egiz.pdfas.api.PdfAs#verify(at.gv.egiz.pdfas.api.verify.VerifyAfterAnalysisParameters)
- */
- public VerifyResults verify(VerifyAfterAnalysisParameters verifyAfterAnalysisParameters) throws PdfAsException
+ public VerifyResults verify(VerifyAfterAnalysisParameters verifyAfterAnalysisParameters) throws PdfAsException {
+ // prepare log data
+ StatisticData sd = new StatisticData(verifyAfterAnalysisParameters);
+ StopWatch sw = new StopWatch();
+ try {
+ sw.start();
+ return performVerify(verifyAfterAnalysisParameters);
+ } catch (PdfAsException e) {
+ sd.setException(e);
+ throw e;
+ } catch (RuntimeException e) {
+ sd.setException(e);
+ throw e;
+ } finally {
+ sw.stop();
+ sd.setDuration(sw.getTime());
+ statLog.log(sd);
+ }
+ }
+
+ private VerifyResults performVerify(VerifyAfterAnalysisParameters verifyAfterAnalysisParameters) throws PdfAsException
{
CheckHelper.checkVerifyAfterAnalysisParameters(verifyAfterAnalysisParameters);
List signatures = verifyAfterAnalysisParameters.getAnalyzeResult().getSignatures();
-
+
// added by tknall
if (signatures == null || signatures.isEmpty()) {
throw new PDFDocumentException(ErrorCode.DOCUMENT_NOT_SIGNED, "PDF document not signed."); //$NON-NLS-1$
}
-
+
ReconstructXMLDsigAfterAnalysisParameters rxaap = new ReconstructXMLDsigAfterAnalysisParameters();
fillReconstructXMLDsigAfterAnalysisParametersWithVerifyAfterAnalysisParameters(rxaap, verifyAfterAnalysisParameters);
- ReconstructXMLDsigResult reconstructResult = reconstructXMLDSIG(rxaap);
-
+ ReconstructXMLDsigResult reconstructResult = performReconstructXMLDSIG(rxaap);
+
VerifyAfterReconstructXMLDsigParameters varxp = new VerifyAfterReconstructXMLDsigParameters();
fillVerifyAfterReconstructXMLDsigParametersWithVerifyAfterAnalysisParameters(varxp, verifyAfterAnalysisParameters);
varxp.setReconstructXMLDsigResult(reconstructResult);
-
- return verify(varxp);
-
+
+ return performVerify(varxp);
+
}
protected void fillVerifyAfterReconstructXMLDsigParametersWithVerifyAfterAnalysisParameters(
@@ -534,31 +626,75 @@ public class PdfAsObject implements PdfAs
varxp.setVerifySignatureIndex(verifyAfterAnalysisParameters.getVerifySignatureIndex());
}
- /**
- * @see PdfAs#reconstructXMLDSIG(ReconstructXMLDsigParameters)
- */
public ReconstructXMLDsigResult reconstructXMLDSIG(
+ ReconstructXMLDsigParameters reconstructXMLDsigParameters)
+ throws PdfAsException {
+ // prepare log data
+ StatisticData sd = new StatisticData(reconstructXMLDsigParameters);
+ StopWatch sw = new StopWatch();
+ try {
+ sw.start();
+ return performReconstructXMLDSIG(reconstructXMLDsigParameters);
+ } catch (PdfAsException e) {
+ sd.setException(e);
+ throw e;
+ } catch (RuntimeException e) {
+ sd.setException(e);
+ throw e;
+ } finally {
+ sw.stop();
+ sd.setDuration(sw.getTime());
+ // only log in case of error
+ if (sd.isError()) {
+ statLog.log(sd);
+ }
+ }
+ }
+
+ private ReconstructXMLDsigResult performReconstructXMLDSIG(
ReconstructXMLDsigParameters reconstructXMLDsigParameters)
throws PdfAsException {
-
+
AnalyzeParameters analyzeParameters = new AnalyzeParameters();
fillAnalyzeParametersWithReconstructXMLDsigParameters(analyzeParameters, reconstructXMLDsigParameters);
- AnalyzeResult ar = analyze(analyzeParameters);
-
+ AnalyzeResult ar = performAnalyze(analyzeParameters);
+
ReconstructXMLDsigAfterAnalysisParameters rxaap = new ReconstructXMLDsigAfterAnalysisParameters();
rxaap.setSignatureDevice(reconstructXMLDsigParameters.getSignatureDevice());
rxaap.setAnalyzeResult(ar);
-
- return reconstructXMLDSIG(rxaap);
+
+ return performReconstructXMLDSIG(rxaap);
}
- /**
- * @see PdfAs#reconstructXMLDSIG(ReconstructXMLDsigAfterAnalysisParameters)
- */
public ReconstructXMLDsigResult reconstructXMLDSIG(
+ ReconstructXMLDsigAfterAnalysisParameters reconstructXMLDsigParameters)
+ throws PdfAsException {
+ // prepare log data
+ StatisticData sd = new StatisticData(reconstructXMLDsigParameters);
+ StopWatch sw = new StopWatch();
+ try {
+ sw.start();
+ return performReconstructXMLDSIG(reconstructXMLDsigParameters);
+ } catch (PdfAsException e) {
+ sd.setException(e);
+ throw e;
+ } catch (RuntimeException e) {
+ sd.setException(e);
+ throw e;
+ } finally {
+ sw.stop();
+ sd.setDuration(sw.getTime());
+ // only log in case of error
+ if (sd.isError()) {
+ statLog.log(sd);
+ }
+ }
+ }
+
+ private ReconstructXMLDsigResult performReconstructXMLDSIG(
ReconstructXMLDsigAfterAnalysisParameters reconstructXMLDsigParameters)
throws PdfAsException {
-
+
AnalyzeResult ar = reconstructXMLDsigParameters.getAnalyzeResult();
List extendedSignatureInfos = new Vector();
for (int i = 0; i < ar.getSignatures().size(); i++)
@@ -572,31 +708,52 @@ public class PdfAsObject implements PdfAs
// don't care for connector exceptions because of mutli signs. they are handled during verify
extendedSignatureInfos.add(new ExtendedSignatureInformation(si, null));
}
-
+
}
return new ReconstructXMLDsigResult(extendedSignatureInfos, reconstructXMLDsigParameters.getSignatureDevice());
}
+ public VerifyResults verify(VerifyAfterReconstructXMLDsigParameters verifyAfterReconstructXMLDsigParameters)
+ throws PdfAsException {
+ // prepare log data
+ StatisticData sd = new StatisticData(verifyAfterReconstructXMLDsigParameters);
+ StopWatch sw = new StopWatch();
+ try {
+ sw.start();
+ return performVerify(verifyAfterReconstructXMLDsigParameters);
+ } catch (PdfAsException e) {
+ sd.setException(e);
+ throw e;
+ } catch (RuntimeException e) {
+ sd.setException(e);
+ throw e;
+ } finally {
+ sw.stop();
+ sd.setDuration(sw.getTime());
+ statLog.log(sd);
+ }
+ }
+
/**
* @see PdfAs#verify(VerifyAfterReconstructXMLDsigParameters)
*/
- public VerifyResults verify(
+ private VerifyResults performVerify(
VerifyAfterReconstructXMLDsigParameters verifyAfterReconstructXMLDsigParameters)
throws PdfAsException {
-
+
try {
List extSignatures = verifyAfterReconstructXMLDsigParameters.getReconstructXMLDsigResult().getExtendedSignatures();
String signatureDevice = verifyAfterReconstructXMLDsigParameters.getSignatureDevice();
if (signatureDevice == null){
signatureDevice = verifyAfterReconstructXMLDsigParameters.getReconstructXMLDsigResult().getDevice();
}
- List results = PdfAS.verifyExtendedSignatureHolders(extSignatures,
- signatureDevice,
- verifyAfterReconstructXMLDsigParameters.isReturnHashInputData(),
+ List results = PdfAS.verifyExtendedSignatureHolders(extSignatures,
+ signatureDevice,
+ verifyAfterReconstructXMLDsigParameters.isReturnHashInputData(),
verifyAfterReconstructXMLDsigParameters.getVerificationTime(), verifyAfterReconstructXMLDsigParameters.getVerifySignatureIndex());
-
+
List vrs = new ArrayList(results.size());
-
+
int verifySignatureIndex = verifyAfterReconstructXMLDsigParameters.getVerifySignatureIndex();
if (verifySignatureIndex < 0)
{
@@ -605,23 +762,23 @@ public class PdfAsObject implements PdfAs
SignatureResponse response = (SignatureResponse) results.get(i);
ExtendedSignatureInformation extSigInfo = (ExtendedSignatureInformation)extSignatures.get(i);
SignatureHolder holder = (SignatureHolder) extSigInfo.getSignatureInformation().getInternalSignatureInformation();
-
+
VerifyResult vr = new VerifyResultAdapter(response, holder, verifyAfterReconstructXMLDsigParameters.getVerificationTime(), extSigInfo.getXmlDsigData());
vr.setNonTextualObjects( extSigInfo.getSignatureInformation().getNonTextualObjects());
-
+
vrs.add(vr);
}
}else{
SignatureResponse response = (SignatureResponse) results.get(0);
ExtendedSignatureInformation extSigInfo = (ExtendedSignatureInformation)extSignatures.get(verifySignatureIndex);
SignatureHolder holder = (SignatureHolder) extSigInfo.getSignatureInformation().getInternalSignatureInformation();
-
+
VerifyResult vr = new VerifyResultAdapter(response, holder, verifyAfterReconstructXMLDsigParameters.getVerificationTime(), extSigInfo.getXmlDsigData());
vr.setNonTextualObjects( extSigInfo.getSignatureInformation().getNonTextualObjects());
-
+
vrs.add(vr);
}
-
+
VerifyResultsImpl verifyResults = new VerifyResultsImpl(vrs);
return verifyResults;
} catch (java.lang.OutOfMemoryError e) {
@@ -632,7 +789,7 @@ public class PdfAsObject implements PdfAs
public DynamicSignatureProfile createDynamicSignatureProfile(String parentProfile, DynamicSignatureLifetimeEnum mode) {
return DynamicSignatureProfileImpl.createFromParent(null, parentProfile, mode);
}
-
+
public DynamicSignatureProfile createEmptyDynamicSignatureProfile(DynamicSignatureLifetimeEnum mode) {
return DynamicSignatureProfileImpl.createEmptyProfile(null, mode);
}
@@ -648,19 +805,44 @@ public class PdfAsObject implements PdfAs
public DynamicSignatureProfile createEmptyDynamicSignatureProfile(String myUniqueName,
DynamicSignatureLifetimeEnum mode) {
- return DynamicSignatureProfileImpl.createEmptyProfile(myUniqueName, mode);
+ return DynamicSignatureProfileImpl.createEmptyProfile(myUniqueName, mode);
+ }
+
+ public SignatureDetailInformation prepareSign(SignParameters signParameters) throws PdfAsException {
+ // prepare log data
+ StatisticData sd = new StatisticData(signParameters);
+ StopWatch sw = new StopWatch();
+ try {
+ sw.start();
+ return performPrepareSign(signParameters);
+ } catch (PdfAsException e) {
+ sd.setException(e);
+ throw e;
+ } catch (RuntimeException e) {
+ sd.setException(e);
+ throw e;
+ } finally {
+ sw.stop();
+ sd.setDuration(sw.getTime());
+ // only log in case of error
+ if (sd.isError()) {
+ statLog.log(sd);
+ }
+ }
}
/**
* @see PdfAs#prepareSign(SignParameters)
*/
- public SignatureDetailInformation prepareSign(SignParameters signParameters) throws PdfAsException {
+ private SignatureDetailInformation performPrepareSign(SignParameters signParameters) throws PdfAsException {
CheckHelper.checkSignParameters(signParameters, true);
-
+
if (signParameters.getProfileOverrideProperties() != null) {
OverridePropertyHolder.setOverrideProps(signParameters.getProfileOverrideProperties());
}
+ PDFASUtils.createPdfReaderCheckingPermissions(signParameters.getDocument());
+
signParameters.setDocument(PdfAS.applyStrictMode(signParameters.getDocument()));
SettingsReader settings = SettingsReader.getInstance();
@@ -730,29 +912,29 @@ public class PdfAsObject implements PdfAs
} else if (fromConfig) {
arguments[0] = "width defined by the profile " + signParameters.getSignatureProfileId();
}
- log.warn(MessageFormat.format(msg, arguments));
+ log.warn(MessageFormat.format(msg, (Object[]) arguments));
}
}
-
+
Signator signator = createSignator(signParameters.getSignatureType());
SignatorInformation signatorInfo = signator.prepareSign(
- new PdfDataSourceAdapter(signParameters.getDocument()),
- signParameters.getSignatureProfileId(),
- pos,
+ new PdfDataSourceAdapter(signParameters.getDocument()),
+ signParameters.getSignatureProfileId(),
+ pos,
signParameters.getTimeStamperImpl());
-
+
SignatureDetailInformationImpl ret = new SignatureDetailInformationImpl();
ret.setSignatorInformation(signatorInfo);
return ret;
}
-
+
private SignaturePlaceholderData getSignaturePlaceholder(SignParameters signParameters,
String defaultProfile) throws SettingsException, PDFDocumentException, PlaceholderExtractionException {
SignaturePlaceholderData spd = null;
SignaturePlaceholderContext.setSignaturePlaceholderData(null);
-
+
SettingsReader settings = SettingsReader.getInstance();
// check sig_obj.PROFILEID.enable_placeholder_search
@@ -766,15 +948,15 @@ public class PdfAsObject implements PdfAs
// check global enable_placeholder_search
configFileActivedString = settings.getValueFromKey(ENABLE_PLACEHOLDER_SEARCH_KEY);
}
-
+
Boolean configFileActived = null;
if (configFileActivedString != null)
configFileActived = Boolean.valueOf(configFileActivedString);
Boolean signParamsActivated = signParameters.isCheckForPlaceholder();
-
+
boolean enableSearch;
-
+
if (signParamsActivated != null)
{
enableSearch = signParamsActivated.booleanValue();
@@ -788,8 +970,8 @@ public class PdfAsObject implements PdfAs
if (enableSearch)
{
spd = SignaturePlaceholderExtractor.extract(
- signParameters.getDocument().createInputStream(),
- signParameters.getPlaceholderId(),
+ signParameters.getDocument().createInputStream(),
+ signParameters.getPlaceholderId(),
signParameters.getPlaceholderMatchMode());
}
return spd;
@@ -809,15 +991,36 @@ public class PdfAsObject implements PdfAs
{
signatorId = SignatorFactory.MOST_RECENT_DETACHEDTEXT_SIGNATOR_ID;
}
-
+
return at.gv.egiz.pdfas.framework.SignatorFactory.createSignator(signatorId);
}
- public SignResult sign(SignParameters signParameters, SignatureDetailInformation signatorInfo)
+ public SignResult sign(SignParameters signParameters, SignatureDetailInformation signatorInfo)
+ throws PdfAsException {
+ // prepare log data
+ StatisticData sd = new StatisticData(signParameters);
+ StopWatch sw = new StopWatch();
+ try {
+ sw.start();
+ return performSign(signParameters, signatorInfo);
+ } catch (PdfAsException e) {
+ sd.setException(e);
+ throw e;
+ } catch (RuntimeException e) {
+ sd.setException(e);
+ throw e;
+ } finally {
+ sw.stop();
+ sd.setDuration(sw.getTime());
+ statLog.log(sd);
+ }
+ }
+
+ private SignResult performSign(SignParameters signParameters, SignatureDetailInformation signatorInfo)
throws PdfAsException {
CheckHelper.checkSignParametersForSignAfterPrepare(signParameters, false);
-
+
if (signParameters.getProfileOverrideProperties() != null) {
OverridePropertyHolder.setOverrideProps(signParameters.getProfileOverrideProperties());
}
@@ -832,34 +1035,34 @@ public class PdfAsObject implements PdfAs
SignatureData sd = new SignatureDataImpl(new PdfDataSourceAdapter(signatorInfo.getSignatureData()), signatorInfo.getSignatureData().getMimeType());
SignSignatureObject sso = PdfAS.sign(sd, c, signParameters.getTimeStamperImpl());
((SignatureDetailInformationImpl)signatorInfo).setSignSignatureObject(sso);
-
+
return finishSign(signParameters, signatorInfo);
}
- public SignResult finishSign(SignParameters signParameters, SignatureDetailInformation signatureDetailInformation)
+ public SignResult finishSign(SignParameters signParameters, SignatureDetailInformation signatureDetailInformation)
throws PdfAsException {
try {
CheckHelper.checkSignParametersForSignAfterPrepare(signParameters, true);
CheckHelper.checkSignatureDetailInformation(signatureDetailInformation);
-
+
if (signParameters.getProfileOverrideProperties() != null) {
OverridePropertyHolder.setOverrideProps(signParameters.getProfileOverrideProperties());
}
-
+
Signator signator = createSignator(signParameters.getSignatureType());
SignatorInformation signatorInfo = ((SignatureDetailInformationImpl)signatureDetailInformation).getSignatorInfo();
signator.finishSign(signatorInfo, new DataSinkAdapter(signParameters.getOutput()));
return new SignResultImpl(
- signParameters.getOutput(),
+ signParameters.getOutput(),
signatorInfo.getSignSignatureObject().getX509Certificate(),
- new ActualSignaturePositionAdapter(signatorInfo.getActualTablePos()),
+ new ActualSignaturePositionAdapter(signatorInfo.getActualTablePos()),
signatorInfo.getNonTextualObjects());
} finally {
OverridePropertyHolder.removeProperties();
DynamicSignatureProfileImpl.disposeLocalProfile();
}
}
-
+
}
diff --git a/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/impl/api/commons/DataSinkAdapter.java b/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/impl/api/commons/DataSinkAdapter.java
index 2aee44f..b91d5a9 100644
--- a/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/impl/api/commons/DataSinkAdapter.java
+++ b/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/impl/api/commons/DataSinkAdapter.java
@@ -30,7 +30,7 @@ import at.gv.egiz.pdfas.api.io.DataSink;
/**
* Adapter that converts an API DataSink to a framework DataSink.
- *
+ *
* @author wprinz
*/
public class DataSinkAdapter implements at.gv.egiz.pdfas.framework.output.DataSink
@@ -42,7 +42,7 @@ public class DataSinkAdapter implements at.gv.egiz.pdfas.framework.output.DataSi
/**
* Constructor.
- *
+ *
* @param apiDataSink
* The API DataSink to be adapted to a framework DataSink.
*/
@@ -62,7 +62,6 @@ public class DataSinkAdapter implements at.gv.egiz.pdfas.framework.output.DataSi
}
catch (IOException e)
{
- e.printStackTrace();
throw new RuntimeException(e);
}
}
@@ -79,7 +78,6 @@ public class DataSinkAdapter implements at.gv.egiz.pdfas.framework.output.DataSi
}
catch (IOException e)
{
- e.printStackTrace();
throw new RuntimeException(e);
}
}
diff --git a/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/impl/api/commons/SignatureProfileImpl.java b/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/impl/api/commons/SignatureProfileImpl.java
index 35d8c17..1df1a65 100644
--- a/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/impl/api/commons/SignatureProfileImpl.java
+++ b/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/impl/api/commons/SignatureProfileImpl.java
@@ -28,6 +28,7 @@ import java.util.Properties;
import org.apache.commons.lang.builder.ToStringBuilder;
import at.gv.egiz.pdfas.api.commons.SignatureProfile;
+import at.knowcenter.wag.egov.egiz.sig.SignatureTypes.State;
/**
* Holds the data of a signature profile.
@@ -61,6 +62,13 @@ public class SignatureProfileImpl implements SignatureProfile {
* true if this is the default profile, false otherwise.
*/
protected boolean defaultProfile = false;
+
+ /**
+ * The state of the signature profile. Signature profiles may be disabled (OFF), allowed for signature only
+ * (SIGN_ONLY), allowed for verification only (VERIFY_ONLY) or just enabled (ON).
+ * Default value here of ON in order to assure backward compatibility.
+ */
+ private State state = State.ON;
/**
* Constructor.
@@ -88,14 +96,26 @@ public class SignatureProfileImpl implements SignatureProfile {
* @param isDefault
*/
public SignatureProfileImpl(String profileId, String profileDescription, String moaKeyIdentifier, boolean isDefault) {
- this.profileId = profileId;
- this.moaKeyIdentifier = moaKeyIdentifier;
- this.profileDescription = profileDescription;
- this.signatureBlockEntries = new Properties();
- this.defaultProfile = isDefault;
+ this(profileId, moaKeyIdentifier);
+ this.profileDescription = profileDescription;
+ this.defaultProfile = isDefault;
}
/**
+ * Creates a new signature profile instance.
+ * @param profileId The profile identifier.
+ * @param state The profile's state.
+ * @param profileDescription The profile description.
+ * @param moaKeyIdentifier The MOA-SS key identifier.
+ * @param isDefault {@code true} if this is a default profile, {@code false} if not.
+ */
+ public SignatureProfileImpl(String profileId, State state, String profileDescription, String moaKeyIdentifier, boolean isDefault) {
+ this(profileId, profileDescription, moaKeyIdentifier, isDefault);
+ this.state = state;
+ }
+
+
+ /**
* @see at.gv.egiz.pdfas.api.commons.SignatureProfile#getProfileId()
*/
public String getProfileId() {
@@ -140,19 +160,22 @@ public class SignatureProfileImpl implements SignatureProfile {
return this.profileDescription;
}
- public String toString() {
- return new ToStringBuilder(this)
- .append("profileId", this.profileId)
- .append("profileDescription", this.profileDescription)
- .append("moaKeyIdentifier", this.moaKeyIdentifier)
- .toString();
- }
+ @Override
+ public String toString() {
+ return "SignatureProfileImpl [profileId=" + profileId + ", state=" + state + ", profileDescription="
+ + profileDescription + ", moaKeyIdentifier=" + moaKeyIdentifier + ", defaultProfile=" + defaultProfile
+ + "]";
+ }
- /**
+/**
*
*/
public boolean isDefault() {
return this.defaultProfile;
}
+ public State getState() {
+ return state;
+ }
+
}
diff --git a/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/impl/input/correction/InternalCorrector.java b/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/impl/input/correction/InternalCorrector.java
index eaa6b7f..b193936 100644
--- a/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/impl/input/correction/InternalCorrector.java
+++ b/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/impl/input/correction/InternalCorrector.java
@@ -26,6 +26,7 @@ package at.gv.egiz.pdfas.impl.input.correction;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
+import at.gv.egiz.pdfas.api.io.DataSource;
import at.gv.egiz.pdfas.exceptions.ErrorCode;
import at.gv.egiz.pdfas.exceptions.framework.CorrectorException;
import at.gv.egiz.pdfas.framework.input.PdfDataSource;
@@ -40,7 +41,7 @@ import com.lowagie.text.pdf.PdfStamper;
/**
* Corrects a document using iText.
- *
+ *
* @author wprinz
*/
public class InternalCorrector implements Corrector
@@ -53,11 +54,9 @@ public class InternalCorrector implements Corrector
{
try
{
- byte[] pdf = document.getAsByteArray();
- PdfReader reader = new PdfReader(pdf);
- PDFASUtils.checkReaderPermissions(reader);
+ PdfReader reader = PDFASUtils.createPdfReaderCheckingPermissions(document);
- ByteArrayOutputStream baos = new ByteArrayOutputStream(pdf.length);
+ ByteArrayOutputStream baos = new ByteArrayOutputStream(document.getLength());
PdfStamper stamper = new PdfStamper(reader, baos, '\0', false);
stamper.close();
diff --git a/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/impl/signator/binary/BinarySignator_1_0_0.java b/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/impl/signator/binary/BinarySignator_1_0_0.java
index 0af6538..a3ff856 100644
--- a/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/impl/signator/binary/BinarySignator_1_0_0.java
+++ b/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/impl/signator/binary/BinarySignator_1_0_0.java
@@ -83,7 +83,7 @@ import com.lowagie.text.pdf.PdfPTable;
/**
* Signs the document binary.
- *
+ *
* <p>
* In prepareSign, an Incremental Update is created that contains the Signature block and the egiz dictionary. For
* formatting the layout, variable values are filled with placeholders. After the layout has been fixed, all variable
@@ -92,7 +92,7 @@ import com.lowagie.text.pdf.PdfPTable;
* <p>
* In finishSign, the variable fields (values, /Cert) are replaced with the values according to the encoding.
* </p>
- *
+ *
* @author wprinz
*/
public class BinarySignator_1_0_0 implements Signator {
@@ -204,13 +204,19 @@ public class BinarySignator_1_0_0 implements Signator {
// on a new page, prevent pdf-as to do that, because why should make
// a new page just for an invisible block
// added by rpiazzi
+
+ // disabled by dti: code fixes certain cases with invisible signatures but prevents usage of minimal
+ // signature profiles; the actual invisible signature issue has fixed in method
+ // adjustSignatureTableandCalculatePosition(...) in class at.knowcenter.wag.egov.egiz.PdfAS
+ /*
if (signature_object.getSignatureTypeDefinition().getInvisibleFieldDefinitions().size() == SignatureTypes.REQUIRED_SIG_KEYS.length) {
if (pi.isMakeNewPage()) {
int pageNumber = pi.getPage();
pi = new PositioningInstruction(false, pageNumber - 1, 0, 0);
}
}
- // end added
+ */
+ // end added (rpiazzi)
IncrementalUpdateInformation iui = IncrementalUpdateHelper.writeIncrementalUpdate(pdfDataSource, pdf_table,
profile, pi, variable_field_definitions, all_field_definitions, invisible_field_definitions,
@@ -318,7 +324,7 @@ public class BinarySignator_1_0_0 implements Signator {
/**
* Reads the signature values from the signed signature object and fills the corresponding value in the Replaces
* array.
- *
+ *
* @param iui
* The IncrementalUpdateInformation.
*/
@@ -394,7 +400,7 @@ public class BinarySignator_1_0_0 implements Signator {
/**
* Forms the SignatureData to be used for signing.
- *
+ *
* @param iui
* The IncrementalUpdateInformation.
* @return Returns the SignatureData to be used for signing.
diff --git a/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/impl/signator/detached/DetachedTextualSignator_1_0_0.java b/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/impl/signator/detached/DetachedTextualSignator_1_0_0.java
index 7fcdb2a..16e2718 100644
--- a/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/impl/signator/detached/DetachedTextualSignator_1_0_0.java
+++ b/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/impl/signator/detached/DetachedTextualSignator_1_0_0.java
@@ -41,7 +41,7 @@ import at.knowcenter.wag.egov.egiz.sig.connectors.bku.BKUPostConnection;
/**
* Signs a document textually.
- *
+ *
* <p>
* In prepareSign, the document text is extracted and normalized.
* </p>
@@ -49,7 +49,7 @@ import at.knowcenter.wag.egov.egiz.sig.connectors.bku.BKUPostConnection;
* In finishSign, the signed SignatureObject is transformed into a Signature
* block, which is then written as an Incremental Update.
* </p>
- *
+ *
* @author wprinz
*/
public class DetachedTextualSignator_1_0_0 extends TextualSignator_1_0_0
@@ -93,7 +93,7 @@ public class DetachedTextualSignator_1_0_0 extends TextualSignator_1_0_0
// String document_text =
// PdfAS.extractNormalizedTextTextual(pdf.createInputStream());
// // logger_.debug("signed_text = " + document_text);
- //
+ //
// DataSource ds = new TextDataSourceImpl(document_text);
// iui.signature_data = new SignatureDataImpl(ds, MIME_TYPE, "UTF-8");
// //$NON-NLS-1$ //$NON-NLS-2$
@@ -119,7 +119,6 @@ public class DetachedTextualSignator_1_0_0 extends TextualSignator_1_0_0
// }
// catch (UnsupportedEncodingException e)
// {
- // e.printStackTrace();
// throw new PDFDocumentException(300, e);
// }
// }
diff --git a/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/impl/vfilter/VerificationFilterImpl.java b/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/impl/vfilter/VerificationFilterImpl.java
index 3f0f482..0e0da78 100644
--- a/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/impl/vfilter/VerificationFilterImpl.java
+++ b/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/impl/vfilter/VerificationFilterImpl.java
@@ -80,7 +80,7 @@ public class VerificationFilterImpl implements VerificationFilter
public static final String SUPRESS_EXCEPTION_WHEN_LAST_UIBLOCK_IS_NO_SIGNATURE = "supress_exception_when_last_iublock_is_no_signature";
public static final String BINARY_ONLY = "binary_only";
public static final String ASSUME_ONLY_SIGNATURE_BLOCKS = "assume_only_signature_blocks";
-
+
/**
* @see at.gv.egiz.pdfas.framework.vfilter.VerificationFilter#extractSignatureHolders(at.gv.egiz.pdfas.framework.input.PdfDataSource,
* java.util.List,
@@ -97,7 +97,7 @@ public class VerificationFilterImpl implements VerificationFilter
log.debug("Original IU blocks: " + blocks.size());
debugIUBlocks(blocks);
}
-
+
unrollLinearization(blocks);
if (log.isDebugEnabled())
@@ -106,7 +106,7 @@ public class VerificationFilterImpl implements VerificationFilter
debugIUBlocks(blocks);
}
-
+
SettingsReader settings;
try {
settings = SettingsReader.getInstance();
@@ -115,7 +115,7 @@ public class VerificationFilterImpl implements VerificationFilter
}
String check_doc = settings.getSetting(CHECK_DOCUMENT, "false");
- // check document for textual sigs here here if binary_only is set
+ // check document for textual sigs here here if binary_only is set
if ("true".equalsIgnoreCase(check_doc) &&
parameters.extractBinarySignaturesOnly()) {
@@ -125,7 +125,7 @@ public class VerificationFilterImpl implements VerificationFilter
log.debug("Skipping checkDocument for textual sigs.");
}
// end add
-
+
List signatureHolderChain = null;
if (parameters.extractBinarySignaturesOnly())
@@ -156,11 +156,11 @@ public class VerificationFilterImpl implements VerificationFilter
}
}
-
+
log.trace("extractSignaturHolders finished (" + (signatureHolderChain != null ? signatureHolderChain.size() : 0) + " elements).");
sw.stop();
log.debug("extractSignatureHolders: " + sw.getTime() + "ms.");
-
+
return signatureHolderChain;
}
@@ -194,12 +194,12 @@ public class VerificationFilterImpl implements VerificationFilter
foundSignatures = extractNewSignaturesFromText(normalizedText);
}
-
+
List textOnlySignatures = filterOutBinarySignatures(foundSignatures);
-
+
return textOnlySignatures;
}
-
+
protected String normalizeText(String freetext) throws VerificationFilterException
{
try
@@ -214,7 +214,7 @@ public class VerificationFilterImpl implements VerificationFilter
/**
* Removes the linearization footer from the list of update blocks.
- *
+ *
* @param blocks
* The list of FooterParseResult objects in \prev order.
*/
@@ -263,15 +263,15 @@ public class VerificationFilterImpl implements VerificationFilter
if (sao.oldSignature != null)
{
extractedSignatures.add(0, sao.oldSignature);
- }
+ }
}
else
{
log.debug("extracting signatures from last partition...");
extractedSignatures = extractSignaturesFromPartition(pdf, lastTextPartition);
}
-
-
+
+
List signatureHolderChain = intermingleSignatures(binarySignatures, extractedSignatures);
return signatureHolderChain;
@@ -287,15 +287,15 @@ public class VerificationFilterImpl implements VerificationFilter
Set binarySigValues = new HashSet();
Iterator iterator = binarySignatures.iterator();
while(iterator.hasNext()) {
-
+
SignatureHolder sh = (SignatureHolder)iterator.next();
-
+
String sigVal = sh.getSignatureObject().getSignationValue();
binarySigValues.add(sigVal);
}
-
+
SignatureHolder oldSignature = null;
-
+
//List originalPartitions = partitions;
// This gives every IU block an own text partition
// This allows text signatures to be found correctly if there are
@@ -313,36 +313,36 @@ public class VerificationFilterImpl implements VerificationFilter
}
String check_doc = settings.getSetting(CHECK_DOCUMENT, "false");
boolean supressException = "true".equalsIgnoreCase(settings.getSetting(SUPRESS_EXCEPTION_WHEN_LAST_UIBLOCK_IS_NO_SIGNATURE, "false"));
-
+
// flag indicating that the last IU-block of the document is a non-signature IU-block
boolean lastBlockWasModified = false;
-
+
// counter of all signatures (textual and binary) of this document
int signatureCounter = 0;
-
+
// counter of all textual signatures in this document
int txtSigsSoFar = 0;
-
+
// counter of all textual signatures in the current partition
int txtSigsThisPartition = 0;
-
+
List partitionResults = new ArrayList(partitions.size());
- List nshList = new ArrayList();
-
+ List nshList = new ArrayList();
+
boolean sigFound = false;
-
+
for (int i = 0; i < partitions.size(); i++)
{
Partition p = (Partition) partitions.get(i);
-
+
// updating flag and counter
boolean partitionContainsNewTextSignatures = true;
txtSigsSoFar = txtSigsThisPartition;
-
+
if (p instanceof TextPartition)
{
TextPartition tp = (TextPartition) p;
-
+
List partitionResult = null;
boolean scanThisPartitionForOldSignature = (i == 0) && scanForOldSignatures;
@@ -356,34 +356,34 @@ public class VerificationFilterImpl implements VerificationFilter
{
partitionResult = extractSignaturesFromPartition(pdf, tp);
}
-
- // binary signature blocks that have been detected as well are identified by comparing their signature values
+
+ // binary signature blocks that have been detected as well are identified by comparing their signature values
// with those stored in our Set above and are not considered for our IU-check
List onlyTextSignatures = new ArrayList();
Iterator iter = partitionResult.iterator();
while(iter.hasNext()) {
-
+
SignatureHolder sh = (SignatureHolder)iter.next();
if(!binarySigValues.contains(sh.getSignatureObject().getSignationValue())) {
-
+
onlyTextSignatures.add(sh);
}
}
-
+
// update signature counters
txtSigsThisPartition = onlyTextSignatures.size();
int newTextSignatures = txtSigsThisPartition - txtSigsSoFar;
signatureCounter = signatureCounter + newTextSignatures;
-
+
// update sigFound flag
if(txtSigsThisPartition > 0) {
-
+
sigFound = true;
}
-
+
// TextPartition is only valid, if at least one more text signature has been found than in the previous text partition
if(!(newTextSignatures > 0)) {
-
+
partitionContainsNewTextSignatures = false;
}
@@ -391,39 +391,39 @@ public class VerificationFilterImpl implements VerificationFilter
} else {
// should be binary partition
if(p instanceof BinaryPartition) {
-
+
BinaryPartition binpart = (BinaryPartition)p;
// updating counter and flag
signatureCounter = signatureCounter + binpart.blocks.size();
sigFound = true;
-
+
}
}
-
+
// if document checking is enabled, at least one signature has been found so far, we are dealing with a
// non-signature IU-block
if ((check_doc.equalsIgnoreCase("true"))&& (sigFound && !partitionContainsNewTextSignatures)) {
-
- nshList.add(new NoSignatureHolder(signatureCounter));
+
+ nshList.add(new NoSignatureHolder(signatureCounter));
lastBlockWasModified = true;
-
+
} else {
-
+
lastBlockWasModified = false;
}
-
+
}
// throw an exception if the last update block does not contain a signature and signatures have been found in this document
if (lastBlockWasModified) {
if (!supressException) {
- throw new VerificationFilterException(ErrorCode.MODIFIED_AFTER_SIGNATION, "The document has been modified after being signed.");
+ throw new VerificationFilterException(ErrorCode.MODIFIED_AFTER_SIGNATION, "The document has been modified after being signed.");
} else {
log.debug("The document has been modified after being signed. According to the configuration, no exception is thrown.");
}
}
-
+
List extractedSignatures = new ArrayList();
Iterator it = partitionResults.iterator();
List prevPartitionResult = null;
@@ -451,54 +451,54 @@ public class VerificationFilterImpl implements VerificationFilter
}
List signatureHolderChain = intermingleSignatures(binarySignatures, extractedSignatures);
-
+
if (oldSignature != null)
{
signatureHolderChain.add(0, oldSignature);
}
-
+
// add the created NoSignatureHolders
signatureHolderChain.addAll(nshList);
-
+
return signatureHolderChain;
}
-
+
private void mergeSignatures(List oldList, List newList, List result) {
-
+
for(int i=0; i < newList.size(); i++) {
-
+
SignatureHolder currentNewSh = (SignatureHolder)newList.get(i);
-
+
boolean shAlreadyPresentInOldList = false;
int pos = -1;
-
+
for(int j=0; j<oldList.size(); j++) {
-
+
SignatureHolder currentOldSh = (SignatureHolder)oldList.get(j);
-
+
if(currentNewSh.getSignatureObject().getSignationValue().equals(currentOldSh.getSignatureObject().getSignationValue())) {
-
+
shAlreadyPresentInOldList = true;
pos = j;
}
}
-
+
if(!shAlreadyPresentInOldList) {
-
+
// signature holder has not been found earlier -> add
result.add(currentNewSh);
}
-
+
}
-
-
+
+
return;
}
-
-
+
+
protected List flattenOutTextPartitions (List partitions, List blocks)
{
-
+
List blockPartitions = new ArrayList(blocks.size());
Iterator it = partitions.iterator();
while (it.hasNext())
@@ -523,10 +523,10 @@ public class VerificationFilterImpl implements VerificationFilter
blockPartitions.add(p);
}
}
-
+
// note: successive binary blocks are still combined to one binary partition
assert blockPartitions.size() <= blocks.size();
-
+
return blockPartitions;
}
@@ -536,15 +536,15 @@ public class VerificationFilterImpl implements VerificationFilter
protected String extractText(PdfDataSource pdf, int endOfDocument, String encoding) throws PresentableException
{
-
+
log.debug("EXTRACTING TEXT (" + encoding + ")... end index = " + endOfDocument);
-
+
DelimitedPdfDataSource dds = new DelimitedPdfDataSource(pdf, endOfDocument);
//DelimitedInputStream dis = new DelimitedInputStream(pdf.createInputStream(), endOfDocument);
return PdfAS.extractNormalizedTextTextual(dds, encoding);
}
-
-
+
+
protected List extractNewSignaturesFromText(String text) throws VerificationFilterException
{
try
@@ -556,7 +556,7 @@ public class VerificationFilterImpl implements VerificationFilter
throw new VerificationFilterException(e);
}
}
-
+
protected List extractNewAndOldSignaturesFromText(String text) throws VerificationFilterException
{
SignaturesAndOld sao = extractSignaturesAndOld(text);
@@ -651,11 +651,11 @@ public class VerificationFilterImpl implements VerificationFilter
/**
* Extracts the binary singatures from the given PDF.
- *
+ *
* <p>
* IU blocks without an egiz dict are not considered.
* </p>
- *
+ *
* @param pdf
* @param blocks
* @return Returns the List of signature holders.
@@ -673,7 +673,7 @@ public class VerificationFilterImpl implements VerificationFilter
String binary_only = settings.getSetting(BINARY_ONLY, "false");
String assume_sigs_only = settings.getSetting(ASSUME_ONLY_SIGNATURE_BLOCKS, "false");
boolean supressException = "true".equalsIgnoreCase(settings.getSetting(SUPRESS_EXCEPTION_WHEN_LAST_UIBLOCK_IS_NO_SIGNATURE, "false"));
-
+
try
{
// PERF: extract binary signatures needs byte array
@@ -689,15 +689,15 @@ public class VerificationFilterImpl implements VerificationFilter
FooterParseResult fpr = (FooterParseResult) it.next();
assert fpr.next_index > prev_end;
- if (VerificationFilterBinaryHelper.containsEGIZDict(data, fpr))
+ PdfASID kz = null;
+ if (VerificationFilterBinaryHelper.containsEGIZDict(data, fpr) &&
+ (kz = VerificationFilterBinaryHelper.extractKZFromEGIZBlock(data, fpr)) != null)
{
- PdfASID kz = VerificationFilterBinaryHelper.extractKZFromEGIZBlock(data, fpr);
-
// TODO dferbas hack baik test
//kz = new PdfASID("urn:pdfsigfilter:bka.gv.at:binaer:v1.1.0");
-
+
Verificator verificator = VerificatorFactory.createBinaryVerificator(kz);
- List binary_holders = verificator.parseBlock(pdf, data, fpr, prev_end);
+ List binary_holders = verificator.parseBlock(pdf, data, fpr, prev_end);
binarySignatures.addAll(binary_holders);
if(binary_holders.size() > 0) {
@@ -707,21 +707,21 @@ public class VerificationFilterImpl implements VerificationFilter
// an Exception is thrown here if:
// 1) check_document is activated
// 2) assume_only_signature_blocks is false - otherwise we permit updates
- // 3) binary_only is true - otherwise updates are handled in method performFullConservative().
- // when binary-only is true, we can be sure that a block that contains no egiz-dict is no textual
+ // 3) binary_only is true - otherwise updates are handled in method performFullConservative().
+ // when binary-only is true, we can be sure that a block that contains no egiz-dict is no textual
// signature either but an illegal update, otherwise an Exception (doc contains textual sig) would have been thrown before
// 4) a binary signature has been detected in a previous block
- if(check_doc.equalsIgnoreCase("true") &&
+ if(check_doc.equalsIgnoreCase("true") &&
binary_only.equalsIgnoreCase("true") &&
assume_sigs_only.equalsIgnoreCase("false") &&
- sig_detected) {
-
+ sig_detected) {
+
if (!supressException) {
- throw new VerificationFilterException(ErrorCode.MODIFIED_AFTER_SIGNATION, "The document has been modified after being signed.");
+ throw new VerificationFilterException(ErrorCode.MODIFIED_AFTER_SIGNATION, "The document has been modified after being signed.");
} else {
log.debug("The document has been modified after being signed. According to the configuration, no exception is thrown.");
}
-
+
}
}
@@ -749,7 +749,7 @@ public class VerificationFilterImpl implements VerificationFilter
List extractedSignatures = extractNewSignaturesFromText(extractedText);
log.debug("Extracting signatures finished.");
log.debug("Number of found signatures: " + extractedSignatures.size());
-
+
if (extractedSignatures.size() > 0) {
List cp1252SignaturesPositions = new ArrayList();
//boolean iscp1252Sig = false;
@@ -760,19 +760,19 @@ public class VerificationFilterImpl implements VerificationFilter
log.debug("found cp1252 signature");
cp1252SignaturesPositions.add(new Integer(i));
//iscp1252Sig = true;
- //break;
+ //break;
}
- }
+ }
if (cp1252SignaturesPositions.size() > 0) {
log.debug("redo text and signature extraction with cp1252 encoding");
extractedText = extractText(pdf, endOfDocument, "cp1252");
log.debug("Extracting text finished.");
-
+
log.debug("Extracting signatures:");
List cp1252ExtractedSignatures = extractNewSignaturesFromText(extractedText);
log.debug("Extracting signatures finished.");
log.debug("Number of found signatures: " + extractedSignatures.size());
-
+
if (cp1252ExtractedSignatures.size() != extractedSignatures.size()) {
log.error("Invalid cp1252 signatures found. Skipping cp1252 compatibility.");
}
@@ -780,12 +780,12 @@ public class VerificationFilterImpl implements VerificationFilter
for (int i = 0; i < cp1252SignaturesPositions.size(); i++) {
int replaceIndex = ((Integer)cp1252SignaturesPositions.get(i)).intValue();
extractedSignatures.remove(replaceIndex);
- extractedSignatures.add(replaceIndex, cp1252ExtractedSignatures.get(replaceIndex));
+ extractedSignatures.add(replaceIndex, cp1252ExtractedSignatures.get(replaceIndex));
}
}
-
+
}
-
+
if (log.isDebugEnabled())
{
log.debug("extracted signatures:");
@@ -856,7 +856,7 @@ public class VerificationFilterImpl implements VerificationFilter
}
protected void checkBinaryOnly(PdfDataSource pdf, boolean considerOldSigs) throws VerificationFilterException {
-
+
DelimitedPdfDataSource dds = new DelimitedPdfDataSource(pdf, pdf.getLength());
String text = null;
try {
@@ -864,10 +864,10 @@ public class VerificationFilterImpl implements VerificationFilter
} catch (PresentableException e) {
throw new VerificationFilterException(e);
}
-
+
List sigs = new ArrayList();
-
- if(considerOldSigs) {
+
+ if(considerOldSigs) {
SignaturesAndOld sao = extractSignaturesAndOld(text);
if(sao != null) {
if(sao.newSignatures != null) {
@@ -877,30 +877,30 @@ public class VerificationFilterImpl implements VerificationFilter
sigs.add(sao.oldSignature);
}
}
- } else {
+ } else {
List signatures = extractSignatures(pdf, pdf.getLength());
if(signatures != null) {
sigs.addAll(signatures);
}
}
-
+
Iterator it = sigs.iterator();
while(it.hasNext()) {
SignatureHolder current = (SignatureHolder)it.next();
if((current != null)&&(!current.getSignatureObject().isBinary())) {
throw new VerificationFilterException(ErrorCode.NON_BINARY_SIGNATURES_PRESENT, "The document contains non-binary signatures.");
}
- }
+ }
}
-
-
+
+
protected static class SignaturesAndOld
{
public List newSignatures = null;
public SignatureHolder oldSignature = null;
}
-
+
protected SignaturesAndOld extractSignaturesAndOld(String text) throws VerificationFilterException
{
try
@@ -908,7 +908,7 @@ public class VerificationFilterImpl implements VerificationFilter
log.debug("Extracting signatures:");
List extractedSignatures = extractNewSignaturesFromText(text);
log.debug("Extracting signatures finished.");
-
+
log.debug("Extracting old signatures:");
SignatureHolder oldSignature = extractOldSignature(text, extractedSignatures);
log.debug("Extracting old signatures finished.");
@@ -929,7 +929,7 @@ public class VerificationFilterImpl implements VerificationFilter
/**
* Extracts the old signature from the text, but only if it is older than the
* oldest signature of the new signatueres.
- *
+ *
* @param extractedText
* @param newSignatures
* @return
diff --git a/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/impl/vfilter/helper/VerificationFilterBinaryHelper.java b/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/impl/vfilter/helper/VerificationFilterBinaryHelper.java
index 735b874..3093c36 100644
--- a/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/impl/vfilter/helper/VerificationFilterBinaryHelper.java
+++ b/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/impl/vfilter/helper/VerificationFilterBinaryHelper.java
@@ -48,7 +48,7 @@ import at.knowcenter.wag.exactparser.parsing.results.ObjectParseResult;
/**
* Contains helpful methods used by the VerificationFilter to analyze the PDF for binary signatures.
- *
+ *
* @author wprinz
*/
public final class VerificationFilterBinaryHelper
@@ -70,12 +70,12 @@ public final class VerificationFilterBinaryHelper
/**
* Tells, if the given incremental update block contains a binary signature.
- *
+ *
* <p>
* According to definition, if a block is a binary block, it must/cannot
* contain other signatures than this one.
* </p>
- *
+ *
* @param block
* The incremental update block.
* @return Returns true, if this block is a binary signature block, false
@@ -94,7 +94,7 @@ public final class VerificationFilterBinaryHelper
/**
* Extracts the PDF AS ID of the egiz block.
- *
+ *
* @param pdf
* The pdf.
* @param block
@@ -120,6 +120,13 @@ public final class VerificationFilterBinaryHelper
IndirectObjectReference ior = egiz_dict_iorpr.ior;
final int egiz_dict_offset = PDFUtils.getObjectOffsetFromXRefByIndirectObjectReference(block.xpr, ior);
+
+ // fix dti:
+ if (egiz_dict_offset < 0) {
+ log.debug("Current ui block contains a /EGIZSigDict trailer entry but no respective xref table entry. This indicates that this ui block does not contain binary signatures.");
+ return null;
+ }
+
// logger_.debug("egiz_dict_offset = " + egiz_dict_offset);
ObjectParseResult obj = PDFUtils.parseObject(pdf, egiz_dict_offset);
@@ -140,7 +147,7 @@ public final class VerificationFilterBinaryHelper
/**
* Restores the Kennzeichnung String from an Array.
- *
+ *
* @param pdf
* The PDF.
* @param kz_apr
@@ -174,7 +181,7 @@ public final class VerificationFilterBinaryHelper
si.pdf = pdf;
log.trace("Adding KZ: " + si.toString());
-
+
partition.add(si);
}
diff --git a/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/io/FileBasedTextBasedDataSource.java b/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/io/FileBasedTextBasedDataSource.java
index aaf99ea..918b13d 100644
--- a/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/io/FileBasedTextBasedDataSource.java
+++ b/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/io/FileBasedTextBasedDataSource.java
@@ -33,7 +33,7 @@ import at.gv.egiz.pdfas.api.io.TextBased;
/**
* FileBased DataSource that is TextBased.
- *
+ *
* @author wprinz
*/
public class FileBasedTextBasedDataSource extends FileBasedDataSource implements TextBased
@@ -113,7 +113,6 @@ public class FileBasedTextBasedDataSource extends FileBasedDataSource implements
}
catch (UnsupportedEncodingException e)
{
- e.printStackTrace();
throw new RuntimeException(e);
}
}
diff --git a/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/io/StringTextBasedDataSource.java b/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/io/StringTextBasedDataSource.java
index 8fe0dd6..8234b2a 100644
--- a/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/io/StringTextBasedDataSource.java
+++ b/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/io/StringTextBasedDataSource.java
@@ -32,9 +32,9 @@ import at.gv.egiz.pdfas.api.io.TextBased;
/**
* A String TextBased DataSource.
- *
+ *
* @author wprinz
- *
+ *
*/
public class StringTextBasedDataSource implements DataSource, TextBased
{
@@ -74,7 +74,6 @@ public class StringTextBasedDataSource implements DataSource, TextBased
}
catch (UnsupportedEncodingException e)
{
- e.printStackTrace();
throw new RuntimeException(e);
}
}
diff --git a/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/placeholder/SignaturePlaceholderExtractor.java b/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/placeholder/SignaturePlaceholderExtractor.java
index 8b8c22e..453b620 100644
--- a/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/placeholder/SignaturePlaceholderExtractor.java
+++ b/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/placeholder/SignaturePlaceholderExtractor.java
@@ -71,7 +71,7 @@ import com.google.zxing.common.HybridBinarizer;
/**
* Extract all relevant information from a placeholder image.
- *
+ *
* @author exthex
*
*/
@@ -80,10 +80,10 @@ public class SignaturePlaceholderExtractor extends PDFStreamEngine {
* The log.
*/
private static Log log = LogFactory.getLog(SignaturePlaceholderExtractor.class);
-
+
private List placeholders = new Vector();
private int currentPage = 0;
-
+
private SignaturePlaceholderExtractor(String placeholderId, int placeholderMatchMode) throws IOException {
super(ResourceLoader.loadProperties("at/gv/egiz/pdfas/placeholder/pdfbox-reader.properties",
true));
@@ -93,7 +93,7 @@ public class SignaturePlaceholderExtractor extends PDFStreamEngine {
* Search the document for placeholder images and possibly included
* additional info.<br/>
* Searches only for the first placeholder page after page from top.
- *
+ *
* @param inputStream
* @return all available info from the first found placeholder.
* @throws PDFDocumentException if the document could not be read.
@@ -103,14 +103,13 @@ public class SignaturePlaceholderExtractor extends PDFStreamEngine {
throws PDFDocumentException, PlaceholderExtractionException {
SignaturePlaceholderContext.setSignaturePlaceholderData(null);
PDDocument doc = null;
- try
+ try
{
try {
doc = PDDocument.load(inputStream);
} catch (IOException e) {
throw new PDFDocumentException(ErrorCode.DOCUMENT_CANNOT_BE_READ, e);
}
- PDFASUtils.checkDocumentPermissions(doc);
SignaturePlaceholderExtractor extractor;
try
{
@@ -135,7 +134,7 @@ public class SignaturePlaceholderExtractor extends PDFStreamEngine {
} catch (IOException e1) {
throw new PDFDocumentException(ErrorCode.DOCUMENT_CANNOT_BE_READ, e1);
}
-
+
}
if (extractor.placeholders.size() > 0){
SignaturePlaceholderData ret = matchPlaceholderDocument(extractor.placeholders, placeholderId, matchMode);
@@ -146,7 +145,7 @@ public class SignaturePlaceholderExtractor extends PDFStreamEngine {
if (matchMode == Constants.PLACEHOLDER_MATCH_MODE_STRICT) {
throw new PlaceholderExtractionException(ErrorCode.SIGNATURE_PLACEHOLDER_EXTRACTION_FAILED, "no suitable placeholder found and STRICT matching mode requested.");
}
-
+
return null;
} finally {
if (doc != null)
@@ -158,23 +157,23 @@ public class SignaturePlaceholderExtractor extends PDFStreamEngine {
}
}
-
+
private static SignaturePlaceholderData matchPlaceholderDocument(
List placeholders, String placeholderId, int matchMode) throws PlaceholderExtractionException {
-
+
if (matchMode == Constants.PLACEHOLDER_MATCH_MODE_STRICT)
throw new PlaceholderExtractionException(ErrorCode.SIGNATURE_PLACEHOLDER_EXTRACTION_FAILED, "no suitable placeholder found and STRICT matching mode requested.");
-
+
if (placeholders.size() == 0)
return null;
-
+
for (int i = 0; i < placeholders.size(); i++)
{
SignaturePlaceholderData spd = (SignaturePlaceholderData)placeholders.get(i);
if (spd.getId() == null)
return spd;
}
-
+
if (matchMode == Constants.PLACEHOLDER_MATCH_MODE_LENIENT)
return (SignaturePlaceholderData)placeholders.get(0);
@@ -219,7 +218,7 @@ public class SignaturePlaceholderExtractor extends PDFStreamEngine {
PDPage page = getCurrentPage();
Matrix ctm = getGraphicsState().getCurrentTransformationMatrix();
double rotationInRadians = (page.findRotation() * Math.PI)/180;
-
+
AffineTransform rotation = new AffineTransform();
rotation.setToRotation( rotationInRadians );
AffineTransform rotationInverse = rotation.createInverse();
@@ -227,13 +226,13 @@ public class SignaturePlaceholderExtractor extends PDFStreamEngine {
rotationInverseMatrix.setFromAffineTransform( rotationInverse );
Matrix rotationMatrix = new Matrix();
rotationMatrix.setFromAffineTransform( rotation );
-
+
Matrix unrotatedCTM = ctm.multiply( rotationInverseMatrix );
-
+
float x = unrotatedCTM.getXPosition();
float y = unrotatedCTM.getYPosition() + unrotatedCTM.getYScale();
float w = unrotatedCTM.getXScale();
-
+
String posString = "p:" + currentPage + ";x:" + x + ";y:" + y + ";w:" + w;
try
{
@@ -259,7 +258,7 @@ public class SignaturePlaceholderExtractor extends PDFStreamEngine {
/**
* Checks an image if it is a placeholder for a signature.
- *
+ *
* @param image
* @return
* @throws IOException
@@ -291,7 +290,7 @@ public class SignaturePlaceholderExtractor extends PDFStreamEngine {
formats.add(BarcodeFormat.QR_CODE);
hints.put(DecodeHintType.POSSIBLE_FORMATS, formats);
result = new MultiFormatReader().decode(bitmap, hints);
-
+
String text = result.getText();
String profile = null;
String type = null;
diff --git a/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/utils/CsvUtils.java b/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/utils/CsvUtils.java
new file mode 100644
index 0000000..a78da93
--- /dev/null
+++ b/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/utils/CsvUtils.java
@@ -0,0 +1,82 @@
+/**
+ * <copyright> Copyright 2006 by Know-Center, Graz, Austria </copyright>
+ * PDF-AS has been contracted by the E-Government Innovation Center EGIZ, a
+ * joint initiative of the Federal Chancellery Austria and Graz University of
+ * Technology.
+ *
+ * Licensed under the EUPL, Version 1.1 or - as soon they will be approved by
+ * the European Commission - subsequent versions of the EUPL (the "Licence");
+ * You may not use this work except in compliance with the Licence.
+ * You may obtain a copy of the Licence at:
+ * http://www.osor.eu/eupl/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the Licence is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the Licence for the specific language governing permissions and
+ * limitations under the Licence.
+ *
+ * This product combines work with different licenses. See the "NOTICE" text
+ * file for details on the various modules and licenses.
+ * The "NOTICE" text file is part of the distribution. Any derivative works
+ * that you distribute must include a readable copy of the "NOTICE" text file.
+ */
+package at.gv.egiz.pdfas.utils;
+
+import org.apache.commons.lang.StringUtils;
+
+/**
+ * Methods in order to create valid delimiter separated data, where the semicolon as used as delimiter, also known as
+ * the German version of CSV.
+ *
+ * @author Datentechnik Innovation GmbH
+ * @see <a href="http://tools.ietf.org/html/rfc4180">RFC 4180</a>
+ */
+public class CsvUtils {
+
+ /**
+ * The delimiter char used instead of COMMA.
+ */
+ public static final char DEFAULT_DELIMITER = ';';
+
+ private static final char QUOTE_CHAR = '"';
+ private static final char LF_CHAR = '\n';
+ private static final char CR_CHAR = '\r';
+
+ private static final char[] SHOULD_BE_QUOTED = { LF_CHAR, CR_CHAR, DEFAULT_DELIMITER, QUOTE_CHAR };
+ private static final String CSV_QUOTE = String.valueOf(QUOTE_CHAR);
+
+ /**
+ * Returns an DSV escapted representation of the given object using the default delimiter character (
+ * {@link #DEFAULT_DELIMITER}).
+ *
+ * @param obj
+ * The object.
+ * @return An escapted representation of the given object.
+ */
+ public static String escapeCsvValue(Object obj) {
+ // null value should be printed as empty column
+ if (obj == null) {
+ return "";
+ }
+ // get String representation of object
+ String asString = String.valueOf(obj);
+ // do we need to escape anything?
+ if (StringUtils.containsNone(asString, SHOULD_BE_QUOTED)) {
+ return asString;
+ }
+
+ // RFC 4180 (7): If double-quotes are used to enclose fields, then a double-quote
+ // appearing inside a field must be escaped by preceding it with
+ // another double quote.
+ asString = StringUtils.replace(asString, CSV_QUOTE, CSV_QUOTE + CSV_QUOTE);
+
+ // RFC 4180 (6): Fields containing line breaks (CRLF), double quotes, and commas
+ // should be enclosed in double-quotes.
+ if (StringUtils.containsAny(asString, SHOULD_BE_QUOTED)) {
+ return QUOTE_CHAR + asString + QUOTE_CHAR;
+ }
+ return asString;
+ }
+
+}
diff --git a/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/utils/PDFASUtils.java b/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/utils/PDFASUtils.java
index 7f09dfc..a2332dd 100644
--- a/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/utils/PDFASUtils.java
+++ b/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/utils/PDFASUtils.java
@@ -30,63 +30,233 @@ import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
+import org.apache.commons.io.IOUtils;
+import org.apache.commons.lang.BooleanUtils;
+import org.apache.commons.lang.StringUtils;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
import org.apache.pdfbox.pdmodel.PDDocument;
+import at.gv.egiz.pdfas.api.io.DataSource;
import at.gv.egiz.pdfas.exceptions.ErrorCode;
+import at.knowcenter.wag.egov.egiz.cfg.SettingsReader;
import at.knowcenter.wag.egov.egiz.exceptions.PDFDocumentException;
+import com.lowagie.text.Document;
+import com.lowagie.text.pdf.BadPasswordException;
import com.lowagie.text.pdf.PdfReader;
/**
- * @author tknall
+ * Collection of useful utilities.
*/
public class PDFASUtils {
-//23.11.2010 changed by exthex - added checkDocumentPermissions(PDDocument doc)
-
- private PDFASUtils() {
- }
-
- /**
- * Verifies that a document could be opened with full permissions.
- * @param pdfReader The PdfReader
- * @throws PDFDocumentException Thrown if document has not been opened with full permissions.
- */
- public static void checkReaderPermissions(PdfReader pdfReader) throws PDFDocumentException {
- if (pdfReader.isEncrypted()) {
- throw new PDFDocumentException(ErrorCode.DOCUMENT_IS_PROTECTED, "Document is encrypted.");
- }
- if (!pdfReader.isOpenedWithFullPermissions()) {
- throw new PDFDocumentException(ErrorCode.DOCUMENT_IS_PROTECTED, "Document is protected.");
- }
- }
-
- public static boolean toFile(byte[] data, File file) throws IOException {
- return PDFASUtils.toFile(new ByteArrayInputStream(data), file);
- }
-
- public static boolean toFile(InputStream inputStream, File file) throws IOException {
- boolean result = false;
- BufferedOutputStream bufferedOutputStream = null;
- try {
- bufferedOutputStream = new BufferedOutputStream(new FileOutputStream(file));
- ConfigUtils.writeInputStreamToOutputStream(inputStream, bufferedOutputStream);
- } finally {
- if (bufferedOutputStream != null) {
- try {
- bufferedOutputStream.close();
- result = true;
- } catch (IOException e) {
- result = false;
- }
- }
- }
- return result;
- }
-
- public static void checkDocumentPermissions(PDDocument doc) throws PDFDocumentException {
- if (doc.isEncrypted()) {
- throw new PDFDocumentException(ErrorCode.DOCUMENT_IS_PROTECTED, "Document is encrypted.");
- }
- }
-
+
+ private static Log log = LogFactory.getLog(PDFASUtils.class);
+
+ /**
+ * The configuration key for PDF/A support.
+ */
+ public static final String CFG_KEY_PDFA = "SIG_PDFA1B_VALID";
+
+ private PDFASUtils() {
+ }
+
+ /**
+ * Verifies that a document could be opened with full permissions.
+ *
+ * @param pdfReader
+ * The PdfReader.
+ * @throws PDFDocumentException
+ * Thrown if document has not been opened with full permissions.
+ */
+ private static void checkReaderPermissions(PdfReader pdfReader) throws PDFDocumentException {
+ if (pdfReader.isEncrypted()) {
+ throw new PDFDocumentException(ErrorCode.DOCUMENT_IS_PROTECTED, "Document is encrypted.");
+ }
+ if (!pdfReader.isOpenedWithFullPermissions()) {
+ throw new PDFDocumentException(ErrorCode.DOCUMENT_IS_PROTECTED, "Document is protected.");
+ }
+ }
+
+ /**
+ * Verifies that the document is not encrypted and/or protected. In case no restrictions have been applied to the
+ * document a pdf reader is returned.
+ *
+ * @param dataSource
+ * The document data source.
+ * @throws PDFDocumentException
+ * Thrown if the document could not be opened with full permissions.
+ */
+ public static PdfReader createPdfReaderCheckingPermissions(DataSource dataSource) throws PDFDocumentException {
+ return createPdfReaderCheckingPermissions(dataSource.createInputStream());
+ }
+
+ /**
+ * Verifies that the document is not encrypted and/or protected. In case no restrictions have been applied to the
+ * document a pdf reader is returned.
+ *
+ * @param dataSource
+ * The document data source.
+ * @throws PDFDocumentException
+ * Thrown if the document could not be opened with full permissions.
+ */
+ public static PdfReader createPdfReaderCheckingPermissions(at.gv.egiz.pdfas.framework.input.DataSource dataSource)
+ throws PDFDocumentException {
+ return createPdfReaderCheckingPermissions(dataSource.createInputStream());
+ }
+
+ /**
+ * Verifies that the document is not encrypted and/or protected. In case no restrictions have been applied to the
+ * document a pdf reader is returned.
+ *
+ * @param inputStream
+ * The document data input stream.
+ * @throws PDFDocumentException
+ * Thrown if the document could not be opened with full permissions.
+ */
+ public static PdfReader createPdfReaderCheckingPermissions(InputStream inputStream) throws PDFDocumentException {
+ PdfReader reader = null;
+ try {
+ // try to parse document
+ // If fully encrypted, PdfReader will fail;
+ // It should throw a BadPasswordException, but unfortunately does not (throws an IOException instead,
+ // internally catching BadPAsswordException; see comments below).
+ reader = new PdfReader(inputStream);
+ checkReaderPermissions(reader);
+ return reader;
+ } catch (BadPasswordException e) {
+ // will never be reached with itext-2.1.5-rev3628-pdfas:v1.1
+ // just added for later versions... (see comments below)
+ // itext-2.1.5-rev3628-pdfas:v1.2 correctly throws BadPasswordException
+ throw new PDFDocumentException(ErrorCode.DOCUMENT_IS_PROTECTED, "Document is protected.");
+ } catch (PDFDocumentException e) {
+ throw e;
+ } catch (Exception e) {
+ final String EX_MSG_FOR_ENCRYPTED_DOCUMENT = "Bad user Password";
+ // Inspecting the exception message seems to be the only way when using itext-2.1.5-rev3628-pdfas:v1.1:
+ // itext neither externally throws a BadPasswordException nor passed the cause...,
+ // later versions do!
+ // String "Bad user Password" is set in com.lowagie.text.pdf.BadPasswordException so this approach will
+ // work as long as the underlying itext library is not beeing updated.
+ if (StringUtils.containsIgnoreCase(e.getMessage(), EX_MSG_FOR_ENCRYPTED_DOCUMENT)) {
+ throw new PDFDocumentException(ErrorCode.DOCUMENT_IS_PROTECTED, "Document is protected.");
+ }
+ throw new PDFDocumentException(ErrorCode.DOCUMENT_CANNOT_BE_READ, "Unable to parse document.");
+ } finally {
+ IOUtils.closeQuietly(inputStream);
+ closeQuietly(reader);
+ }
+ }
+
+ /**
+ * Quietly closes a pdf reader.
+ *
+ * @param reader
+ * The reader.
+ */
+ public static void closeQuietly(PdfReader reader) {
+ if (reader != null) {
+ try {
+ reader.close();
+ } catch (Throwable e) {
+ // ignore
+ }
+ }
+ }
+
+ /**
+ * Quietly closes a pdf document.
+ *
+ * @param pdDocument
+ * The pdf document.
+ */
+ public static void closeQuietly(PDDocument pdDocument) {
+ if (pdDocument != null) {
+ try {
+ pdDocument.close();
+ } catch (Throwable e) {
+ // ignore
+ }
+ }
+ }
+
+ /**
+ * Quietly closes a pdf document.
+ *
+ * @param pdDocument
+ * The pdf document.
+ */
+ public static void closeQuietly(org.pdfbox.pdmodel.PDDocument pdDocument) {
+ if (pdDocument != null) {
+ try {
+ pdDocument.close();
+ } catch (Throwable e) {
+ // ignore
+ }
+ }
+ }
+
+ /**
+ * Quietly closes a pdf document.
+ *
+ * @param pdDocument
+ * The pdf document.
+ */
+ public static void closeQuietly(Document doc) {
+ if (doc != null) {
+ try {
+ doc.close();
+ } catch (Throwable e) {
+ // ignore
+ }
+ }
+ }
+
+ public static boolean toFile(byte[] data, File file) throws IOException {
+ return PDFASUtils.toFile(new ByteArrayInputStream(data), file);
+ }
+
+ public static boolean toFile(InputStream inputStream, File file) throws IOException {
+ boolean result = false;
+ BufferedOutputStream bufferedOutputStream = null;
+ try {
+ bufferedOutputStream = new BufferedOutputStream(new FileOutputStream(file));
+ ConfigUtils.writeInputStreamToOutputStream(inputStream, bufferedOutputStream);
+ } finally {
+ if (bufferedOutputStream != null) {
+ try {
+ bufferedOutputStream.close();
+ result = true;
+ } catch (IOException e) {
+ result = false;
+ }
+ }
+ }
+ return result;
+ }
+
+ /**
+ * Returns {@code true} if the given {@code profileId} is PDF/A-1b enabled, {@code false} if not.
+ *
+ * @param profileId
+ * The signature profile.
+ * @return {@code true} if the given {@code profileId} is PDF/A-1b enabled, {@code false} if not.
+ */
+ public static boolean isPdfAEnabled(String profileId) {
+ if (profileId == null) {
+ throw new NullPointerException("Profile identifier must not be null.");
+ }
+ if (StringUtils.isEmpty(profileId)) {
+ throw new IllegalArgumentException("Profile identifier must not be empty.");
+ }
+ try {
+ String pdfa = SettingsReader.getInstance().getSetting("sig_obj." + profileId + ".key." + CFG_KEY_PDFA,
+ "default." + CFG_KEY_PDFA, "false");
+ return BooleanUtils.toBoolean(pdfa);
+ } catch (Exception e) {
+ log.error("Unable to read settings for PDF/A functionality.", e);
+ return false;
+ }
+ }
+
}
diff --git a/pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/PdfAS.java b/pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/PdfAS.java
index fa9d4c1..2681f80 100644
--- a/pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/PdfAS.java
+++ b/pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/PdfAS.java
@@ -115,7 +115,7 @@ public abstract class PdfAS
* The current version of the pdf-as library. This version string is logged on every invocation
* of the api or the web application.
*/
- public static final String PDFAS_VERSION = "3.3-SNAPSHOT";
+ public static final String PDFAS_VERSION = "3.3";
/**
* The key of the strict mode setting.
@@ -1306,122 +1306,135 @@ public abstract class PdfAS
*/
public static PositioningInstruction adjustSignatureTableandCalculatePosition(final PdfDataSource pdfDataSource, PdfPTable pdf_table, TablePos pos) throws PDFDocumentException
{
- // first check pageinstruction in TablePos-object
- // new,auto,absolut
- PdfReader reader = readInPdfDocument(pdfDataSource);
- PDFASUtils.checkReaderPermissions(reader);
- // get pages of currentdocument
- int doc_pages = reader.getNumberOfPages();
- int page = doc_pages;
- boolean make_new_page = pos.isNewPage();
- if (!(pos.isNewPage() || pos.isPauto()))
- {
- // we should posit signaturtable on this page
-
- page = pos.getPage();
- // System.out.println("XXXXPAGE="+page+" doc_pages="+doc_pages);
- if (page > doc_pages)
- {
- make_new_page = true;
- page = doc_pages;
- // throw new PDFDocumentException(227, "Page number is to big(=" + page+
- // ") cannot be parsed.");
- }
- }
-
- // getPagedimensions
- Rectangle psize = reader.getPageSizeWithRotation(page);
- int page_rotation = reader.getPageRotation(page);
-
- float page_width = psize.getWidth();
- float page_height = psize.getHeight();
- // now we can calculate x-position
- float pre_pos_x = SIGNATURE_MARGIN_HORIZONTAL;
- if (!pos.isXauto())
- {
- // we do have absolute x
- pre_pos_x = pos.getPosX();
- }
- // calculate width
- // center
- float pre_width = page_width - 2*pre_pos_x;
- if (!pos.isWauto())
- {
- // we do have absolute width
- pre_width = pos.getWidth();
- if (pos.isXauto())
- { // center x
- pre_pos_x = (page_width - pre_width) / 2;
- }
- }
- final float pos_x = pre_pos_x;
- final float width = pre_width;
- // Signatur table dimensions are complete
- pdf_table.setTotalWidth(width);
- pdf_table.setLockedWidth(true);
-
- final float table_height = pdf_table.getTotalHeight();
- // now check pos_y
- float pos_y = pos.getPosY();
- if (!pos.isYauto())
- {
- // we do have y-position too --> all parameters but page ok
- if (make_new_page)
- {
- page++;
- }
- return new PositioningInstruction(make_new_page, page, pos_x, pos_y);
- }
- // pos_y is auto
- if (make_new_page)
- {
- // ignore footer in new page
- page++;
- pos_y = page_height - SIGNATURE_MARGIN_VERTICAL;
- return new PositioningInstruction(make_new_page, page, pos_x, pos_y);
- }
- // up to here no checks have to be made if Tablesize and Pagesize are fit
- // Now we have to getfreespace in page and reguard footerline
- float footer_line = pos.getFooterLine();
- float pre_page_length = PDFUtilities.calculatePageLength(pdfDataSource, page - 1, page_height - footer_line, page_rotation);
- if (pre_page_length == Float.NEGATIVE_INFINITY)
- {
- // we do have an empty page or nothing in area above footerline
- pre_page_length = page_height;
- // no text --> SIGNATURE_BORDER
- pos_y = page_height - SIGNATURE_MARGIN_VERTICAL;
- if (pos_y - footer_line <= table_height)
- {
- make_new_page = true;
- if (!pos.isPauto())
- {
- // we have to correct pagenumber
- page = reader.getNumberOfPages();
- }
- page++;
- // no text --> SIGNATURE_BORDER
- pos_y = page_height - SIGNATURE_MARGIN_VERTICAL;
- }
- return new PositioningInstruction(make_new_page, page, pos_x, pos_y);
- }
- final float page_length = pre_page_length;
- // we do have text take SIGNATURE_MARGIN
- pos_y = page_height - page_length - SIGNATURE_MARGIN_VERTICAL;
- if (pos_y - footer_line <= table_height)
- {
- make_new_page = true;
- if (!pos.isPauto())
- {
- // we have to correct pagenumber in case of absolute page and not enough
- // space
- page = reader.getNumberOfPages();
- }
- page++;
- // no text --> SIGNATURE_BORDER
- pos_y = page_height - SIGNATURE_MARGIN_VERTICAL;
- }
- return new PositioningInstruction(make_new_page, page, pos_x, pos_y);
+ PdfReader reader = null;
+ try {
+ reader = PDFASUtils.createPdfReaderCheckingPermissions(pdfDataSource);
+ // get pages of currentdocument
+ int doc_pages = reader.getNumberOfPages();
+ int page = doc_pages;
+ boolean make_new_page = pos.isNewPage();
+ if (!(pos.isNewPage() || pos.isPauto()))
+ {
+ // we should posit signaturtable on this page
+
+ page = pos.getPage();
+ // System.out.println("XXXXPAGE="+page+" doc_pages="+doc_pages);
+ if (page > doc_pages)
+ {
+ make_new_page = true;
+ page = doc_pages;
+ // throw new PDFDocumentException(227, "Page number is to big(=" + page+
+ // ") cannot be parsed.");
+ }
+ }
+
+ // getPagedimensions
+ Rectangle psize = reader.getPageSizeWithRotation(page);
+ int page_rotation = reader.getPageRotation(page);
+
+ float page_width = psize.getWidth();
+ float page_height = psize.getHeight();
+
+ // now we can calculate x-position
+ float pre_pos_x = SIGNATURE_MARGIN_HORIZONTAL;
+ if (!pos.isXauto())
+ {
+ // we do have absolute x
+ pre_pos_x = pos.getPosX();
+ }
+ // calculate width
+ // center
+ float pre_width = page_width - 2*pre_pos_x;
+ if (!pos.isWauto())
+ {
+ // we do have absolute width
+ pre_width = pos.getWidth();
+ if (pos.isXauto())
+ { // center x
+ pre_pos_x = (page_width - pre_width) / 2;
+ }
+ }
+ final float pos_x = pre_pos_x;
+ final float width = pre_width;
+ // Signatur table dimensions are complete
+ pdf_table.setTotalWidth(width);
+ pdf_table.setLockedWidth(true);
+
+ final float table_height = pdf_table.getTotalHeight();
+ // now check pos_y
+ float pos_y = pos.getPosY();
+
+ // in case an absolute y position is already given OR
+ // if the table is related to an invisible signature
+ // there is no need for further calculations
+ // (fixed adding new page in case of invisible signatures)
+ if (!pos.isYauto() || table_height == 0)
+ {
+ // we do have y-position too --> all parameters but page ok
+ if (make_new_page)
+ {
+ page++;
+ }
+ return new PositioningInstruction(make_new_page, page, pos_x, pos_y);
+ }
+ // pos_y is auto
+ if (make_new_page)
+ {
+ // ignore footer in new page
+ page++;
+ pos_y = page_height - SIGNATURE_MARGIN_VERTICAL;
+ return new PositioningInstruction(make_new_page, page, pos_x, pos_y);
+ }
+ // up to here no checks have to be made if Tablesize and Pagesize are fit
+ // Now we have to getfreespace in page and reguard footerline
+ float footer_line = pos.getFooterLine();
+ float pre_page_length = PDFUtilities.calculatePageLength(pdfDataSource, page - 1, page_height - footer_line, page_rotation);
+ if (pre_page_length == Float.NEGATIVE_INFINITY)
+ {
+ // we do have an empty page or nothing in area above footerline
+ pre_page_length = page_height;
+ // no text --> SIGNATURE_BORDER
+ pos_y = page_height - SIGNATURE_MARGIN_VERTICAL;
+ if (pos_y - footer_line <= table_height)
+ {
+ make_new_page = true;
+ if (!pos.isPauto())
+ {
+ // we have to correct pagenumber
+ page = reader.getNumberOfPages();
+ }
+ page++;
+ // no text --> SIGNATURE_BORDER
+ pos_y = page_height - SIGNATURE_MARGIN_VERTICAL;
+ }
+ return new PositioningInstruction(make_new_page, page, pos_x, pos_y);
+ }
+ final float page_length = pre_page_length;
+ // we do have text take SIGNATURE_MARGIN
+ pos_y = page_height - page_length - SIGNATURE_MARGIN_VERTICAL;
+ if (pos_y - footer_line <= table_height)
+ {
+ make_new_page = true;
+ if (!pos.isPauto())
+ {
+ // we have to correct pagenumber in case of absolute page and not enough
+ // space
+ page = reader.getNumberOfPages();
+ }
+ page++;
+ // no text --> SIGNATURE_BORDER
+ pos_y = page_height - SIGNATURE_MARGIN_VERTICAL;
+ }
+ return new PositioningInstruction(make_new_page, page, pos_x, pos_y);
+ } finally {
+ if (reader != null) {
+ try {
+ reader.close();
+ } catch (Exception e) {
+ }
+ }
+ }
}
// /**
diff --git a/pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/cfg/CircularIncludeException.java b/pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/cfg/CircularIncludeException.java
new file mode 100644
index 0000000..6ff7d3a
--- /dev/null
+++ b/pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/cfg/CircularIncludeException.java
@@ -0,0 +1,44 @@
+/**
+ * <copyright> Copyright 2006 by Know-Center, Graz, Austria </copyright>
+ * PDF-AS has been contracted by the E-Government Innovation Center EGIZ, a
+ * joint initiative of the Federal Chancellery Austria and Graz University of
+ * Technology.
+ *
+ * Licensed under the EUPL, Version 1.1 or - as soon they will be approved by
+ * the European Commission - subsequent versions of the EUPL (the "Licence");
+ * You may not use this work except in compliance with the Licence.
+ * You may obtain a copy of the Licence at:
+ * http://www.osor.eu/eupl/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the Licence is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the Licence for the specific language governing permissions and
+ * limitations under the Licence.
+ *
+ * This product combines work with different licenses. See the "NOTICE" text
+ * file for details on the various modules and licenses.
+ * The "NOTICE" text file is part of the distribution. Any derivative works
+ * that you distribute must include a readable copy of the "NOTICE" text file.
+ */
+package at.knowcenter.wag.egov.egiz.cfg;
+
+/**
+ * Exception indicating that circular includes were detected.
+ *
+ * @author Datentechnik Innovation GmbH
+ *
+ */
+public class CircularIncludeException extends RuntimeException {
+
+ private static final long serialVersionUID = 1L;
+
+ public CircularIncludeException() {
+ super();
+ }
+
+ public CircularIncludeException(String message) {
+ super(message);
+ }
+
+}
diff --git a/pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/cfg/NestedProperties.java b/pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/cfg/NestedProperties.java
new file mode 100644
index 0000000..259a1dc
--- /dev/null
+++ b/pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/cfg/NestedProperties.java
@@ -0,0 +1,255 @@
+/**
+ * <copyright> Copyright 2006 by Know-Center, Graz, Austria </copyright>
+ * PDF-AS has been contracted by the E-Government Innovation Center EGIZ, a
+ * joint initiative of the Federal Chancellery Austria and Graz University of
+ * Technology.
+ *
+ * Licensed under the EUPL, Version 1.1 or - as soon they will be approved by
+ * the European Commission - subsequent versions of the EUPL (the "Licence");
+ * You may not use this work except in compliance with the Licence.
+ * You may obtain a copy of the Licence at:
+ * http://www.osor.eu/eupl/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the Licence is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the Licence for the specific language governing permissions and
+ * limitations under the Licence.
+ *
+ * This product combines work with different licenses. See the "NOTICE" text
+ * file for details on the various modules and licenses.
+ * The "NOTICE" text file is part of the distribution. Any derivative works
+ * that you distribute must include a readable copy of the "NOTICE" text file.
+ */
+package at.knowcenter.wag.egov.egiz.cfg;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.Collection;
+import java.util.Enumeration;
+import java.util.InvalidPropertiesFormatException;
+import java.util.Iterator;
+import java.util.Properties;
+import java.util.SortedMap;
+import java.util.TreeMap;
+
+import org.apache.commons.io.FileUtils;
+import org.apache.commons.io.IOCase;
+import org.apache.commons.io.IOUtils;
+import org.apache.commons.io.filefilter.WildcardFileFilter;
+import org.apache.commons.lang.StringUtils;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+/**
+ * Enhanced Java Properties allowing nested include instructions.<br/>
+ * In order to include further Properties use the following instruction:
+ * <p/>
+ * <code>include = [path/to/]foo.properties</code>
+ * <p/>
+ * Note that wildcard imports are allowed, e.g.
+ * <p/>
+ * <code>include = [path/to/]profile.*.properties</code>
+ * <p/>
+ * In order to use more than one include instruction within a file append an arbitary postfix to <code>include.</code>
+ * in order to make each include key unique within a properties file, e.g.
+ * <p/>
+ * <code>include = profile.SIGNATURBLOCK*.properties</code><br/>
+ * <code>include.amtssignaturen = profile.AMTSSIGNATURBLOCK*.properties</code><br/>
+ * <code>include.1 = myProfiles1/*.properties</code><br/>
+ * <code>include.2 = myProfiles2/*.properties</code>
+ * <p/>
+ * Note that
+ * <ul>
+ * <li>all include instructions of a certain properties file are sorted alphabetically by their key name before being
+ * executed,</li>
+ * <li>include instructions can be used within any properties files being loaded (even within other includes) and that</li>
+ * <li>(wildcard) path/file declarations are always case <b>insensitive</b>, regardless of the underlying operating
+ * system.</li>
+ * <li>included properties always override locally defined properties</li>
+ * </ul>
+ * <p/>
+ * <b>Mind creating circular includes!</b>
+ *
+ * @author Datentechnik Innovation GmbH
+ */
+public class NestedProperties extends Properties {
+
+ private static final long serialVersionUID = 1L;
+
+ private Log log = LogFactory.getLog(getClass());
+
+ /**
+ * Creates an empty property list with no default values.
+ */
+ public NestedProperties() {
+ super();
+ }
+
+ /**
+ * Creates an empty property list with the specified defaults.
+ * @param defaults The defaults.
+ */
+ public NestedProperties(Properties defaults) {
+ super(defaults);
+ }
+
+ /**
+ * The name of the key that triggers including of other properties.
+ */
+ private final String INCLUDE_KEY_NAME = "include";
+
+ /**
+ * Defines the default behaviour of the file matching filter.
+ */
+ private final IOCase DEFAULT_IOCASE = IOCase.SENSITIVE;
+
+ /**
+ * The maximum depth of includes before being regarded as circular (throwing a {@link CircularIncludeException}).
+ */
+ private final int MAX_NESTED_INCLUDE_DEPTH = 25;
+
+ @Override
+ /**
+ * Warning: When Properties are loaded using InputStreams include instructions are not supported.
+ */
+ public synchronized void load(InputStream inStream) throws IOException {
+ log.debug("Loading properties from input stream. Include instructions are not supported.");
+ super.load(inStream);
+ }
+
+ @Override
+ public synchronized void loadFromXML(InputStream in) throws IOException, InvalidPropertiesFormatException {
+ // Loading from InputStream is not supported since including further property files that have been declared
+ // using relative paths need a context directory which cannot be retrieved from InputStreams.
+ throw new UnsupportedOperationException("Imports from XML files are not supported.");
+ }
+
+ /**
+ * Reads a property list from a certain file including other properties files if include instructions are present.
+ * Note that include instructions that do not match any files do not result in an exception. A respective message at
+ * WARN level is logged.
+ *
+ * @param file
+ * The file to be read.
+ * @throws IOException
+ * Thrown in case of an I/O error.
+ * @throws CircularIncludeException
+ * Thrown if circular includes have been detected (@link {@link RuntimeException}).
+ */
+ public synchronized void load(File file) throws IOException, CircularIncludeException {
+ load(file, 0);
+ }
+
+ /**
+ * Reads a property list from a certain file including other properties files if include instructions are present.
+ * Note that include instructions that do not match any files do not result in an exception. A respective message at
+ * WARN level is logged.
+ *
+ * @param file
+ * The file to be read.
+ * @param currentDepth
+ * The current include depth.
+ * @throws IOException
+ * Thrown in case of an I/O error.
+ * @throws CircularIncludeException
+ * Thrown if circular includes have been detected (@link {@link RuntimeException}).
+ */
+ private synchronized void load(File file, int currentDepth) throws IOException, CircularIncludeException {
+ if (currentDepth > MAX_NESTED_INCLUDE_DEPTH) {
+ throw new CircularIncludeException("Circular include instruction(s) detected.");
+ }
+ InputStream in = null;
+ try {
+ in = new FileInputStream(file);
+ log.debug("Loading '" + file.getCanonicalPath() + "'.");
+ super.load(in);
+ } finally {
+ IOUtils.closeQuietly(in);
+ }
+ // Properties have been loaded. Apply preprocessing step in order to process include instructions.
+ // Provide a context directory in order to be able to resolve relative path instructions.
+ processIncludes(file.getParentFile(), currentDepth);
+ }
+
+ /**
+ * Resolves all include instructions as part of a postprocessing step.
+ *
+ * @param contextFolder
+ * The folder that should be assumed as starting folder for relative include instructions.
+ * @param currentDepth
+ * The current include depth.
+ * @throws IOException
+ * Thrown in case of error.
+ */
+ private void processIncludes(File contextFolder, int currentDepth) throws IOException {
+ SortedMap<String, String> sortedIncludeInstructions = new TreeMap<String, String>();
+
+ // Walk through properties, collecting include instructions.
+ // Since the backing Hashtable does not guarantee any order, import instructions need to be sorted according to
+ // their keys (natural order -> alphabetically).
+ // This allows for defining a pseudo load order: include.1=path/to/settings.propertes,
+ // include.2=other/path/to/settings.properties
+ @SuppressWarnings("unchecked")
+ Enumeration<String> propertyNames = (Enumeration<String>) propertyNames();
+ while (propertyNames.hasMoreElements()) {
+ String key = propertyNames.nextElement();
+ // valid include instructions: include=xxx, include.foo=xxx, include.foo.foo=xxx... (keys are case
+ // insensitive)
+ if (INCLUDE_KEY_NAME.equalsIgnoreCase(key) || StringUtils.startsWithIgnoreCase(key, INCLUDE_KEY_NAME + ".")) {
+ String includeValue = StringUtils.trimToNull(getProperty(key));
+ if (includeValue != null) {
+ sortedIncludeInstructions.put(key, includeValue);
+ }
+ }
+ }
+
+ // performing imports
+ Iterator<String> includeIt = sortedIncludeInstructions.keySet().iterator();
+ while (includeIt.hasNext()) {
+ String includeInstructionKey = includeIt.next();
+ String includePath = getProperty(includeInstructionKey);
+ processInclude(contextFolder, includePath, currentDepth);
+ // remove import instruction from properties
+ remove(includeInstructionKey);
+ }
+ }
+
+ /**
+ * Processes a single include instruction (which may lead to several imports due to wildcard support).
+ *
+ * @param contextFolder
+ * The folder that should be assumed as starting folder for relative include instructions.
+ * @param includePath
+ * The include path instruction.
+ * @param currentDepth
+ * The current include depth.
+ * @throws IOException
+ * Thrown in case of error.
+ */
+ private void processInclude(File contextFolder, String includePath, int currentDepth) throws IOException {
+ // Combine contextFolder with relative path instructions from includePath.
+ File includeInstruction = new File(contextFolder, includePath);
+ contextFolder = includeInstruction.getParentFile();
+ String includeName = includeInstruction.getName();
+
+ WildcardFileFilter fileFilter = new WildcardFileFilter(includeName, DEFAULT_IOCASE);
+ Collection<File> includeFiles = null;
+ if (contextFolder != null && contextFolder.exists() && contextFolder.isDirectory()) {
+ includeFiles = FileUtils.listFiles(contextFolder, fileFilter, null);
+ }
+ if (includeFiles != null && !includeFiles.isEmpty()) {
+ log.info("Including '" + includePath + "'.");
+ for (File includeFile : includeFiles) {
+ NestedProperties includeProperties = new NestedProperties();
+ includeProperties.load(includeFile, currentDepth + 1);
+ putAll(includeProperties);
+ }
+ } else {
+ log.warn("Unable to find '" + includeName + "' in folder '" + contextFolder.getCanonicalPath() + "'.");
+ }
+ }
+
+}
diff --git a/pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/cfg/PropertyTree.java b/pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/cfg/PropertyTree.java
index 49ba003..e9276b8 100644
--- a/pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/cfg/PropertyTree.java
+++ b/pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/cfg/PropertyTree.java
@@ -38,7 +38,7 @@ import java.util.Vector;
* the values of a configuration is stored in nested hashes. The keys in an area are stored in a
* HashMap. The values of a key are stored in a Vector to overload some keys. The property tree can
* be used to extract sub nodes and sub keys of different tree levels.
- *
+ *
* @author wlackner
* @see java.util.HashMap
* @see java.util.Vector
@@ -49,7 +49,7 @@ public class PropertyTree implements Serializable {
* SVUID.
*/
private static final long serialVersionUID = -1686170519955886222L;
-
+
/**
* The key split string. A key can be a complex key. Sub keys are separated from each other with
* the split string. This string is used to devide the complex key.
@@ -77,7 +77,7 @@ public class PropertyTree implements Serializable {
* the tree will be created. The last part of the key (last splitted element) adds the value to
* there own value data structure (Vector). <br />
* <strong>Example: </strong> <code>setKeyValue("key.1_level.2_level","the value for k_1_2")</code
- *
+ *
* @param splitKey the key that has to be store the value
* @param value only String values can be stored
*/
@@ -97,7 +97,7 @@ public class PropertyTree implements Serializable {
/**
* Adds a String value to the current key
- *
+ *
* @param value
*/
private void addValue(String value) {
@@ -108,7 +108,7 @@ public class PropertyTree implements Serializable {
* This method takes a key as input value, split them into subnodes and return the sub tree of the
* last node of the key. If the key or a sub node not found, the method return null. This means
* the key is not part of the sub property tree.
- *
+ *
* @param splitKey the key that has to be found as sub node of the current node
* @return the sub tree (PropertyTree) or <code>null</code> if the key is not a subtree referece
*/
@@ -129,7 +129,7 @@ public class PropertyTree implements Serializable {
* This method return the subtree that corresponds to a particular key. The key does not split.
* Therefore the key must be a children of the current node. Search only in the key map of the
* current node.
- *
+ *
* @param key the key that has to be a sub node
* @return a sub tree (PropertyTree) or <code>null</code> if the key is not a children of the
* current node
@@ -142,7 +142,7 @@ public class PropertyTree implements Serializable {
* Returns the last value (keys can be overloaded) of a key. The key are splitted into subnodes
* and the last node of the key is the current value holder. If a key or subnode is not in the sub
* tree the return value is <code>null.</code>
- *
+ *
* @param key the key that holds the value (can be a nested key like <code>"key.1.2.3"</code>)
* @return the value of the key (last node of the key) or <code>null</code> otherwise
*/
@@ -162,7 +162,7 @@ public class PropertyTree implements Serializable {
* Returns the first value (keys can be overloaded) of a key. The key are splitted into subnodes
* and the last node of the key is the current value holder. If a key or subnode is not in the sub
* tree the return value is <code>null</code>.
- *
+ *
* @param key the key that holds the value (can be a nested key like <code>"key.1.2.3"</code>)
* @return the value of the key (last node of the key) or <code>null</code> otherwise
*/
@@ -180,7 +180,7 @@ public class PropertyTree implements Serializable {
/**
* This method return all values of the current node. The values are stored as String values.
- *
+ *
* @return the values (type String) of the current node
* @see Vector
*/
@@ -191,7 +191,7 @@ public class PropertyTree implements Serializable {
/**
* This method return all keys (sub tree references) of the current node as a Map. The keys are
* stored as String values.
- *
+ *
* @return the keys (type String) of the current node
* @see Map
*/
@@ -202,7 +202,7 @@ public class PropertyTree implements Serializable {
/**
* This method return all keys (sub tree references) of the current node as an ArrayList. The keys
* are stored as String values.
- *
+ *
* @return the keys (type String) of the current node
* @see ArrayList
*/
@@ -219,10 +219,10 @@ public class PropertyTree implements Serializable {
}
/**
- *
+ *
* This method return all sub tree references of a key as an ArrayList. The keys are stored as
* String values.
- *
+ *
* @param key (can be a nested key like <code>"key.1.2.3"</code>)
* @return the keys (type String) of the current node
* @see ArrayList
@@ -237,7 +237,7 @@ public class PropertyTree implements Serializable {
/**
* This method return all values of a key. The values are stored as String values.
- *
+ *
* @param key (can be a nested key like <code>"key.1.2.3"</code>)
* @return the values (type Vector) of the key or <code>null</code> if the key is not in the sub
* tree of the current node
@@ -254,7 +254,7 @@ public class PropertyTree implements Serializable {
/**
* Store a sub tree (type PropertyTree) in the current node. The key and it's sub tree are stored
* in a HashMap.
- *
+ *
* @param key the reference of the sub tree
* @param tree the sub tree of the key
* @see HashMap
@@ -270,7 +270,7 @@ public class PropertyTree implements Serializable {
* Extracts a sub tree of a nested key. The Method returns the last sub tree of the nested key.
* <strong>Example: </strong>if the key is like: <code>key.1.2.3</code> the sub tree of the last
* node <code>3</code> is returned.
- *
+ *
* @param key the reference of the sub tree
* @return a sub tree of the key or <code>null</code> if the key can not be found
*/
@@ -280,7 +280,7 @@ public class PropertyTree implements Serializable {
/**
* This method checks if a key is a reference to a sub tree in the current node.
- *
+ *
* @param key a simple key that is a parent reference of a sub tree
* @return true if the key is found, false otherwise
*/
@@ -291,7 +291,7 @@ public class PropertyTree implements Serializable {
/**
* The default toString method. It starts with the current node recursively downwards and return
* the String representation of the node.
- *
+ *
* @return the string representation of the node
*/
public String toString() {
@@ -300,9 +300,9 @@ public class PropertyTree implements Serializable {
/**
* This is a helper function to define the prefix for different levels in the toString method, not
- * realy nice ;-).
- * It replaces all "." chars with " ".
- *
+ * realy nice ;-).<p/>
+ * In other words: Fills {@code key} with spaces (of same length).
+ *
* @param key
* @return a replaces prefix string
*/
@@ -312,7 +312,7 @@ public class PropertyTree implements Serializable {
/**
* This method concatenates all values of the current node and return them as a combinded string.
- *
+ *
* @param prefix
* @param tree
* @return the string representation of the node values
@@ -330,7 +330,7 @@ public class PropertyTree implements Serializable {
/**
* The toString method. It starts with a special level prefix, sub tree and recursively adds all
* sub trees.
- *
+ *
* @param prefix the prefix for this node
* @param tree the current node
* @return the string representation of the node
@@ -351,8 +351,40 @@ public class PropertyTree implements Serializable {
}
return os;
}
-
+
public void removeEntry(String key) {
- this.keys_.remove(key);
+ this.keys_.remove(key);
}
+
+ @Override
+ public int hashCode() {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result + ((keys_ == null) ? 0 : keys_.hashCode());
+ result = prime * result + ((values_ == null) ? 0 : values_.hashCode());
+ return result;
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (this == obj)
+ return true;
+ if (obj == null)
+ return false;
+ if (getClass() != obj.getClass())
+ return false;
+ PropertyTree other = (PropertyTree) obj;
+ if (keys_ == null) {
+ if (other.keys_ != null)
+ return false;
+ } else if (!keys_.equals(other.keys_))
+ return false;
+ if (values_ == null) {
+ if (other.values_ != null)
+ return false;
+ } else if (!values_.equals(other.values_))
+ return false;
+ return true;
+ }
+
} \ No newline at end of file
diff --git a/pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/cfg/SettingsReader.java b/pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/cfg/SettingsReader.java
index 352c594..832f952 100644
--- a/pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/cfg/SettingsReader.java
+++ b/pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/cfg/SettingsReader.java
@@ -32,7 +32,6 @@ import iaik.security.provider.IAIK;
import iaik.utils.RFC2253NameParser;
import java.io.File;
-import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.Serializable;
@@ -42,6 +41,7 @@ import java.util.Enumeration;
import java.util.Properties;
import java.util.Vector;
+import org.apache.commons.io.IOUtils;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.lang.text.StrSubstitutor;
import org.apache.commons.logging.Log;
@@ -49,6 +49,7 @@ import org.apache.commons.logging.LogFactory;
import at.gv.egiz.pdfas.api.commons.Constants;
import at.gv.egiz.pdfas.api.exceptions.ConfigUtilsException;
+import at.gv.egiz.pdfas.exceptions.ErrorCode;
import at.gv.egiz.pdfas.utils.ConfigUtils;
import at.gv.egiz.pdfas.utils.TempDirHelper;
import at.knowcenter.wag.egov.egiz.PdfAS;
@@ -61,36 +62,36 @@ import at.knowcenter.wag.egov.egiz.tools.FileHelper;
* The SettingsReader reads the <code>settings.txt</code> file. The
* <code>settings.txt</code> is a simple java property file that collects all
* parameters used in different modules.
- *
+ *
* The SettingsReader provides methods to get the property keys and the
* corresponding values. The keys could be defined as combinations of single
* keys. Therefore it is possible to combine differen classes of keys. An
* example could be:
- *
+ *
* <pre>
- *
+ *
* #SettingNotFoundException
* error.code.100=Interner Fehler
* error.code.101=Die Konfigurationsdatei konnte nicht geladen werden
- *
+ *
* #PDFDocumentException
* error.code.200=Das Dokument konnte nicht geladen werden
- *
+ *
* #SignatureException
* error.code.300=Die Signatur ist ungültig
- *
+ *
* #NormalizeException
* error.code.400=Die angegebene Version ist nicht bekannt
- *
+ *
* normalizer.version=V01
- *
+ *
* </pre>
- *
+ *
* The internal representation of the example above is:
- *
+ *
* <pre>
- *
+ *
* .error|
* |.code|
@@ -100,10 +101,10 @@ import at.knowcenter.wag.egov.egiz.tools.FileHelper;
* | |.101=Die Konfigurationsdatei konnte nicht geladen werden
* | |.300=Die Signatur ist ungueltig
* .normalizer|
- * |.version=V01
- *
+ * |.version=V01
+ *
* </pre>
- *
+ *
* @author wlackner
*/
public class SettingsReader implements Serializable
@@ -145,17 +146,22 @@ public class SettingsReader implements Serializable
* The file path postfix where certificates are stored
*/
private static final String CERT = "certificates";
-
+
/**
* pdf-as internal properties resource path
*/
private static final String PDF_AS_PROP_RESOURCE = "/config/pdf-as.properties";
-
+
+ /**
+ * The default configuration properties. These settings can be overridden by any local configuration.
+ */
+ private static final String DEFAULT_CFG_PROPERTIES_RESOURCE = "/config/defaultconfig.properties";
+
/**
* internal help file
*/
private static final String HELP_TEXT_PROP_RESOURCE = "/config/help_text.properties";
-
+
public static final boolean REGISTER_IAIK_PROVIDERS_ON_DEFAULT = true;
// /**
@@ -165,14 +171,14 @@ public class SettingsReader implements Serializable
/**
* The path of the resources repository.
- *
+ *
* <p>
* This usually contains sub directories for the templates, the configuration
* files, etc.
* </p>
*/
public static String RESOURCES_PATH = null;
-
+
/**
* The path for temporary files.
*/
@@ -237,7 +243,7 @@ public class SettingsReader implements Serializable
/**
* The reference to the settings file.
*/
- private static String settingsFile_ = null;
+ private static File settingsFile_ = null;
/**
* The reference to the property representation of the settings file.
@@ -258,7 +264,7 @@ public class SettingsReader implements Serializable
* The only cause to do this is that the definition file should only be read
* once while getting often this instance. The method throws an IOException if
* the settings file could not be read.
- *
+ *
* @param settingsFile
* load this file, if the <code>settingsFile == null</code> the
* default settings ({@link SettingsReader#CONFIG_FILE_DEFAULT_NAME})
@@ -271,39 +277,45 @@ public class SettingsReader implements Serializable
try
{
String cfg_path = CONFIG_PATH;
- properties_ = new Properties();
if (settingsFile == null)
{
settingsFile = cfg_path + CONFIG_FILE_DEFAULT_NAME;
}
- settingsFile_ = settingsFile;
- if (logger_.isInfoEnabled())
- {
- File file = new File(settingsFile_);
- logger_.debug("load Settings:" + file.getAbsolutePath());
- // Properties sys_prop = System.getProperties();
- // Enumeration prop_keys = sys_prop.propertyNames();
- // while (prop_keys.hasMoreElements()) {
- // String key = (String) prop_keys.nextElement();
- // String value = sys_prop.getProperty(key);
- // logger_.info(key + "=" + value);
- // }
- }
- FileInputStream sfs = new FileInputStream(settingsFile_);
- properties_.load(sfs);
-
+ settingsFile_ = new File(settingsFile);
+ logger_.debug("load Settings:" + settingsFile_.getAbsolutePath());
+
+ // DTI
+ // (1) first load default properties which may be overloaded by local configurations
+ Properties defaultConfiguration = new Properties();
+ InputStream in = null;
+ try {
+ defaultConfiguration.load(in = getClass().getResourceAsStream(DEFAULT_CFG_PROPERTIES_RESOURCE));
+ } catch (Exception e) {
+ throw new SettingsException(ErrorCode.UNABLE_TO_LOAD_DEFAULT_CONFIG,
+ "Unable to load default configuration.", e);
+ } finally {
+ IOUtils.closeQuietly(in);
+ }
+
+ // (2) then load main configuration (considers include instructions)
+ NestedProperties includeAwareProperties = new NestedProperties(defaultConfiguration);
+ try {
+ includeAwareProperties.load(settingsFile_);
+ properties_ = includeAwareProperties;
+ } catch (CircularIncludeException e) {
+ throw new SettingsException(ErrorCode.CIRCULAR_INCLUDE_INSTRUCTION_DETECTED, e);
+ }
+
+ // (3) then forcedly overwrite some system settings
// dferbas override with system props
properties_.load(SettingsReader.class.getResourceAsStream(PDF_AS_PROP_RESOURCE));
+ // (4) and finally add help texts.
Properties help_prop = new Properties();
-// FileInputStream hfs = new FileInputStream(cfg_path + HELP_TEXT_FILE_DEFAULT_NAME);
-// help_prop.load(hfs);
help_prop.load(SettingsReader.class.getResourceAsStream(HELP_TEXT_PROP_RESOURCE));
- // load properties from current package!
- // properties_.load(getClass().getResourceAsStream(settingsFile_));
+ // (5) Build PropertyTree configuration.
Enumeration prop_keys = properties_.propertyNames();
-
while (prop_keys.hasMoreElements())
{
String key = (String) prop_keys.nextElement();
@@ -319,10 +331,12 @@ public class SettingsReader implements Serializable
pTree_.setKeyValue(key, value);
}
}
+
catch (IOException e)
{
throw new SettingsException("Couldn't load settings from file " + settingsFile, e);
}
+
}
/**
@@ -331,7 +345,7 @@ public class SettingsReader implements Serializable
* holding the definitions of the default settings file. Default file:
* {@link SettingsReader#CONFIG_FILE_DEFAULT_NAME}: "settings.txt".
* Note: IAIK JCE and IAIK ECC security providers are automatically registered.
- *
+ *
* @return an instance of the SettingsReader
* @throws SettingsException
* if the default settings file could not be read
@@ -340,15 +354,15 @@ public class SettingsReader implements Serializable
{
return getInstance(null);
}
-
+
/**
* Reloads the Settings file.
- *
+ *
* <p>
* Subsequent calls to getInstance will return the new settings.
* Note: IAIK JCE and IAIK ECC security providers are automatically registered.
* </p>
- *
+ *
* @throws SettingsException f.e.
*/
public synchronized static void createInstance() throws SettingsException
@@ -356,16 +370,16 @@ public class SettingsReader implements Serializable
instance_ = null;
getInstance();
}
-
+
/**
* Reloads the Settings file.
- *
+ *
* <p>
* Subsequent calls to getInstance will return the new settings.
* </p>
* @param registerProvider <code>true</code>: automatically registers IAIK JCE and ECC Provider;
* <code>false</code>: providers will NOT be automatically registered, providers
- * needed have to be registered by the API user
+ * needed have to be registered by the API user
* @throws SettingsException f.e.
*/
public synchronized static void createInstance(boolean registerProvider) throws SettingsException
@@ -381,18 +395,18 @@ public class SettingsReader implements Serializable
* <code>settingsFile == null</code> the default settings file will be load.
* Default file: {@link SettingsReader#CONFIG_FILE_DEFAULT_NAME}:
* "settings.txt"
- *
+ *
* If an instance of this class exist, the input param is ignored! The
* SettingsReader is singleton and therefore the first
* {@link SettingsReader#getInstance()}defines the settings file that has to
* be loaded. This means changes between a application lifecyle can not be
* done!
- *
+ *
* @param settingsFile
* the settings file that should be load.
* @param registerProvider <code>true</code>: automatically registers IAIK JCE and ECC Provider;
* <code>false</code>: providers will NOT be automatically registered, providers
- * needed have to be registered by the API user
+ * needed have to be registered by the API user
* @return an instance of the SettingsReader
* @throws SettingsException
* if the settings file could not be read
@@ -402,7 +416,7 @@ public class SettingsReader implements Serializable
if (instance_ == null)
{
int length = Utils.max(new int[] { RESOURCES_PATH.length(), TMP_PATH.length(), CONFIG_PATH.length(), CERT_PATH.length() });
-
+
logger_.info(StringUtils.repeat("*", length + 25));
logger_.info(" resources path = \"" + RESOURCES_PATH + "\"");
logger_.info(" configuration path = \"" + CONFIG_PATH + "\"");
@@ -410,7 +424,7 @@ public class SettingsReader implements Serializable
logger_.info(" temporary path = \"" + TMP_PATH + "\"");
logger_.debug(" file.encoding = \"" + System.getProperty("file.encoding") + "\"");
logger_.info(StringUtils.repeat("*", length + 25));
-
+
if (registerProvider) {
IAIK.addAsProvider();
ECCProvider.addAsProvider();
@@ -429,12 +443,12 @@ public class SettingsReader implements Serializable
// Does not conform with PKIX, but is used by belgium citizen card
// log.info("Registering RDN \"SERIALNUMBER\" as " + ObjectID.serialNumber + ".");
RFC2253NameParser.register("SERIALNUMBER", ObjectID.serialNumber);
-
+
instance_ = new SettingsReader(settingsFile);
}
return instance_;
}
-
+
/**
* This method returns an synchronized instance of this class. The settings
* file is read only once using this class. This method returns the instance
@@ -443,13 +457,13 @@ public class SettingsReader implements Serializable
* Default file: {@link SettingsReader#CONFIG_FILE_DEFAULT_NAME}:
* "settings.txt".
* Note: IAIK JCE and IAIK ECC security providers are automatically registered.
- *
+ *
* If an instance of this class exist, the input param is ignored! The
* SettingsReader is singleton and therefore the first
* {@link SettingsReader#getInstance()}defines the settings file that has to
* be loaded. This means changes between a application lifecyle can not be
* done!
- *
+ *
* @param settingsFile
* the settings file that should be load.
* @return an instance of the SettingsReader
@@ -464,7 +478,7 @@ public class SettingsReader implements Serializable
/**
* This method returns a property value to the corresponding key. If the key
* is not found in the property file a SettingNotFoundException is thrown.
- *
+ *
* @param key
* get the value for that key in the property file
* @return the value of the property key.
@@ -490,17 +504,10 @@ public class SettingsReader implements Serializable
return result;
}
-
- // TODO in the next change request, the Setting system will be refactored
- // this is just for testing purposes.
- public void setSetting(String key, String value)
- {
- properties_.setProperty(key, value);
- }
/**
* Relocates the relative file.
- *
+ *
* @param file
* The relative file.
* @return Returns the usable file.
@@ -519,7 +526,7 @@ public class SettingsReader implements Serializable
/**
* This method returns a property value to the corresponding key. If the key
* is not found in the property file the input param defaultValue is returned.
- *
+ *
* @param key
* get the value for that key in the property file
* @param defaultValue
@@ -545,7 +552,7 @@ public class SettingsReader implements Serializable
* This method returns a property value to the corresponding key. If the key
* is not found in the property file the input param defaultKey is searched.
* If the default key is not found the input param defaultValue is returned.
- *
+ *
* @param primaryKey
* get the value for that key in the property file
* @param defaultKey
@@ -580,7 +587,7 @@ public class SettingsReader implements Serializable
* keyPrefix. The method search all keys in the property file that has the
* keyPrefix as leading substring. The <code>Object[]</code> collects all
* sub keys without the keyPrefix.
- *
+ *
* @param keyPrefix
* to search for sub keys
* @return alls keys starting with the keyPrefix
@@ -604,7 +611,7 @@ public class SettingsReader implements Serializable
* If a property value is number (interger) this method extracts the value and
* convert it to an int. If the key ist not found or the conversion fails, the
* defaultValue is returned.
- *
+ *
* @param key
* get the value for that key in the property file
* @param defaultValue
@@ -641,7 +648,7 @@ public class SettingsReader implements Serializable
* This method returns an array of sub keys (children references) of the key.
* The method is a wrapper calling the method
* {@link PropertyTree#getKeys(String key)}.
- *
+ *
* @param key
* get all sub keys for that key in the property file
* @return an list of sub keys (type String)
@@ -659,7 +666,7 @@ public class SettingsReader implements Serializable
* not overload keys. If a key is defined more than one times the last
* definition is stored it the property list. The method is a wrapper calling
* the method {@link PropertyTree#getFirstValue(String key)}.
- *
+ *
* @param key
* get the value for that key in the property file
* @return the value of the property key
@@ -678,7 +685,7 @@ public class SettingsReader implements Serializable
/**
* This method returns the PropertyTree representation of the configuration
* file.
- *
+ *
* @return Returns the pTree.
* @see PropertyTree
*/
@@ -686,20 +693,20 @@ public class SettingsReader implements Serializable
{
return pTree_;
}
-
+
/**
* Reads internal resource as string.
* @param relativePath
* @return null in case of error
*/
public String readInternalResourceAsString(String relativePath) {
-// return readAsString(getInternalResource(relativePath));
- return FileHelper.readFromInputStream(getInternalResource(relativePath));
+// return readAsString(getInternalResource(relativePath));
+ return FileHelper.readFromInputStream(getInternalResource(relativePath));
}
-
+
/**
* Get resource as stream, relative to internal resource path {@value #INTERNAL_RESOURCE_PATH}
- *
+ *
* @param relativePath
* @return
*/
@@ -717,9 +724,9 @@ public class SettingsReader implements Serializable
}
return stream;
}
-
+
/**
- * Read resource as utf8 string.
+ * Read resource as utf8 string.
* @param is
* @return <code>null</code> in case of error
*/
@@ -730,7 +737,7 @@ public class SettingsReader implements Serializable
return IOUtils.toString(is, "utf-8");
} catch (IOException e) {
logger_.info("error reading stream to string ", e);
- }
+ }
return null;
}
*/
@@ -758,11 +765,11 @@ public class SettingsReader implements Serializable
/**
* Returns the directory where temporary files should be stored.
- *
+ *
* <p>
* If the directory doesn't exist, it is created.
* </p>
- *
+ *
* @return Returns the directory where temporary files should be stored.
* @see TempDirHelper#getTemporaryDirectory()
*/
@@ -773,7 +780,7 @@ public class SettingsReader implements Serializable
/**
* Deletes all files in the temporary directory, if it exists.
- *
+ *
* <p>
* This should be used to clear temporary files when the application shuts
* down.
@@ -784,19 +791,19 @@ public class SettingsReader implements Serializable
{
TempDirHelper.clearTemporaryDirectory();
}
-
+
public static synchronized void initialize(String configdir, String tmpdir) {
-
+
String defaultConfigDeployedTo = null;
// resolve work directory
// configuration explicitely given ?
if (configdir == null) {
-
+
// configuration via system property ?
logger_.debug("No configuration directory given. Looking for system property \"" + Constants.CONFIG_DIR_SYSTEM_PROPERTY + "\".");
configdir = System.getProperty(Constants.CONFIG_DIR_SYSTEM_PROPERTY);
if (configdir == null) {
-
+
// configuration via user's home directory ?
logger_.debug("System property not set. Trying to locate configuration within the user's home directory.");
String userHome = System.getProperty("user.home");
@@ -808,7 +815,7 @@ public class SettingsReader implements Serializable
defaultConfigDeployedTo = ConfigUtils.deployDefaultConfiguration(configdir, false);
} catch (ConfigUtilsException e) {
throw new RuntimeException(e);
- }
+ }
if (defaultConfigDeployedTo != null) {
logger_.info("** Default configuration successfully deployed to \"" + defaultConfigDeployedTo + "\" **");
} else {
@@ -833,7 +840,7 @@ public class SettingsReader implements Serializable
{
throw new IllegalArgumentException("The config directory \"" + configdir + "\" does not exist or is not a directory.");
}
-
+
// resolve temporary dir
if (tmpdir == null) {
logger_.debug("Temporary directory not explicitely set. Looking for user's temp directory.");
@@ -851,14 +858,14 @@ public class SettingsReader implements Serializable
} catch (IOException e) {
tmpdir = ConfigUtils.assertFileSeparator(tmpdirFile.getPath());
}
-
+
RESOURCES_PATH = configdir;
TMP_PATH = tmpdir;
CONFIG_PATH = RESOURCES_PATH + CFG + FILE_SEP;
CERT_PATH = RESOURCES_PATH + CERT + FILE_SEP;
// ConfigUtils.printConfigInfo(logger_);
-
+
if (defaultConfigDeployedTo != null) {
logger_.debug("** Default configuration successfully deployed to \"" + defaultConfigDeployedTo + "\" **");
}
@@ -870,10 +877,10 @@ public class SettingsReader implements Serializable
{
initialize(base_dir, null);
}
-
+
/**
* Initializes the paths of the SettingsReader for web application usage.
- *
+ *
* @param base_dir
* The base directory of this web application. E.g.
* TOMCAT_HOME/webapps/pdf-as
@@ -890,14 +897,14 @@ public class SettingsReader implements Serializable
{
initialize(null);
}
-
+
static {
-
+
String versionString = "* PDF-AS library version " + PdfAS.PDFAS_VERSION + " *";
String paddingString = StringUtils.repeat("*", versionString.length());
logger_.info("PDF-AS info\n" + paddingString + "\n" + versionString + "\n" + paddingString);
}
-
+
public Properties getProperties() {
return this.properties_;
}
diff --git a/pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/commandline/Main.java b/pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/commandline/Main.java
index 1b66f53..0468160 100644
--- a/pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/commandline/Main.java
+++ b/pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/commandline/Main.java
@@ -73,7 +73,7 @@ import at.knowcenter.wag.egov.egiz.sig.SignatureTypes;
/**
* The main program entry point of the commandline tool.
- *
+ *
* @author wprinz
*/
public abstract class Main
@@ -156,18 +156,18 @@ public abstract class Main
/**
* Main program entry point.
- *
+ *
* @param args
* The commandline arguments.
* @throws IOException
- *
+ *
* @deprecated use {@link at.gv.egiz.pdfas.commandline.Main} instead
*/
public static void main(String[] args) throws IOException {
System.out.println("\nWarning: The entry point at.knowcenter.wag.egov.egiz.commandline.Main is deprecated. Use at.gv.egiz.pdfas.commandline.Main instead.\n");
at.gv.egiz.pdfas.commandline.Main.main(args);
}
-
+
/*
public static void main(String[] args) throws IOException
{
@@ -413,7 +413,7 @@ public abstract class Main
catch (PresentableException e)
{
printPresentableException(e);
-
+
if (output != null)
{
logger_.debug("Deleting output file on error.");
@@ -451,10 +451,10 @@ public abstract class Main
// }
PrintWriter messageOutput = new PrintWriter(System.out);
-
-
+
+
if (mode.equals(VALUE_MODE_SIGN))
- {
+ {
carryOutSign(input, connector, signature_mode, signature_type, pos_string, user_name, user_password, output, messageOutput);
}
else
@@ -468,22 +468,12 @@ public abstract class Main
PrintWriter messageOutput) throws PresentableException
{
messageOutput.println("Signing...");
-
- // for performance measurement
- long startTime = 0;
- long fileSize = 0;
- if (logger_.isInfoEnabled()) {
- startTime = System.currentTimeMillis();
- }
PdfDataSource pdfDataSource;
try
{
File file = new File(input);
pdfDataSource = new FileBasedPdfDataSourceImpl(file, (int)file.length());
- if (logger_.isDebugEnabled())
- fileSize = file.length();
-
}
catch (IOException e)
{
@@ -495,7 +485,7 @@ public abstract class Main
try
{
outputFile = new File(output);
-
+
dataSink = new FileBasedDataSink(outputFile);
}
catch (IOException e)
@@ -523,39 +513,23 @@ public abstract class Main
}
}
- // for performance measurement
- if (logger_.isInfoEnabled()) {
- long endTime = System.currentTimeMillis();
- String toReport = "SIGN;" + signature_mode + ";" + input + ";"+ fileSize + ";" + (endTime - startTime);
- logger_.info(toReport);
- }
-
messageOutput.println("Signing was successful.");
}
public static void carryOutVerify(String input, String connector, int verify_which, PrintWriter messageOutput) throws PresentableException
{
messageOutput.println("Verifying...");
-
- // for performance measurement
- long startTime = 0;
- long fileSize = 0;
- if (logger_.isInfoEnabled()) {
- startTime = System.currentTimeMillis();
- }
-
+
DataSource dataSource = null;
try
{
File file = new File(input);
- if (logger_.isDebugEnabled())
- fileSize = file.length();
String extension = extractExtension(input);
if (extension != null && extension.equals("txt"))
{
try
{
- FileInputStream fis = new FileInputStream(file);
+ FileInputStream fis = new FileInputStream(file);
byte[] input_bytes = new byte[(int) file.length()];
fis.read(input_bytes);
fis.close();
@@ -582,24 +556,16 @@ public abstract class Main
messageOutput.println("Verification results:");
formatVerifyResults(results, messageOutput);
-
- // for performance measurement
- if (logger_.isInfoEnabled()) {
- long endTime = System.currentTimeMillis();
- String toReport = "VERIFY;"+ input + ";"+ fileSize + ";" + (endTime - startTime) + ";" + debugVerifyResults(results);
- logger_.info(toReport);
- }
-
-
+
}
/**
* Extracts the extension from a file name string.
- *
+ *
* <p>
* The extension of a file name is whatever text follows the last '.'.
* </p>
- *
+ *
* @param file_name
* The file name.
* @return Returns the extension. If the file name ends with the '.', then an
@@ -664,14 +630,14 @@ public abstract class Main
// }
}
// logger_.debug("Finally used sign algorithm = " + signatorId);
-
+
String connectorId = CommandlineConnectorChooser.chooseCommandlineConnectorForSign(connector);
PdfAS.signCommandline(pdfDataSource, dataSink, signatorId, connectorId, signature_type, null, pos, null, null);
// PdfAS.sign(algorithm, pdfDataSource, dataSink, signature_type, connector, pos);
}
-
+
public static List processVerify(DataSourceHolder dataSource, String connector, int verify_which) throws PresentableException
{
VerificationFilterParameters parameters = SettingsHelper.readVerificationFilterParametersFromSettings();
@@ -698,7 +664,7 @@ public abstract class Main
holders_to_verify = new ArrayList();
holders_to_verify.add(holder);
}
-
+
List results = PdfAS.verifySignatureHolders(holders_to_verify, connector, false, null);
return results;
@@ -749,7 +715,7 @@ public abstract class Main
/**
* Prints that the provided option was unrecognized.
- *
+ *
* @param option
* The unrecognized option.
* @throws PresentableException
@@ -763,7 +729,7 @@ public abstract class Main
/**
* Prints that the provided value was unrecognized.
- *
+ *
* @param parameter
* The parameter, which is missing a value.
* @throws PresentableException
@@ -777,7 +743,7 @@ public abstract class Main
/**
* Prints that the provided value was unrecognized.
- *
+ *
* @param value
* The unrecognized value.
* @throws PresentableException
@@ -791,7 +757,7 @@ public abstract class Main
/**
* Prints that the provided additional commandline argument was unrecognized.
- *
+ *
* @param argument
* The unrecognized argument.
* @throws PresentableException
@@ -805,7 +771,7 @@ public abstract class Main
/**
* Prints that a certain parameter was missing.
- *
+ *
* @param missing_term
* A description of the missing parameter ("e.g. a mode").
* @param parameter
@@ -820,7 +786,7 @@ public abstract class Main
/**
* Prints that something is missing.
- *
+ *
* @param missing_term
* A descriptive message of the missing thing.
* @throws PresentableException
@@ -834,7 +800,7 @@ public abstract class Main
/**
* Prints out the ErrorCodeException in a descriptive form.
- *
+ *
* @param ece
* The ErrorCodeException to be printed.
*/
@@ -868,7 +834,7 @@ public abstract class Main
/**
* Prints the usage text.
- *
+ *
* @param writer
* The writer to print the text to.
* @throws PresentableException
@@ -920,7 +886,9 @@ public abstract class Main
writer.print(" " + PARAMETER_SIGNATURE_TYPE + " <");
SignatureTypes sig_types = SignatureTypes.getInstance();
SettingsReader settings = SettingsReader.getInstance();
- Set types_array = sig_types.getSignatureTypes();
+ // show only signature profiles that can be used for signature
+// Set types_array = sig_types.getSignatureTypes();
+ Set types_array = sig_types.getSignatureTypesForSignature();
Iterator it = types_array.iterator();
while (it.hasNext())
{
@@ -973,7 +941,7 @@ public abstract class Main
/**
* Checks the value for correctness.
- *
+ *
* @param mode
* The parameter's value.
* @return Returns true, if the value is correct, false otherwise.
@@ -985,7 +953,7 @@ public abstract class Main
/**
* Checks the value for correctness.
- *
+ *
* @param signature_mode
* The parameter's value.
* @return Returns true, if the value is correct, false otherwise.
@@ -998,7 +966,7 @@ public abstract class Main
/**
* Checks the value for correctness.
- *
+ *
* @param connector
* The parameter's value.
* @return Returns true, if the value is correct, false otherwise.
@@ -1012,7 +980,7 @@ public abstract class Main
/**
* Checks the value for correctness.
- *
+ *
* @param signature_type
* The parameter's value.
* @return Returns true, if the value is correct, false otherwise.
@@ -1020,8 +988,8 @@ public abstract class Main
protected static boolean checkSignatureType(String signature_type) throws SignatureTypesException
{
return SignatureTypes.getInstance().getSignatureTypes().contains(signature_type);
-
- // exthex: uuuaaaahhhhh WHY??? wprinz again?, dont do that. Use List.contains(o), please
+
+ // exthex: uuuaaaahhhhh WHY??? wprinz again?, dont do that. Use List.contains(o), please
// take a java course and read: http://www.amazon.de/Java-f%C3%BCr-Dummies-Barry-Burd/dp/382662999X
// List types_array = sig_types.getSignatureTypes();
// Iterator it = types_array.iterator();
@@ -1038,7 +1006,7 @@ public abstract class Main
/**
* Translates the commandline argument to a PDF-AS-ID.
- *
+ *
* @param signature_mode
* The signator mode commandline argument.
* @return Returns the corresponding PDFASID.
@@ -1066,7 +1034,7 @@ public abstract class Main
/**
* Formats the verification results.
- *
+ *
* @param results
* The List of SignatureResponse verification results.
* @param writer
@@ -1088,12 +1056,12 @@ public abstract class Main
}
}
}
-
+
/**
* Formats the verification results for debugging. Returns 0 if no error occurs or the sum of all error-codes.
- *
+ *
* @param results
- *
+ *
* @param writer
* The output sink to write the formatted text to.
* @throws SettingNotFoundException
@@ -1106,16 +1074,16 @@ public abstract class Main
while (it.hasNext())
{
SignatureResponse result = (SignatureResponse) it.next();
-
+
toreturn += Integer.valueOf(result.getSignatureCheckCode()).intValue();
}
return toreturn;
}
-
+
/**
* Formats the SignatureResponse.
- *
+ *
* @param result
* The SignatureResponse to be printed.
* @param writer
diff --git a/pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/framework/signators/BinarySignator_1_0_0.java b/pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/framework/signators/BinarySignator_1_0_0.java
index 46245d2..de94527 100644
--- a/pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/framework/signators/BinarySignator_1_0_0.java
+++ b/pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/framework/signators/BinarySignator_1_0_0.java
@@ -60,7 +60,7 @@ import com.lowagie.text.pdf.PdfPTable;
/**
* Signs the document binary.
- *
+ *
* <p>
* In prepareSign, an Incremental Update is created that contains the Signature
* block and the egiz dictionary. For formatting the layout, variable values are
@@ -72,9 +72,9 @@ import com.lowagie.text.pdf.PdfPTable;
* In finishSign, the variable fields (values, /Cert) are replaced with the
* values according to the encoding.
* </p>
- *
+ *
* @deprecated moved to new-framework
- *
+ *
* @author wprinz
*/
public class BinarySignator_1_0_0 implements Signator
@@ -131,18 +131,6 @@ public class BinarySignator_1_0_0 implements Signator
variable_field_definitions.add(sfd);
}
}
-
- //check if signature block is invisible, and if so and if also signature block is positioned
- //on a new page, prevent pdf-as to do that, because why should make a new page just for an invisible block
- //added by rpiazzi
- if (signature_object.getSignatureTypeDefinition().getInvisibleFieldDefinitions().size()==SignatureTypes.REQUIRED_SIG_KEYS.length) {
- if (pi.isMakeNewPage()) {
- int pageNumber = pi.getPage();
- pi = new PositioningInstruction(false, pageNumber-1, 0, 0);
- }
- }
- //end added
-
IncrementalUpdateInformation iui = IncrementalUpdateHelper.writeIncrementalUpdate(pdf, pdf_table, signature_type, pi, variable_field_definitions, all_field_definitions, null, null, null);
String temp_string = iui.temp_ir_number + " " + iui.temp_ir_generation + " obj"; //$NON-NLS-1$//$NON-NLS-2$
@@ -187,7 +175,6 @@ public class BinarySignator_1_0_0 implements Signator
}
catch (UnsupportedEncodingException e)
{
- e.printStackTrace();
throw new PDFDocumentException(201, e);
}
}
@@ -198,10 +185,10 @@ public class BinarySignator_1_0_0 implements Signator
public SignResult finishSign(IncrementalUpdateInformation iui) throws PresentableException
{
restoreSignedPdf(iui);
-
+
// PdfAS.prefixID(iui.signed_signature_object, PdfAS.BINARY_ID);
fillReplacesWithValues(iui);
-
+
BinarySignature.replaceCertificate(iui);
BinarySignature.replacePlaceholders(iui);
@@ -212,7 +199,7 @@ public class BinarySignator_1_0_0 implements Signator
/**
* Reads the signature values from the signed signature object and fills the
* corresponding value in the Replaces array.
- *
+ *
* @param iui
* The IncrementalUpdateInformation.
*/
@@ -222,7 +209,7 @@ public class BinarySignator_1_0_0 implements Signator
while (it.hasNext())
{
ReplaceInfo ri = (ReplaceInfo) it.next();
-
+
ri.value = iui.signed_signature_object.retrieveStringValue(ri.sfd.field_name);
}
}
@@ -256,7 +243,7 @@ public class BinarySignator_1_0_0 implements Signator
/**
* Forms the SignatureData to be used for signing.
- *
+ *
* @param iui
* The IncrementalUpdateInformation.
* @return Returns the SignatureData to be used for signing.
diff --git a/pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/framework/signators/DetachedSignator_1_0_0.java b/pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/framework/signators/DetachedSignator_1_0_0.java
index 9ffeefe..492c5f1 100644
--- a/pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/framework/signators/DetachedSignator_1_0_0.java
+++ b/pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/framework/signators/DetachedSignator_1_0_0.java
@@ -44,12 +44,12 @@ import at.knowcenter.wag.egov.egiz.sig.connectors.bku.BKUPostConnection;
/**
* This signator is just for testing purposes.
- *
+ *
* <p>
* It doesn't modify the original document, but simply returns the XML signature
* response as the signed document.
* </p>
- *
+ *
* @author wprinz
*/
public class DetachedSignator_1_0_0 implements Signator
@@ -58,7 +58,7 @@ public class DetachedSignator_1_0_0 implements Signator
* The Pdf-AS ID of this Signator.
*/
public static final PdfASID MY_ID = new PdfASID(SignatorFactory.VENDOR, SignatorFactory.TYPE_TEST, SignatorFactory.VERSION_1_0_0);
-
+
/**
* @see at.knowcenter.wag.egov.egiz.framework.Signator#getMyId()
*/
@@ -90,12 +90,12 @@ public class DetachedSignator_1_0_0 implements Signator
IncrementalUpdateInformation iui = new IncrementalUpdateInformation();
iui.original_document = pdf;
iui.signature_type = signature_type;
- iui.pos = pos;
+ iui.pos = pos;
String document_text = PdfAS.extractNormalizedTextTextual(pdf);
iui.nonTextObjectInfos = PdfAS.extractNonTextualObjects(pdf);
// logger_.debug("signed_text = " + document_text);
-
+
DataSource ds = new TextDataSourceImpl(document_text);
iui.signature_data = new SignatureDataImpl(ds, MIME_TYPE, "UTF-8"); //$NON-NLS-1$ //$NON-NLS-2$
@@ -117,7 +117,6 @@ public class DetachedSignator_1_0_0 implements Signator
}
catch (UnsupportedEncodingException e)
{
- e.printStackTrace();
throw new PDFDocumentException(300, e);
}
}
diff --git a/pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/framework/signators/DetachedfTextualSignator_1_0_0.java b/pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/framework/signators/DetachedfTextualSignator_1_0_0.java
index 1559246..73e6afb 100644
--- a/pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/framework/signators/DetachedfTextualSignator_1_0_0.java
+++ b/pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/framework/signators/DetachedfTextualSignator_1_0_0.java
@@ -44,7 +44,7 @@ import at.knowcenter.wag.egov.egiz.sig.connectors.bku.BKUPostConnection;
/**
* Signs a document textually.
- *
+ *
* <p>
* In prepareSign, the document text is extracted and normalized.
* </p>
@@ -52,7 +52,7 @@ import at.knowcenter.wag.egov.egiz.sig.connectors.bku.BKUPostConnection;
* In finishSign, the signed SignatureObject is transformed into a Signature
* block, which is then written as an Incremental Update.
* </p>
- *
+ *
* @author wprinz
*/
public class DetachedfTextualSignator_1_0_0 implements Signator
@@ -61,12 +61,12 @@ public class DetachedfTextualSignator_1_0_0 implements Signator
* The Mime Type.
*/
public static final String MIME_TYPE = "text/xml"; //$NON-NLS-1$
-
+
/**
* The Pdf-AS ID of this Signator.
*/
public static final PdfASID MY_ID = new PdfASID(SignatorFactory.VENDOR, SignatorFactory.TYPE_DETACHED_TEXTUAL, SignatorFactory.VERSION_1_0_0);
-
+
/**
* @see at.knowcenter.wag.egov.egiz.framework.Signator#getMyId()
*/
@@ -88,7 +88,7 @@ public class DetachedfTextualSignator_1_0_0 implements Signator
* The parameter has_SIG_ID is not used by this Signator because it doesn't
* pre-format the signature block.
* </p>
- *
+ *
* @see at.knowcenter.wag.egov.egiz.framework.Signator#prepareSign(byte[],
* String, TablePos, boolean)
*/
@@ -98,12 +98,12 @@ public class DetachedfTextualSignator_1_0_0 implements Signator
IncrementalUpdateInformation iui = new IncrementalUpdateInformation();
iui.original_document = pdf;
iui.signature_type = signature_type;
- iui.pos = pos;
+ iui.pos = pos;
String document_text = PdfAS.extractNormalizedTextTextual(pdf, "cp1252");
iui.nonTextObjectInfos = PdfAS.extractNonTextualObjects(pdf);
// logger_.debug("signed_text = " + document_text);
-
+
DataSource ds = new TextDataSourceImpl(document_text);
iui.signature_data = new SignatureDataImpl(ds, MIME_TYPE, "UTF-8"); //$NON-NLS-1$ //$NON-NLS-2$
@@ -125,7 +125,6 @@ public class DetachedfTextualSignator_1_0_0 implements Signator
}
catch (UnsupportedEncodingException e)
{
- e.printStackTrace();
throw new PDFDocumentException(300, e);
}
}
diff --git a/pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/pdf/AbsoluteTextSignature.java b/pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/pdf/AbsoluteTextSignature.java
index fd59d34..7b5a968 100644
--- a/pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/pdf/AbsoluteTextSignature.java
+++ b/pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/pdf/AbsoluteTextSignature.java
@@ -73,7 +73,9 @@ public class AbsoluteTextSignature
public static List getSignatureTypesForTextAnalysis() throws SignatureTypesException
{
SignatureTypes sig_types = SignatureTypes.getInstance();
- List allSignatureTypes = sig_types.getSignatureTypeDefinitions();
+ // use only those profiles that are allowed to be used for verification
+// List allSignatureTypes = sig_types.getSignatureTypeDefinitions();
+ List<SignatureTypeDefinition> allSignatureTypes = sig_types.getSignatureTypeDefinitionsForVerification();
List textSignatureTypes = new ArrayList(allSignatureTypes.size());
Iterator it = allSignatureTypes.iterator();
diff --git a/pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/pdf/BinarySignature.java b/pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/pdf/BinarySignature.java
index ece9525..75a64f1 100644
--- a/pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/pdf/BinarySignature.java
+++ b/pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/pdf/BinarySignature.java
@@ -40,6 +40,7 @@ import java.util.Comparator;
import java.util.Iterator;
import java.util.List;
+import org.apache.commons.io.IOUtils;
import org.apache.commons.lang.ArrayUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@@ -89,25 +90,46 @@ import com.lowagie.text.pdf.PdfStamper;
import com.lowagie.text.pdf.PdfStamperImp;
import com.lowagie.text.pdf.PdfString;
import com.lowagie.text.pdf.PdfTemplate;
+import com.lowagie.text.pdf.PdfWriter;
/**
* Contains various extension functions to digitally sign documents.
- *
+ *
* <p>
* These functions are used to replace parts of the original Egiz plain text
* signature mechanism.
* </p>
- *
+ *
* @author wprinz
*/
public abstract class BinarySignature
{
//23.11.2010 changed by exthex - added replacePlaceholder(PdfStamper stamper, int pageNr, String placeholderName) method
-
+
protected static Log logger = LogFactory.getLog(BinarySignature.class);
+
+ /**
+ * The resource path of the srgb profile to be embedded in case of PDF/A-1b.
+ */
+ private static final String srgbProfileResource = "/at/gv/egiz/pdfas/itext/srgb.profile";
+
+ /**
+ * The color profile to be embedded in case of PDF/A-1b.
+ */
+ private static final byte[] SRGB_PROFILE;
+
+ static {
+ try {
+ logger.debug("Preloading srgb color profile '" + srgbProfileResource + ".");
+ SRGB_PROFILE = IOUtils.toByteArray(BinarySignature.class.getResourceAsStream(srgbProfileResource));
+ } catch (IOException e) {
+ throw new RuntimeException("Unable to preload srgb color profile.", e);
+ }
+ }
+
/**
* The tolerance area of the line break algorithm.
- *
+ *
* @see Placeholder#replacePlaceholderWithTolerance(byte[], List, byte[], int)
*/
public static final int LINE_BREAK_TOLERANCE = 10;
@@ -116,11 +138,11 @@ public abstract class BinarySignature
* The number of bytes left out for the certificate placeholder.
*/
public static final int CERTIFICATE_PLACEHOLDER_LENGTH = 10000;
-
+
/**
* The number of bytes left out for the timestamp placeholder.
*/
- public static final int TIMESTAMP_PLACEHOLDER_LENGTH = 5000;
+ public static final int TIMESTAMP_PLACEHOLDER_LENGTH = 5000;
/**
* The placeholder character used to fill out Strings in the layout process.
@@ -162,11 +184,11 @@ public abstract class BinarySignature
* The SIG_ID brev.
*/
public static final byte[] BREV_SID = { 's', 'i', 'd' };
-
+
/**
* The SIG_ALG brev.
*/
- public static final byte[] BREV_ALG = { 'a', 'l', 'g' };
+ public static final byte[] BREV_ALG = { 'a', 'l', 'g' };
/**
* No explicit encoding.
@@ -185,7 +207,7 @@ public abstract class BinarySignature
/**
* The PDFName of the Egiz Dictionary.
- *
+ *
* <p>
* Used to locate and identify the Egiz Dictionary in the document.
* </p>
@@ -195,7 +217,7 @@ public abstract class BinarySignature
/**
* The PDFName of the Original Document Size (ODS) field in an Egiz
* Dictionary.
- *
+ *
* <p>
* The ODS must be a positive integral number.
* </p>
@@ -226,7 +248,7 @@ public abstract class BinarySignature
* The PdfName of the certificate array.
*/
public static final PdfName EGIZ_CERTIFICATE_NAME = new PdfName("Cert");
-
+
/**
* The PdfName of the Timestamp
*/
@@ -239,7 +261,7 @@ public abstract class BinarySignature
/**
* The PDFName of the Signature XObject field in an Egiz Dictionary.
- *
+ *
* <p>
* This must be an indirect reference to the XObject containing the Signature
* table.
@@ -251,17 +273,17 @@ public abstract class BinarySignature
* The number placeholder that is used to give numbers a fixed length.
*/
protected static final PdfNumber NUMBER_PLACEHOLDER = new PdfNumber(999999999);
-
+
/**
* Extracts the signature text only.
- *
+ *
* <p>
* The signature text is the text of the Signature XObject.
* </p>
- *
+ *
* @param egiz_dict
* The Egiz Dictionary.
- *
+ *
* @return Returns the signature text.
*/
public static String extractSignatureTextOnly(PdfDictionary egiz_dict) throws IOException
@@ -276,7 +298,7 @@ public abstract class BinarySignature
/**
* Retrieves the size of the original document from the Egiz Dictionary.
- *
+ *
* @param egiz_dict
* The Egiz Dictionary.
* @return Returns the size (in bytes) of the original document.
@@ -292,7 +314,7 @@ public abstract class BinarySignature
/**
* Retrieves the previous Egiz dictionary from the given one, if a previous
* dictionary exists.
- *
+ *
* @param egiz_dict
* The Egiz Dictionary.
* @return Returns the previous Egiz Dictionary, or null if there is none.
@@ -306,7 +328,7 @@ public abstract class BinarySignature
/**
* Retrieves the Egiz Dictionary from the document if present.
- *
+ *
* @param reader
* The reader to retrieve the dictionary from.
* @return Returns the Egiz Dictionary, if present, or returns null, if no
@@ -327,7 +349,7 @@ public abstract class BinarySignature
/**
* Retrieves the Egiz Dictionary's indirect reference from the reader.
- *
+ *
* @param reader
* The reader.
* @return Returns the indirect reference of the Egiz Dictionary, or null, if
@@ -342,14 +364,14 @@ public abstract class BinarySignature
/**
* Retrieves the chain of Egiz Dictionaries from the reader.
- *
+ *
* <p>
* The first element in the List will be the top most (oldest) Egiz
* Dictionary. The last element in the List will be the bottom most (latest)
* Egiz Dictionary. If the list is empty, no dictionary could be found at all,
* which means that the document is not digitally signed.
* </p>
- *
+ *
* @param reader
* The reader.
* @return Returns the List of PdfDictionaries from the document.
@@ -374,7 +396,7 @@ public abstract class BinarySignature
/**
* Builds a digest of the given data.
- *
+ *
* @param data
* The data to be digested.
* @param length
@@ -393,7 +415,6 @@ public abstract class BinarySignature
}
catch (NoSuchAlgorithmException e)
{
- e.printStackTrace();
throw new PDFDocumentException(202, "Digest algorithm not supported - NoSuchAlgorithmException", e);
}
@@ -406,7 +427,7 @@ public abstract class BinarySignature
/**
* Retrieves the signable text from the given document.
- *
+ *
* @param data
* The data.
* @param ods
@@ -423,7 +444,7 @@ public abstract class BinarySignature
/**
* Fills the holes in the byte ranges with the SIGN_PLACEHOLDER.
- *
+ *
* @param data
* The given byte ranged data.
* @param byte_ranges
@@ -697,7 +718,7 @@ public abstract class BinarySignature
// throw new PresentableException(e);
// }
// }
-
+
protected static int getLineBreakTolerance(IncrementalUpdateInformation iui) throws PDFDocumentException
{
SettingsReader settings;
@@ -717,7 +738,7 @@ public abstract class BinarySignature
}
return lineBreakTolerance;
}
-
+
protected static int getCertificatePlaceholderLength(IncrementalUpdateInformation iui) throws SettingNotFoundException
{
SettingsReader settings;
@@ -737,7 +758,7 @@ public abstract class BinarySignature
}
return certLen;
}
-
+
protected static int getTimestampPlaceholderLength(IncrementalUpdateInformation iui) throws SettingNotFoundException
{
SettingsReader settings;
@@ -761,7 +782,7 @@ public abstract class BinarySignature
/**
* Signs a document with the given signature table using the Incremental
* Update method.
- *
+ *
* <p>
* The table containing the signature text will be appended. As specified by
* the parameters, the signature will be appended to the last page, or a plain
@@ -777,7 +798,7 @@ public abstract class BinarySignature
* information about the signature. Basically the size of the original
* document and the reference of the signature table.
* </p>
- *
+ *
* @param original_document
* The original document.
* @param pdf_table
@@ -811,10 +832,7 @@ public abstract class BinarySignature
// System.out.println("wprinz: STAMPING PDF");
// InputStream is = original_document.createInputStream();
- byte[] pdf_data = original_document.getAsByteArray();
- PdfReader reader = new PdfReader(pdf_data);
- PDFASUtils.checkReaderPermissions(reader);
- // is.close();
+ PdfReader reader = PDFASUtils.createPdfReaderCheckingPermissions(original_document);
OutputStream baos = written_pdf.createOutputStream("application/pdf");
// ByteArrayOutputStream baos = new ByteArrayOutputStream();
@@ -823,7 +841,7 @@ public abstract class BinarySignature
// incremental updated
// The stamper allows this by setting append = true
boolean adobeSigField = AdobeSignatureHelper.isAdobeSignatureFieldEnabled(so.getSignatureTypeDefinition().getType());
- PdfStamper stamper = null;
+ PdfStamper stamper = null;
if (adobeSigField) {
stamper = PdfStamper.createSignature(reader, baos, '\0', null, true);
} else {
@@ -843,13 +861,13 @@ public abstract class BinarySignature
{
throw new PDFDocumentException(224, "The provided page (=" + pi.getPage() + ") is out of range.");
}
-
+
if (SignaturePlaceholderContext.isSignaturePlaceholderDataSet() &&
SignaturePlaceholderContext.getSignaturePlaceholderData().getPlaceholderName() != null)
{
replacePlaceholder(stamper, pi.getPage(), SignaturePlaceholderContext.getSignaturePlaceholderData().getPlaceholderName());
}
-
+
PdfContentByte content = stamper.getOverContent(pi.getPage());
// content = StampContent einer PageStamp.
@@ -857,12 +875,12 @@ public abstract class BinarySignature
// table_height = " + pdf_table.getTotalHeight());
PdfTemplate table_template = content.createTemplate(pdf_table.getTotalWidth(), pdf_table.getTotalHeight());
- table_template.setCompress(Boolean.FALSE); // do not compress sigblock because we rewrite it afterwards for bin sig
+ table_template.setCompress(Boolean.FALSE); // do not compress sigblock because we rewrite it afterwards for bin sig
// exthex
StructContentHelper structHelper = new StructContentHelper(stamper, content, pi.getPage());
structHelper.prepareStructData(table_template);
-
+
pdf_table.writeSelectedRows(0, -1, 0, pdf_table.getTotalHeight(), table_template);
// table_template.moveTo(0, 0);
@@ -876,13 +894,13 @@ public abstract class BinarySignature
// pdf_table.writeSelectedRows(0, -1, SIGNATURE_BORDER / 2,
// table_position, content);
-
+
structHelper.beginSigBlockContent();
-
+
content.addTemplate(table_template, pi.getX(), pi.getY() - pdf_table.getTotalHeight());
-
- structHelper.endSigBlockContent();
-
+
+ structHelper.endSigBlockContent();
+
ActualTablePos atp = new ActualTablePos();
atp.page = pi.getPage();
@@ -891,13 +909,13 @@ public abstract class BinarySignature
atp.width = pdf_table.getTotalWidth();
atp.height = pdf_table.getTotalHeight();
iui.actualTablePos = atp;
-
+
structHelper.buildFigureStructData(so, table_template);
structHelper.buildSigBlockStructData();
structHelper.finishMainStructData();
-
+
structHelper.buildVerifyLinkStructData(table_template, atp);
-
+
// For debugging print a 100x100 grid
// {
// Rectangle psize = reader.getPageSizeWithRotation(pos.page);
@@ -940,7 +958,22 @@ public abstract class BinarySignature
// PdfObject value = resources.get(key);
// System.out.println(" " + key + " = " + value);
// }
-
+
+ // added by dti: fixing PDF/A-1b
+ if (PDFASUtils.isPdfAEnabled(profile)) {
+ logger.debug("Adding sRGB IEC61966-2.1 color profile (output intent) in order to satisfy PDF/A-1b requirements.");
+ PdfWriter writer = stamper.getWriter();
+ writer.setOutputIntents("Custom", "sRGB", "", "sRGB IEC61966-2.1", SRGB_PROFILE);
+ PdfArray a = writer.getExtraCatalog().getAsArray(PdfName.OUTPUTINTENTS);
+ if (a != null) {
+ PdfDictionary d = a.getAsDict(0);
+ if (d != null) {
+ // overwrite PDF/X entry with PDF/A entry
+ d.put(PdfName.S, PdfName.GTS_PDFA1);
+ }
+ }
+ }
+
// add the EGIZ dict:
if (variable_field_definitions != null)
{
@@ -964,22 +997,20 @@ public abstract class BinarySignature
}
catch (IOException e)
{
- e.printStackTrace();
throw new PresentableException(ErrorCode.CANNOT_WRITE_PDF, e);
}
catch (DocumentException e)
{
- e.printStackTrace();
throw new PresentableException(ErrorCode.CANNOT_WRITE_PDF, e);
}
}
-
+
private static void replacePlaceholder(PdfStamper stamper, int pageNr, String placeholderName) throws BadElementException, MalformedURLException, IOException, BadPdfFormatException, PresentableException {
Image img = Image.getInstance(SignaturePlaceholderData.class.getResource("empty.jpg"));
PdfImage pImg = new PdfImage(img, "Imwurscht", null);
PdfStamperImp stamperImp = (PdfStamperImp)stamper.getWriter();
PdfIndirectObject ind = stamperImp.addToBody(pImg);
-
+
PdfDictionary resources = stamper.getReader().getPageN(pageNr).getAsDict(PdfName.RESOURCES);
if (ind != null && resources != null)
{
@@ -999,11 +1030,11 @@ public abstract class BinarySignature
throw new PresentableException(ErrorCode.CANNOT_WRITE_PDF, new NullPointerException("Resource dictionary not found in document structure!"));
}
}
-
+
/**
* Creates the EGIZ Dictionary and adds it to the document.
- *
+ *
* @param stamper
* The PdfStamper.
* @param table_template
@@ -1092,11 +1123,11 @@ public abstract class BinarySignature
// /encodings
replaces_array.add(new PdfName(new String(BREV_NIL, "US-ASCII"))); // the
// /Cert
-
+
if (iui.timeStamper != null) {
encodings_array.add(new PdfName(new String(ENCODING_NIL))); // the /Timestamp
replaces_array.add(new PdfName(new String(BREV_NIL, "US-ASCII"))); // the /timestamp
-
+
}
// hidden replaces
@@ -1153,9 +1184,9 @@ public abstract class BinarySignature
}
PdfString cert_placeholder = new PdfString(cert_bytes);
cert_array.add(cert_placeholder);
- egiz_dict.put(EGIZ_CERTIFICATE_NAME, cert_array);
-
- // Timestamp
+ egiz_dict.put(EGIZ_CERTIFICATE_NAME, cert_array);
+
+ // Timestamp
if (iui.timeStamper != null) {
// only if handler is available
PdfArray timestamp_array = new PdfArray();
@@ -1167,10 +1198,10 @@ public abstract class BinarySignature
}
PdfString timestamp_placeholder = new PdfString(timestamp_bytes);
timestamp_array.add(timestamp_placeholder);
- egiz_dict.put(EGIZ_TIMESTAMP_NAME, timestamp_array);
+ egiz_dict.put(EGIZ_TIMESTAMP_NAME, timestamp_array);
}
-
+
// /Data array with hidden information
if (has_hidden_variable_fields || invisibleKZString != null)
{
@@ -1221,7 +1252,7 @@ public abstract class BinarySignature
/**
* Converts a field name (type) to the corresponding BREV.
- *
+ *
* @param type
* The field name (type).
* @return Returns the corresponding BREV, or BREV_NIL if the type is not
@@ -1261,12 +1292,12 @@ public abstract class BinarySignature
/**
* Updates the information in the egiz dictionary to reflect the real offsets
* of the byte ranges.
- *
+ *
* <p>
* This replaces the "dummy numbers" in the egiz dictionary with the correct
* values.
* </p>
- *
+ *
* @param iui
* The IncrementalUpdateInformation.
* @throws PDFDocumentException
@@ -1309,7 +1340,7 @@ public abstract class BinarySignature
byte[] cert_bytes = cert_str.getBytes("US-ASCII");
int cert_index = ByteArrayUtils.indexOf(signed_pdf, obj_start, cert_bytes);
int cert_start = cert_index + cert_bytes.length;
-
+
//Timestamp
int timestamp_index = 0;
int timestamp_start = 0;
@@ -1325,14 +1356,14 @@ public abstract class BinarySignature
int cur_pos = array_start;
int cur_br_start = 0;
-
+
// write the /encodings byte range
{
int num_replaces = calcNumReps(iui.replaces);
- int num_holes = num_replaces + 1 + 1;
+ int num_holes = num_replaces + 1 + 1;
// +1 = the /encodings hole
- // +1 = the /Cert
+ // +1 = the /Cert
// +1 = the /Timestamp
if (iui.timeStamper != null) {
num_holes += 1;
@@ -1376,7 +1407,7 @@ public abstract class BinarySignature
iui.cert_start = cert_start;
}
-
+
// write the /Timestamp byte range
if (iui.timeStamper != null) {
StringInfo byte_range = new StringInfo();
@@ -1394,7 +1425,7 @@ public abstract class BinarySignature
cur_br_start = timestamp_start + iui.timestamp_length;
iui.timestamp_start = timestamp_start;
- }
+ }
// determine the /Data byte ranges if any
List ifd = iui.invisible_field_definitions;
@@ -1411,7 +1442,7 @@ public abstract class BinarySignature
{
StringInfo si = (StringInfo) iui.kz_list.get(0);
si.string_start = hole_start;
-
+
hole_start += si.string_length + 2;
}
@@ -1468,7 +1499,7 @@ public abstract class BinarySignature
cur_pos += num_digits;
cur_pos += 1;
-
+
// update the Kennzeichnung byte ranges
cur_pos = kz_start;
for (int i = 0; i < iui.kz_list.size(); i++)
@@ -1494,7 +1525,7 @@ public abstract class BinarySignature
/**
* Replaces the certificate placeholder with the certificate from the signed
* Signature Object.
- *
+ *
* @param iui
* The IncrementalUpdateInformation.
* @throws PDFDocumentException
@@ -1550,7 +1581,7 @@ public abstract class BinarySignature
/**
* Replaces the timestam placeholder with the timestamp from the signed
* Signature Object.
- *
+ *
* @param iui
* The IncrementalUpdateInformation.
* @throws PDFDocumentException
@@ -1558,27 +1589,27 @@ public abstract class BinarySignature
public static void replaceTimestamp(IncrementalUpdateInformation iui) throws PDFDocumentException
{
String timestamp = iui.signed_signature_object.getSigTimeStamp();
- if (timestamp != null) {
+ if (timestamp != null) {
byte[] escaped = Placeholder.escapePDFString(timestamp.getBytes());
if (escaped.length > iui.timestamp_length)
{
throw new PlaceholderException("timestamp", escaped.length - iui.timestamp_length);
}
- System.arraycopy(escaped, 0, iui.signed_pdf, iui.timestamp_start, escaped.length);
+ System.arraycopy(escaped, 0, iui.signed_pdf, iui.timestamp_start, escaped.length);
}
}
-
+
/**
* Replaces the placeholders with values from the signed SignatureObject.
- *
+ *
* @param iui
* The IncrementalUpdateInformation.
* @throws PDFDocumentException
*/
public static void replacePlaceholders(IncrementalUpdateInformation iui) throws PDFDocumentException
{
- final int lineBreakTolerance = getLineBreakTolerance(iui);
-
+ final int lineBreakTolerance = getLineBreakTolerance(iui);
+
final byte[] signed_pdf = iui.signed_pdf;
// int num_replaces = calcNumReps(iui.replaces);
@@ -1661,7 +1692,7 @@ public abstract class BinarySignature
* carried out. Accordingly to this number, entries in the dictionary are
* created.
* </p>
- *
+ *
* @param replaces
* The ReplaceInfo list.
* @return Returns the number of string replaces.
@@ -1681,12 +1712,12 @@ public abstract class BinarySignature
/**
* Determines the List of ReplaceInfo objects of replaces in the content
* stream regarding the given field definitions.
- *
+ *
* <p>
* This method collects all variable String fields in a content stream and
* orders them according to their start offset.
* </p>
- *
+ *
* @param pdf
* The PDF.
* @param begin
@@ -1760,7 +1791,7 @@ public abstract class BinarySignature
/**
* Determines the Kennzeichnug in the content stream.
- *
+ *
* @param pdf
* The PDF.
* @param begin
@@ -1819,7 +1850,7 @@ public abstract class BinarySignature
/**
* Finds the index of the StringInfo within the StringInfo list that has the
* given content (caption).
- *
+ *
* @param strings
* The list of StringInfos.
* @param caption
@@ -1886,7 +1917,7 @@ public abstract class BinarySignature
/**
* Tells, if the given StringInfo contains only placeholder characters.
- *
+ *
* @param si
* The StringInfo.
* @param placeholder
@@ -1935,7 +1966,7 @@ public abstract class BinarySignature
/**
* Finds the first string after and at the given index not being a placeholder
* string.
- *
+ *
* @param strings
* The list of StringInfos.
* @param start
@@ -1958,7 +1989,7 @@ public abstract class BinarySignature
/**
* Restores the given String to its placeholder.
- *
+ *
* @param pdf
* The PDF.
* @param si
@@ -1978,7 +2009,7 @@ public abstract class BinarySignature
/**
* Reconstructs the replaces from the PDF and forms suitable value strings.
- *
+ *
* @param pdf
* The PDF.
* @param brevs
@@ -2044,7 +2075,7 @@ public abstract class BinarySignature
/**
* Reads an unsigned integer number.
- *
+ *
* @param pdf
* The PDF.
* @param start_index
@@ -2073,7 +2104,7 @@ public abstract class BinarySignature
/**
* Replaces a number by the new value.
- *
+ *
* @param pdf
* The PDF.
* @param start_index
diff --git a/pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/pdf/PDFPage.java b/pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/pdf/PDFPage.java
index 7de89d2..1a89b7b 100644
--- a/pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/pdf/PDFPage.java
+++ b/pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/pdf/PDFPage.java
@@ -25,15 +25,19 @@
*/
package at.knowcenter.wag.egov.egiz.pdf;
+import java.awt.Rectangle;
+import java.awt.geom.GeneralPath;
import java.io.IOException;
import java.util.List;
import java.util.Map;
+import org.apache.commons.lang.math.NumberUtils;
import org.apache.log4j.Logger;
import org.pdfbox.cos.COSName;
import org.pdfbox.cos.COSStream;
import org.pdfbox.pdmodel.PDPage;
import org.pdfbox.pdmodel.PDResources;
+import org.pdfbox.pdmodel.common.PDRectangle;
import org.pdfbox.pdmodel.common.PDStream;
import org.pdfbox.pdmodel.graphics.xobject.PDXObject;
import org.pdfbox.pdmodel.graphics.xobject.PDXObjectForm;
@@ -44,6 +48,21 @@ import org.pdfbox.util.TextPosition;
import org.pdfbox.util.operator.OperatorProcessor;
import at.knowcenter.wag.egov.egiz.cfg.ConfigLogger;
+import at.knowcenter.wag.egov.egiz.pdf.operator.path.construction.ClosePath;
+import at.knowcenter.wag.egov.egiz.pdf.operator.path.construction.CurveTo;
+import at.knowcenter.wag.egov.egiz.pdf.operator.path.construction.CurveToReplicateFinalPoint;
+import at.knowcenter.wag.egov.egiz.pdf.operator.path.construction.CurveToReplicateInitialPoint;
+import at.knowcenter.wag.egov.egiz.pdf.operator.path.construction.LineTo;
+import at.knowcenter.wag.egov.egiz.pdf.operator.path.construction.MoveTo;
+import at.knowcenter.wag.egov.egiz.pdf.operator.path.painting.CloseAndStrokePath;
+import at.knowcenter.wag.egov.egiz.pdf.operator.path.painting.CloseFillEvenOddAndStrokePath;
+import at.knowcenter.wag.egov.egiz.pdf.operator.path.painting.CloseFillNonZeroAndStrokePath;
+import at.knowcenter.wag.egov.egiz.pdf.operator.path.painting.EndPath;
+import at.knowcenter.wag.egov.egiz.pdf.operator.path.painting.FillEvenOddAndStrokePath;
+import at.knowcenter.wag.egov.egiz.pdf.operator.path.painting.FillNonZeroAndStrokePath;
+import at.knowcenter.wag.egov.egiz.pdf.operator.path.painting.FillPathEvenOddRule;
+import at.knowcenter.wag.egov.egiz.pdf.operator.path.painting.FillPathNonZeroWindingNumberRule;
+import at.knowcenter.wag.egov.egiz.pdf.operator.path.painting.StrokePath;
/**
* PDFPage is an inner class that is used to calculate the page length of a PDF
@@ -52,7 +71,7 @@ import at.knowcenter.wag.egov.egiz.cfg.ConfigLogger;
* This method is called when processing the FileStream. By calling the method
* {@link org.pdfbox.util.PDFStreamEngine#processStream(org.pdfbox.pdmodel.PDPage, org.pdfbox.pdmodel.PDResources, org.pdfbox.cos.COSStream)}
* the implemented method showCharacter is called.
- *
+ *
* @author wlackner
* @see PDFTextStripper
*/
@@ -67,41 +86,167 @@ public class PDFPage extends PDFTextStripper
* The maximum (lowest) y position of a character.
*/
protected float max_character_ypos = Float.NEGATIVE_INFINITY;
-
+
/**
* The maximum (lowest y position of an image.
*/
protected float max_image_ypos = Float.NEGATIVE_INFINITY;
-
+
/**
* The effective page height.
*/
protected float effectivePageHeight;
-
+
+ /**
+ * The path currently being constructed.
+ */
+ private GeneralPath currentPath = new GeneralPath();
+
+ /**
+ * The lowest position of a drawn path (originating from top).
+ */
+ private float maxPathRelatedYPositionFromTop = Float.NEGATIVE_INFINITY;
+
/**
* Constructor.
- *
+ *
* @param effectivePageHeight The height of the page to be evaluated. PDF elements outside this height will not be considered.
- *
+ *
* @throws IOException
*/
public PDFPage(float effectivePageHeight) throws IOException
{
super();
-
+
this.effectivePageHeight = effectivePageHeight;
-
+
OperatorProcessor newInvoke = new MyInvoke();
newInvoke.setContext(this);
operators.put("Do", newInvoke);
+
+ registerCustomPathOperators();
}
+ /**
+ * Registers operators responsible for path construction and painting in order to fix auto positioning on pages with
+ * path elements.
+ *
+ * @author Datentechnik Innovation GmbH
+ */
+ @SuppressWarnings("unchecked")
+ private void registerCustomPathOperators() {
+
+ // *** path construction
+
+ operators.put("m", new MoveTo(this));
+ operators.put("l", new LineTo(this));
+ operators.put("c", new CurveTo(this));
+ operators.put("y", new CurveToReplicateFinalPoint(this));
+ operators.put("v", new CurveToReplicateInitialPoint(this));
+ operators.put("h", new ClosePath(this));
+
+ // *** path painting
+
+ // "S": stroke path
+ operators.put("S", new StrokePath(this));
+ operators.put("s", new CloseAndStrokePath(this));
+ operators.put("f", new FillPathNonZeroWindingNumberRule(this));
+ operators.put("F", new FillPathNonZeroWindingNumberRule(this));
+ operators.put("f*", new FillPathEvenOddRule(this));
+ operators.put("b", new CloseFillNonZeroAndStrokePath(this));
+ operators.put("B", new FillNonZeroAndStrokePath(this));
+ operators.put("b*", new CloseFillEvenOddAndStrokePath(this));
+ operators.put("B*", new FillEvenOddAndStrokePath(this));
+ operators.put("n", new EndPath(this));
+
+ // Note: The graphic context (org.pdfbox.pdmodel.graphics.PDGraphicsState) of the underlying pdfbox library does
+ // not yet support clipping. This prevents feasible usage of clipping operators (W, W*).
+// operators.put("W", new ...(this));
+// operators.put("W*", new ...(this));
+
+ }
+
+ /**
+ * Returns the path currently being constructed.
+ *
+ * @return The path currently being constructed.
+ */
+ public GeneralPath getCurrentPath() {
+ return currentPath;
+ }
+
+ /**
+ * Sets the current path.
+ * @param currentPath The new current path.
+ */
+ public void setCurrentPath(GeneralPath currentPath) {
+ this.currentPath = currentPath;
+ }
+
+ /**
+ * Registers a rectangle that bounds the path currently being drawn.
+ *
+ * @param bounds
+ * A rectangle depicting the bounds (coordinates originating from bottom left).
+ * @author Datentechnik Innovation GmbH
+ */
+ public void registerPathBounds(Rectangle bounds) {
+ if (!bounds.isEmpty()) {
+ logger_.trace("Registering path bounds: " + bounds);
+
+ // vertical start of rectangle (counting from top of page)
+ float upperBoundYPositionFromTop;
+
+ // vertical end of rectangle (counting from top of page)
+ // this depicts the current end of path-related page content
+ float lowerBoundYPositionFromTop;
+
+ PDRectangle boundaryBox = page.findMediaBox();
+ float pageHeight;
+
+ switch (page.findRotation()) {
+ case 90: // CW
+ pageHeight = boundaryBox.getWidth();
+ upperBoundYPositionFromTop = (float) bounds.getMinX();
+ lowerBoundYPositionFromTop = (float) bounds.getMaxX();
+ break;
+ case 180:
+ pageHeight = boundaryBox.getHeight();
+ upperBoundYPositionFromTop = (float) bounds.getMinY();
+ lowerBoundYPositionFromTop = (float) bounds.getMaxY();
+ break;
+ case 270: // CCW
+ pageHeight = boundaryBox.getWidth();
+ upperBoundYPositionFromTop = pageHeight - (float) bounds.getMaxX();
+ lowerBoundYPositionFromTop = pageHeight - (float) bounds.getMinX();
+ break;
+ default:
+ pageHeight = boundaryBox.getHeight();
+ upperBoundYPositionFromTop = pageHeight - (float) bounds.getMaxY();
+ lowerBoundYPositionFromTop = pageHeight - (float) bounds.getMinY();
+ break;
+ }
+
+ // new maximum ?
+ if (lowerBoundYPositionFromTop > maxPathRelatedYPositionFromTop) {
+ // Is the rectangle (at least partly) located above the footer line?
+ // (effective page height := page height - footer line)
+ if (upperBoundYPositionFromTop <= effectivePageHeight) {
+ // yes: update current end of path-related page content
+ maxPathRelatedYPositionFromTop = lowerBoundYPositionFromTop;
+ logger_.trace("New max path related y position (from top): " + maxPathRelatedYPositionFromTop);
+ } else {
+ // no: rectangle is fully located below the footer line -> ignore
+ logger_.trace("Ignoring path bound below the footer line.");
+ }
+ }
+ }
+ }
protected void processOperator(PDFOperator operator, List arguments) throws IOException
{
- //logger_.debug("operator = " + operator);
-
- super.processOperator(operator, arguments);
+// logger_.debug("operator = " + operator);
+ super.processOperator(operator, arguments);
}
// exthex
@@ -111,7 +256,7 @@ public class PDFPage extends PDFTextStripper
* is used to calculate the latest position of a text in the page. Sorry for
* this missinterpretation of the method, but it is the only way to do this
* (provided by PDFBox)!!!
- *
+ *
* @param text
* the character to be displayed -> calculate there y position.
*/
@@ -119,7 +264,7 @@ public class PDFPage extends PDFTextStripper
{
float current_y = text.getY();
final String character = text.getCharacter();
-
+
int pageRotation = page.findRotation();
//logger_.debug("PageRotation = " + pageRotation);
if (pageRotation == 0)
@@ -146,7 +291,7 @@ public class PDFPage extends PDFTextStripper
//logger_.debug("character is below footer_line. footer_line = " + this.footer_line + ", text.character=" + character + ", y=" + current_y);
return;
}
-
+
// store ypos of the char if it is not empty
if (!character.equals(" ") && current_y > this.max_character_ypos)
{
@@ -160,26 +305,18 @@ public class PDFPage extends PDFTextStripper
// logger_.debug(new String(string));
// }
- /**
- * Returns the calculated page length.
- *
- * @return the max page length value
- */
- public float getMaxPageLength()
- {
- float max_ypos = Float.NEGATIVE_INFINITY;
-
- if (this.max_character_ypos > this.max_image_ypos)
- {
- max_ypos = this.max_character_ypos;
- }
- else
- {
- max_ypos = this.max_image_ypos;
- }
-
- return max_ypos;
- }
+ /**
+ * Returns the calculated page length.
+ *
+ * @return the max page length value
+ */
+ public float getMaxPageLength() {
+ if (logger_.isDebugEnabled()) {
+ logger_.debug("Determining page content length: text=" + max_character_ypos + ", image=" + max_image_ypos
+ + ", path=" + maxPathRelatedYPositionFromTop);
+ }
+ return NumberUtils.max(max_character_ypos, max_image_ypos, maxPathRelatedYPositionFromTop);
+ }
public class MyInvoke extends OperatorProcessor
{
@@ -192,26 +329,26 @@ public class PDFPage extends PDFTextStripper
Map xobjects = context.getXObjects();
PDXObject xobject = (PDXObject) xobjects.get(name.getName());
-
+
PDStream stream = xobject.getPDStream();
COSStream cos_stream = stream.getStream();
-
+
COSName subtype = (COSName) cos_stream.getDictionaryObject(COSName.SUBTYPE);
if (subtype.equals(COSName.IMAGE))
{
logger_.debug("XObject Image");
-
+
Matrix ctm = context.getGraphicsState().getCurrentTransformationMatrix();
logger_.debug("ctm = " + ctm);
-
+
Pos [] coordinates = new Pos [] {
new Pos(0, 0, 1),
new Pos(1, 0, 1),
new Pos(0, 1, 1),
new Pos(1, 1, 1) };
-
+
Pos [] transformed_coordinates = transtormCoordinates(coordinates, ctm);
-
+
/**********************************************************
* pdf-as fix:
* calculating min and max point of an image to look where
@@ -219,10 +356,10 @@ public class PDFPage extends PDFTextStripper
* fix solves problems with footer and images and
* placement of the signature in an image only pdf document
**********************************************************/
-
+
float actual_lowest_point = Float.NaN;
float actual_starting_point = Float.NaN;
-
+
int pageRotation = page.findRotation();
logger_.debug("PageRotation = " + pageRotation);
if (pageRotation == 0)
@@ -231,7 +368,7 @@ public class PDFPage extends PDFTextStripper
logger_.debug("min_y = " + min_y);
float page_height = page.findMediaBox().getHeight();
logger_.debug("page_height = " + page_height);
-
+
actual_lowest_point = page_height - min_y;
actual_starting_point = page_height - findMaxY(transformed_coordinates);
}
@@ -243,7 +380,7 @@ public class PDFPage extends PDFTextStripper
logger_.debug("page_width = " + page_width);
actual_lowest_point = max_x;
- actual_starting_point = findMinX(transformed_coordinates);
+ actual_starting_point = findMinX(transformed_coordinates);
}
if (pageRotation == 180)
{
@@ -257,17 +394,17 @@ public class PDFPage extends PDFTextStripper
{
float min_x = findMinX(transformed_coordinates);
logger_.debug("min_x = " + min_x);
-
+
float page_width = page.findMediaBox().getWidth();
logger_.debug("page_width = " + page_width);
-
+
actual_lowest_point = page_width - min_x;
- actual_starting_point = page_width - findMaxX(transformed_coordinates);
+ actual_starting_point = page_width - findMaxX(transformed_coordinates);
}
-
+
logger_.debug("actual_lowest_point = " + actual_lowest_point);
-
+
if (actual_lowest_point > PDFPage.this.effectivePageHeight && actual_starting_point > PDFPage.this.effectivePageHeight)
{
logger_.debug("image is below footer_line");
@@ -278,7 +415,7 @@ public class PDFPage extends PDFTextStripper
{
PDFPage.this.max_image_ypos = actual_lowest_point;
}
-
+
return;
}
@@ -297,7 +434,7 @@ public class PDFPage extends PDFTextStripper
}
}
}
-
+
public static Pos [] transtormCoordinates (Pos [] coordinates, Matrix m)
{
Pos [] transformed = new Pos [coordinates.length];
@@ -307,18 +444,18 @@ public class PDFPage extends PDFTextStripper
}
return transformed;
}
-
+
public static Pos transtormCoordinate (Pos pos, Matrix m)
{
Pos transformed = new Pos();
transformed.x = pos.x * m.getValue(0, 0) + pos.y * m.getValue(1, 0) + pos.z * m.getValue(2, 0);
transformed.y = pos.x * m.getValue(0, 1) + pos.y * m.getValue(1, 1) + pos.z * m.getValue(2, 1);
transformed.z = pos.x * m.getValue(0, 2) + pos.y * m.getValue(1, 2) + pos.z * m.getValue(2, 2);
-
+
logger_.debug(" transformed " + pos + " --> " + transformed);
return transformed;
}
-
+
public static float findMinY (Pos [] coordinates)
{
float min = Float.POSITIVE_INFINITY;
@@ -331,7 +468,7 @@ public class PDFPage extends PDFTextStripper
}
return min;
}
-
+
public static float findMaxY(Pos[] coordinates) {
float max = 0;
for (int i = 0; i < coordinates.length; i++) {
@@ -341,7 +478,7 @@ public class PDFPage extends PDFTextStripper
}
return max;
}
-
+
public static float findMaxX (Pos [] coordinates)
{
float max = Float.NEGATIVE_INFINITY;
diff --git a/pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/pdf/PDFSignatureObjectIText.java b/pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/pdf/PDFSignatureObjectIText.java
index a8a150e..3b9909f 100644
--- a/pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/pdf/PDFSignatureObjectIText.java
+++ b/pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/pdf/PDFSignatureObjectIText.java
@@ -35,6 +35,7 @@ import org.apache.log4j.Level;
import org.apache.log4j.Logger;
import at.gv.egiz.pdfas.exceptions.ErrorCode;
+import at.gv.egiz.pdfas.utils.PDFASUtils;
import at.knowcenter.wag.egov.egiz.cfg.ConfigLogger;
import at.knowcenter.wag.egov.egiz.cfg.SettingsReader;
import at.knowcenter.wag.egov.egiz.exceptions.PDFDocumentException;
@@ -59,7 +60,7 @@ import com.lowagie.text.pdf.SubsetLocal;
* This class is the IText implementation of the PDFSignatureObject interface.
* The class takes an abstract definition of a signature object and convert them
* into a pdf table that is used to sign a pdf document.
- *
+ *
* @author wlackner
* @see at.knowcenter.wag.egov.egiz.sig.SignatureObject
* @see at.knowcenter.wag.egov.egiz.table.Table
@@ -76,8 +77,6 @@ public class PDFSignatureObjectIText implements PDFSignatureObject
// Also fixed a minor bug which prevented proper style inheritment (Bug Nr. #534).
// 04.11.2010 changed by exthex - allow setting separate hAlign and vAlign for image cells analog to value cells.
- private static final String SIG_PDFA1_B_VALID = "SIG_PDFA1B_VALID";
-
/**
* The default font definition
*/
@@ -116,7 +115,7 @@ public class PDFSignatureObjectIText implements PDFSignatureObject
/**
* The empty constructor. It loads the ui definitions from signature tables
* and init the align map.
- *
+ *
* @throws PDFDocumentException
*/
public PDFSignatureObjectIText() throws PDFDocumentException
@@ -127,7 +126,7 @@ public class PDFSignatureObjectIText implements PDFSignatureObject
/**
* load the class settings
- *
+ *
* @throws PDFDocumentException
* @see SettingsReader
*/
@@ -174,7 +173,7 @@ public class PDFSignatureObjectIText implements PDFSignatureObject
/**
* Set the abstract signature definition.
- *
+ *
* @param signatorObject
* the abstract signator object
* @see at.knowcenter.wag.egov.egiz.pdf.PDFSignatureObject#setSignatorObject(at.knowcenter.wag.egov.egiz.sig.SignatureObject)
@@ -186,7 +185,7 @@ public class PDFSignatureObjectIText implements PDFSignatureObject
/**
* This method maps the table cell definitions to the pdfCell element.
- *
+ *
* @param pdfCell
* the pdf cell to be styled
* @param cellStyle
@@ -226,7 +225,7 @@ public class PDFSignatureObjectIText implements PDFSignatureObject
align = ((Integer) alignMap_.get(cellStyle.getVAlign())).intValue();
if (align != -1)
pdfCell.setVerticalAlignment(align);
-
+
align = -1;
if (type == Entry.TYPE_VALUE && cellStyle.getValueHAlign() != null)
align = ((Integer) alignMap_.get(cellStyle.getValueHAlign())).intValue();
@@ -242,7 +241,7 @@ public class PDFSignatureObjectIText implements PDFSignatureObject
/**
* This method maps the cell font definition to the iText Font Object
- *
+ *
* @param fontString
* @return the corresponding iText Font Object
* @see com.lowagie.text.Font
@@ -277,12 +276,12 @@ public class PDFSignatureObjectIText implements PDFSignatureObject
int face = ((Integer) font_face).intValue();
float height = Float.parseFloat(font_arr[1]);
int weight = ((Integer) font_weight).intValue();
-
+
font = new Font(face, height, weight);
fontMap_.put(fontString, font);
return font;
}
-
+
/**
* Creates a custom
* @param fontString
@@ -305,15 +304,15 @@ public class PDFSignatureObjectIText implements PDFSignatureObject
}
}
logger_.debug("TrueType Font detected:"+fontName +" ("+fontSize+")");
-
+
try {
Font font = (Font) fontMap_.get(fontString);
-
+
if (font == null) {
logger_.debug("Font \"" + fontString + "\" not in cache. Instantiating font.");
String fontPath = SettingsReader.RESOURCES_PATH + "fonts" + File.separator + fontName;
logger_.debug("Instantiating \"" + fontPath + "\".");
-
+
font = new Font(BaseFont.createFont(fontPath, BaseFont.WINANSI, true), fontSize);
fontMap_.put(fontString, font);
}
@@ -334,7 +333,7 @@ public class PDFSignatureObjectIText implements PDFSignatureObject
* <li>images</li>
* <li>tables</li>
* </ul>
- *
+ *
* @param abstractCell
* the abstract cell definition
* @return the new redererd pdf table cell
@@ -345,27 +344,8 @@ public class PDFSignatureObjectIText implements PDFSignatureObject
*/
private PdfPCell renderCell(Entry abstractCell) throws PDFDocumentException
{
- boolean pdfaValid =false;
- try
- {
- String profileid = sigObject_.getSignatureTypeDefinition().getType();
- String pdfa = SettingsReader.getInstance().getSetting("sig_obj." +profileid+".key."+SIG_PDFA1_B_VALID, "default."+SIG_PDFA1_B_VALID, "false");
- pdfaValid= "true".equalsIgnoreCase(pdfa);
-
-// exthex test
- //SubsetLocal.set(!pdfaValid);
-
-// boolean forceSubset = true; // get this from config, default to false
- //String
-
- //SubsetLocal.set(true); // exthex
-
- logger_.trace("Sign PDF/A compliant:"+pdfa);
- } catch (SettingsException e1)
- {
- logger_.error(e1);
- }
-
+ boolean pdfaValid = PDFASUtils.isPdfAEnabled(sigObject_.getSignatureTypeDefinition().getType());
+
PdfPCell pdf_cell = null;
Style cell_style = abstractCell.getStyle();
boolean isValue = true;
@@ -384,7 +364,7 @@ public class PDFSignatureObjectIText implements PDFSignatureObject
{
font_string = cell_style.getValueFont();
}
-
+
logger_.trace("using cell font: "+font_string);
Font cell_font;
@@ -402,7 +382,7 @@ public class PDFSignatureObjectIText implements PDFSignatureObject
}
// exthex
if (pdfaValid && abstractCell.getType() == Entry.TYPE_VALUE) {
- SubsetLocal.addNonSubsetFont(cell_font.getBaseFont());
+ SubsetLocal.addNonSubsetFont(cell_font.getBaseFont());
}
Phrase text_phrase = new Phrase(text, cell_font);
pdf_cell = new PdfPCell(text_phrase);
@@ -429,9 +409,9 @@ public class PDFSignatureObjectIText implements PDFSignatureObject
}
Image image = Image.getInstance(img_file.getCanonicalPath());
logger_.debug("Using image file \"" + img_file.getCanonicalPath() + "\".");
-
+
image.scaleToFit(80.0f, 80.0f);
- boolean fit = true;
+ boolean fit = true;
Style.ImageScaleToFit istf = cell_style.getImageScaleToFit();
if (istf != null)
{
@@ -490,7 +470,7 @@ public class PDFSignatureObjectIText implements PDFSignatureObject
* This method visualize an abstract table into a corresponding pdf table. The
* new pdf table is redered and get the style information from the abstract
* cell.
- *
+ *
* @param abstractTable
* the abstract table definition
* @return the new redererd pdf table cell
@@ -558,7 +538,7 @@ public class PDFSignatureObjectIText implements PDFSignatureObject
/**
* This method creates the pdf table object. It takes the abstract table
* definition from the signature object and render the abstract table.
- *
+ *
* @param sigObject
* the signature object, the base for the abstract table definition
* @return R
@@ -587,7 +567,7 @@ public class PDFSignatureObjectIText implements PDFSignatureObject
/**
* Converts the current abstract signature object in a pdf signature object
* implementation
- *
+ *
* @return the converted pdf signature object
* @see at.knowcenter.wag.egov.egiz.pdf.PDFSignatureObject#getSignatureObject()
*/
@@ -603,11 +583,11 @@ public class PDFSignatureObjectIText implements PDFSignatureObject
/**
* Converts a abstract signature object in a pdf signature object
* implementation
- *
+ *
* @param sigObject
* the abstract signatorObject to convert
* @return the converted pdf signature object
- * @throws PDFDocumentException
+ * @throws PDFDocumentException
* @see at.knowcenter.wag.egov.egiz.pdf.PDFSignatureObject#getSignatureObject(at.knowcenter.wag.egov.egiz.sig.SignatureObject)
*/
public Object getSignatureObject(SignatureObject sigObject) throws PDFDocumentException
diff --git a/pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/pdf/PDFUtilities.java b/pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/pdf/PDFUtilities.java
index bdc1078..b3adb71 100644
--- a/pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/pdf/PDFUtilities.java
+++ b/pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/pdf/PDFUtilities.java
@@ -32,6 +32,7 @@ import java.util.List;
import at.gv.egiz.pdfas.framework.input.PdfDataSource;
import at.gv.egiz.pdfas.impl.input.ByteArrayPdfDataSourceImpl;
+import at.gv.egiz.pdfas.utils.PDFASUtils;
import org.pdfbox.pdfparser.PDFParser;
import org.pdfbox.pdmodel.PDDocument;
@@ -44,7 +45,7 @@ import com.lowagie.text.DocumentException;
/**
* Contains useful helpers for accessing PDF documents.
- *
+ *
* @author wprinz
* @author mruhmer
*/
@@ -52,12 +53,13 @@ public abstract class PDFUtilities
{
public static float calculatePageLength(final PdfDataSource pdfDataSource, int page, float effectivePageHeight, int pagerotation) throws PDFDocumentException
{
+ PDDocument pdfDocument_ = null;
try
{
//ByteArrayInputStream original_bais = new ByteArrayInputStream(pdf);
//byte [] normalized_pdf = TextualSignature.normalizePDF(original_bais);
byte [] normalized_pdf = TextualSignature.normalizePDF(pdfDataSource);
-
+
// PERF: The whole PDF normalization process is costy
ByteArrayInputStream bais = new ByteArrayInputStream(normalized_pdf);
@@ -66,9 +68,8 @@ public abstract class PDFUtilities
parser.setTempDirectory(temporary_dir);
parser.parse();
- PDDocument pdfDocument_ = parser.getPDDocument();
+ pdfDocument_ = parser.getPDDocument();
float page_length = calculatePageLength(pdfDocument_, page, effectivePageHeight, pagerotation);
- pdfDocument_.close();
return page_length;
}
catch (IOException e)
@@ -78,8 +79,10 @@ public abstract class PDFUtilities
catch (DocumentException e)
{
throw new PDFDocumentException(201, e);
+ } finally {
+ PDFASUtils.closeQuietly(pdfDocument_);
}
- }
+ }
public static float calculatePageLength(PDDocument document, int page, float effectivePageHeight, int pagerotation) throws IOException
{
//int last_page_id = document.getNumberOfPages();
@@ -87,8 +90,8 @@ public abstract class PDFUtilities
PDPage pdpage = (PDPage) allPages.get(page);
pdpage.setRotation(pagerotation);
return calculatePageLength(pdpage, effectivePageHeight);
- }
-
+ }
+
/**
* @deprecated
* @param pdf
@@ -98,12 +101,13 @@ public abstract class PDFUtilities
*/
public static float calculateLastPageLength(final byte[] pdf, float effectivePageHeight) throws PDFDocumentException
{
+ PDDocument pdfDocument_ = null;
try
{
//ByteArrayInputStream original_bais = new ByteArrayInputStream(pdf);
PdfDataSource dataSource = new ByteArrayPdfDataSourceImpl(pdf);
byte [] normalized_pdf = TextualSignature.normalizePDF(dataSource);
-
+
ByteArrayInputStream bais = new ByteArrayInputStream(normalized_pdf);
PDFParser parser = new PDFParser(bais);
@@ -111,9 +115,8 @@ public abstract class PDFUtilities
parser.setTempDirectory(temporary_dir);
parser.parse();
- PDDocument pdfDocument_ = parser.getPDDocument();
+ pdfDocument_ = parser.getPDDocument();
float last_page_length = calculateLastPageLength(pdfDocument_, effectivePageHeight);
- pdfDocument_.close();
return last_page_length;
}
@@ -124,6 +127,8 @@ public abstract class PDFUtilities
catch (DocumentException e)
{
throw new PDFDocumentException(201, e);
+ } finally {
+ PDFASUtils.closeQuietly(pdfDocument_);
}
}
diff --git a/pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/pdf/StructContentHelper.java b/pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/pdf/StructContentHelper.java
index a9c1c54..deb5fed 100644
--- a/pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/pdf/StructContentHelper.java
+++ b/pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/pdf/StructContentHelper.java
@@ -173,9 +173,8 @@ public class StructContentHelper implements StructContentWriter {
}
} catch (Exception ex) {
- logger.error("error", ex);
- throw new PresentableException(ErrorCode.CANNOT_WRITE_PDF,
- "error writing structured signature content", ex);
+ logger.warn("Unable to process structured document data. Going to write untagged signature block.", ex);
+ isTagged = false;
}
}
@@ -471,16 +470,38 @@ public class StructContentHelper implements StructContentWriter {
}
}
- private void checkTagging() {
- PdfDictionary markDict = stamper.getReader().getCatalog().getAsDict(PdfName.MARKINFO);
- if (markDict != null) {
- isTagged = markDict.getAsBoolean(PdfName.MARKED).booleanValue();
- }
- if (!isTagged) {
- logger.debug("input document is not tagged. no structure/wai information is written");
- }
- logger.debug("Input is tagged. Writing structure/WAI data.");
- }
+ private void checkTagging() {
+ PdfDictionary markDict = stamper.getReader().getCatalog().getAsDict(PdfName.MARKINFO);
+ if (markDict != null) {
+ isTagged = markDict.getAsBoolean(PdfName.MARKED).booleanValue();
+ }
+ if (!isTagged) {
+ logger.debug("Input document is not tagged. No structure data will be attached to signature block.");
+ } else {
+ logger.trace("Document claims to be tagged. Checking availability of structured tree root.");
+ PdfDictionary structTreeRoot;
+ if ((structTreeRoot = getStructTreeRoot()) == null) {
+ // document claimed to be tagged but document does not contain structural information
+ isTagged = false;
+ logger.debug("Document claims to be tagged structured tree root was not found.");
+ } else if (getParentTreeNums() == null) {
+ // document claimed to be tagged but document does not contain structural information
+ isTagged = false;
+ logger.debug("Document claims to be tagged but required information is missing.");
+ } else if (structTreeRoot.getDirectObject(PdfName.K) == null) {
+ // structured content
+ isTagged = false;
+ logger.debug("Document claims to be tagged but required information is missing.");
+ } else {
+ logger.debug("Input is tagged and required structure data seems to be available. Going to write structured signature block.");
+ }
+ if (!isTagged) {
+ logger.info("Unable to process structured document data. Going to write untagged signature block.");
+ }
+ }
+ }
+
+
diff --git a/pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/pdf/TextualSignature.java b/pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/pdf/TextualSignature.java
index 35a0768..3ce690b 100644
--- a/pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/pdf/TextualSignature.java
+++ b/pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/pdf/TextualSignature.java
@@ -53,7 +53,7 @@ import com.lowagie.text.pdf.PdfWriter;
/**
* Contains helper function for textual signatures.
- *
+ *
* @author wprinz
*/
public class TextualSignature
@@ -62,21 +62,22 @@ public class TextualSignature
* The logger definition.
*/
private static final Logger logger_ = ConfigLogger.getLogger(TextualSignature.class);
-
+
/**
* Extracts the document text from a given pdf.
- *
+ *
* @param pdf_stream
* The pdf_input stream.
* @return Returns the extracted document text.
- * @throws PDFDocumentException
+ * @throws PDFDocumentException
* @throws TextExtractionException
* Forwarded exception.
*/
- public static String extractTextTextual(PdfDataSource pdfDataSource, String encoding) throws PDFDocumentException
+ public static String extractTextTextual(PdfDataSource pdfDataSource, String encoding) throws PDFDocumentException
{
PerformanceCounters.textExtractions.increment();
-
+ PDDocument doc = null;
+ Document document = null;
try
{
int first_page_rotation = 0;
@@ -90,12 +91,8 @@ public class TextualSignature
// byte[] bytes = normalizePDF(pdf_stream);
- //iText
-
- byte [] pdf_data = pdfDataSource.getAsByteArray();
- PdfReader reader = new PdfReader(pdf_data);
- PDFASUtils.checkReaderPermissions(reader);
- //pdf_stream.close();
+
+ PdfReader reader = PDFASUtils.createPdfReaderCheckingPermissions(pdfDataSource);
// PERF: PDF normalization needs byte array - this is costy
ByteArrayOutputStream baos = new ByteArrayOutputStream(4096);
@@ -108,7 +105,7 @@ public class TextualSignature
// this method (although it works when a Table is appended)... very
// fragile.
- Document document = new Document();
+ document = new Document();
PdfWriter writer = PdfWriter.getInstance(document, baos);
document.open();
@@ -126,7 +123,7 @@ public class TextualSignature
first_page_rotation = new_size_withrot.getRotation();
//logger_.info("iText first_page_rotation="+new_size_withrot.getRotation());
}
- //logger_.info("iText set PageSize of page:"+page_num+" to: "+new_size_withrot);
+ //logger_.info("iText set PageSize of page:"+page_num+" to: "+new_size_withrot);
//document.setPageSize(new_size);
document.setPageSize(new_size_withrot);
document.newPage();
@@ -163,15 +160,15 @@ public class TextualSignature
//logger_.info("temporary_dir="+temporary_dir.getAbsolutePath());
parser.setTempDirectory(temporary_dir);
parser.parse();
-
- PDDocument doc = parser.getPDDocument();
+
+ doc = parser.getPDDocument();
//System.out.println("pdfBox.getNumberOfPages()"+doc.getNumberOfPages());
-
+
PDFTextStripper stripper = new PDFTextStripper();
stripper.setSortByPosition(false);
stripper.setGetFirstPageRotationFromThis(true);
stripper.setFirstPageRotation(first_page_rotation);
-
+
// stripper.setStartPage(4);
// stripper.setEndPage(4);
logger_.debug("TextualSignator extractTextTextual: Begin stripping text");
@@ -182,8 +179,7 @@ public class TextualSignature
throw new PDFDocumentException(ErrorCode.TEXT_EXTRACTION_EXCEPTION, "Unable to extract textual content.", e);
}
logger_.debug("TextualSignator extractTextTextual: Stripping text ended");
-
- doc.close();
+
//logger_.debug("TextualSignator extractTextTextual="+text);
return text;
@@ -199,39 +195,39 @@ public class TextualSignature
catch (DocumentException e)
{
throw new PDFDocumentException(ErrorCode.DOCUMENT_CANNOT_BE_READ, e);
+ } finally {
+ PDFASUtils.closeQuietly(doc);
+ PDFASUtils.closeQuietly(document);
}
}
-
+
/**
* Normalizes a given binary PDF to a version PDFbox can handle correctly.
- *
+ *
* <p>
* PDFbox has serious problems with documents that use incremental updates or
* XObject forms. Therefor use this to remove incremental updates and create a
* streamlined document.
* </p>
- *
+ *
* <p>
* Note that this has nothing to do with text normalization. It just unifies
* the PDF documents that are fed into PDFbox for text extraction and page
* length determination.
* </p>
- *
+ *
* @param input_pdf
* The input pdf to be normalized.
* @return Returns the normalized pdf.
* @throws IOException
* @throws DocumentException
- * @throws PDFDocumentException
+ * @throws PDFDocumentException
*/
public static byte[] normalizePDF(PdfDataSource pdfDataSource) throws IOException, DocumentException, PDFDocumentException
{
//iText
- byte [] pdf_data = pdfDataSource.getAsByteArray();
- PdfReader reader = new PdfReader(pdf_data);
- PDFASUtils.checkReaderPermissions(reader);
- //input_pdf.close();
-
+ PdfReader reader = PDFASUtils.createPdfReaderCheckingPermissions(pdfDataSource);
+
// PERF: PDF Normalization needs byte array
ByteArrayOutputStream baos = new ByteArrayOutputStream();
// For some reason the Reader -> ImportPage -> Writer mechanism produces
diff --git a/pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/pdf/operator/path/PathConstructionOperatorProcessor.java b/pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/pdf/operator/path/PathConstructionOperatorProcessor.java
new file mode 100644
index 0000000..143a6b6
--- /dev/null
+++ b/pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/pdf/operator/path/PathConstructionOperatorProcessor.java
@@ -0,0 +1,62 @@
+/**
+ * <copyright> Copyright 2006 by Know-Center, Graz, Austria </copyright>
+ * PDF-AS has been contracted by the E-Government Innovation Center EGIZ, a
+ * joint initiative of the Federal Chancellery Austria and Graz University of
+ * Technology.
+ *
+ * Licensed under the EUPL, Version 1.1 or - as soon they will be approved by
+ * the European Commission - subsequent versions of the EUPL (the "Licence");
+ * You may not use this work except in compliance with the Licence.
+ * You may obtain a copy of the Licence at:
+ * http://www.osor.eu/eupl/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the Licence is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the Licence for the specific language governing permissions and
+ * limitations under the Licence.
+ *
+ * This product combines work with different licenses. See the "NOTICE" text
+ * file for details on the various modules and licenses.
+ * The "NOTICE" text file is part of the distribution. Any derivative works
+ * that you distribute must include a readable copy of the "NOTICE" text file.
+ */
+package at.knowcenter.wag.egov.egiz.pdf.operator.path;
+
+import java.awt.geom.Point2D;
+
+import org.pdfbox.util.operator.OperatorProcessor;
+
+import at.knowcenter.wag.egov.egiz.pdf.PDFPage;
+
+/**
+ * Provides functions for path construction operators.
+ *
+ * @see "PDF 1.7 specification, Section 8.5.2 'Path Construction Operators'"
+ * @author Datentechnik Innovation GmbH
+ *
+ */
+public abstract class PathConstructionOperatorProcessor extends OperatorProcessor {
+
+ public PathConstructionOperatorProcessor(PDFPage context) {
+ setContext(context);
+ }
+
+ /**
+ * Transforms the given point from user space coordinates to device space coordinates based on the current
+ * transition matrix.
+ *
+ * @param x
+ * The x axis value of the user space coordinates.
+ * @param y
+ * The y axis value of the user space coordinates.
+ * @return The transformed point.
+ */
+ public Point2D transform(double x, double y) {
+ double[] position = { x, y };
+ context.getGraphicsState().getCurrentTransformationMatrix().createAffineTransform()
+ .transform(position, 0, position, 0, 1);
+ return new Point2D.Double(position[0], position[1]);
+ }
+
+}
diff --git a/pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/pdf/operator/path/PathPaintingOperatorProcessor.java b/pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/pdf/operator/path/PathPaintingOperatorProcessor.java
new file mode 100644
index 0000000..9a76f87
--- /dev/null
+++ b/pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/pdf/operator/path/PathPaintingOperatorProcessor.java
@@ -0,0 +1,43 @@
+/**
+ * <copyright> Copyright 2006 by Know-Center, Graz, Austria </copyright>
+ * PDF-AS has been contracted by the E-Government Innovation Center EGIZ, a
+ * joint initiative of the Federal Chancellery Austria and Graz University of
+ * Technology.
+ *
+ * Licensed under the EUPL, Version 1.1 or - as soon they will be approved by
+ * the European Commission - subsequent versions of the EUPL (the "Licence");
+ * You may not use this work except in compliance with the Licence.
+ * You may obtain a copy of the Licence at:
+ * http://www.osor.eu/eupl/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the Licence is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the Licence for the specific language governing permissions and
+ * limitations under the Licence.
+ *
+ * This product combines work with different licenses. See the "NOTICE" text
+ * file for details on the various modules and licenses.
+ * The "NOTICE" text file is part of the distribution. Any derivative works
+ * that you distribute must include a readable copy of the "NOTICE" text file.
+ */
+package at.knowcenter.wag.egov.egiz.pdf.operator.path;
+
+import org.pdfbox.util.operator.OperatorProcessor;
+
+import at.knowcenter.wag.egov.egiz.pdf.PDFPage;
+
+/**
+ * Provides functions for path painting operators.
+ *
+ * @see "PDF 1.7 specification, Section 8.5.2 'Path Construction Operators'"
+ * @author Datentechnik Innovation GmbH
+ *
+ */
+public abstract class PathPaintingOperatorProcessor extends OperatorProcessor {
+
+ public PathPaintingOperatorProcessor(PDFPage context) {
+ setContext(context);
+ }
+
+}
diff --git a/pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/pdf/operator/path/construction/ClosePath.java b/pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/pdf/operator/path/construction/ClosePath.java
new file mode 100644
index 0000000..ea87887
--- /dev/null
+++ b/pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/pdf/operator/path/construction/ClosePath.java
@@ -0,0 +1,68 @@
+/**
+ * <copyright> Copyright 2006 by Know-Center, Graz, Austria </copyright>
+ * PDF-AS has been contracted by the E-Government Innovation Center EGIZ, a
+ * joint initiative of the Federal Chancellery Austria and Graz University of
+ * Technology.
+ *
+ * Licensed under the EUPL, Version 1.1 or - as soon they will be approved by
+ * the European Commission - subsequent versions of the EUPL (the "Licence");
+ * You may not use this work except in compliance with the Licence.
+ * You may obtain a copy of the Licence at:
+ * http://www.osor.eu/eupl/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the Licence is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the Licence for the specific language governing permissions and
+ * limitations under the Licence.
+ *
+ * This product combines work with different licenses. See the "NOTICE" text
+ * file for details on the various modules and licenses.
+ * The "NOTICE" text file is part of the distribution. Any derivative works
+ * that you distribute must include a readable copy of the "NOTICE" text file.
+ */
+package at.knowcenter.wag.egov.egiz.pdf.operator.path.construction;
+
+import java.io.IOException;
+import java.util.List;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.pdfbox.util.PDFOperator;
+
+import at.knowcenter.wag.egov.egiz.pdf.PDFPage;
+import at.knowcenter.wag.egov.egiz.pdf.operator.path.PathConstructionOperatorProcessor;
+
+/**
+ * Close the current subpath by appending a straight line segment from the current point to the starting point of the
+ * subpath. If the current subpath is already closed, h shall donothing. This operator terminates the current subpath.
+ * Appending another segment to the current path shall begin a new subpath, even if the new segment begins at the
+ * endpoint reached by the h operation.
+ *
+ * @see "PDF 1.7 specification, Section 8.5.2 'Path Construction Operators'"
+ * @author PdfBox, modified by Datentechnik Innovation GmbH
+ */
+public class ClosePath extends PathConstructionOperatorProcessor {
+
+ private Log log = LogFactory.getLog(getClass());
+
+ public ClosePath(PDFPage context) {
+ super(context);
+ }
+
+ @Override
+ public void process(PDFOperator operator, List operands) throws IOException {
+ try {
+ PDFPage pdfPage = (PDFPage) context;
+
+ pdfPage.getCurrentPath().closePath();
+
+ if (log.isTraceEnabled()) {
+ log.trace("Closing current path.");
+ }
+ } catch (Exception e) {
+ log.warn("Error processing operator 'h'.", e);
+ }
+ }
+
+}
diff --git a/pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/pdf/operator/path/construction/CurveTo.java b/pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/pdf/operator/path/construction/CurveTo.java
new file mode 100644
index 0000000..a2fc8de
--- /dev/null
+++ b/pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/pdf/operator/path/construction/CurveTo.java
@@ -0,0 +1,85 @@
+/**
+ * <copyright> Copyright 2006 by Know-Center, Graz, Austria </copyright>
+ * PDF-AS has been contracted by the E-Government Innovation Center EGIZ, a
+ * joint initiative of the Federal Chancellery Austria and Graz University of
+ * Technology.
+ *
+ * Licensed under the EUPL, Version 1.1 or - as soon they will be approved by
+ * the European Commission - subsequent versions of the EUPL (the "Licence");
+ * You may not use this work except in compliance with the Licence.
+ * You may obtain a copy of the Licence at:
+ * http://www.osor.eu/eupl/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the Licence is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the Licence for the specific language governing permissions and
+ * limitations under the Licence.
+ *
+ * This product combines work with different licenses. See the "NOTICE" text
+ * file for details on the various modules and licenses.
+ * The "NOTICE" text file is part of the distribution. Any derivative works
+ * that you distribute must include a readable copy of the "NOTICE" text file.
+ */
+package at.knowcenter.wag.egov.egiz.pdf.operator.path.construction;
+
+import java.awt.geom.Point2D;
+import java.io.IOException;
+import java.util.List;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.pdfbox.cos.COSNumber;
+import org.pdfbox.util.PDFOperator;
+
+import at.knowcenter.wag.egov.egiz.pdf.PDFPage;
+import at.knowcenter.wag.egov.egiz.pdf.operator.path.PathConstructionOperatorProcessor;
+
+/**
+ * Append a cubic Bezier curve to the current path. The curve shall extend from the current point to the point (x3, y3),
+ * using (x1, y1) and (x2, y2) as the Bezier control points (see 8.5.2.2, "Cubic Bezier Curves"). The new current point
+ * shall be (x3, y3).
+ *
+ * @see "PDF 1.7 specification, Section 8.5.2 'Path Construction Operators'"
+ * @author PdfBox, modified by Datentechnik Innovation GmbH
+ */
+public class CurveTo extends PathConstructionOperatorProcessor {
+
+ private Log log = LogFactory.getLog(getClass());
+
+ public CurveTo(PDFPage context) {
+ super(context);
+ }
+
+ @Override
+ public void process(PDFOperator operator, List operands) throws IOException {
+ try {
+ PDFPage pdfPage = (PDFPage) context;
+
+ COSNumber x1 = (COSNumber) operands.get(0);
+ COSNumber y1 = (COSNumber) operands.get(1);
+ COSNumber x2 = (COSNumber) operands.get(2);
+ COSNumber y2 = (COSNumber) operands.get(3);
+ COSNumber x3 = (COSNumber) operands.get(4);
+ COSNumber y3 = (COSNumber) operands.get(5);
+
+ Point2D p1 = transform(x1.doubleValue(), y1.doubleValue());
+ Point2D p2 = transform(x2.doubleValue(), y2.doubleValue());
+ Point2D p3 = transform(x3.doubleValue(), y3.doubleValue());
+
+ pdfPage.getCurrentPath().curveTo(
+ (float) p1.getX(), (float) p1.getY(),
+ (float) p2.getX(), (float) p2.getY(),
+ (float) p3.getX(), (float) p3.getY()
+ );
+
+ if (log.isTraceEnabled()) {
+ log.trace("Appending cubic Bezier curve with x1:" + p1.getX() + ",y1:" + p1.getY() + ", x2:"
+ + p2.getX() + ",y2:" + p2.getY() + ", x3:" + p3.getX() + ",y3:" + p3.getY());
+ }
+ } catch (Exception e) {
+ log.warn("Error processing operator 'c'.", e);
+ }
+ }
+
+}
diff --git a/pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/pdf/operator/path/construction/CurveToReplicateFinalPoint.java b/pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/pdf/operator/path/construction/CurveToReplicateFinalPoint.java
new file mode 100644
index 0000000..bb5c86c
--- /dev/null
+++ b/pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/pdf/operator/path/construction/CurveToReplicateFinalPoint.java
@@ -0,0 +1,82 @@
+/**
+ * <copyright> Copyright 2006 by Know-Center, Graz, Austria </copyright>
+ * PDF-AS has been contracted by the E-Government Innovation Center EGIZ, a
+ * joint initiative of the Federal Chancellery Austria and Graz University of
+ * Technology.
+ *
+ * Licensed under the EUPL, Version 1.1 or - as soon they will be approved by
+ * the European Commission - subsequent versions of the EUPL (the "Licence");
+ * You may not use this work except in compliance with the Licence.
+ * You may obtain a copy of the Licence at:
+ * http://www.osor.eu/eupl/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the Licence is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the Licence for the specific language governing permissions and
+ * limitations under the Licence.
+ *
+ * This product combines work with different licenses. See the "NOTICE" text
+ * file for details on the various modules and licenses.
+ * The "NOTICE" text file is part of the distribution. Any derivative works
+ * that you distribute must include a readable copy of the "NOTICE" text file.
+ */
+package at.knowcenter.wag.egov.egiz.pdf.operator.path.construction;
+
+import java.awt.geom.Point2D;
+import java.io.IOException;
+import java.util.List;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.pdfbox.cos.COSNumber;
+import org.pdfbox.util.PDFOperator;
+
+import at.knowcenter.wag.egov.egiz.pdf.PDFPage;
+import at.knowcenter.wag.egov.egiz.pdf.operator.path.PathConstructionOperatorProcessor;
+
+/**
+ * Append a cubic Bezier curve to the current path. The curve shall extend from the current point to the point (x3, y3),
+ * using (x1, y1) and (x3, y3) as the Bezier control points (see 8.5.2.2, "Cubic Bezier Curves"). The new current point
+ * shall be (x3, y3).
+ *
+ * @see "PDF 1.7 specification, Section 8.5.2 'Path Construction Operators'"
+ * @author PdfBox, modified by Datentechnik Innovation GmbH
+ */
+public class CurveToReplicateFinalPoint extends PathConstructionOperatorProcessor {
+
+ private Log log = LogFactory.getLog(getClass());
+
+ public CurveToReplicateFinalPoint(PDFPage context) {
+ super(context);
+ }
+
+ @Override
+ public void process(PDFOperator operator, List operands) throws IOException {
+ try {
+ PDFPage pdfPage = (PDFPage) context;
+
+ COSNumber x1 = (COSNumber) operands.get(0);
+ COSNumber y1 = (COSNumber) operands.get(1);
+ COSNumber x3 = (COSNumber) operands.get(2);
+ COSNumber y3 = (COSNumber) operands.get(3);
+
+ Point2D p1 = transform(x1.doubleValue(), y1.doubleValue());
+ Point2D p3 = transform(x3.doubleValue(), y3.doubleValue());
+
+ pdfPage.getCurrentPath().curveTo(
+ (float) p1.getX(), (float) p1.getY(),
+ (float) p3.getX(), (float) p3.getY(),
+ (float) p3.getX(), (float) p3.getY()
+ );
+
+ if (log.isTraceEnabled()) {
+ log.trace("Appending cubic Bezier curve with x1:" + p1.getX() + ",y1:" + p1.getY() + ", x3:"
+ + p3.getX() + ",y3:" + p3.getY());
+ }
+ } catch (Exception e) {
+ log.warn("Error processing operator 'y'.", e);
+ }
+ }
+
+}
diff --git a/pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/pdf/operator/path/construction/CurveToReplicateInitialPoint.java b/pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/pdf/operator/path/construction/CurveToReplicateInitialPoint.java
new file mode 100644
index 0000000..b35bcaf
--- /dev/null
+++ b/pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/pdf/operator/path/construction/CurveToReplicateInitialPoint.java
@@ -0,0 +1,84 @@
+/**
+ * <copyright> Copyright 2006 by Know-Center, Graz, Austria </copyright>
+ * PDF-AS has been contracted by the E-Government Innovation Center EGIZ, a
+ * joint initiative of the Federal Chancellery Austria and Graz University of
+ * Technology.
+ *
+ * Licensed under the EUPL, Version 1.1 or - as soon they will be approved by
+ * the European Commission - subsequent versions of the EUPL (the "Licence");
+ * You may not use this work except in compliance with the Licence.
+ * You may obtain a copy of the Licence at:
+ * http://www.osor.eu/eupl/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the Licence is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the Licence for the specific language governing permissions and
+ * limitations under the Licence.
+ *
+ * This product combines work with different licenses. See the "NOTICE" text
+ * file for details on the various modules and licenses.
+ * The "NOTICE" text file is part of the distribution. Any derivative works
+ * that you distribute must include a readable copy of the "NOTICE" text file.
+ */
+package at.knowcenter.wag.egov.egiz.pdf.operator.path.construction;
+
+import java.awt.geom.Point2D;
+import java.io.IOException;
+import java.util.List;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.pdfbox.cos.COSNumber;
+import org.pdfbox.util.PDFOperator;
+
+import at.knowcenter.wag.egov.egiz.pdf.PDFPage;
+import at.knowcenter.wag.egov.egiz.pdf.operator.path.PathConstructionOperatorProcessor;
+
+/**
+ * Append a cubic Bezier curve to the current path. The curve shall extend from the current point to the point (x3, y3),
+ * using the current point and (x2, y2) as the Bezier control points (see 8.5.2.2, "Cubic Bezier Curves"). The new
+ * current point shall be (x3, y3).
+ *
+ * @see "PDF 1.7 specification, Section 8.5.2 'Path Construction Operators'"
+ * @author PdfBox, modified by Datentechnik Innovation GmbH
+ */
+public class CurveToReplicateInitialPoint extends PathConstructionOperatorProcessor {
+
+ private Log log = LogFactory.getLog(getClass());
+
+ public CurveToReplicateInitialPoint(PDFPage context) {
+ super(context);
+ }
+
+ @Override
+ public void process(PDFOperator operator, List operands) throws IOException {
+ try {
+ PDFPage pdfPage = (PDFPage) context;
+
+ COSNumber x2 = (COSNumber) operands.get(0);
+ COSNumber y2 = (COSNumber) operands.get(1);
+ COSNumber x3 = (COSNumber) operands.get(2);
+ COSNumber y3 = (COSNumber) operands.get(3);
+
+ Point2D currentPoint = pdfPage.getCurrentPath().getCurrentPoint();
+ Point2D p2 = transform(x2.doubleValue(), y2.doubleValue());
+ Point2D p3 = transform(x3.doubleValue(), y3.doubleValue());
+
+ pdfPage.getCurrentPath().curveTo(
+ (float)currentPoint.getX(), (float)currentPoint.getY(),
+ (float) p2.getX(), (float) p2.getY(),
+ (float) p3.getX(), (float) p3.getY()
+ );
+
+ if (log.isTraceEnabled()) {
+ log.trace("Appending cubic Bezier curve with x2:" + p2.getX() + ",y2:" + p2.getY() + ", x3:"
+ + p3.getX() + ",y3:" + p3.getY() + ", using current point x:" + currentPoint.getX() + ",y:"
+ + currentPoint.getY());
+ }
+ } catch (Exception e) {
+ log.warn("Error processing operator 'v'.", e);
+ }
+ }
+
+}
diff --git a/pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/pdf/operator/path/construction/LineTo.java b/pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/pdf/operator/path/construction/LineTo.java
new file mode 100644
index 0000000..ae5894d
--- /dev/null
+++ b/pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/pdf/operator/path/construction/LineTo.java
@@ -0,0 +1,71 @@
+/**
+ * <copyright> Copyright 2006 by Know-Center, Graz, Austria </copyright>
+ * PDF-AS has been contracted by the E-Government Innovation Center EGIZ, a
+ * joint initiative of the Federal Chancellery Austria and Graz University of
+ * Technology.
+ *
+ * Licensed under the EUPL, Version 1.1 or - as soon they will be approved by
+ * the European Commission - subsequent versions of the EUPL (the "Licence");
+ * You may not use this work except in compliance with the Licence.
+ * You may obtain a copy of the Licence at:
+ * http://www.osor.eu/eupl/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the Licence is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the Licence for the specific language governing permissions and
+ * limitations under the Licence.
+ *
+ * This product combines work with different licenses. See the "NOTICE" text
+ * file for details on the various modules and licenses.
+ * The "NOTICE" text file is part of the distribution. Any derivative works
+ * that you distribute must include a readable copy of the "NOTICE" text file.
+ */
+package at.knowcenter.wag.egov.egiz.pdf.operator.path.construction;
+
+import java.awt.geom.Point2D;
+import java.io.IOException;
+import java.util.List;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.pdfbox.cos.COSNumber;
+import org.pdfbox.util.PDFOperator;
+
+import at.knowcenter.wag.egov.egiz.pdf.PDFPage;
+import at.knowcenter.wag.egov.egiz.pdf.operator.path.PathConstructionOperatorProcessor;
+
+/**
+ * Append a straight line segment from the current point to the point (x, y). The new current point shall be (x, y).
+ *
+ * @see "PDF 1.7 specification, Section 8.5.2 'Path Construction Operators'"
+ * @author PdfBox, modified by Datentechnik Innovation GmbH
+ */
+public class LineTo extends PathConstructionOperatorProcessor {
+
+ private Log log = LogFactory.getLog(getClass());
+
+ public LineTo(PDFPage context) {
+ super(context);
+ }
+
+ @Override
+ public void process(PDFOperator operator, List operands) throws IOException {
+ try {
+ PDFPage pdfPage = (PDFPage) context;
+
+ COSNumber x = (COSNumber) operands.get(0);
+ COSNumber y = (COSNumber) operands.get(1);
+ Point2D p = transform(x.doubleValue(), y.doubleValue());
+
+ pdfPage.getCurrentPath().lineTo((float) p.getX(), (float) p.getY());
+
+ if (log.isTraceEnabled()) {
+ log.trace("Adding line to x:" + p.getX() + ",y:" + p.getY());
+ }
+ } catch (Exception e) {
+ log.warn("Error processing operator 'l'.", e);
+ }
+ }
+
+}
diff --git a/pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/pdf/operator/path/construction/MoveTo.java b/pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/pdf/operator/path/construction/MoveTo.java
new file mode 100644
index 0000000..b43de2e
--- /dev/null
+++ b/pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/pdf/operator/path/construction/MoveTo.java
@@ -0,0 +1,73 @@
+/**
+ * <copyright> Copyright 2006 by Know-Center, Graz, Austria </copyright>
+ * PDF-AS has been contracted by the E-Government Innovation Center EGIZ, a
+ * joint initiative of the Federal Chancellery Austria and Graz University of
+ * Technology.
+ *
+ * Licensed under the EUPL, Version 1.1 or - as soon they will be approved by
+ * the European Commission - subsequent versions of the EUPL (the "Licence");
+ * You may not use this work except in compliance with the Licence.
+ * You may obtain a copy of the Licence at:
+ * http://www.osor.eu/eupl/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the Licence is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the Licence for the specific language governing permissions and
+ * limitations under the Licence.
+ *
+ * This product combines work with different licenses. See the "NOTICE" text
+ * file for details on the various modules and licenses.
+ * The "NOTICE" text file is part of the distribution. Any derivative works
+ * that you distribute must include a readable copy of the "NOTICE" text file.
+ */
+package at.knowcenter.wag.egov.egiz.pdf.operator.path.construction;
+
+import java.awt.geom.Point2D;
+import java.io.IOException;
+import java.util.List;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.pdfbox.cos.COSNumber;
+import org.pdfbox.util.PDFOperator;
+
+import at.knowcenter.wag.egov.egiz.pdf.PDFPage;
+import at.knowcenter.wag.egov.egiz.pdf.operator.path.PathConstructionOperatorProcessor;
+
+/**
+ * Begin a new subpath by moving the current point to coordinates (x, y), omitting any connecting line segment. If the
+ * previous path construction operator in the current path was also m, the new m overrides it; no vestige of the
+ * previous m operation remains in the path.
+ *
+ * @see "PDF 1.7 specification, Section 8.5.2 'Path Construction Operators'"
+ * @author PdfBox, modified by Datentechnik Innovation GmbH
+ */
+public class MoveTo extends PathConstructionOperatorProcessor {
+
+ private Log log = LogFactory.getLog(getClass());
+
+ public MoveTo(PDFPage context) {
+ super(context);
+ }
+
+ @Override
+ public void process(PDFOperator operator, List operands) throws IOException {
+ try {
+ PDFPage pdfPage = (PDFPage) context;
+
+ COSNumber x = (COSNumber) operands.get(0);
+ COSNumber y = (COSNumber) operands.get(1);
+ Point2D p = transform(x.doubleValue(), y.doubleValue());
+
+ pdfPage.getCurrentPath().moveTo((float) p.getX(), (float) p.getY());
+
+ if (log.isTraceEnabled()) {
+ log.trace("Moving current path to x:" + p.getX() + ",y:" + p.getY());
+ }
+ } catch (Exception e) {
+ log.warn("Error processing operator 'm'.", e);
+ }
+ }
+
+}
diff --git a/pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/pdf/operator/path/painting/CloseAndStrokePath.java b/pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/pdf/operator/path/painting/CloseAndStrokePath.java
new file mode 100644
index 0000000..54f4af8
--- /dev/null
+++ b/pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/pdf/operator/path/painting/CloseAndStrokePath.java
@@ -0,0 +1,59 @@
+/**
+ * <copyright> Copyright 2006 by Know-Center, Graz, Austria </copyright>
+ * PDF-AS has been contracted by the E-Government Innovation Center EGIZ, a
+ * joint initiative of the Federal Chancellery Austria and Graz University of
+ * Technology.
+ *
+ * Licensed under the EUPL, Version 1.1 or - as soon they will be approved by
+ * the European Commission - subsequent versions of the EUPL (the "Licence");
+ * You may not use this work except in compliance with the Licence.
+ * You may obtain a copy of the Licence at:
+ * http://www.osor.eu/eupl/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the Licence is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the Licence for the specific language governing permissions and
+ * limitations under the Licence.
+ *
+ * This product combines work with different licenses. See the "NOTICE" text
+ * file for details on the various modules and licenses.
+ * The "NOTICE" text file is part of the distribution. Any derivative works
+ * that you distribute must include a readable copy of the "NOTICE" text file.
+ */
+package at.knowcenter.wag.egov.egiz.pdf.operator.path.painting;
+
+import java.io.IOException;
+import java.util.List;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.pdfbox.util.PDFOperator;
+
+import at.knowcenter.wag.egov.egiz.pdf.PDFPage;
+import at.knowcenter.wag.egov.egiz.pdf.operator.path.PathPaintingOperatorProcessor;
+
+/**
+ * Close and stroke the path. This operator shall have the same effect as the sequence <code>h S</code>.
+ *
+ * @see "PDF 1.7 specification, Section 8.5.3 'Path-Painting Operators'"
+ * @author PdfBox, modified by Datentechnik Innovation GmbH
+ */
+public class CloseAndStrokePath extends PathPaintingOperatorProcessor {
+
+ private Log log = LogFactory.getLog(getClass());
+
+ public CloseAndStrokePath(PDFPage context) {
+ super(context);
+ }
+
+ @Override
+ public void process(PDFOperator operator, List operands) throws IOException {
+ if (log.isTraceEnabled()) {
+ log.trace("Closing and stroking path.");
+ }
+ context.processOperator("h", operands);
+ context.processOperator("S", operands);
+ }
+
+}
diff --git a/pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/pdf/operator/path/painting/CloseFillEvenOddAndStrokePath.java b/pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/pdf/operator/path/painting/CloseFillEvenOddAndStrokePath.java
new file mode 100644
index 0000000..6a84cf4
--- /dev/null
+++ b/pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/pdf/operator/path/painting/CloseFillEvenOddAndStrokePath.java
@@ -0,0 +1,60 @@
+/**
+ * <copyright> Copyright 2006 by Know-Center, Graz, Austria </copyright>
+ * PDF-AS has been contracted by the E-Government Innovation Center EGIZ, a
+ * joint initiative of the Federal Chancellery Austria and Graz University of
+ * Technology.
+ *
+ * Licensed under the EUPL, Version 1.1 or - as soon they will be approved by
+ * the European Commission - subsequent versions of the EUPL (the "Licence");
+ * You may not use this work except in compliance with the Licence.
+ * You may obtain a copy of the Licence at:
+ * http://www.osor.eu/eupl/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the Licence is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the Licence for the specific language governing permissions and
+ * limitations under the Licence.
+ *
+ * This product combines work with different licenses. See the "NOTICE" text
+ * file for details on the various modules and licenses.
+ * The "NOTICE" text file is part of the distribution. Any derivative works
+ * that you distribute must include a readable copy of the "NOTICE" text file.
+ */
+package at.knowcenter.wag.egov.egiz.pdf.operator.path.painting;
+
+import java.io.IOException;
+import java.util.List;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.pdfbox.util.PDFOperator;
+
+import at.knowcenter.wag.egov.egiz.pdf.PDFPage;
+import at.knowcenter.wag.egov.egiz.pdf.operator.path.PathPaintingOperatorProcessor;
+
+/**
+ * Close, fill, and then stroke the path, using the even-odd rule to determine the region to fill. This operator shall
+ * have the same effect as the sequence <code>h B*</code>.
+ *
+ * @see "PDF 1.7 specification, Section 8.5.3 'Path-Painting Operators'"
+ * @author PdfBox, modified by Datentechnik Innovation GmbH
+ */
+public class CloseFillEvenOddAndStrokePath extends PathPaintingOperatorProcessor {
+
+ private Log log = LogFactory.getLog(getClass());
+
+ public CloseFillEvenOddAndStrokePath(PDFPage context) {
+ super(context);
+ }
+
+ @Override
+ public void process(PDFOperator operator, List operands) throws IOException {
+ if (log.isTraceEnabled()) {
+ log.trace("Closing, filling (even odd rule) and stroking path.");
+ }
+ context.processOperator("h", operands);
+ context.processOperator("B*", operands);
+ }
+
+}
diff --git a/pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/pdf/operator/path/painting/CloseFillNonZeroAndStrokePath.java b/pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/pdf/operator/path/painting/CloseFillNonZeroAndStrokePath.java
new file mode 100644
index 0000000..f8db567
--- /dev/null
+++ b/pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/pdf/operator/path/painting/CloseFillNonZeroAndStrokePath.java
@@ -0,0 +1,60 @@
+/**
+ * <copyright> Copyright 2006 by Know-Center, Graz, Austria </copyright>
+ * PDF-AS has been contracted by the E-Government Innovation Center EGIZ, a
+ * joint initiative of the Federal Chancellery Austria and Graz University of
+ * Technology.
+ *
+ * Licensed under the EUPL, Version 1.1 or - as soon they will be approved by
+ * the European Commission - subsequent versions of the EUPL (the "Licence");
+ * You may not use this work except in compliance with the Licence.
+ * You may obtain a copy of the Licence at:
+ * http://www.osor.eu/eupl/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the Licence is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the Licence for the specific language governing permissions and
+ * limitations under the Licence.
+ *
+ * This product combines work with different licenses. See the "NOTICE" text
+ * file for details on the various modules and licenses.
+ * The "NOTICE" text file is part of the distribution. Any derivative works
+ * that you distribute must include a readable copy of the "NOTICE" text file.
+ */
+package at.knowcenter.wag.egov.egiz.pdf.operator.path.painting;
+
+import java.io.IOException;
+import java.util.List;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.pdfbox.util.PDFOperator;
+
+import at.knowcenter.wag.egov.egiz.pdf.PDFPage;
+import at.knowcenter.wag.egov.egiz.pdf.operator.path.PathPaintingOperatorProcessor;
+
+/**
+ * Close, fill, and then stroke the path, using the nonzero winding number rule to determine the region to fill. This
+ * operator shall have the same effect as the sequence <code>h B</code>.
+ *
+ * @see "PDF 1.7 specification, Section 8.5.3 'Path-Painting Operators'"
+ * @author PdfBox, modified by Datentechnik Innovation GmbH
+ */
+public class CloseFillNonZeroAndStrokePath extends PathPaintingOperatorProcessor {
+
+ private Log log = LogFactory.getLog(getClass());
+
+ public CloseFillNonZeroAndStrokePath(PDFPage context) {
+ super(context);
+ }
+
+ @Override
+ public void process(PDFOperator operator, List operands) throws IOException {
+ if (log.isTraceEnabled()) {
+ log.trace("Closing, filling (non zero rule) and stroking path.");
+ }
+ context.processOperator("h", operands);
+ context.processOperator("B", operands);
+ }
+
+}
diff --git a/pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/pdf/operator/path/painting/EndPath.java b/pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/pdf/operator/path/painting/EndPath.java
new file mode 100644
index 0000000..4448a1e
--- /dev/null
+++ b/pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/pdf/operator/path/painting/EndPath.java
@@ -0,0 +1,68 @@
+/**
+ * <copyright> Copyright 2006 by Know-Center, Graz, Austria </copyright>
+ * PDF-AS has been contracted by the E-Government Innovation Center EGIZ, a
+ * joint initiative of the Federal Chancellery Austria and Graz University of
+ * Technology.
+ *
+ * Licensed under the EUPL, Version 1.1 or - as soon they will be approved by
+ * the European Commission - subsequent versions of the EUPL (the "Licence");
+ * You may not use this work except in compliance with the Licence.
+ * You may obtain a copy of the Licence at:
+ * http://www.osor.eu/eupl/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the Licence is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the Licence for the specific language governing permissions and
+ * limitations under the Licence.
+ *
+ * This product combines work with different licenses. See the "NOTICE" text
+ * file for details on the various modules and licenses.
+ * The "NOTICE" text file is part of the distribution. Any derivative works
+ * that you distribute must include a readable copy of the "NOTICE" text file.
+ */
+package at.knowcenter.wag.egov.egiz.pdf.operator.path.painting;
+
+import java.io.IOException;
+import java.util.List;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.pdfbox.util.PDFOperator;
+
+import at.knowcenter.wag.egov.egiz.pdf.PDFPage;
+import at.knowcenter.wag.egov.egiz.pdf.operator.path.PathPaintingOperatorProcessor;
+
+/**
+ * End the path object without filling or stroking it. This operator shall be a path-painting no-op, used primarily for
+ * the side effect of changing the current clipping path.
+ *
+ * @see "PDF 1.7 specification, Section 8.5.3 'Path-Painting Operators'"
+ * @author PdfBox, modified by Datentechnik Innovation GmbH
+ */
+public class EndPath extends PathPaintingOperatorProcessor {
+
+ private Log log = LogFactory.getLog(getClass());
+
+ public EndPath(PDFPage context) {
+ super(context);
+ }
+
+ @Override
+ public void process(PDFOperator operator, List operands) throws IOException {
+ try {
+ PDFPage pdfPage = (PDFPage) context;
+
+ log.debug("Ending path " + pdfPage.getCurrentPath());
+ pdfPage.getCurrentPath().reset();
+
+ if (log.isTraceEnabled()) {
+ log.trace("End path without filling or stroking.");
+ }
+
+ } catch (Exception e) {
+ log.warn("Error processing operator 'n'.", e);
+ }
+ }
+
+}
diff --git a/pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/pdf/operator/path/painting/FillEvenOddAndStrokePath.java b/pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/pdf/operator/path/painting/FillEvenOddAndStrokePath.java
new file mode 100644
index 0000000..8a42dff
--- /dev/null
+++ b/pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/pdf/operator/path/painting/FillEvenOddAndStrokePath.java
@@ -0,0 +1,72 @@
+/**
+ * <copyright> Copyright 2006 by Know-Center, Graz, Austria </copyright>
+ * PDF-AS has been contracted by the E-Government Innovation Center EGIZ, a
+ * joint initiative of the Federal Chancellery Austria and Graz University of
+ * Technology.
+ *
+ * Licensed under the EUPL, Version 1.1 or - as soon they will be approved by
+ * the European Commission - subsequent versions of the EUPL (the "Licence");
+ * You may not use this work except in compliance with the Licence.
+ * You may obtain a copy of the Licence at:
+ * http://www.osor.eu/eupl/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the Licence is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the Licence for the specific language governing permissions and
+ * limitations under the Licence.
+ *
+ * This product combines work with different licenses. See the "NOTICE" text
+ * file for details on the various modules and licenses.
+ * The "NOTICE" text file is part of the distribution. Any derivative works
+ * that you distribute must include a readable copy of the "NOTICE" text file.
+ */
+package at.knowcenter.wag.egov.egiz.pdf.operator.path.painting;
+
+import java.awt.geom.GeneralPath;
+import java.io.IOException;
+import java.util.List;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.pdfbox.util.PDFOperator;
+
+import at.knowcenter.wag.egov.egiz.pdf.PDFPage;
+import at.knowcenter.wag.egov.egiz.pdf.operator.path.PathPaintingOperatorProcessor;
+
+/**
+ * Fill and then stroke the path, using the even-odd rule to determine the region to fill. This operator shall produce
+ * the same result as <code>B</code>, except that the path is filled as if with <code>f*</code> instead of
+ * <code>f</code>.
+ *
+ * @see "PDF 1.7 specification, Section 8.5.3 'Path-Painting Operators'"
+ * @author PdfBox, modified by Datentechnik Innovation GmbH
+ */
+public class FillEvenOddAndStrokePath extends PathPaintingOperatorProcessor {
+
+ private Log log = LogFactory.getLog(getClass());
+
+ public FillEvenOddAndStrokePath(PDFPage context) {
+ super(context);
+ }
+
+ @Override
+ public void process(PDFOperator operator, List operands) throws IOException {
+ try {
+ PDFPage pdfPage = (PDFPage) context;
+
+ if (log.isTraceEnabled()) {
+ log.trace("Filling (even odd rule) and stroking path.");
+ }
+
+ GeneralPath currentPath = (GeneralPath) pdfPage.getCurrentPath().clone();
+ context.processOperator("f*", operands);
+ pdfPage.setCurrentPath(currentPath);
+ context.processOperator("S", operands);
+
+ } catch (Exception e) {
+ log.warn("Error processing operator 'B*'.", e);
+ }
+ }
+
+}
diff --git a/pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/pdf/operator/path/painting/FillNonZeroAndStrokePath.java b/pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/pdf/operator/path/painting/FillNonZeroAndStrokePath.java
new file mode 100644
index 0000000..96025ed
--- /dev/null
+++ b/pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/pdf/operator/path/painting/FillNonZeroAndStrokePath.java
@@ -0,0 +1,72 @@
+/**
+ * <copyright> Copyright 2006 by Know-Center, Graz, Austria </copyright>
+ * PDF-AS has been contracted by the E-Government Innovation Center EGIZ, a
+ * joint initiative of the Federal Chancellery Austria and Graz University of
+ * Technology.
+ *
+ * Licensed under the EUPL, Version 1.1 or - as soon they will be approved by
+ * the European Commission - subsequent versions of the EUPL (the "Licence");
+ * You may not use this work except in compliance with the Licence.
+ * You may obtain a copy of the Licence at:
+ * http://www.osor.eu/eupl/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the Licence is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the Licence for the specific language governing permissions and
+ * limitations under the Licence.
+ *
+ * This product combines work with different licenses. See the "NOTICE" text
+ * file for details on the various modules and licenses.
+ * The "NOTICE" text file is part of the distribution. Any derivative works
+ * that you distribute must include a readable copy of the "NOTICE" text file.
+ */
+package at.knowcenter.wag.egov.egiz.pdf.operator.path.painting;
+
+import java.awt.geom.GeneralPath;
+import java.io.IOException;
+import java.util.List;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.pdfbox.util.PDFOperator;
+
+import at.knowcenter.wag.egov.egiz.pdf.PDFPage;
+import at.knowcenter.wag.egov.egiz.pdf.operator.path.PathPaintingOperatorProcessor;
+
+/**
+ * Fill and then stroke the path, using the nonzero winding number rule to determine the region to fill. This operator
+ * shall produce the same result as constructing two identical path objects, painting the first with <code>f</code> and
+ * the second with <code>S</code>.
+ *
+ * @see "PDF 1.7 specification, Section 8.5.3 'Path-Painting Operators'"
+ * @author PdfBox, modified by Datentechnik Innovation GmbH
+ */
+public class FillNonZeroAndStrokePath extends PathPaintingOperatorProcessor {
+
+ private Log log = LogFactory.getLog(getClass());
+
+ public FillNonZeroAndStrokePath(PDFPage context) {
+ super(context);
+ }
+
+ @Override
+ public void process(PDFOperator operator, List operands) throws IOException {
+ try {
+ PDFPage pdfPage = (PDFPage) context;
+
+ if (log.isTraceEnabled()) {
+ log.trace("Filling (non zero rule) and stroking path.");
+ }
+
+ GeneralPath currentPath = (GeneralPath) pdfPage.getCurrentPath().clone();
+ context.processOperator("f", operands);
+ pdfPage.setCurrentPath(currentPath);
+ context.processOperator("S", operands);
+
+ } catch (Exception e) {
+ log.warn("Error processing operator 'B'.", e);
+ }
+ }
+
+}
diff --git a/pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/pdf/operator/path/painting/FillPathEvenOddRule.java b/pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/pdf/operator/path/painting/FillPathEvenOddRule.java
new file mode 100644
index 0000000..c6417ea
--- /dev/null
+++ b/pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/pdf/operator/path/painting/FillPathEvenOddRule.java
@@ -0,0 +1,71 @@
+/**
+ * <copyright> Copyright 2006 by Know-Center, Graz, Austria </copyright>
+ * PDF-AS has been contracted by the E-Government Innovation Center EGIZ, a
+ * joint initiative of the Federal Chancellery Austria and Graz University of
+ * Technology.
+ *
+ * Licensed under the EUPL, Version 1.1 or - as soon they will be approved by
+ * the European Commission - subsequent versions of the EUPL (the "Licence");
+ * You may not use this work except in compliance with the Licence.
+ * You may obtain a copy of the Licence at:
+ * http://www.osor.eu/eupl/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the Licence is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the Licence for the specific language governing permissions and
+ * limitations under the Licence.
+ *
+ * This product combines work with different licenses. See the "NOTICE" text
+ * file for details on the various modules and licenses.
+ * The "NOTICE" text file is part of the distribution. Any derivative works
+ * that you distribute must include a readable copy of the "NOTICE" text file.
+ */
+package at.knowcenter.wag.egov.egiz.pdf.operator.path.painting;
+
+import java.awt.Rectangle;
+import java.io.IOException;
+import java.util.List;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.pdfbox.util.PDFOperator;
+
+import at.knowcenter.wag.egov.egiz.pdf.PDFPage;
+import at.knowcenter.wag.egov.egiz.pdf.operator.path.PathPaintingOperatorProcessor;
+
+/**
+ * Fill the path, using the even-odd rule to determine the region to fill.
+ *
+ * @see "PDF 1.7 specification, Section 8.5.3 'Path-Painting Operators'"
+ * @author PdfBox, modified by Datentechnik Innovation GmbH
+ */
+public class FillPathEvenOddRule extends PathPaintingOperatorProcessor {
+
+ private Log log = LogFactory.getLog(getClass());
+
+ public FillPathEvenOddRule(PDFPage context) {
+ super(context);
+ }
+
+ @Override
+ public void process(PDFOperator operator, List operands) throws IOException {
+ try {
+ PDFPage pdfPage = (PDFPage) context;
+
+ pdfPage.getCurrentPath().setWindingRule(java.awt.geom.GeneralPath.WIND_EVEN_ODD);
+ Rectangle bounds = pdfPage.getCurrentPath().getBounds();
+ pdfPage.getCurrentPath().reset();
+
+ if (log.isTraceEnabled()) {
+ log.trace("Filling path, using even-odd rule.");
+ }
+
+ pdfPage.registerPathBounds(bounds);
+
+ } catch (Exception e) {
+ log.warn("Error processing operator 'f*'.", e);
+ }
+ }
+
+}
diff --git a/pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/pdf/operator/path/painting/FillPathNonZeroWindingNumberRule.java b/pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/pdf/operator/path/painting/FillPathNonZeroWindingNumberRule.java
new file mode 100644
index 0000000..b350009
--- /dev/null
+++ b/pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/pdf/operator/path/painting/FillPathNonZeroWindingNumberRule.java
@@ -0,0 +1,72 @@
+/**
+ * <copyright> Copyright 2006 by Know-Center, Graz, Austria </copyright>
+ * PDF-AS has been contracted by the E-Government Innovation Center EGIZ, a
+ * joint initiative of the Federal Chancellery Austria and Graz University of
+ * Technology.
+ *
+ * Licensed under the EUPL, Version 1.1 or - as soon they will be approved by
+ * the European Commission - subsequent versions of the EUPL (the "Licence");
+ * You may not use this work except in compliance with the Licence.
+ * You may obtain a copy of the Licence at:
+ * http://www.osor.eu/eupl/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the Licence is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the Licence for the specific language governing permissions and
+ * limitations under the Licence.
+ *
+ * This product combines work with different licenses. See the "NOTICE" text
+ * file for details on the various modules and licenses.
+ * The "NOTICE" text file is part of the distribution. Any derivative works
+ * that you distribute must include a readable copy of the "NOTICE" text file.
+ */
+package at.knowcenter.wag.egov.egiz.pdf.operator.path.painting;
+
+import java.awt.Rectangle;
+import java.io.IOException;
+import java.util.List;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.pdfbox.util.PDFOperator;
+
+import at.knowcenter.wag.egov.egiz.pdf.PDFPage;
+import at.knowcenter.wag.egov.egiz.pdf.operator.path.PathPaintingOperatorProcessor;
+
+/**
+ * Fill the path, using the nonzero winding number rule to determine the region to fill. Any subpaths that are open
+ * shall be implicitly closed before being filled.
+ *
+ * @see "PDF 1.7 specification, Section 8.5.3 'Path-Painting Operators'"
+ * @author PdfBox, modified by Datentechnik Innovation GmbH
+ */
+public class FillPathNonZeroWindingNumberRule extends PathPaintingOperatorProcessor {
+
+ private Log log = LogFactory.getLog(getClass());
+
+ public FillPathNonZeroWindingNumberRule(PDFPage context) {
+ super(context);
+ }
+
+ @Override
+ public void process(PDFOperator operator, List operands) throws IOException {
+ try {
+ PDFPage pdfPage = (PDFPage) context;
+
+ pdfPage.getCurrentPath().setWindingRule(java.awt.geom.GeneralPath.WIND_NON_ZERO);
+ Rectangle bounds = pdfPage.getCurrentPath().getBounds();
+ pdfPage.getCurrentPath().reset();
+
+ if (log.isTraceEnabled()) {
+ log.trace("Filling path, using nonzero winding number rule.");
+ }
+
+ pdfPage.registerPathBounds(bounds);
+
+ } catch (Exception e) {
+ log.warn("Error processing operator 'f/F'.", e);
+ }
+ }
+
+}
diff --git a/pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/pdf/operator/path/painting/StrokePath.java b/pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/pdf/operator/path/painting/StrokePath.java
new file mode 100644
index 0000000..9dfce7e
--- /dev/null
+++ b/pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/pdf/operator/path/painting/StrokePath.java
@@ -0,0 +1,70 @@
+/**
+ * <copyright> Copyright 2006 by Know-Center, Graz, Austria </copyright>
+ * PDF-AS has been contracted by the E-Government Innovation Center EGIZ, a
+ * joint initiative of the Federal Chancellery Austria and Graz University of
+ * Technology.
+ *
+ * Licensed under the EUPL, Version 1.1 or - as soon they will be approved by
+ * the European Commission - subsequent versions of the EUPL (the "Licence");
+ * You may not use this work except in compliance with the Licence.
+ * You may obtain a copy of the Licence at:
+ * http://www.osor.eu/eupl/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the Licence is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the Licence for the specific language governing permissions and
+ * limitations under the Licence.
+ *
+ * This product combines work with different licenses. See the "NOTICE" text
+ * file for details on the various modules and licenses.
+ * The "NOTICE" text file is part of the distribution. Any derivative works
+ * that you distribute must include a readable copy of the "NOTICE" text file.
+ */
+package at.knowcenter.wag.egov.egiz.pdf.operator.path.painting;
+
+import java.awt.Rectangle;
+import java.io.IOException;
+import java.util.List;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.pdfbox.util.PDFOperator;
+
+import at.knowcenter.wag.egov.egiz.pdf.PDFPage;
+import at.knowcenter.wag.egov.egiz.pdf.operator.path.PathPaintingOperatorProcessor;
+
+/**
+ * Strokes the path.
+ *
+ * @see "PDF 1.7 specification, Section 8.5.3 'Path-Painting Operators'"
+ * @author PdfBox, modified by Datentechnik Innovation GmbH
+ */
+public class StrokePath extends PathPaintingOperatorProcessor {
+
+ private Log log = LogFactory.getLog(getClass());
+
+ public StrokePath(PDFPage context) {
+ super(context);
+ }
+
+ @Override
+ public void process(PDFOperator operator, List operands) throws IOException {
+ try {
+ PDFPage pdfPage = (PDFPage) context;
+
+ Rectangle bounds = pdfPage.getCurrentPath().getBounds();
+ pdfPage.getCurrentPath().reset();
+
+ if (log.isTraceEnabled()) {
+ log.trace("Stroking path.");
+ }
+
+ pdfPage.registerPathBounds(bounds);
+
+ } catch (Exception e) {
+ log.warn("Error processing operator 'S'.", e);
+ }
+ }
+
+}
diff --git a/pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/sig/SignatureObject.java b/pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/sig/SignatureObject.java
index 9e28213..b5a05ed 100644
--- a/pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/sig/SignatureObject.java
+++ b/pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/sig/SignatureObject.java
@@ -77,7 +77,7 @@ import at.knowcenter.wag.egov.egiz.tools.Normalizer;
* All values that build or used by the signation creation process, call the
* external services, can read or set separately. All other values are defined
* in the settings file.
- *
+ *
* @author wlackner
* @author modified by <a href="mailto:thomas.knall@iaik.tugraz.at">Thomas Knall</a>
*/
@@ -138,7 +138,7 @@ public class SignatureObject implements Serializable
public static final String SIG_CER_DIG = "SIG_CER_DIG";
private X509Cert x509Cert_ = null;
-
+
private String timeStamp = null;
// public static final String SIG_RES = "SIG_RES";
@@ -194,7 +194,7 @@ public class SignatureObject implements Serializable
/**
* The raw xml response from the connector that was used to set the values in
* this SignatureObject.
- *
+ *
* <p>
* This is set by the Connector so that signing Applications can use the
* returned XML values.
@@ -222,7 +222,7 @@ public class SignatureObject implements Serializable
/**
* The empty constructor. It initilize the normlizer, load the settings and
* set the default styles.
- *
+ *
* @throws SignatureException
* ErrorCode:101, 400
*/
@@ -235,7 +235,7 @@ public class SignatureObject implements Serializable
/**
* This method initialize the normalizer
- *
+ *
* @throws SignatureException
* ErrorCode:400
*/
@@ -254,7 +254,7 @@ public class SignatureObject implements Serializable
/**
* This method load the signature definitions
- *
+ *
* @throws SignatureException
* ErrorCode:101
*/
@@ -296,7 +296,7 @@ public class SignatureObject implements Serializable
/**
* Dummy getter Method for debugging only
- *
+ *
* @return response string
*/
public String getSigResponse()
@@ -306,7 +306,7 @@ public class SignatureObject implements Serializable
/**
* Dummy setter Method for debugging only
- *
+ *
* @param sigRespone
* store the response string
*/
@@ -317,7 +317,7 @@ public class SignatureObject implements Serializable
/**
* This method set the signature type.
- *
+ *
* @param sigType
* the signature type to be set
* @throws SignatureTypesException
@@ -331,7 +331,7 @@ public class SignatureObject implements Serializable
/**
* Returns the default signation type
- *
+ *
* @return the key for the default signature definition, if the key is not
* found it returns null
*/
@@ -343,7 +343,7 @@ public class SignatureObject implements Serializable
/**
* This method checks if a given signature key is realy a defined signature
* key.
- *
+ *
* @param sigKey
* the key to check
* @return true if the key is correct, false if the given key is not defined
@@ -360,7 +360,7 @@ public class SignatureObject implements Serializable
* The value that has to be set would be normalized! <br>
* <b>If the key equals to <code>SIG_VALUE</code> all whitespaces are
* removed! </b> <br>
- *
+ *
* @param key
* the key to be set
* @param value
@@ -371,7 +371,7 @@ public class SignatureObject implements Serializable
public boolean setSigValue(String key, String value) {
return setSigValue(key, value, false);
}
-
+
public boolean setSigValue(String key, String value, boolean placeholder)
{
SignatureEntry sig_entry = null;
@@ -416,7 +416,7 @@ public class SignatureObject implements Serializable
/**
* Set the value and the caption to given key.
- *
+ *
* @param key
* the key of the signature object
* @param value
@@ -435,14 +435,14 @@ public class SignatureObject implements Serializable
* This method returns a value for a given signature key. If the key equals to
* <code>SIG_NORM</code> and the value is <code>null</code> the version
* string of the current normalizer is returned!
- *
+ *
* @param key
* the key to get the value for
* @return a value for the given key
*/
public String getSigValue(String key)
{
-
+
String value = null;
SignatureEntry sigEntry = null;
if (sigEntries_.containsKey(key))
@@ -462,13 +462,13 @@ public class SignatureObject implements Serializable
logger_.debug("Using override property for key '" + key + "' = " + value);
}
}
-
+
return value;
}
/**
* Sets the "Kennzeichnung".
- *
+ *
* @param kz
* The "Kennzeichnung" to be set.
*/
@@ -479,7 +479,7 @@ public class SignatureObject implements Serializable
/**
* Returns the "Kennzeichnung" of this signature.
- *
+ *
* @return Returns the "Kennzeichnung" of this signature. Returns null if
* there is no "Kennzeichnung" or it is not recognized by this
* application.
@@ -508,14 +508,14 @@ public class SignatureObject implements Serializable
* and the coresponding value is <code>null</code> the key itself is
* returned as caption! If the key does not exist the method returns
* <code>null</code>.
- *
+ *
* @param key
* the key to get the caption for
* @return a caption for the given key
*/
private String getSigCaption(String key)
{
-
+
String caption = null;
if (sigEntries_.containsKey(key))
{
@@ -667,15 +667,15 @@ public class SignatureObject implements Serializable
if (StringUtils.equals(nameFromText, nameFromCertificate)) {
return nameFromText;
}
-
+
logger_.debug("Checking RFC2253 name.");
-
+
// if we do not have a name from certificate just return the name from text
if (nameFromCertificate == null) {
logger_.debug("No certificate RFC2253 name provided. Applying less sophisticated workaround (does not cover all cases) without certificate usage.");
return prepareRFC2253Name(nameFromText);
}
-
+
// no name from text extraction available, just return name from certificate
if (nameFromText == null) {
logger_.debug("No extracted/reconstructed name available. Just returning the name from certificate: \"" + nameFromCertificate + "\".");
@@ -762,13 +762,13 @@ public class SignatureObject implements Serializable
result.append(rdnVP.getValue());
} else {
// no BER encoding -> take value from certificate
- // also take RDN from certificate if possible
+ // also take RDN from certificate if possible
String certValue = values[values.length - 1 - i].getAVA()
.getValueAsString();
String rdn = resolveRDN(nameFromCertificate, certValue, rdnVP.getRdn());
result.append(rdn + "=").append(certValue);
}
-
+
}
String merged = result.toString();
if (logger_.isDebugEnabled()) {
@@ -785,15 +785,15 @@ public class SignatureObject implements Serializable
}
return merged;
}
-
+
/**
* This method tries to resolve the RDN corresponding to a given value from the certificate String.
- * As values might occur multiple times for different RDNs, an unambiguous resolving cannot be assured.
+ * As values might occur multiple times for different RDNs, an unambiguous resolving cannot be assured.
* In case of ambiguity, the RDN extracted from text is returned by default.
- *
+ *
* This method is a bug fix for a problem that caused the verification of ZID documents to fail as the RDN
* from the extracted text ("EMAILADDRESS") was different to the RDN in the certificate ("EMAIL")
- *
+ *
* @param certString
* The String obtained from the certificate
* @param value
@@ -804,42 +804,42 @@ public class SignatureObject implements Serializable
* The resolved RDN from the certificate, or the RDN from text extraction
*/
private static String resolveRDN(String certString, String value, String extractedRDN) {
-
+
if (!certString.contains(value)) {
-
+
// given value cannot be found in certificate string
return extractedRDN;
}
-
+
if (certString.indexOf(value) != certString.lastIndexOf(value)) {
-
+
// given value is ambiguous - cannot resolve RDN from certificate string
return extractedRDN;
}
-
+
String[] parts = certString.split(",|;");
String val = value.trim();
-
+
for (int i = 0; i < parts.length; i++) {
-
+
String part = parts[i].trim();
-
+
if (part.endsWith(val)) {
-
+
// found entry - extract RDN
- String[] components = part.split("=");
+ String[] components = part.split("=");
if (components.length != 2) {
// unexpected format - return default
- return extractedRDN;
- }
+ return extractedRDN;
+ }
String rdn = components[0].trim();
- return rdn;
- }
- }
+ return rdn;
+ }
+ }
// default
return extractedRDN;
}
-
+
/**
* @return Returns the SignationIssuer.
*/
@@ -920,10 +920,10 @@ public class SignatureObject implements Serializable
}
// dferbas baik
-
+
/**
* signature algorithm if embedded
- * @param sigAlg
+ * @param sigAlg
*/
public void setSigAlg(String sigAlg)
{
@@ -937,7 +937,7 @@ public class SignatureObject implements Serializable
public String getSigAlg()
{
return getSigValue(SignatureTypes.SIG_ALG);
- }
+ }
/**
* @param certDigest
@@ -1016,7 +1016,7 @@ public class SignatureObject implements Serializable
setSigValue(SIG_CER, x509Certificate);
storeCertificate(getSignationSerialNumber(), getSignationIssuer(), x509Certificate);
}
-
+
public void setX509Certificate(X509Certificate cert)
{
try
@@ -1037,7 +1037,7 @@ public class SignatureObject implements Serializable
/**
* return the 509v3 certificate of the given serialNumber and the given issuer
* string
- *
+ *
* @param serialNumber
* the serialNumber which the certificates should load
* @param issuer
@@ -1070,7 +1070,7 @@ public class SignatureObject implements Serializable
/**
* Set the signation id's build by a BKU signated SignatureObject.
- *
+ *
* @param sigIds
* the string to store.
*/
@@ -1152,7 +1152,7 @@ public class SignatureObject implements Serializable
String productVersion = response_properties.getProperty("productVersion");
logger_.debug("productVersion = " + productVersion);
- boolean new_etsi = decideNewEtsiByBKUVersion(productVersion);
+ boolean new_etsi = decideNewEtsiByBKUVersion(productVersion);
logger_.debug("verwende neue etsi properties = " + new_etsi);
String etsi_prefix = "";
@@ -1183,7 +1183,7 @@ public class SignatureObject implements Serializable
/**
* Checks if the current SignatureObject is siganted by MOA. It checks if the
* current SignatureObject has a signation id value.
- *
+ *
* @return true if no signation id value is found, false otherwise
*/
public boolean isMOASigned()
@@ -1204,7 +1204,7 @@ public class SignatureObject implements Serializable
/**
* Tells if this SignatureObject is textual.
- *
+ *
* @return Returns true, if it is textual.
*/
public boolean isTextual()
@@ -1223,7 +1223,7 @@ public class SignatureObject implements Serializable
/**
* Tells, if this SignatureObject is binary.
- *
+ *
* @return Returns true, if it is binary.
*/
public boolean isBinary()
@@ -1237,14 +1237,14 @@ public class SignatureObject implements Serializable
{
logger_.error(e.getMessage(), e);
}
-
+
return SigKZIDHelper.isBinary(kz);
}
/**
* Takes the signation id value of the current SignatureObject and split them
* into the corresponding id array added with the id-base.
- *
+ *
* @return the id array
*/
// TODO hotifx
@@ -1328,7 +1328,7 @@ public class SignatureObject implements Serializable
real_ids[3] = "0-" + base + "-" + ids[3];
real_ids[4] = "0-" + base + "-" + ids[4];
real_ids[5] = etsi_string;
-
+
if (logger_.isDebugEnabled())
{
for (int id_idx = 0; id_idx < real_ids.length; id_idx++)
@@ -1345,7 +1345,7 @@ public class SignatureObject implements Serializable
* for equition. Used to store and find corresponting certificates.
* Normalzing: normalizing the string using the normalizer, remove all white
* spaces, encode as base64 and replace all "/" chars with "_".
- *
+ *
* @param issuer
* the issuer string to normalize
* @return the normalized issuer string
@@ -1357,7 +1357,7 @@ public class SignatureObject implements Serializable
{
if (issuer != null)
{
- // use explicit method for normalization
+ // use explicit method for normalization
issuer = normalizeIssuer(issuer);
/* this block may be used to enhance normalization (tknall)
try {
@@ -1375,7 +1375,6 @@ public class SignatureObject implements Serializable
}
catch (UnsupportedEncodingException e)
{
- e.printStackTrace();
throw new RuntimeException(e);
}
}
@@ -1443,7 +1442,7 @@ public class SignatureObject implements Serializable
}
}
}
-
+
private X509Cert loadCertificateFromCertstore(String serialNumber, String issuer) {
String iss_hash = getIssuerFileHash(issuer);
String cert_store_path = certPath_ + iss_hash;
@@ -1476,10 +1475,10 @@ public class SignatureObject implements Serializable
* <li>add the <code>.txt</code> extension to get the meta information of
* the certificate</li>
* </ol>
- *
+ *
* The certificate meta file is build by the base64 coded issuer string and
* the cert digest value devided by the <code>@</code> char.
- *
+ *
* @param serialNumber
* the file name of the certificate .der|.txt
* @param issuer
@@ -1541,7 +1540,7 @@ public class SignatureObject implements Serializable
/**
* Writes the certificate data to a file and stores the file in the local
* certificate store.
- *
+ *
* @param cert_data
* The binary certificate data.
*/
@@ -1580,17 +1579,17 @@ public class SignatureObject implements Serializable
/**
* Connects to the LDAP server to look for the certificate.
- *
+ *
* @param serialNumber
* The serial number String of the certificate being sought. E.g.
* "123455676744123432".
* @param issuer
* The issuer String of the certificate being sought.
- *
+ *
* @return Returns the DER certificate file as can be stored in the local
* repository. Returns null, if the document wasn't found on the
* server.
- * @throws ClassNotFoundException
+ * @throws ClassNotFoundException
*/
protected byte[] loadCertificateFromLDAP(String serialNumber, String issuer) {
// START modification by TK
@@ -1629,10 +1628,10 @@ public class SignatureObject implements Serializable
* <li>add the <code>.txt</code> extension to get the meta information of
* the certificate</li>
* </ol>
- *
+ *
* The certificate meta file is build by the base64 coded issuer string and
* the cert digest value devided by the <code>@</code> char.
- *
+ *
* @param serialNumber
* the file name of the certificate .der|.txt
* @param issuer
@@ -1650,7 +1649,7 @@ public class SignatureObject implements Serializable
{
return storeCertificate(serialNumber, issuer, x509Certificate);
}
-
+
/**
* This method stores a X509v3 certificate to the filesystem. The reference to
* the stored certificate is build by the serialNumber and the issuer string.
@@ -1673,10 +1672,10 @@ public class SignatureObject implements Serializable
* <li>add the <code>.txt</code> extension to get the meta information of
* the certificate</li>
* </ol>
- *
+ *
* The certificate meta file is build by the base64 coded issuer string and
* the cert digest value devided by the <code>@</code> char.
- *
+ *
* @param serialNumber
* the file name of the certificate .der|.txt
* @param issuer
@@ -1723,7 +1722,7 @@ public class SignatureObject implements Serializable
}
return store_complete;
}
-
+
/**
* @return Returns the AbstractTable.
* @see at.knowcenter.wag.egov.egiz.table.Table
@@ -1739,7 +1738,7 @@ public class SignatureObject implements Serializable
/**
* This method read the style definitions from the settings file.
- *
+ *
* @param styleKey
* the key to read the style definitions
* @return the defined style informations
@@ -1762,7 +1761,7 @@ public class SignatureObject implements Serializable
* This method creates an abstract signature table object. It takes all keys
* and values set by the signature object to create the corresponding abstract
* table object. The table definition is read from the settings file.
- *
+ *
* @param tableKey
* is the name of the table definition in the settings file
* @return a new abstract signature table
@@ -1964,7 +1963,7 @@ public class SignatureObject implements Serializable
/**
* This method returns a signature entry object.
- *
+ *
* @param key
* the corresponding key
* @return the signature entry object of the given key, null if the key does
@@ -1977,7 +1976,7 @@ public class SignatureObject implements Serializable
/**
* This method is a helper function to remove all white spaces from a text.
- *
+ *
* @param text
* the white spaces should remove from
* @return a text without white spaces
@@ -1993,7 +1992,7 @@ public class SignatureObject implements Serializable
}
/**
- *
+ *
* @param placeholder
* @return Returns the list of SignatureFieldDefinitions that's values in the
* SignatureObject have been filled out with placeholders.
@@ -2015,7 +2014,7 @@ public class SignatureObject implements Serializable
setValueBruteForce(SignatureTypes.SIG_ID, null);
continue;
}
-
+
if (sfd.field_name.equals(SignatureTypes.SIG_ALG) && !baikEnabled) {
setValueBruteForce(SignatureTypes.SIG_ID, null);
continue;
@@ -2040,7 +2039,7 @@ public class SignatureObject implements Serializable
/**
* Returns the raw signature response XML string as set by the signing
* Connector.
- *
+ *
* @return Returns the XML response String.
*/
public String getRawSignatureResponse()
@@ -2050,12 +2049,12 @@ public class SignatureObject implements Serializable
/**
* Sets the raw signature response XML string.
- *
+ *
* <p>
* This should be used by the Connector to pass the response String to the
* signer.
* </p>
- *
+ *
* @param raw_response_string
* The new raw signature response string.
*/
@@ -2063,8 +2062,8 @@ public class SignatureObject implements Serializable
{
this.raw_signature_response = raw_response_string;
}
-
-
+
+
/**
* get timestamp if available
diff --git a/pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/sig/SignatureTypes.java b/pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/sig/SignatureTypes.java
index 783512c..a4d71fd 100644
--- a/pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/sig/SignatureTypes.java
+++ b/pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/sig/SignatureTypes.java
@@ -26,7 +26,9 @@
package at.knowcenter.wag.egov.egiz.sig;
import java.util.ArrayList;
+import java.util.Collection;
import java.util.HashMap;
+import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
@@ -45,6 +47,118 @@ import at.knowcenter.wag.exactparser.ByteArrayUtils;
public class SignatureTypes
{
+ /**
+ * Defines all supported states for {@link SignatureTypes} (signature profiles). Signature types can be enabled
+ * ("on"), can be set to support signature only ("sign_only"), to verification only ("verify_only") or can be
+ * disabled ("off" or any other value not covered by other enum values).
+ *
+ * @author Datentechnik Innovation GmbH
+ */
+ public enum State {
+
+ /**
+ * Enables a signature profile.
+ */
+ ON ("on", "yes", "true", "enabled"),
+
+ /**
+ * Disables a signature profile.
+ */
+ OFF (),
+
+ /**
+ * Restricts the signature profile so that is can only be used for verification purposes and not for signature.
+ */
+ VERIFY_ONLY ("verify_only", "verify-only", "verifyonly", "verify only", "verify"),
+
+ /**
+ * Allows the signature profile to be used for signature but not for verification.
+ */
+ SIGN_ONLY ("sign_only", "sign-only", "signonly", "sign only", "sign");
+
+ /**
+ * Sets the default state when no valid value was provided.
+ */
+ private static final State DEFAULT = OFF;
+
+ /**
+ * States that allow signatures.
+ */
+ private static final State[] CAN_SIGN = { ON, SIGN_ONLY };
+
+ /**
+ * States that allow verification.
+ */
+ private static final State[] CAN_VERIFY = { ON, VERIFY_ONLY };
+
+ private String[] keyWords;
+
+ private State(String... keyWords) {
+ this.keyWords = keyWords;
+ }
+
+ /**
+ * Returns a valid State from a given {@code keyWord}. If the {@code keyWord} cannot be matched to a certain
+ * state, the default State {@link #OFF} is returned.
+ *
+ * @param keyWord
+ * A valid keyword like "on", "sign_only"...
+ * @return The enum State.
+ */
+ public static State fromString(String keyWord) {
+ if (keyWord == null) {
+ return DEFAULT;
+ }
+ try {
+ return valueOf(keyWord.toUpperCase());
+ } catch (IllegalArgumentException e) {
+ for (State candidate : values()) {
+ for (String candidateKeyWord : candidate.keyWords) {
+ if (keyWord.equalsIgnoreCase(candidateKeyWord)) {
+ return candidate;
+ }
+ }
+ }
+ return DEFAULT;
+ }
+ }
+
+ /**
+ * Returns {@code true} when the current state is one of the given candidate {@code states}.
+ *
+ * @param states
+ * The candidate states.
+ * @return {@code true} when the current state is one of the given candidate states, {@code false} if not.
+ */
+ public boolean in(State... states) {
+ if (states != null) {
+ for (State state : states) {
+ if (this == state) {
+ return true;
+ }
+ }
+ }
+ return false;
+ }
+
+ /**
+ * Returns if the respective state allows signatures.
+ * @return {@code true} if signatures are allowed, {@code false} if not.
+ */
+ public boolean canSign() {
+ return in(CAN_SIGN);
+ }
+
+ /**
+ * Returns if the respective state allows verification.
+ * @return {@code true} if verification is allowed, {@code false} if not.
+ */
+ public boolean canVerify() {
+ return in(CAN_VERIFY);
+ }
+
+ }
+
// 03.11.2010 changed by exthex - commented unneeded setDefaultStyles method to reduce confusion
/**
@@ -70,8 +184,8 @@ public class SignatureTypes
/**
* The state value activating an signature definition
*/
- private static final String STATE_ON = "on";
-
+// public static final String STATE_ON = "on";
+
// /**
// * The state value de activating an signature definition
// */
@@ -403,10 +517,12 @@ public class SignatureTypes
if (settings_ != null)
{
ArrayList types = settings_.getKeys(TYPES);
- for (int type_idx = 0; type_idx < types.size(); type_idx++)
- {
- String type = (String) types.get(type_idx);
- addSignatureType(type);
+ if (types != null) {
+ for (int type_idx = 0; type_idx < types.size(); type_idx++)
+ {
+ String type = (String) types.get(type_idx);
+ addSignatureType(type);
+ }
}
}
}
@@ -420,8 +536,9 @@ public class SignatureTypes
* @param typeName
*/
public void addSignatureType(String typeName) {
-
- if (STATE_ON.equals(settings_.getSetting(TYPES + "." + typeName, null)))
+
+// if (STATE_ON.equals(settings_.getSetting(TYPES + "." + typeName, null)))
+ if (State.fromString(settings_.getSetting(TYPES + "." + typeName, null)) != State.OFF)
{
SignatureTypeDefinition sig_type_def;
try
@@ -446,6 +563,23 @@ public class SignatureTypes
return this.typeDefMap_.keySet();
}
+ /**
+ * Returns a set of identifiers for profiles than can be used for signature, i.e. profiles that are either enabled
+ * ("on") or set to "sign_only").
+ *
+ * @return A set of signature profile/type identifiers.
+ */
+ @SuppressWarnings("unchecked")
+ public Set<String> getSignatureTypesForSignature() {
+ Set<String> filteredResult = new HashSet<String>();
+ for (String signatureProfileId : (Set<String>) typeDefMap_.keySet()) {
+ if (State.fromString(settings_.getSetting(TYPES + "." + signatureProfileId, null)).canSign()) {
+ filteredResult.add(signatureProfileId);
+ }
+ }
+ return filteredResult;
+ }
+
/**
* @return a list of signature type definitions
*/
@@ -453,6 +587,23 @@ public class SignatureTypes
{
return new ArrayList(this.typeDefMap_.values());
}
+
+ /**
+ * Returns a (filtered) list of signature type definitions useable for verification. Those definitions for profiles
+ * that are not allowed to be used for verification are filtered.
+ *
+ * @return A filtered list of signature type definitions.
+ */
+ @SuppressWarnings("unchecked")
+ public List<SignatureTypeDefinition> getSignatureTypeDefinitionsForVerification() {
+ List<SignatureTypeDefinition> filteredResult = new ArrayList<SignatureTypeDefinition>(typeDefMap_.size());
+ for (String signatureProfileId : (Set<String>) typeDefMap_.keySet()) {
+ if (State.fromString(settings_.getSetting(TYPES + "." + signatureProfileId, null)).canVerify()) {
+ filteredResult.add((SignatureTypeDefinition) typeDefMap_.get(signatureProfileId));
+ }
+ }
+ return filteredResult;
+ }
/**
* This method returns the corresponding signature type definition to a given
diff --git a/pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/sig/X509Cert.java b/pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/sig/X509Cert.java
index 7b4e463..e11a38c 100644
--- a/pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/sig/X509Cert.java
+++ b/pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/sig/X509Cert.java
@@ -99,7 +99,7 @@ public class X509Cert implements Serializable
* statement and remove all whitespaces in the string. The result string
* (base64) is used by reconstructing the certiface sign by the verification
* process.
- *
+ *
* @param certString
* the string to normalize
* @return the normalized cert string
@@ -115,7 +115,7 @@ public class X509Cert implements Serializable
/**
* This method initialzes a X509Certificate by a string value. It must be
* coded Base64 or as plain binary stream.
- *
+ *
* @param certString
* the certificate string to analyse
* @return the X509Cert object
@@ -150,7 +150,9 @@ public class X509Cert implements Serializable
String serial_num = cert.getSerialNumber().toString();
String issuer = cert.getIssuerDN().getName();
- issuer = issuer.replaceAll(", ", ",");
+ // fixed by dti: commas within issuer rdns are escapted by "\,". These escapted commas must not be replaced.
+// issuer = issuer.replaceAll(", ", ",");
+ issuer = issuer.replaceAll("[^\\\\], ", ",");
String subject_name = cert.getSubjectDN().toString();
x509_cert.setSerialNumber(serial_num);
x509_cert.setIssuerName(issuer);
@@ -174,7 +176,7 @@ public class X509Cert implements Serializable
}
return x509_cert;
}
-
+
public static X509Cert initByX509Certificate(X509Certificate cert) throws CertificateEncodingException {
X509Cert x509_cert = new X509Cert();
x509_cert.setX509Cert(cert);
@@ -182,7 +184,9 @@ public class X509Cert implements Serializable
String serial_num = cert.getSerialNumber().toString();
String issuer = cert.getIssuerDN().getName();
- issuer = issuer.replaceAll(", ", ",");
+ // fixed by dti: commas within issuer rdns are escapted by "\,". These escapted commas must not be replaced.
+// issuer = issuer.replaceAll(", ", ",");
+ issuer = issuer.replaceAll("[^\\\\], ", ",");
String subject_name = cert.getSubjectDN().toString();
x509_cert.setSerialNumber(serial_num);
x509_cert.setIssuerName(issuer);
@@ -210,7 +214,9 @@ public class X509Cert implements Serializable
String serial_num = cert.getSerialNumber().toString();
String issuer = cert.getIssuerDN().getName();
- issuer = issuer.replaceAll(", ", ",");
+ // fixed by dti: commas within issuer rdns are escapted by "\,". These escapted commas must not be replaced.
+// issuer = issuer.replaceAll(", ", ",");
+ issuer = issuer.replaceAll("[^\\\\], ", ",");
String subject_name = cert.getSubjectDN().toString();
x509_cert.setSerialNumber(serial_num);
x509_cert.setIssuerName(issuer);
@@ -226,7 +232,7 @@ public class X509Cert implements Serializable
{
// nothing to do, cause certString is not X509 conformc
logger_.error(ce.getMessage(), ce);
-
+
}
catch (IOException ioe)
{
@@ -240,7 +246,7 @@ public class X509Cert implements Serializable
/**
* This method initialzes a X509Certificate by a file path value. The file
* must be a plain binary file like .cer format.
- *
+ *
* @param filePath
* the certificate file to analyse
* @return the X509Cert object
@@ -276,7 +282,9 @@ public class X509Cert implements Serializable
String serial_num = cert.getSerialNumber().toString();
String issuer = cert.getIssuerDN().getName();
- issuer = issuer.replaceAll(", ", ",");
+ // fixed by dti: commas within issuer rdns are escapted by "\,". These escapted commas must not be replaced.
+// issuer = issuer.replaceAll(", ", ",");
+ issuer = issuer.replaceAll("[^\\\\], ", ",");
String subject_name = cert.getSubjectDN().toString();
x509_cert.setSerialNumber(serial_num);
x509_cert.setIssuerName(issuer);
@@ -300,7 +308,7 @@ public class X509Cert implements Serializable
/**
* This method initialzes a X509Certificate by a file value. The file must be
* a plain binary file like .cer format.
- *
+ *
* @param certFile
* the certificate file to analyse
* @return the X509Cert object
@@ -314,7 +322,7 @@ public class X509Cert implements Serializable
/**
* This method checks if a certificate file is X509 conform.
- *
+ *
* @return true if a certificate file is X509 conform, false otherwise
*/
public boolean isX509Cert()
@@ -480,7 +488,7 @@ public class X509Cert implements Serializable
/**
* This method checks, if a X509Certificate has a public key with the rsa
* algorithm.
- *
+ *
* @return true if the public key is produced with rsa, false otherwise
*/
public boolean isRSA()
diff --git a/pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/sig/connectors/BKUConnector.java b/pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/sig/connectors/BKUConnector.java
index c3b6421..e4d78c3 100644
--- a/pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/sig/connectors/BKUConnector.java
+++ b/pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/sig/connectors/BKUConnector.java
@@ -49,9 +49,9 @@ import at.knowcenter.wag.egov.egiz.tools.CodingHelper;
/**
* Connector for communicating with BKU.
- *
+ *
* @deprecated use the new connectors.
- *
+ *
* @author wlackner
* @author wprinz
*/
@@ -59,7 +59,7 @@ public class BKUConnector implements LocalConnector
{
/**
* ConnectorInformation that identifies this Connector to the system.
- *
+ *
* @see at.knowcenter.wag.egov.egiz.sig.ConnectorFactory
* @see ConnectorInformation
*/
@@ -85,7 +85,7 @@ public class BKUConnector implements LocalConnector
/**
* load the inital signature settings
- *
+ *
* @see SettingsReader
*/
public void loadSettings() throws SignatureException
@@ -111,7 +111,7 @@ public class BKUConnector implements LocalConnector
* SignatureObject is filled out by the parsed BKU-Response. <br>
* If an error request is send back from BKU, an error message is generated an
* an exception is thrown.
- *
+ *
* @param sigType
* the type of the SignatureObject that should be returned
* @param userName
@@ -137,7 +137,7 @@ public class BKUConnector implements LocalConnector
* This method generates the BKU verify prozess. It checks if the given
* SignatureObject is signed by MOA or BKU. The verify template string is
* filled out by the corresponding method.
- *
+ *
* @param normalizedText
* the normalized text to verify
* @param sigObject
@@ -163,7 +163,7 @@ public class BKUConnector implements LocalConnector
* X509Certificate, CertDigest, DigestValue and the signation id-s. If the
* X509Certificate is extracted it would be stored in the certificates
* directory.
- *
+ *
* @param xmlResponse
* the response string from the BKU sign-request
* @param sigObj
@@ -177,7 +177,7 @@ public class BKUConnector implements LocalConnector
private void parseCreateXMLResponse(Properties response_properties, SignatureObject sigObj) throws SignatureException
{
String xmlResponse = response_properties.getProperty("response_string");
-
+
Pattern sig_val_p_s = Pattern.compile("<[\\w]*:?SignatureValue>");
Pattern sig_val_p_e = Pattern.compile("</[\\w]*:?SignatureValue>");
Pattern iss_nam_p_s = Pattern.compile("<[\\w]*:?X509IssuerName>");
@@ -280,7 +280,7 @@ public class BKUConnector implements LocalConnector
ids[2] = extractId(xmlResponse, "signed-data-object-");
ids[3] = extractId(xmlResponse, "etsi-data-reference-");
ids[4] = extractId(xmlResponse, "etsi-data-object-");
-
+
//TODO hotfix - already deprecated
String final_ids =SignatureObject.formatSigIds(response_properties, ids);
//sigObj.setSignationIDs(ids);
@@ -289,7 +289,7 @@ public class BKUConnector implements LocalConnector
/**
* This emthod extracts id-values from a text. The id is given by the name.
- *
+ *
* @param text
* the id-value that should extract from
* @param name
@@ -301,13 +301,13 @@ public class BKUConnector implements LocalConnector
String id = null;
int start_idx = text.indexOf(name) + name.length();
int end_idx = text.indexOf("\"", start_idx);
-
+
// TODO hotfix! - already deprecated
- final int quot_end_idx = end_idx;
+ final int quot_end_idx = end_idx;
final int squot_end_idx = text.indexOf("'", start_idx);
end_idx = Math.min(quot_end_idx, squot_end_idx);
// TODO hotfix end! - already deprecated
-
+
id = text.substring(start_idx, end_idx);
if (logger_.isDebugEnabled())
{
@@ -319,7 +319,7 @@ public class BKUConnector implements LocalConnector
/**
* This method reads the verify template from the file system and fills out
* the template with the SignatureObject values.
- *
+ *
* @param normalizedText
* the normalized text to veryfied
* @param sigObject
@@ -362,7 +362,7 @@ public class BKUConnector implements LocalConnector
verify_template = getConnectorValueFromProfile(sigObject.getSignationType(), "bku.verify.template2"); //"./templates/BKUVerifyTemplateB64_neueBKU.xml";
sig_prop_filename = getConnectorValueFromProfile(sigObject.getSignationType(), "bku.verify.template2.SP"); //"./templates/BKUVerifyTemplateSP_neueBKU.xml";
}
-
+
//String ver_temp_str = FileHelper.readFromFile(SettingsReader.relocateFile(verify_template));
String ver_temp_str = this.settings_.readInternalResourceAsString(verify_template);
@@ -388,13 +388,18 @@ public class BKUConnector implements LocalConnector
}
sig_prop_str = sig_prop_str.replaceFirst("SigningTimeReplace", sigObject.getSignationDate());
-
+
String issuer_name = sigObject.getSignationIssuer();
// The issuer is already unicode, so it mustn't be encoded again.
//byte[] issuer_name = CodingHelper.encodeUTF8(sigObject.getSignationIssuer());
// new String(issuer_name); // this would double encode the String, not to mention the missing encoding
- sig_prop_str = sig_prop_str.replaceFirst("X509IssuerNameReplace", issuer_name);
-
+
+ // fixed by dti: Issuer names may contain escapted commas ("\,"). As far as replaceFirst (and replaceAll)
+ // methods are regarded, backslashes in the replacement string may cause the results to be different than
+ // if it were being treated as a literal replacement string.
+// sig_prop_str = sig_prop_str.replaceFirst("X509IssuerNameReplace", issuer_name);
+ sig_prop_str = sig_prop_str.replace("X509IssuerNameReplace", issuer_name);
+
sig_prop_str = sig_prop_str.replaceFirst("X509SerialNumberReplace", sigObject.getSignationSerialNumber());
sig_prop_str = sig_prop_str.replaceFirst("DigestValueX509CertificateReplace", sigObject.getX509CertificateDigest());
sig_prop_str = sig_prop_str.replaceFirst("SigIdReplace", ids[0]);
@@ -403,30 +408,30 @@ public class BKUConnector implements LocalConnector
ver_temp_str = ver_temp_str.replaceFirst("CertAlgReplace", cert_alg);
ver_temp_str = ver_temp_str.replaceFirst("TemplateQualifyingPropertiesReplace", sig_prop_str);
byte[] sig_prop_code = CodingHelper.buildDigest(sig_prop_str.getBytes("UTF-8"), "sha1");
-
+
// TODO hotfix - already deprecated
if (neue_bku)
{
final String ETSI_SIGNED_PROPERTIES_START_TAG = "<etsi:SignedProperties"; // xml name spaces follow, so this is not a complete tag...
final String ETSI_SIGNED_PROPERTIES_END_TAG = "</etsi:SignedProperties>";
-
+
final int hash_start = sig_prop_str.indexOf(ETSI_SIGNED_PROPERTIES_START_TAG);
assert hash_start >= 0;
final int hash_end = sig_prop_str.indexOf(ETSI_SIGNED_PROPERTIES_END_TAG, hash_start) + ETSI_SIGNED_PROPERTIES_END_TAG.length();
assert hash_end - ETSI_SIGNED_PROPERTIES_END_TAG.length() >= 0;
assert hash_end > hash_start;
-
+
final String string_to_be_hashed = sig_prop_str.substring(hash_start, hash_end);
logger_.debug("etsi:SignedProperties string to be hashed: " + string_to_be_hashed);
-
+
logger_.debug("\n--------------------- ETSI properties string to be hashed: start ---------------------");
logger_.debug(string_to_be_hashed);
logger_.debug("\n--------------------- ETSI properties string to be hashed: stop ---------------------");
-
+
final byte [] bytes_to_be_hashed = string_to_be_hashed.getBytes("UTF-8");
sig_prop_code = CodingHelper.buildDigest(bytes_to_be_hashed, "sha1");
}
-
+
String sig_prop_hash = CodingHelper.encodeBase64(sig_prop_code);
ver_temp_str = ver_temp_str.replaceFirst("DigestValueSignedPropertiesReplace", sig_prop_hash);
if (logger_.isDebugEnabled())
@@ -453,7 +458,7 @@ public class BKUConnector implements LocalConnector
//String raw_b64 = CodingHelper.encodeUTF8AsBase64(normalizedText);
String raw_b64 = CodingHelper.encodeBase64(data_value);
-
+
ver_temp_str = ver_temp_str.replaceFirst("Base64ContentReplace", raw_b64);
ver_temp_str = ver_temp_str.replaceFirst("DigestValueSignedDataReplace", object_data_hash);
@@ -479,7 +484,7 @@ public class BKUConnector implements LocalConnector
* This method parses the verify response string and return a
* SignatureResponse object. The SignatureResponse object is filled out by the
* response values from the BKU-response.
- *
+ *
* @param xmlResponse
* the response values from the BKU-verify request
* @return SignatureResponse object
@@ -621,8 +626,8 @@ public class BKUConnector implements LocalConnector
return sig_res;
}
-
-
+
+
public String prepareSignRequest(String userName, String signText,
String signType) throws SignatureException
@@ -636,7 +641,7 @@ public class BKUConnector implements LocalConnector
//String sign_req_str = FileHelper.readFromFile(SettingsReader.relocateFile(sign_request_filename));
String sign_req_str = this.settings_.readInternalResourceAsString(sign_request_filename);
- //this.verify_request_template = FileHelper.readFromFile(SettingsReader.relocateFile(verify_request_filename));
+ //this.verify_request_template = FileHelper.readFromFile(SettingsReader.relocateFile(verify_request_filename));
if (logger_.isDebugEnabled())
{
//logger_.debug(sign_request_filename + "_signText.xml :" + signText);
@@ -660,7 +665,7 @@ public class BKUConnector implements LocalConnector
SignatureObject sigObject) throws SignatureException
{
String verify_request = getVerifyRequestTemplateFileName(sigObject.getSignationType());
-
+
//String verify_req_str = FileHelper.readFromFile(SettingsReader.relocateFile(verify_request));
String verify_req_str = this.settings_.readInternalResourceAsString(verify_request);
@@ -681,7 +686,11 @@ public class BKUConnector implements LocalConnector
// get the BKU-template
verify_template_str = getVerifyTemplate(normalizedText, sigObject);
}
- verify_req_str = verify_req_str.replaceFirst("XMLContentReplace", verify_template_str);
+ // fixed by dti: Issuer names may contain escapted commas ("\,"). As far as replaceFirst (and replaceAll)
+ // methods are regarded, backslashes in the replacement string may cause the results to be different than
+ // if it were being treated as a literal replacement string.
+// verify_req_str = verify_req_str.replaceFirst("XMLContentReplace", verify_template_str);
+ verify_req_str = verify_req_str.replace("XMLContentReplace", verify_template_str);
if (logger_.isDebugEnabled())
{
logger_.debug("verify_req_str.xml : " + verify_req_str);
@@ -692,7 +701,7 @@ public class BKUConnector implements LocalConnector
/**
* Sends the request to the given URL.
- *
+ *
* @param url
* The URL.
* @param request_string
@@ -722,7 +731,7 @@ public class BKUConnector implements LocalConnector
// TODO hotfix - already deprecated
String response_string = response_properties.getProperty("response_string");
-
+
SignatureObject sig_obj = new SignatureObject();
sig_obj.setRawSignatureResponse(response_string);
try
@@ -783,7 +792,7 @@ public class BKUConnector implements LocalConnector
public SignatureResponse analyzeVerifyResponse(Properties response_properties) throws SignatureException
{
String response_string = response_properties.getProperty("response_string");
-
+
if (!response_string.equals(""))
{
Pattern erc_p_s = Pattern.compile("<[\\w]*:?ErrorCode>");
@@ -880,13 +889,13 @@ public class BKUConnector implements LocalConnector
/**
* Returns the type of this BKU-like connector.
- *
+ *
* <p>
* All settings keys will be prefixed by this type. So to reuse the BKU
* connector, a deriving class has to implement this method specifying an own
* type.
* </p>
- *
+ *
* @return Returns the type of this BKU-like connector.
*/
protected String getType()
diff --git a/pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/sig/connectors/MOAConnector.java b/pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/sig/connectors/MOAConnector.java
index ef355a0..d413a29 100644
--- a/pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/sig/connectors/MOAConnector.java
+++ b/pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/sig/connectors/MOAConnector.java
@@ -63,7 +63,7 @@ import at.knowcenter.wag.egov.egiz.tools.CodingHelper;
/**
* Connector to access the MOA service.
- *
+ *
* @deprecated
* @author wlackner
* @author wprinz
@@ -72,7 +72,7 @@ public class MOAConnector implements Connector
{
/**
* ConnectorInformation that identifies this Connector to the system.
- *
+ *
* @see at.knowcenter.wag.egov.egiz.sig.ConnectorFactory
* @see ConnectorInformation
*/
@@ -80,7 +80,7 @@ public class MOAConnector implements Connector
/**
* The class type value.
- *
+ *
* <p>
* Just for convenience.
* </p>
@@ -122,7 +122,7 @@ public class MOAConnector implements Connector
/**
* load the inital signature settings
- *
+ *
* @see SettingsReader
*/
private void loadSettings() throws SignatureException
@@ -148,7 +148,7 @@ public class MOAConnector implements Connector
* SignatureObject is filled out by the parsed MOA-Response. <br>
* If an error request is send back from MOA, an error message is generated an
* an exception is thrown.
- *
+ *
* @param sigType
* the type of the SignatureObject that should be returned
* @param userName
@@ -282,7 +282,7 @@ public class MOAConnector implements Connector
* SignatureValue, X509IssuerName, SigningTime, X509SerialNumber,
* X509Certificate, CertDigest and DigestValues. If the X509Certificate is
* extracted it would be stored in the certificates directory.
- *
+ *
* @param xmlResponse
* the response string from the MOA sign-request
* @param sigObj
@@ -393,7 +393,7 @@ public class MOAConnector implements Connector
/**
* This method reads the verify template from the file system and fills out
* the template with the SignatureObject values.
- *
+ *
* @param normalizedText
* the normalized text to veryfied
* @param sigObject
@@ -453,12 +453,18 @@ public class MOAConnector implements Connector
// byte[] issuer_name =
// CodingHelper.encodeUTF8(sigObject.getSignationIssuer());
// new String(issuer_name)
- sig_prop_str = sig_prop_str.replaceFirst("X509IssuerNameReplace", sigObject.getSignationIssuer());
+
+ // fixed by dti: Issuer names may contain escapted commas ("\,"). As far as replaceFirst (and replaceAll)
+ // methods are regarded, backslashes in the replacement string may cause the results to be different than
+ // if it were being treated as a literal replacement string.
+// sig_prop_str = sig_prop_str.replaceFirst("X509IssuerNameReplace", sigObject.getSignationIssuer());
+ sig_prop_str = sig_prop_str.replace("X509IssuerNameReplace", sigObject.getSignationIssuer());
sig_prop_str = sig_prop_str.replaceFirst("X509SerialNumberReplace", sigObject.getSignationSerialNumber());
sig_prop_str = sig_prop_str.replaceFirst("DigestValueX509CertificateReplace", sigObject.getX509CertificateDigest());
verify_req_str = verify_req_str.replaceFirst("CertAlgReplace", cert_alg);
- verify_req_str = verify_req_str.replaceFirst("TemplateSignedPropertiesReplace", sig_prop_str);
+// verify_req_str = verify_req_str.replaceFirst("TemplateSignedPropertiesReplace", sig_prop_str);
+ verify_req_str = verify_req_str.replace("TemplateSignedPropertiesReplace", sig_prop_str);
byte[] sig_prop_code = CodingHelper.buildDigest(sig_prop_str.getBytes("UTF-8"), "sha1"); // added
// the
// ("UTF-8")
@@ -509,7 +515,7 @@ public class MOAConnector implements Connector
* This method generates the MOA verify prozess. It checks if the given
* SignatureObject is signed by MOA or BKU. The verify template string is
* filled out by the corresponding method.
- *
+ *
* @param normalizedText
* the normalized text to verify
* @param sigObject
@@ -548,7 +554,12 @@ public class MOAConnector implements Connector
BKUConnector bku_conn = new BKUConnector();
verify_template_str = bku_conn.getVerifyTemplate(normalizedText, sigObject);
}
- verify_req_str = verify_req_str.replaceFirst("XMLContentReplace", verify_template_str);
+
+ // fixed by dti: Issuer names may contain escapted commas ("\,"). As far as replaceFirst (and replaceAll)
+ // methods are regarded, backslashes in the replacement string may cause the results to be different than
+ // if it were being treated as a literal replacement string.
+// verify_req_str = verify_req_str.replaceFirst("XMLContentReplace", verify_template_str);
+ verify_req_str = verify_req_str.replace("XMLContentReplace", verify_template_str);
verify_req_str = verify_req_str.replaceFirst("TrustProfileIDReplace", trust_profile);
if (logger_.isDebugEnabled())
@@ -564,10 +575,6 @@ public class MOAConnector implements Connector
}
catch (WebException we)
{
- if (logger_.isDebugEnabled())
- {
- we.printStackTrace();
- }
SignatureException se = new SignatureException(we.getErrorCode(), we);
throw se;
}
@@ -616,7 +623,7 @@ public class MOAConnector implements Connector
* This method parses the verify response string and return a
* SignatureResponse object. The SignatureResponse object is filled out by the
* response values from the BKU-response.
- *
+ *
* @param xmlResponse
* the response values from the MOA-verify request
* @return SignatureResponse object
@@ -639,7 +646,7 @@ public class MOAConnector implements Connector
Pattern cert_qualified_p = Pattern.compile("<QualifiedCertificate/>");
Matcher cert_qualified_m = cert_qualified_p.matcher(xmlResponse);
// [tknall] stop qualified certificate
-
+
Pattern sig_chk_p_s = Pattern.compile("<SignatureCheck>");
Pattern sig_chk_p_e = Pattern.compile("</SignatureCheck>");
Pattern man_chk_p_s = Pattern.compile("<SignatureManifestCheck>");
@@ -671,11 +678,11 @@ public class MOAConnector implements Connector
Matcher cert_m_e = cert_p_e.matcher(xmlResponse);
SignatureResponse sig_res = new SignatureResponse();
-
+
// [tknall] start qualified certificate
sig_res.setQualifiedCertificate(cert_qualified_m.find());
// [tknall] stop qualified certificate
-
+
// public authority
Pattern publicAuthority_p = Pattern.compile("<PublicAuthority/>");
Matcher publicAuthority_m = publicAuthority_p.matcher(xmlResponse);
@@ -821,7 +828,7 @@ public class MOAConnector implements Connector
* SOAP Message send and recieve by the AXIS module. The Response SOAP message
* of the MOA server is parsed by AXIS and the message envelope is send back
* to the calling method.
- *
+ *
* @param requestString
* the request string (XML) to send.
* @param serviceMode
diff --git a/pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/sig/connectors/bku/BKUHelper.java b/pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/sig/connectors/bku/BKUHelper.java
index ee250ff..908ed57 100644
--- a/pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/sig/connectors/bku/BKUHelper.java
+++ b/pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/sig/connectors/bku/BKUHelper.java
@@ -60,14 +60,14 @@ import at.knowcenter.wag.egov.egiz.tools.CodingHelper;
/**
* Contains static helper methods used by the BKU Connectors.
- *
+ *
* @author wprinz
*/
public final class BKUHelper
{
private static final Pattern ALLOWED_SL_RESPONSE_PATTERN = Pattern.compile("^.*<[\\w]*:?(CreateXMLSignatureResponse|VerifyXMLSignatureResponse)[^>]*>(.*)</[\\w]*:?(CreateXMLSignatureResponse|VerifyXMLSignatureResponse)>.*$", Pattern.DOTALL);
-
+
/**
* The log.
*/
@@ -75,21 +75,21 @@ public final class BKUHelper
/**
* Encodes the given SignatureData to a valid Base64Content.
- *
+ *
* <p>
* The data is Base64 encoded. If the mime-type suggests that the data is
* binary, it is Base64 encoded for a second time.
* </p>
- *
+ *
* @param data
* The data to be converted to a valid Base64 content.
* @return Returns the Base64 content.
*/
public static String prepareBase64Content(SignatureData data)
{
- // PERF: base64 encoding needs byte array
+ // PERF: base64 encoding needs byte array
byte [] d = DataSourceHelper.convertDataSourceToByteArray(data.getDataSource());
-
+
String base64 = CodingHelper.encodeBase64(d);
if (data.getMimeType().equals("application/pdf")) //$NON-NLS-1$
{
@@ -105,7 +105,7 @@ public final class BKUHelper
* <p>
* This is useful for building the hash.
* </p>
- *
+ *
* @param data
* The data to be prepared.
* @return Returns the prepared data.
@@ -114,7 +114,7 @@ public final class BKUHelper
{
// PERF: prepareEnvelopingData needs byte array
byte[] enc = DataSourceHelper.convertDataSourceToByteArray(data.getDataSource());
-
+
if (data.getMimeType().equals("application/pdf")) //$NON-NLS-1$
{
log.debug("The data is application/pdf - so the binary data is Base64 encoded."); //$NON-NLS-1$
@@ -125,7 +125,6 @@ public final class BKUHelper
}
catch (UnsupportedEncodingException e)
{
- e.printStackTrace();
throw new RuntimeException("Very Strange: US-ASCII encoding not supported???", e); //$NON-NLS-1$
}
}
@@ -135,7 +134,7 @@ public final class BKUHelper
/**
* Checks the response xml for an error description and if found throws an
* appropriate exception.
- *
+ *
* @param response_string
* The response xml.
* @throws ConnectorException
@@ -169,29 +168,29 @@ public final class BKUHelper
throw new ExternalErrorException(error_code, error_mess);
}
log.debug("No error found. Assuring that CreateXMLSignatureResponse or VerifyXMLSignatureResponse elements are available.");
-
+
// assure that a CreateXMLSignatureResponse or a VerifyXMLSignatureResponse is available
Matcher slMatcher = ALLOWED_SL_RESPONSE_PATTERN.matcher(response_string);
if (!slMatcher.matches()) {
throw new ConnectorException(ErrorCode.UNABLE_TO_RECEIVE_SUITABLE_RESPONSE, "No suitable response received: " + response_string);
}
-
+
}
/**
* This method parses the BKU-Response string.
- *
+ *
* <p>
* It separates the SignatureValue, X509IssuerName, SigningTime,
* X509SerialNumber, X509Certificate, CertDigest, DigestValue and the
* signation id-s. If the X509Certificate is extracted it would be stored in
* the certificates directory.
* </p>
- *
+ *
* @param xmlResponse
* The response string.
* @return Returns the parsed signature object holding the data.
- *
+ *
* @throws ConnectorException
* ErrorCode (303, 304)
* @see SignatureObject
@@ -355,7 +354,7 @@ public final class BKUHelper
ids[2] = extractId(xmlResponse, "signed-data-object-"); //$NON-NLS-1$
ids[3] = extractId(xmlResponse, "etsi-data-reference-"); //$NON-NLS-1$
ids[4] = extractId(xmlResponse, "etsi-data-object-"); //$NON-NLS-1$
-
+
String algs = AlgorithmSuiteUtil.extractAlgorithmSuiteString(xmlResponse);
SignSignatureObject so = new SignSignatureObject();
@@ -363,26 +362,26 @@ public final class BKUHelper
so.issuer = iss_nam;
so.signatureValue = sig_val;
so.x509Certificate = cert;
-
+
AlgorithmSuiteObject suite = new AlgorithmSuiteObject(algs, false);
so.sigAlgorithm = AlgorithmMapper.getUri(suite.getSignatureMethod());
-
+
String defaultCertAlg = environment.getDefaultAlgForCert(cert);
if (AlgorithmSuiteUtil.isDefaultCertAlg(algs, defaultCertAlg)) {
// do not embed default alg
algs = null;
- }
+ }
String final_ids = id_formatter.formatIds(ids, algs);
so.id = final_ids;
-
+
return so;
}
/**
* Removes all whitespaces ("\\s") from the String.
- *
+ *
* @param str
* The String.
* @return The String with all whitespaces removed.
@@ -394,7 +393,7 @@ public final class BKUHelper
/**
* This emthod extracts id-values from a text. The id is given by the name.
- *
+ *
* @param text
* the id-value that should extract from
* @param name
@@ -411,7 +410,7 @@ public final class BKUHelper
return "";
}
// stop
-
+
int start_idx = startOfName + name.length();
int end_idx = text.indexOf("\"", start_idx); //$NON-NLS-1$
@@ -430,7 +429,7 @@ public final class BKUHelper
* This method parses the verify response string and return a
* SignatureResponse object. The SignatureResponse object is filled out by the
* response values from the BKU-response.
- *
+ *
* @param xmlResponse
* the response values from the BKU-verify request
* @return SignatureResponse object
@@ -521,14 +520,14 @@ public final class BKUHelper
if (hash_data_m_s.find() && hash_data_m_e.find())
{
String hashInputData = xmlResponse.substring(hash_data_m_s.end(), hash_data_m_e.start());
-
+
Pattern b64_p_s = Pattern.compile("<Base64Content>"); //$NON-NLS-1$
Pattern b64_p_e = Pattern.compile("</Base64Content>"); //$NON-NLS-1$
Matcher b64_m_s = b64_p_s.matcher(hashInputData);
Matcher b64_m_e = b64_p_e.matcher(hashInputData);
boolean hashInputDataFound = b64_m_s.find() && b64_m_e.find();
-
+
String b64 = hashInputDataFound ? hashInputData.substring(b64_m_s.end(), b64_m_e.start()) : "";
sig_res.setHashInputData(b64);
@@ -623,7 +622,7 @@ public final class BKUHelper
public static String formDateTimeElement(Date verificationTime, String namespace)
{
String nsPrefix = StringUtils.isBlank(namespace) ? "" : (namespace + ":");
-
+
String dateTimeElement = "";
if (verificationTime != null)
{
@@ -633,25 +632,25 @@ public final class BKUHelper
df.setTimeZone(TimeZone.getTimeZone("UTC"));
String dateTime = df.format(verificationTime) + "Z";
log.debug("DateTime (VerificationTime in UTC) = " + dateTime);
-
+
dateTimeElement = "<" + nsPrefix + "DateTime>" + dateTime + "</" + nsPrefix + "DateTime>";
};
return dateTimeElement;
}
-
+
public static String getBKUIdentifier(Properties parsedResponseProperties) {
-
+
// http://www.buergerkarte.at/konzept/securitylayer/spezifikation/aktuell/bindings/bindings.html#http.kodierung.response.browser
String bkuServerHeader = parsedResponseProperties.getProperty(BKUPostConnection.BKU_SERVER_HEADER_KEY);
// http://www.buergerkarte.at/konzept/securitylayer/spezifikation/aktuell/bindings/bindings.html#http.kodierung.response.dataurl
String bkuUserAgentHeader = parsedResponseProperties.getProperty(BKUPostConnection.BKU_USER_AGENT_HEADER_KEY);
-
+
String bkuSignatureLayout = parsedResponseProperties.getProperty(BKUPostConnection.BKU_SIGNATURE_LAYOUT_HEADER_KEY);
-
+
return getBKUIdentifier(bkuServerHeader, bkuUserAgentHeader, bkuSignatureLayout);
}
-
+
public static String getBKUIdentifier(String bkuServerHeader, String bkuUserAgentHeader, String bkuSignatureLayout) {
log.debug("BKU response header \"user-agent\": " + bkuUserAgentHeader);
@@ -659,7 +658,7 @@ public final class BKUHelper
log.trace("BKU response header \"" + Constants.BKU_HEADER_SIGNATURE_LAYOUT + "\": " + bkuSignatureLayout);
String result = null;
-
+
if (bkuServerHeader != null) {
result = bkuServerHeader;
} else if (bkuUserAgentHeader != null) {
@@ -667,7 +666,7 @@ public final class BKUHelper
} else {
log.warn("Unable to find any BKU identifier (neither header value \"user-agent\" nor \"server\".)");
}
-
+
if (bkuSignatureLayout != null && result != null) {
log.debug("BKU response header \"" + Constants.BKU_HEADER_SIGNATURE_LAYOUT + "\" found.");
String signatureLayoutData = " " + Constants.BKU_HEADER_SIGNATURE_LAYOUT + "/" + bkuSignatureLayout;
@@ -678,18 +677,18 @@ public final class BKUHelper
log.debug("Signature layout already encoded in server/user-agent header.");
}
}
-
+
if (result != null) {
log.debug("Returning BKU identifier \"" + result + "\"");
} else {
log.debug("Returning null BKU identifier.");
}
-
+
return result;
}
public static String getBKUIdentifier(LocalBKUParams bkuParams) {
return getBKUIdentifier(bkuParams.getServer(), bkuParams.getUserAgent(), bkuParams.getSignatureLayout());
}
-
+
}
diff --git a/pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/sig/connectors/bku/DetachedBKUConnector.java b/pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/sig/connectors/bku/DetachedBKUConnector.java
index a8de41e..6926d2b 100644
--- a/pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/sig/connectors/bku/DetachedBKUConnector.java
+++ b/pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/sig/connectors/bku/DetachedBKUConnector.java
@@ -55,11 +55,11 @@ import at.knowcenter.wag.egov.egiz.tools.CodingHelper;
/**
* Connects to the BKU using the detached multipart/formdata requests.
- *
+ *
* <p>
* This feature is available since BKU version 2.7.4.
* </p>
- *
+ *
* @author wprinz
*/
public class DetachedBKUConnector implements Connector, LocalConnector
@@ -85,12 +85,12 @@ public class DetachedBKUConnector implements Connector, LocalConnector
/**
* Constructor that builds the configuration environment for this connector
* according to the given profile.
- *
+ *
* <p>
* If confuguration parameters are not defined on that profile, the default
* parameters defined in the configuration are used.
* </p>
- *
+ *
* @param connectorParameters
* The connectot parameters.
* @throws ConnectorException
@@ -101,10 +101,10 @@ public class DetachedBKUConnector implements Connector, LocalConnector
this.params = connectorParameters;
this.environment = new Environment(this.params.getProfileId(), loc_ref_content);
}
-
+
/**
* Prepares the sign request xml to be sent using the sign request template.
- *
+ *
* @param data
* The SignatureData.
* @return Returns the sign request xml to be sent.
@@ -120,7 +120,7 @@ public class DetachedBKUConnector implements Connector, LocalConnector
String sign_keybox_identifier = this.environment.getSignKeyboxIdentifier();
String mime_type = data.getMimeType();
String loc_ref_content = this.environment.getLocRefContent();
-
+
if (log.isDebugEnabled())
{
log.debug("sign keybox identifier = " + sign_keybox_identifier); //$NON-NLS-1$
@@ -139,7 +139,7 @@ public class DetachedBKUConnector implements Connector, LocalConnector
/**
* Analyzes the sign response xml and extracts the signature data.
- *
+ *
* @param response_properties
* The response properties containing the response String and
* transport related information.
@@ -155,14 +155,14 @@ public class DetachedBKUConnector implements Connector, LocalConnector
String bkuIdentifier = BKUHelper.getBKUIdentifier(response_properties);
log.debug("BKU identifier: " + (bkuIdentifier != null ? ("\"" + bkuIdentifier + "\"") : "n/a"));
-
+
SignatureLayoutHandler sigLayout;
try {
sigLayout = SignatureLayoutHandlerFactory.getSignatureLayoutHandlerInstance(bkuIdentifier);
} catch (SettingsException e) {
throw new ConnectorException(e.getErrorCode(), e.getMessage());
}
-
+
BKUHelper.checkResponseForError(response_string);
SignSignatureObject so = sigLayout.parseCreateXMLSignatureResponse(response_string, this.environment);
@@ -225,15 +225,15 @@ public class DetachedBKUConnector implements Connector, LocalConnector
/**
* Sends the request and data to the given URL.
- *
+ *
* <p>
* This method mainly handles communication exceptions. The actual send work
* is done by doPostRequestMultipart.
* </p>
- *
+ *
* @see BKUPostConnection#doPostRequestMultipart(String, String,
* SignatureData)
- *
+ *
* @param url
* The URL to send the request to.
* @param request_string
@@ -262,7 +262,7 @@ public class DetachedBKUConnector implements Connector, LocalConnector
/**
* Performs a sign.
- *
+ *
* @param data
* The data to be signed.
* @return Returns the signature object containing the signature data.
@@ -289,7 +289,7 @@ public class DetachedBKUConnector implements Connector, LocalConnector
/**
* Performs a verification.
- *
+ *
* @param data
* The data to be verified.
* @param so
@@ -331,7 +331,7 @@ public class DetachedBKUConnector implements Connector, LocalConnector
/**
* Prepares the verify request xml to be sent using the verify request
* template.
- *
+ *
* @param data
* The SignatureData.
* @param so
@@ -345,7 +345,7 @@ public class DetachedBKUConnector implements Connector, LocalConnector
String verify_request_template = this.environment.getVerifyRequestTemplate();
String xml_content = null;
-
+
if (dsigData != null && dsigData.getXmlDsig() != null)
{
xml_content = dsigData.getXmlDsig();
@@ -355,16 +355,18 @@ public class DetachedBKUConnector implements Connector, LocalConnector
xml_content = chooseAndCreateXMLDsig(data, so);
}
-
-
- String verify_request_xml = verify_request_template.replaceFirst(TemplateReplaces.XML_CONTENT_REPLACE, xml_content);
+ // fixed by dti: Issuer names may contain escapted commas ("\,"). As far as replaceFirst (and replaceAll)
+ // methods are regarded, backslashes in the replacement string may cause the results to be different than
+ // if it were being treated as a literal replacement string.
+// String verify_request_xml = verify_request_template.replaceFirst(TemplateReplaces.XML_CONTENT_REPLACE, xml_content);
+ String verify_request_xml = verify_request_template.replace(TemplateReplaces.XML_CONTENT_REPLACE, xml_content);
verify_request_xml = verify_request_xml.replaceFirst(TemplateReplaces.LOC_REF_CONTENT_REPLACE, this.environment.getLocRefContent());
verify_request_xml = verify_request_xml.replaceFirst(TemplateReplaces.DATE_TIME_REPLACE, BKUHelper.formDateTimeElement(this.params.getVerificationTime(), "sl"));
return verify_request_xml;
}
-
- private String chooseAndCreateXMLDsig(SignatureData data, SignSignatureObject so) throws ConnectorException {
+
+ private String chooseAndCreateXMLDsig(SignatureData data, SignSignatureObject so) throws ConnectorException {
// MOA
if (SigKZIDHelper.isMOASigned(so))
{
@@ -379,7 +381,7 @@ public class DetachedBKUConnector implements Connector, LocalConnector
log.debug("Algorithm = " + algorithmId);
LocRefDetachedMOCCAConnector mocca_connector = new LocRefDetachedMOCCAConnector(this.params, "not needed here", algorithmId);
return mocca_connector.prepareXMLContent(data, so);
-
+
// ATRUST
} else if (SigKZIDHelper.isATrustSigned(so)) {
log.debug("ATrust signature detected");
@@ -391,20 +393,20 @@ public class DetachedBKUConnector implements Connector, LocalConnector
else if (SigKZIDHelper.isBKUSigned(so)) {
log.debug("TD signature signature detected.");
return prepareXMLContent(data, so);
- }
+ }
// unknown
else {
throw new ConnectorException(ErrorCode.UNSUPPORTED_SIGNATURE, "Unsupported signature (" + so.id + ", " +so.kz + "). Please get a new version of PDF-AS. Your version is: " + PdfAS.PDFAS_VERSION);
}
- }
+ }
/**
* Prepares the XML content the holds the actual signature data.
- *
+ *
* <p>
* This strongly rebuilds the XML content as retuned from a sign request.
* </p>
- *
+ *
* @param data
* The data.
* @param so
@@ -421,13 +423,13 @@ public class DetachedBKUConnector implements Connector, LocalConnector
String ids_string = so.getSigID();
String[] ids = SignatureObject.parseSigIds(ids_string);
-
+
X509Certificate cert = so.getX509Certificate();
-
+
// dferbas
AlgorithmSuiteObject algSuite = new AlgorithmSuiteObject();
String verify_xml = AlgorithmSuiteUtil.evaluateReplaceAlgs(algSuite, this.environment, so);
-
+
// data digest replace
{
// byte[] data_value = data.getData();
@@ -457,7 +459,11 @@ public class DetachedBKUConnector implements Connector, LocalConnector
verify_xml = verify_xml.replaceAll(TemplateReplaces.SIG_ID_REPLACE, ids[0]);
verify_xml = verify_xml.replaceFirst(TemplateReplaces.SIGNING_TIME_REPLACE, so.getDate());
verify_xml = verify_xml.replaceFirst(TemplateReplaces.DIGEST_VALUE_CERTIFICATE_REPLACE, certDigest);
- verify_xml = verify_xml.replaceFirst(TemplateReplaces.X509_ISSUER_NAME_REPLACE, so.getIssuer());
+ // fixed by dti: Issuer names may contain escapted commas ("\,"). As far as replaceFirst (and replaceAll)
+ // methods are regarded, backslashes in the replacement string may cause the results to be different than
+ // if it were being treated as a literal replacement string.
+// verify_xml = verify_xml.replaceFirst(TemplateReplaces.X509_ISSUER_NAME_REPLACE, so.getIssuer());
+ verify_xml = verify_xml.replace(TemplateReplaces.X509_ISSUER_NAME_REPLACE, so.getIssuer());
verify_xml = verify_xml.replaceFirst(TemplateReplaces.X509_SERIAL_NUMBER_REPLACE, so.getSerialNumber());
// SigDataRefReplace already done above
verify_xml = verify_xml.replaceFirst(TemplateReplaces.MIME_TYPE_REPLACE, data.getMimeType());
@@ -495,7 +501,7 @@ public class DetachedBKUConnector implements Connector, LocalConnector
/**
* Analyzes the verify response string.
- *
+ *
* @param response_properties
* The response properties containing the response XML.
* @return Returns the SignatureResponse containing the verification result.
@@ -518,7 +524,7 @@ public class DetachedBKUConnector implements Connector, LocalConnector
/**
* Holds environment configuration information like templates.
- *
+ *
* @author wprinz
*/
public static class Environment extends ConnectorEnvironment
@@ -537,27 +543,27 @@ public class DetachedBKUConnector implements Connector, LocalConnector
* The configuration key of the sign URL.
*/
protected static final String SIGN_URL_KEY = "bku.sign.url"; //$NON-NLS-1$
-
+
/**
* BKU template file prefix
*/
protected static final String TEMPLATE_FILE_PREFIX = "/templates/bku.";
-
+
/**
* signing file template sufix
*/
protected static final String SIGN_TEMPLATE_FILE_SUFIX = ".sign.xml";
-
+
/**
* verifing template file sufix
*/
- protected static final String VERIFY_REQUEST_TEMPLATE_FILE_SUFIX = ".verify.request.xml";
+ protected static final String VERIFY_REQUEST_TEMPLATE_FILE_SUFIX = ".verify.request.xml";
/**
* verifing file template key sufix
*/
protected static final String VERIFY_TEMPLATE_SUFIX = ".verify.template.xml";
-
+
/**
* The configuration key of the verify request template.
*/
@@ -605,7 +611,7 @@ public class DetachedBKUConnector implements Connector, LocalConnector
/**
* Initializes the environment with a given profile.
- *
+ *
* @param profile
* The configuration profile.
* @throws ConnectorException
@@ -614,7 +620,7 @@ public class DetachedBKUConnector implements Connector, LocalConnector
public Environment(String profile, String loc_ref_content) throws ConnectorException
{
this.profile = profile;
-
+
this.loc_ref_content = loc_ref_content;
SettingsReader settings = null;
@@ -626,7 +632,7 @@ public class DetachedBKUConnector implements Connector, LocalConnector
{
throw new ConnectorException(300, e);
}
-
+
this.sign_keybox_identifier = getConnectorValueFromProfile(settings, profile, SIGN_KEYBOX_IDENTIFIER_KEY);
String sign_request_filename = TEMPLATE_FILE_PREFIX + settings.getValueFromKey("default.bku.algorithm.id") + SIGN_TEMPLATE_FILE_SUFIX;
@@ -634,7 +640,7 @@ public class DetachedBKUConnector implements Connector, LocalConnector
// try to load template from file
//this.sign_request_template = FileHelper.readFromFile(SettingsReader.relocateFile(sign_request_filename));
this.sign_request_template = settings.readInternalResourceAsString(sign_request_filename);
-
+
// when first load failed (the template file does'nt exist), load it from default template file
if(this.sign_request_template == null)
{
@@ -642,7 +648,7 @@ public class DetachedBKUConnector implements Connector, LocalConnector
//this.sign_request_template = FileHelper.readFromFile(SettingsReader.relocateFile(sign_request_filename));
this.sign_request_template = settings.readInternalResourceAsString(sign_request_filename);
}
-
+
if (this.sign_request_template == null)
{
throw new ConnectorException(300, "Can not read the create xml request template"); //$NON-NLS-1$
@@ -651,20 +657,20 @@ public class DetachedBKUConnector implements Connector, LocalConnector
this.sign_url = getConnectorValueFromProfile(settings, profile, SIGN_URL_KEY);
// verify
-
+
String verify_request_filename = TEMPLATE_FILE_PREFIX + settings.getValueFromKey("default.bku.algorithm.id") + VERIFY_REQUEST_TEMPLATE_FILE_SUFIX;
-
+
// try to load template file for verifing
//this.verify_request_template = FileHelper.readFromFile(SettingsReader.relocateFile(verify_request_filename));
this.verify_request_template = settings.readInternalResourceAsString(verify_request_filename);
-
+
if(this.verify_request_template == null)
{
verify_request_filename = getConnectorValueFromProfile(settings, profile, VERIFY_REQUEST_TEMPLATE_KEY);
//this.verify_request_template = FileHelper.readFromFile(SettingsReader.relocateFile(verify_request_filename));
this.verify_request_template = settings.readInternalResourceAsString(verify_request_filename);
}
-
+
if (this.verify_request_template == null)
{
throw new ConnectorException(ErrorCode.SETTING_NOT_FOUND, "Can not read the verify xml request template"); //$NON-NLS-1$
@@ -674,7 +680,7 @@ public class DetachedBKUConnector implements Connector, LocalConnector
String verify_filename = TEMPLATE_FILE_PREFIX + settings.getValueFromKey("default.bku.algorithm.id") + VERIFY_TEMPLATE_SUFIX;
//this.verify_template = FileHelper.readFromFile(SettingsReader.relocateFile(verify_filename));
this.verify_template = settings.readInternalResourceAsString(verify_filename);
-
+
if(this.verify_template == null)
{
verify_filename = getConnectorValueFromProfile(settings, profile, VERIFY_TEMPLATE_KEY);
@@ -702,7 +708,7 @@ public class DetachedBKUConnector implements Connector, LocalConnector
/**
* Returns the LocRef content.
- *
+ *
* @return Returns the LocRef content.
*/
public String getLocRefContent()
@@ -712,7 +718,7 @@ public class DetachedBKUConnector implements Connector, LocalConnector
/**
* Returns the sign keybox identifier.
- *
+ *
* @return Returns the sign keybox identifier.
*/
public String getSignKeyboxIdentifier()
@@ -722,7 +728,7 @@ public class DetachedBKUConnector implements Connector, LocalConnector
/**
* Returns the sign request template.
- *
+ *
* @return Returns the sign request template.
*/
public String getSignRequestTemplate()
@@ -732,7 +738,7 @@ public class DetachedBKUConnector implements Connector, LocalConnector
/**
* Returns the sign URL.
- *
+ *
* @return Returns the sign URL.
*/
public String getSignURL()
@@ -742,7 +748,7 @@ public class DetachedBKUConnector implements Connector, LocalConnector
/**
* Returns the verify request template.
- *
+ *
* @return Returns the verify request template.
*/
public String getVerifyRequestTemplate()
@@ -752,7 +758,7 @@ public class DetachedBKUConnector implements Connector, LocalConnector
/**
* Returns the verify template.
- *
+ *
* @return Returns the verify template.
*/
public String getVerifyTemplate()
@@ -762,7 +768,7 @@ public class DetachedBKUConnector implements Connector, LocalConnector
/**
* Returns the verify URL.
- *
+ *
* @return Returns the verify URL.
*/
public String getVerifyURL()
@@ -772,7 +778,7 @@ public class DetachedBKUConnector implements Connector, LocalConnector
/**
* Returns the ecdsa cert alg property.
- *
+ *
* @return Returns the ecdsa cert alg property.
*/
public String getCertAlgEcdsa()
@@ -782,7 +788,7 @@ public class DetachedBKUConnector implements Connector, LocalConnector
/**
* Returns the rsa cert alg property.
- *
+ *
* @return Returns the rsa cert alg property.
*/
public String getCertAlgRsa()
@@ -793,7 +799,7 @@ public class DetachedBKUConnector implements Connector, LocalConnector
/**
* Reads the configuration entry given by the key, first from the given
* profile, if not found from the defaults.
- *
+ *
* @param settings
* The settings.
* @param profile
diff --git a/pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/sig/connectors/bku/EnvelopedBase64BKUConnector.java b/pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/sig/connectors/bku/EnvelopedBase64BKUConnector.java
index 170cc45..22318a2 100644
--- a/pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/sig/connectors/bku/EnvelopedBase64BKUConnector.java
+++ b/pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/sig/connectors/bku/EnvelopedBase64BKUConnector.java
@@ -52,7 +52,7 @@ import at.knowcenter.wag.egov.egiz.tools.CodingHelper;
/**
* @author wprinz
- *
+ *
*/
public class EnvelopedBase64BKUConnector implements Connector, LocalConnector
{
@@ -72,16 +72,16 @@ public class EnvelopedBase64BKUConnector implements Connector, LocalConnector
/**
* Constructor that builds the configuration environment for this connector
* according to the given profile.
- *
+ *
* <p>
* If confuguration parameters are not defined on that profile, the default
* parameters defined in the configuration are used.
* </p>
- *
+ *
* <p>
* This is the new "hotfix" base64 connector.
* </p>
- *
+ *
* @param profile
* The profile from which the Environment should be assembled.
* @throws ConnectorException
@@ -137,7 +137,7 @@ public class EnvelopedBase64BKUConnector implements Connector, LocalConnector
// /**
// * This emthod extracts id-values from a text. The id is given by the name.
-// *
+// *
// * @param text
// * the id-value that should extract from
// * @param name
@@ -166,11 +166,11 @@ public class EnvelopedBase64BKUConnector implements Connector, LocalConnector
/**
* Prepares the XML content the holds the actual signature data.
- *
+ *
* <p>
* This strongly rebuilds the XML content as retuned from a sign request.
* </p>
- *
+ *
* @param data
* The data.
* @param so
@@ -186,13 +186,13 @@ public class EnvelopedBase64BKUConnector implements Connector, LocalConnector
{
String ids_string = so.getSigID();
String[] ids = SignatureObject.parseSigIds(ids_string);
-
+
X509Certificate cert = so.getX509Certificate();
-
+
// dferbas
AlgorithmSuiteObject algSuite = new AlgorithmSuiteObject();
String verify_xml = AlgorithmSuiteUtil.evaluateReplaceAlgs(algSuite, this.environment, so);
-
+
// data digest replace
byte[] data_value = BKUHelper.prepareEnvelopingData(data);
{
@@ -225,7 +225,11 @@ public class EnvelopedBase64BKUConnector implements Connector, LocalConnector
verify_xml = verify_xml.replaceAll(TemplateReplaces.SIG_ID_REPLACE, ids[0]);
verify_xml = verify_xml.replaceFirst(TemplateReplaces.SIGNING_TIME_REPLACE, so.getDate());
verify_xml = verify_xml.replaceFirst(TemplateReplaces.DIGEST_VALUE_CERTIFICATE_REPLACE, certDigest);
- verify_xml = verify_xml.replaceFirst(TemplateReplaces.X509_ISSUER_NAME_REPLACE, so.getIssuer());
+ // fixed by dti: Issuer names may contain escapted commas ("\,"). As far as replaceFirst (and replaceAll)
+ // methods are regarded, backslashes in the replacement string may cause the results to be different than
+ // if it were being treated as a literal replacement string.
+// verify_xml = verify_xml.replaceFirst(TemplateReplaces.X509_ISSUER_NAME_REPLACE, so.getIssuer());
+ verify_xml = verify_xml.replace(TemplateReplaces.X509_ISSUER_NAME_REPLACE, so.getIssuer());
verify_xml = verify_xml.replaceFirst(TemplateReplaces.X509_SERIAL_NUMBER_REPLACE, so.getSerialNumber());
// SigDataRefReplace already done above
@@ -276,7 +280,7 @@ public class EnvelopedBase64BKUConnector implements Connector, LocalConnector
/**
* Prepares the sign request xml to be sent using the sign request template.
- *
+ *
* @param data
* The SignatureData.
* @return Returns the sign request xml to be sent.
@@ -302,7 +306,7 @@ public class EnvelopedBase64BKUConnector implements Connector, LocalConnector
/**
* Prepares the verify request xml to be sent using the verify request
* template.
- *
+ *
* @param data
* The SignatureData.
* @param so
@@ -325,7 +329,11 @@ public class EnvelopedBase64BKUConnector implements Connector, LocalConnector
xml_content = chooseAndCreateXMLDsig(data, so);
}
- String verify_request_xml = verify_request_template.replaceFirst(TemplateReplaces.XML_CONTENT_REPLACE, xml_content);
+ // fixed by dti: Issuer names may contain escapted commas ("\,"). As far as replaceFirst (and replaceAll)
+ // methods are regarded, backslashes in the replacement string may cause the results to be different than
+ // if it were being treated as a literal replacement string.
+// String verify_request_xml = verify_request_template.replaceFirst(TemplateReplaces.XML_CONTENT_REPLACE, xml_content);
+ String verify_request_xml = verify_request_template.replace(TemplateReplaces.XML_CONTENT_REPLACE, xml_content);
// log.debug("\r\n\r\n" + verify_request_xml + "\r\n\r\n");
@@ -349,7 +357,7 @@ public class EnvelopedBase64BKUConnector implements Connector, LocalConnector
/**
* Sends the request to the given URL.
- *
+ *
* @param url
* The URL.
* @param request_string
@@ -373,7 +381,7 @@ public class EnvelopedBase64BKUConnector implements Connector, LocalConnector
/**
* Analyzes the sign response xml and extracts the signature data.
- *
+ *
* @param response_properties
* The response properties containing the response String and
* transport related information.
@@ -391,7 +399,7 @@ public class EnvelopedBase64BKUConnector implements Connector, LocalConnector
String bkuIdentifier = BKUHelper.getBKUIdentifier(response_properties);
log.debug("BKU identifier: \"" + bkuIdentifier + "\"");
-
+
SignSignatureObject so = BKUHelper.parseCreateXMLResponse(response_string, new HotfixIdFormatter(), this.environment);
log.debug("analyzeSignResponse finished."); //$NON-NLS-1$
@@ -400,7 +408,7 @@ public class EnvelopedBase64BKUConnector implements Connector, LocalConnector
/**
* Analyzes the verify response string.
- *
+ *
* @param response_properties
* The response properties containing the response XML.
* @return Returns the SignatureResponse containing the verification result.
@@ -423,7 +431,7 @@ public class EnvelopedBase64BKUConnector implements Connector, LocalConnector
/**
* Holds environment configuration information like templates.
- *
+ *
* @author wprinz
*/
public static class Environment extends ConnectorEnvironment
@@ -488,7 +496,7 @@ public class EnvelopedBase64BKUConnector implements Connector, LocalConnector
/**
* Initializes the environment with a given profile.
- *
+ *
* @param profile
* The configuration profile.
* @throws ConnectorException
@@ -524,7 +532,7 @@ public class EnvelopedBase64BKUConnector implements Connector, LocalConnector
//this.verify_request_template = FileHelper.readFromFile(SettingsReader.relocateFile(verify_request_filename));
this.verify_request_template = settings.readInternalResourceAsString(verify_request_filename);
log.debug("Verify request template filename = " + verify_request_filename);
-
+
if (this.verify_request_template == null)
{
throw new ConnectorException(ErrorCode.SETTING_NOT_FOUND, "Can not read the verify xml request template"); //$NON-NLS-1$
@@ -555,7 +563,7 @@ public class EnvelopedBase64BKUConnector implements Connector, LocalConnector
/**
* Returns the sign keybox identifier.
- *
+ *
* @return Returns the sign keybox identifier.
*/
public String getSignKeyboxIdentifier()
@@ -565,7 +573,7 @@ public class EnvelopedBase64BKUConnector implements Connector, LocalConnector
/**
* Returns the sign request template.
- *
+ *
* @return Returns the sign request template.
*/
public String getSignRequestTemplate()
@@ -575,7 +583,7 @@ public class EnvelopedBase64BKUConnector implements Connector, LocalConnector
/**
* Returns the sign URL.
- *
+ *
* @return Returns the sign URL.
*/
public String getSignURL()
@@ -585,7 +593,7 @@ public class EnvelopedBase64BKUConnector implements Connector, LocalConnector
/**
* Returns the verify request template.
- *
+ *
* @return Returns the verify request template.
*/
public String getVerifyRequestTemplate()
@@ -595,7 +603,7 @@ public class EnvelopedBase64BKUConnector implements Connector, LocalConnector
/**
* Returns the verify template.
- *
+ *
* @return Returns the verify template.
*/
public String getVerifyTemplate()
@@ -605,7 +613,7 @@ public class EnvelopedBase64BKUConnector implements Connector, LocalConnector
/**
* Returns the verify URL.
- *
+ *
* @return Returns the verify URL.
*/
public String getVerifyURL()
@@ -615,7 +623,7 @@ public class EnvelopedBase64BKUConnector implements Connector, LocalConnector
/**
* Returns the ecdsa cert alg property.
- *
+ *
* @return Returns the ecdsa cert alg property.
*/
public String getCertAlgEcdsa()
@@ -625,7 +633,7 @@ public class EnvelopedBase64BKUConnector implements Connector, LocalConnector
/**
* Returns the rsa cert alg property.
- *
+ *
* @return Returns the rsa cert alg property.
*/
public String getCertAlgRsa()
@@ -636,7 +644,7 @@ public class EnvelopedBase64BKUConnector implements Connector, LocalConnector
/**
* Reads the configuration entry given by the key, first from the given
* profile, if not found from the defaults.
- *
+ *
* @param settings
* The settings.
* @param profile
diff --git a/pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/sig/connectors/moa/DetachedLocRefMOAConnector.java b/pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/sig/connectors/moa/DetachedLocRefMOAConnector.java
index ea90841..07e9ccd 100644
--- a/pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/sig/connectors/moa/DetachedLocRefMOAConnector.java
+++ b/pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/sig/connectors/moa/DetachedLocRefMOAConnector.java
@@ -55,7 +55,7 @@ import at.knowcenter.wag.egov.egiz.tools.FileHelper;
/**
* Connects to MOA providing the Data detached as LocRef on a local resource.
- *
+ *
* @author wprinz
*/
public class DetachedLocRefMOAConnector implements Connector
@@ -79,12 +79,12 @@ public class DetachedLocRefMOAConnector implements Connector
/**
* Constructor that builds the configuration environment for this connector
* according to the given profile.
- *
+ *
* <p>
* If confuguration parameters are not defined on that profile, the default
* parameters defined in the configuration are used.
* </p>
- *
+ *
* @param profile
* The profile from which the Environment should be assembled.
* @throws SettingsException
@@ -183,7 +183,7 @@ public class DetachedLocRefMOAConnector implements Connector
/**
* Prepares the verify request xml to be sent using the verify request
* template.
- *
+ *
* @param data
* The SignatureData.
* @param so
@@ -206,7 +206,11 @@ public class DetachedLocRefMOAConnector implements Connector
xml_content = chooseAndCreateXMLDsig(data, so);
}
- String verify_request_xml = verify_request_template.replaceFirst(TemplateReplaces.XML_CONTENT_REPLACE, xml_content);
+ // fixed by dti: Issuer names may contain escapted commas ("\,"). As far as replaceFirst (and replaceAll)
+ // methods are regarded, backslashes in the replacement string may cause the results to be different than
+ // if it were being treated as a literal replacement string.
+// String verify_request_xml = verify_request_template.replaceFirst(TemplateReplaces.XML_CONTENT_REPLACE, xml_content);
+ String verify_request_xml = verify_request_template.replace(TemplateReplaces.XML_CONTENT_REPLACE, xml_content);
verify_request_xml = verify_request_xml.replaceFirst(TemplateReplaces.TRUST_PROFILE_ID_REPLACE, this.environment.getVerifyTrustProfileId());
verify_request_xml = verify_request_xml.replaceFirst(TemplateReplaces.LOC_REF_CONTENT_REPLACE, this.environment.getSignatureDataUrl());
@@ -217,7 +221,7 @@ public class DetachedLocRefMOAConnector implements Connector
/**
* Analyzes the verify response string.
- *
+ *
* @param response_properties
* The response properties containing the response XML.
* @return Returns the SignatureResponse containing the verification result.
@@ -272,7 +276,11 @@ public class DetachedLocRefMOAConnector implements Connector
// Qualified Properties replaces
verify_xml = verify_xml.replaceFirst(TemplateReplaces.SIGNING_TIME_REPLACE, so.getDate());
verify_xml = verify_xml.replaceFirst(TemplateReplaces.DIGEST_VALUE_CERTIFICATE_REPLACE, certDigest);
- verify_xml = verify_xml.replaceFirst(TemplateReplaces.X509_ISSUER_NAME_REPLACE, so.getIssuer());
+ // fixed by dti: Issuer names may contain escapted commas ("\,"). As far as replaceFirst (and replaceAll)
+ // methods are regarded, backslashes in the replacement string may cause the results to be different than
+ // if it were being treated as a literal replacement string.
+// verify_xml = verify_xml.replaceFirst(TemplateReplaces.X509_ISSUER_NAME_REPLACE, so.getIssuer());
+ verify_xml = verify_xml.replace(TemplateReplaces.X509_ISSUER_NAME_REPLACE, so.getIssuer());
verify_xml = verify_xml.replaceFirst(TemplateReplaces.X509_SERIAL_NUMBER_REPLACE, so.getSerialNumber());
// SigDataRefReplace already done above
verify_xml = verify_xml.replaceFirst(TemplateReplaces.MIME_TYPE_REPLACE, data.getMimeType());
@@ -323,7 +331,7 @@ public class DetachedLocRefMOAConnector implements Connector
/**
* Holds environment configuration information like templates.
- *
+ *
* @author wprinz
*/
public static class Environment extends ConnectorEnvironment
@@ -417,7 +425,7 @@ public class DetachedLocRefMOAConnector implements Connector
/**
* Initializes the environment with a given profile.
- *
+ *
* @param profile
* The configuration profile.
* @throws SettingsException
@@ -516,7 +524,7 @@ public class DetachedLocRefMOAConnector implements Connector
/**
* Returns the URL where to load the detached data from.
- *
+ *
* @return Returns the URL where to load the detached data from.
*/
public String getSignatureDataUrl()
@@ -526,7 +534,7 @@ public class DetachedLocRefMOAConnector implements Connector
/**
* Returns the sign key identifier.
- *
+ *
* @return Returns the sign key identifier.
*/
public String getSignKeyIdentifier()
@@ -536,7 +544,7 @@ public class DetachedLocRefMOAConnector implements Connector
/**
* Returns the sign request template.
- *
+ *
* @return Returns the sign request template.
*/
public String getSignRequestTemplate()
@@ -546,7 +554,7 @@ public class DetachedLocRefMOAConnector implements Connector
/**
* Returns the sign URL.
- *
+ *
* @return Returns the sign URL.
*/
public String getSignURL()
@@ -556,7 +564,7 @@ public class DetachedLocRefMOAConnector implements Connector
/**
* Returns the verify request template.
- *
+ *
* @return Returns the verify request template.
*/
public String getVerifyRequestTemplate()
@@ -566,7 +574,7 @@ public class DetachedLocRefMOAConnector implements Connector
/**
* Returns the verify template.
- *
+ *
* @return Returns the verify template.
*/
public String getVerifyTemplate()
@@ -576,7 +584,7 @@ public class DetachedLocRefMOAConnector implements Connector
/**
* Returns the verify URL.
- *
+ *
* @return Returns the verify URL.
*/
public String getVerifyURL()
@@ -586,7 +594,7 @@ public class DetachedLocRefMOAConnector implements Connector
/**
* Returns the verify trust profile id.
- *
+ *
* @return Returns the verify trust profile id.
*/
public String getVerifyTrustProfileId()
@@ -596,7 +604,7 @@ public class DetachedLocRefMOAConnector implements Connector
/**
* Returns the ecdsa cert alg property.
- *
+ *
* @return Returns the ecdsa cert alg property.
*/
public String getCertAlgEcdsa()
@@ -606,7 +614,7 @@ public class DetachedLocRefMOAConnector implements Connector
/**
* Returns the rsa cert alg property.
- *
+ *
* @return Returns the rsa cert alg property.
*/
public String getCertAlgRsa()
@@ -617,7 +625,7 @@ public class DetachedLocRefMOAConnector implements Connector
/**
* Reads the configuration entry given by the key, first from the given
* profile, if not found from the defaults.
- *
+ *
* @param settings
* The settings.
* @param profile
diff --git a/pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/sig/connectors/moa/EnvelopingBase64MOAConnector.java b/pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/sig/connectors/moa/EnvelopingBase64MOAConnector.java
index 6f2d171..4a33fc8 100644
--- a/pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/sig/connectors/moa/EnvelopingBase64MOAConnector.java
+++ b/pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/sig/connectors/moa/EnvelopingBase64MOAConnector.java
@@ -54,7 +54,7 @@ import at.knowcenter.wag.egov.egiz.tools.FileHelper;
/**
* @author wprinz
- *
+ *
*/
public class EnvelopingBase64MOAConnector implements Connector
{
@@ -69,18 +69,18 @@ public class EnvelopingBase64MOAConnector implements Connector
* other configurable elements.
*/
protected Environment environment = null;
-
+
protected ConnectorParameters params = null;
/**
* Constructor that builds the configuration environment for this connector
* according to the given profile.
- *
+ *
* <p>
* If confuguration parameters are not defined on that profile, the default
* parameters defined in the configuration are used.
* </p>
- *
+ *
* @param profile
* The profile from which the Environment should be assembled.
* @throws ConnectorException
@@ -150,7 +150,7 @@ public class EnvelopingBase64MOAConnector implements Connector
/**
* Prepares the sign request xml to be sent using the sign request template.
- *
+ *
* @param data
* The SignatureData.
* @return Returns the sign request xml to be sent.
@@ -176,7 +176,7 @@ public class EnvelopingBase64MOAConnector implements Connector
/**
* Prepares the verify request xml to be sent using the verify request
* template.
- *
+ *
* @param data
* The SignatureData.
* @param so
@@ -199,7 +199,11 @@ public class EnvelopingBase64MOAConnector implements Connector
xml_content = chooseAndCreateXMLDsig(data, so);
}
- String verify_request_xml = verify_request_template.replaceFirst(TemplateReplaces.XML_CONTENT_REPLACE, xml_content);
+ // fixed by dti: Issuer names may contain escapted commas ("\,"). As far as replaceFirst (and replaceAll)
+ // methods are regarded, backslashes in the replacement string may cause the results to be different than
+ // if it were being treated as a literal replacement string.
+// String verify_request_xml = verify_request_template.replaceFirst(TemplateReplaces.XML_CONTENT_REPLACE, xml_content);
+ String verify_request_xml = verify_request_template.replace(TemplateReplaces.XML_CONTENT_REPLACE, xml_content);
verify_request_xml = verify_request_xml.replaceFirst(TemplateReplaces.TRUST_PROFILE_ID_REPLACE, this.environment.getVerifyTrustProfileId());
String returnHashInputDataElement = "";
@@ -208,10 +212,10 @@ public class EnvelopingBase64MOAConnector implements Connector
returnHashInputDataElement = MOASoapWithAttachmentConnector.RETURN_HASH_INPUT_DATA;
}
verify_request_xml = verify_request_xml.replaceFirst(TemplateReplaces.RETURN_HASH_INPUT_DATA_REPLACE, returnHashInputDataElement);
-
+
verify_request_xml = verify_request_xml.replaceFirst(TemplateReplaces.DATE_TIME_REPLACE, BKUHelper.formDateTimeElement(this.params.getVerificationTime()));
-
+
log.debug("\r\n\r\n" + verify_request_xml + "\r\n\r\n");
return verify_request_xml;
@@ -219,7 +223,7 @@ public class EnvelopingBase64MOAConnector implements Connector
/**
* Analyzes the sign response xml and extracts the signature data.
- *
+ *
* @param response_properties
* The response properties containing the response String and
* transport related information.
@@ -243,7 +247,7 @@ public class EnvelopingBase64MOAConnector implements Connector
/**
* Analyzes the verify response string.
- *
+ *
* @param response_properties
* The response properties containing the response XML.
* @return Returns the SignatureResponse containing the verification result.
@@ -266,11 +270,11 @@ public class EnvelopingBase64MOAConnector implements Connector
/**
* Prepares the XML content the holds the actual signature data.
- *
+ *
* <p>
* This strongly rebuilds the XML content as retuned from a sign request.
* </p>
- *
+ *
* @param data
* The data.
* @param so
@@ -285,7 +289,7 @@ public class EnvelopingBase64MOAConnector implements Connector
try
{
X509Certificate cert = so.getX509Certificate();
-
+
// dferbas
AlgorithmSuiteObject algSuite = new AlgorithmSuiteObject();
String verify_xml = AlgorithmSuiteUtil.evaluateReplaceAlgs(algSuite, this.environment, so);
@@ -311,7 +315,11 @@ public class EnvelopingBase64MOAConnector implements Connector
// Qualified Properties replaces
verify_xml = verify_xml.replaceFirst(TemplateReplaces.SIGNING_TIME_REPLACE, so.getDate());
verify_xml = verify_xml.replaceFirst(TemplateReplaces.DIGEST_VALUE_CERTIFICATE_REPLACE, certDigest);
- verify_xml = verify_xml.replaceFirst(TemplateReplaces.X509_ISSUER_NAME_REPLACE, so.getIssuer());
+ // fixed by dti: Issuer names may contain escapted commas ("\,"). As far as replaceFirst (and replaceAll)
+ // methods are regarded, backslashes in the replacement string may cause the results to be different than
+ // if it were being treated as a literal replacement string.
+// verify_xml = verify_xml.replaceFirst(TemplateReplaces.X509_ISSUER_NAME_REPLACE, so.getIssuer());
+ verify_xml = verify_xml.replace(TemplateReplaces.X509_ISSUER_NAME_REPLACE, so.getIssuer());
verify_xml = verify_xml.replaceFirst(TemplateReplaces.X509_SERIAL_NUMBER_REPLACE, so.getSerialNumber());
// SigDataRefReplace already done above
@@ -339,7 +347,7 @@ public class EnvelopingBase64MOAConnector implements Connector
// Base64 content replace -> do this at last for performance
String base64 = CodingHelper.encodeBase64(data_value);
verify_xml = verify_xml.replaceFirst(TemplateReplaces.BASE64_CONTENT_REPLACE, base64);
-
+
log.debug("prepareXMLContent finished."); //$NON-NLS-1$
return verify_xml;
}
@@ -352,7 +360,7 @@ public class EnvelopingBase64MOAConnector implements Connector
/**
* Holds environment configuration information like templates.
- *
+ *
* @author wprinz
*/
public static class Environment extends ConnectorEnvironment
@@ -401,7 +409,7 @@ public class EnvelopingBase64MOAConnector implements Connector
* The configuration key for the RSA cert alg property.
*/
protected static final String RSA_CERT_ALG_KEY = "cert.alg.rsa"; //$NON-NLS-1$
-
+
protected String profile = null;
protected String sign_key_identifier = null;
@@ -424,7 +432,7 @@ public class EnvelopingBase64MOAConnector implements Connector
/**
* Initializes the environment with a given profile.
- *
+ *
* @param profile
* The configuration profile.
* @throws ConnectorException
@@ -433,7 +441,7 @@ public class EnvelopingBase64MOAConnector implements Connector
public Environment(String profile, String signKeyIdentifier) throws ConnectorException
{
this.profile = profile;
-
+
SettingsReader settings = null;
try
{
@@ -449,7 +457,7 @@ public class EnvelopingBase64MOAConnector implements Connector
this.sign_key_identifier = signKeyIdentifier;
}
else
- {
+ {
this.sign_key_identifier = getConnectorValueFromProfile(settings, profile, SIGN_KEY_IDENTIFIER_KEY);
}
@@ -488,7 +496,7 @@ public class EnvelopingBase64MOAConnector implements Connector
this.cert_alg_rsa = settings.getValueFromKey(RSA_CERT_ALG_KEY);
}
-
+
public String getProfile()
{
return this.profile;
@@ -496,7 +504,7 @@ public class EnvelopingBase64MOAConnector implements Connector
/**
* Returns the sign key identifier.
- *
+ *
* @return Returns the sign key identifier.
*/
public String getSignKeyIdentifier()
@@ -506,7 +514,7 @@ public class EnvelopingBase64MOAConnector implements Connector
/**
* Returns the sign request template.
- *
+ *
* @return Returns the sign request template.
*/
public String getSignRequestTemplate()
@@ -516,7 +524,7 @@ public class EnvelopingBase64MOAConnector implements Connector
/**
* Returns the sign URL.
- *
+ *
* @return Returns the sign URL.
*/
public String getSignURL()
@@ -526,7 +534,7 @@ public class EnvelopingBase64MOAConnector implements Connector
/**
* Returns the verify request template.
- *
+ *
* @return Returns the verify request template.
*/
public String getVerifyRequestTemplate()
@@ -536,7 +544,7 @@ public class EnvelopingBase64MOAConnector implements Connector
/**
* Returns the verify template.
- *
+ *
* @return Returns the verify template.
*/
public String getVerifyTemplate()
@@ -546,7 +554,7 @@ public class EnvelopingBase64MOAConnector implements Connector
/**
* Returns the verify URL.
- *
+ *
* @return Returns the verify URL.
*/
public String getVerifyURL()
@@ -556,7 +564,7 @@ public class EnvelopingBase64MOAConnector implements Connector
/**
* Returns the verify trust profile id.
- *
+ *
* @return Returns the verify trust profile id.
*/
public String getVerifyTrustProfileId()
@@ -566,7 +574,7 @@ public class EnvelopingBase64MOAConnector implements Connector
/**
* Returns the ecdsa cert alg property.
- *
+ *
* @return Returns the ecdsa cert alg property.
*/
public String getCertAlgEcdsa()
@@ -576,7 +584,7 @@ public class EnvelopingBase64MOAConnector implements Connector
/**
* Returns the rsa cert alg property.
- *
+ *
* @return Returns the rsa cert alg property.
*/
public String getCertAlgRsa()
@@ -587,7 +595,7 @@ public class EnvelopingBase64MOAConnector implements Connector
/**
* Reads the configuration entry given by the key, first from the given
* profile, if not found from the defaults.
- *
+ *
* @param settings
* The settings.
* @param profile
diff --git a/pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/sig/connectors/moa/MOASoapWithAttachmentConnector.java b/pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/sig/connectors/moa/MOASoapWithAttachmentConnector.java
index db0a04f..401921b 100644
--- a/pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/sig/connectors/moa/MOASoapWithAttachmentConnector.java
+++ b/pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/sig/connectors/moa/MOASoapWithAttachmentConnector.java
@@ -54,7 +54,7 @@ import at.knowcenter.wag.egov.egiz.tools.CodingHelper;
/**
* Connects to MOA providing the Data detached as LocRef on a local resource.
- *
+ *
* @author wprinz
*/
public class MOASoapWithAttachmentConnector implements Connector
@@ -72,9 +72,9 @@ public class MOASoapWithAttachmentConnector implements Connector
private static Log log = LogFactory.getLog(MOASoapWithAttachmentConnector.class);
protected static final String MULTIPART_LOC_REF_CONTENT = "formdata:fileupload"; //$NON-NLS-1$
-
+
protected static final String RETURN_HASH_INPUT_DATA = "<ReturnHashInputData/>"; //$NON-NLS-1$
-
+
/**
* The connector parameters.
*/
@@ -85,17 +85,17 @@ public class MOASoapWithAttachmentConnector implements Connector
* other configurable elements.
*/
protected Environment environment = null;
-
-
+
+
/**
* Constructor that builds the configuration environment for this connector
* according to the given profile.
- *
+ *
* <p>
* If confuguration parameters are not defined on that profile, the default
* parameters defined in the configuration are used.
* </p>
- *
+ *
* @param connectorParameters
* The parameters for this connector.
* @throws ConnectorException
@@ -193,7 +193,7 @@ public class MOASoapWithAttachmentConnector implements Connector
/**
* Prepares the verify request xml to be sent using the verify request
* template.
- *
+ *
* @param data
* The SignatureData.
* @param so
@@ -216,32 +216,36 @@ public class MOASoapWithAttachmentConnector implements Connector
xml_content = chooseAndCreateXMLDsig(data, so);
}
- String verify_request_xml = verify_request_template.replaceFirst(TemplateReplaces.XML_CONTENT_REPLACE, xml_content);
+ // fixed by dti: Issuer names may contain escapted commas ("\,"). As far as replaceFirst (and replaceAll)
+ // methods are regarded, backslashes in the replacement string may cause the results to be different than
+ // if it were being treated as a literal replacement string.
+// String verify_request_xml = verify_request_template.replaceFirst(TemplateReplaces.XML_CONTENT_REPLACE, xml_content);
+ String verify_request_xml = verify_request_template.replace(TemplateReplaces.XML_CONTENT_REPLACE, xml_content);
verify_request_xml = verify_request_xml.replaceFirst(TemplateReplaces.TRUST_PROFILE_ID_REPLACE, this.environment.getVerifyTrustProfileId());
verify_request_xml = verify_request_xml.replaceFirst(TemplateReplaces.LOC_REF_CONTENT_REPLACE, this.environment.getSignatureDataUrl());
-
+
String returnHashInputDataElement = "";
if (this.params.isReturnHashInputData())
{
returnHashInputDataElement = RETURN_HASH_INPUT_DATA;
}
verify_request_xml = verify_request_xml.replaceFirst(TemplateReplaces.RETURN_HASH_INPUT_DATA_REPLACE, returnHashInputDataElement);
-
+
verify_request_xml = verify_request_xml.replaceFirst(TemplateReplaces.DATE_TIME_REPLACE, BKUHelper.formDateTimeElement(this.params.getVerificationTime()));
-
+
log.debug("\r\n\r\n" + verify_request_xml + "\r\n\r\n");
return verify_request_xml;
}
-
+
private String chooseAndCreateXMLDsig(SignatureData data, SignSignatureObject so) throws ConnectorException {
-
+
// MOA
if (SigKZIDHelper.isMOASigned(so)) {
log.debug("MOA signature detected.");
return prepareXMLContent(data, so);
-
+
// MOCCA
} else if (SigKZIDHelper.isMOCCASigned(so)) {
log.debug("MOCCA signature detected.");
@@ -255,7 +259,7 @@ public class MOASoapWithAttachmentConnector implements Connector
log.debug("A-Trust signature detected.");
this.environment.reInitVerifyTemplate(ATRUST_VERIFY_TEMPLATE_KEY);
return prepareXMLContent(data, so);
-
+
// TD bku
} else if (SigKZIDHelper.isBKUSigned(so)) {
log.debug("TD bku signature detected.");
@@ -263,13 +267,13 @@ public class MOASoapWithAttachmentConnector implements Connector
return bku_connector.prepareXMLContent(data, so);
} else {
throw new ConnectorException(ErrorCode.UNSUPPORTED_SIGNATURE, "Unsupported signature (" + so.id + ", " +so.kz + "). Please get a new version of PDF-AS. Your version is: " + PdfAS.PDFAS_VERSION);
-
+
}
}
-
+
/**
* Analyzes the verify response string.
- *
+ *
* @param response_properties
* The response properties containing the response XML.
* @return Returns the SignatureResponse containing the verification result.
@@ -298,7 +302,7 @@ public class MOASoapWithAttachmentConnector implements Connector
String verify_xml = null;
X509Certificate cert = so.getX509Certificate();
-
+
// dferbas
AlgorithmSuiteObject algSuite = new AlgorithmSuiteObject();
verify_xml = AlgorithmSuiteUtil.evaluateReplaceAlgs(algSuite, this.environment, so);
@@ -326,7 +330,11 @@ public class MOASoapWithAttachmentConnector implements Connector
// Qualified Properties replaces
verify_xml = verify_xml.replaceFirst(TemplateReplaces.SIGNING_TIME_REPLACE, so.getDate());
verify_xml = verify_xml.replaceFirst(TemplateReplaces.DIGEST_VALUE_CERTIFICATE_REPLACE, certDigest);
- verify_xml = verify_xml.replaceFirst(TemplateReplaces.X509_ISSUER_NAME_REPLACE, so.getIssuer());
+ // fixed by dti: Issuer names may contain escapted commas ("\,"). As far as replaceFirst (and replaceAll)
+ // methods are regarded, backslashes in the replacement string may cause the results to be different than
+ // if it were being treated as a literal replacement string.
+// verify_xml = verify_xml.replaceFirst(TemplateReplaces.X509_ISSUER_NAME_REPLACE, so.getIssuer());
+ verify_xml = verify_xml.replace(TemplateReplaces.X509_ISSUER_NAME_REPLACE, so.getIssuer());
verify_xml = verify_xml.replaceFirst(TemplateReplaces.X509_SERIAL_NUMBER_REPLACE, so.getSerialNumber());
// SigDataRefReplace already done above
verify_xml = verify_xml.replaceFirst(TemplateReplaces.MIME_TYPE_REPLACE, data.getMimeType());
@@ -367,23 +375,11 @@ public class MOASoapWithAttachmentConnector implements Connector
{
try
{
- // for performance measurement
-// long startTime = 0;
-// if (log.isInfoEnabled()) {
-// startTime = System.currentTimeMillis();
-// }
-
+
// Properties response_properties = MOASoapConnection.connectMOA(request_string, MOASoapConnection.SERVICE_SIGN, url);
log.debug("Connecting to " + url);
Properties response_properties = MOASoapConnection.doPostRequestMultipart(url,mode, request_string, data );
-
- // for performance measurement
-// if (log.isInfoEnabled()) {
-// long endTime = System.currentTimeMillis();
-// String toReport = "MOA-PROCESSING;-;-;" + (endTime - startTime) + ";";
-// log.info(toReport);
-// }
-
+
return response_properties;
}
catch (Exception e)
@@ -391,14 +387,14 @@ public class MOASoapWithAttachmentConnector implements Connector
throw new ConnectorException(330, e);
}
}
-
+
public void reInitVerifyTemplate(String templatePropKey) throws ConnectorException {
this.environment.reInitVerifyTemplate(templatePropKey);
}
/**
* Holds environment configuration information like templates.
- *
+ *
* @author wprinz
*/
public static class Environment extends ConnectorEnvironment
@@ -490,7 +486,7 @@ public class MOASoapWithAttachmentConnector implements Connector
protected String cert_alg_rsa = null;
-
+
public void reInitVerifyTemplate(String templatePropKey) throws ConnectorException {
SettingsReader settings = null;
try
@@ -501,14 +497,14 @@ public class MOASoapWithAttachmentConnector implements Connector
{
throw new ConnectorException(300, e);
}
-
+
String verify_request_filename = getConnectorValueFromProfile(settings, this.profile, templatePropKey);
this.verify_template = settings.readInternalResourceAsString(verify_request_filename);
-
+
}
/**
* Initializes the environment with a given profile.
- *
+ *
* @param profile
* The configuration profile.
* @throws SettingsException
@@ -537,7 +533,7 @@ public class MOASoapWithAttachmentConnector implements Connector
this.sign_key_identifier = signKeyIdentifier;
}
else
- {
+ {
this.sign_key_identifier = getConnectorValueFromProfile(settings, profile, SIGN_KEY_IDENTIFIER_KEY);
}
@@ -570,7 +566,7 @@ public class MOASoapWithAttachmentConnector implements Connector
if (this.verify_request_template == null)
{
- verify_request_filename = getConnectorValueFromProfile(settings, profile, VERIFY_REQUEST_TEMPLATE_KEY);
+ verify_request_filename = getConnectorValueFromProfile(settings, profile, VERIFY_REQUEST_TEMPLATE_KEY);
//this.verify_request_template = FileHelper.readFromFile(SettingsReader.relocateFile(verify_request_filename));
this.verify_request_template = settings.readInternalResourceAsString(verify_request_filename);
}
@@ -614,7 +610,7 @@ public class MOASoapWithAttachmentConnector implements Connector
/**
* Returns the URL where to load the detached data from.
- *
+ *
* @return Returns the URL where to load the detached data from.
*/
public String getSignatureDataUrl()
@@ -624,7 +620,7 @@ public class MOASoapWithAttachmentConnector implements Connector
/**
* Returns the sign key identifier.
- *
+ *
* @return Returns the sign key identifier.
*/
public String getSignKeyIdentifier()
@@ -634,7 +630,7 @@ public class MOASoapWithAttachmentConnector implements Connector
/**
* Returns the sign request template.
- *
+ *
* @return Returns the sign request template.
*/
public String getSignRequestTemplate()
@@ -644,7 +640,7 @@ public class MOASoapWithAttachmentConnector implements Connector
/**
* Returns the sign URL.
- *
+ *
* @return Returns the sign URL.
*/
public String getSignURL()
@@ -654,7 +650,7 @@ public class MOASoapWithAttachmentConnector implements Connector
/**
* Returns the verify request template.
- *
+ *
* @return Returns the verify request template.
*/
public String getVerifyRequestTemplate()
@@ -664,7 +660,7 @@ public class MOASoapWithAttachmentConnector implements Connector
/**
* Returns the verify template.
- *
+ *
* @return Returns the verify template.
*/
public String getVerifyTemplate()
@@ -674,7 +670,7 @@ public class MOASoapWithAttachmentConnector implements Connector
/**
* Returns the verify URL.
- *
+ *
* @return Returns the verify URL.
*/
public String getVerifyURL()
@@ -684,7 +680,7 @@ public class MOASoapWithAttachmentConnector implements Connector
/**
* Returns the verify trust profile id.
- *
+ *
* @return Returns the verify trust profile id.
*/
public String getVerifyTrustProfileId()
@@ -694,7 +690,7 @@ public class MOASoapWithAttachmentConnector implements Connector
/**
* Returns the ecdsa cert alg property.
- *
+ *
* @return Returns the ecdsa cert alg property.
*/
public String getCertAlgEcdsa()
@@ -704,7 +700,7 @@ public class MOASoapWithAttachmentConnector implements Connector
/**
* Returns the rsa cert alg property.
- *
+ *
* @return Returns the rsa cert alg property.
*/
public String getCertAlgRsa()
@@ -715,7 +711,7 @@ public class MOASoapWithAttachmentConnector implements Connector
/**
* Reads the configuration entry given by the key, first from the given
* profile, if not found from the defaults.
- *
+ *
* @param settings
* The settings.
* @param profile
diff --git a/pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/sig/connectors/mocca/LocRefDetachedMOCCAConnector.java b/pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/sig/connectors/mocca/LocRefDetachedMOCCAConnector.java
index 12fc709..f9fe70b 100644
--- a/pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/sig/connectors/mocca/LocRefDetachedMOCCAConnector.java
+++ b/pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/sig/connectors/mocca/LocRefDetachedMOCCAConnector.java
@@ -120,10 +120,10 @@ public class LocRefDetachedMOCCAConnector implements Connector, LocalConnector {
* @throws ConnectorException Thrown in case of an error.
*/
public SignSignatureObject doSign(SignatureData data) throws ConnectorException {
- log.debug("doSign:");
+ log.debug("doSign:");
String sign_request_xml = prepareSignRequest(data);
- log.debug("sign_request_xml = " + sign_request_xml);
+ log.debug("sign_request_xml = " + sign_request_xml);
String url = this.environment.getSignURL();
Properties response_properties = sendRequest(url, sign_request_xml, data);
@@ -132,7 +132,7 @@ public class LocRefDetachedMOCCAConnector implements Connector, LocalConnector {
sso.response_properties = response_properties;
- log.debug("doSign finished.");
+ log.debug("doSign finished.");
return sso;
}
@@ -148,12 +148,12 @@ public class LocRefDetachedMOCCAConnector implements Connector, LocalConnector {
* This method analyzes a signature response of the signature device.
* @param response_properties The response elements of the signature device.
* @return The parsed signed signature object.
- * @throws ConnectorException Thrown in case of an error.
+ * @throws ConnectorException Thrown in case of an error.
*/
public SignSignatureObject analyzeSignResponse(Properties response_properties) throws ConnectorException {
- log.debug("analyzeSignResponse:");
+ log.debug("analyzeSignResponse:");
String response_string = response_properties.getProperty(BKUPostConnection.RESPONSE_STRING_KEY);
-
+
String bkuIdentifier = BKUHelper.getBKUIdentifier(response_properties);
log.debug("BKU identifier: \"" + bkuIdentifier + "\"");
SignatureLayoutHandler sigLayout;
@@ -162,13 +162,13 @@ public class LocRefDetachedMOCCAConnector implements Connector, LocalConnector {
} catch (SettingsException e) {
throw new ConnectorException(e.getErrorCode(), e.getMessage());
}
-
+
BKUHelper.checkResponseForError(response_string);
-
+
// SignSignatureObject so = MOCCAHelper.parseCreateXMLResponse(response_string, new DetachedMOCIdFormatter());
SignSignatureObject so = sigLayout.parseCreateXMLSignatureResponse(response_string, this.environment);
so.response_properties = response_properties;
- log.debug("analyzeSignResponse finished.");
+ log.debug("analyzeSignResponse finished.");
return so;
}
@@ -187,7 +187,7 @@ public class LocRefDetachedMOCCAConnector implements Connector, LocalConnector {
* @throws ConnectorException Thrown in case of an error.
*/
public String prepareSignRequest(SignatureData data) throws ConnectorException {
- log.debug("prepareSignRequestDetached:");
+ log.debug("prepareSignRequestDetached:");
String sign_request_template = this.environment.getSignRequestTemplate();
@@ -196,9 +196,9 @@ public class LocRefDetachedMOCCAConnector implements Connector, LocalConnector {
String loc_ref_content = this.environment.getLocRefContent();
if (log.isDebugEnabled()) {
- log.debug("sign keybox identifier = " + sign_keybox_identifier);
- log.debug("mime type = " + mime_type);
- log.debug("loc_ref_content = " + loc_ref_content);
+ log.debug("sign keybox identifier = " + sign_keybox_identifier);
+ log.debug("mime type = " + mime_type);
+ log.debug("loc_ref_content = " + loc_ref_content);
}
String sign_request_xml = sign_request_template.replaceFirst(TemplateReplaces.KEYBOX_IDENTIFIER_REPLACE, sign_keybox_identifier);
@@ -206,7 +206,7 @@ public class LocRefDetachedMOCCAConnector implements Connector, LocalConnector {
sign_request_xml = sign_request_xml.replaceFirst(TemplateReplaces.LOC_REF_CONTENT_REPLACE, loc_ref_content);
log.debug("sign_request_xml = " + sign_request_xml);
- log.debug("prepareSignRequestDetached finished.");
+ log.debug("prepareSignRequestDetached finished.");
return sign_request_xml;
}
@@ -226,15 +226,15 @@ public class LocRefDetachedMOCCAConnector implements Connector, LocalConnector {
* @throws ConnectorException Thrown in case of an error.
*/
public String prepareXMLContent(SignatureData data, SignSignatureObject so) throws ConnectorException {
- log.debug("prepareXMLContent:");
+ log.debug("prepareXMLContent:");
try {
-
+
String ids_string = so.getSigID();
String sigId = this.parseSigId(ids_string);
X509Certificate cert = so.getX509Certificate();
-
-
+
+
// dferbas
AlgorithmSuiteObject algSuite = new AlgorithmSuiteObject();
String verify_xml = AlgorithmSuiteUtil.evaluateReplaceAlgs(algSuite, this.environment, so);
@@ -244,7 +244,7 @@ public class LocRefDetachedMOCCAConnector implements Connector, LocalConnector {
String object_data_hash = CodingHelper.encodeBase64(data_value_hash);
// template replacements
-
+
verify_xml = verify_xml.replaceFirst(TemplateReplaces.DIGEST_VALUE_SIGNED_DATA_REPLACE, object_data_hash);
verify_xml = verify_xml.replaceFirst(TemplateReplaces.SIGNATURE_VALUE_REPLACE, so.getSignatureValue());
@@ -259,7 +259,11 @@ public class LocRefDetachedMOCCAConnector implements Connector, LocalConnector {
verify_xml = verify_xml.replaceAll(TemplateReplaces.SIG_ID_REPLACE, sigId);
verify_xml = verify_xml.replaceFirst(TemplateReplaces.SIGNING_TIME_REPLACE, so.getDate());
verify_xml = verify_xml.replaceFirst(TemplateReplaces.DIGEST_VALUE_CERTIFICATE_REPLACE, certDigest);
- verify_xml = verify_xml.replaceFirst(TemplateReplaces.X509_ISSUER_NAME_REPLACE, so.getIssuer());
+ // fixed by dti: Issuer names may contain escapted commas ("\,"). As far as replaceFirst (and replaceAll)
+ // methods are regarded, backslashes in the replacement string may cause the results to be different than
+ // if it were being treated as a literal replacement string.
+// verify_xml = verify_xml.replaceFirst(TemplateReplaces.X509_ISSUER_NAME_REPLACE, so.getIssuer());
+ verify_xml = verify_xml.replace(TemplateReplaces.X509_ISSUER_NAME_REPLACE, so.getIssuer());
verify_xml = verify_xml.replaceFirst(TemplateReplaces.X509_SERIAL_NUMBER_REPLACE, so.getSerialNumber());
// SigDataRefReplace already done above
verify_xml = verify_xml.replaceFirst(TemplateReplaces.MIME_TYPE_REPLACE, data.getMimeType());
@@ -270,15 +274,15 @@ public class LocRefDetachedMOCCAConnector implements Connector, LocalConnector {
if (matcher.find()) {
log.debug("SignedProperties found.");
String string_to_be_hashed = matcher.group(1);
- log.debug("SignedProperties string to be hashed: " + string_to_be_hashed);
- final byte[] bytes_to_be_hashed = string_to_be_hashed.getBytes("UTF-8");
+ log.debug("SignedProperties string to be hashed: " + string_to_be_hashed);
+ final byte[] bytes_to_be_hashed = string_to_be_hashed.getBytes("UTF-8");
byte[] sig_prop_code = CodingHelper.buildDigest(bytes_to_be_hashed, algSuite.getPropertiesDigestMethod());
String sig_prop_hash = CodingHelper.encodeBase64(sig_prop_code);
verify_xml = verify_xml.replaceFirst(TemplateReplaces.DIGEST_VALUE_SIGNED_PROPERTIES_REPLACE, sig_prop_hash);
}
- log.debug("prepareXMLContent finished.");
+ log.debug("prepareXMLContent finished.");
return verify_xml;
} catch (Exception e) {
log.debug(e);
@@ -291,21 +295,21 @@ public class LocRefDetachedMOCCAConnector implements Connector, LocalConnector {
* @author wprinz
*/
public static class Environment extends ConnectorEnvironment {
-
+
/**
* The configuration key of the sign keybox identifier.
*/
- protected static final String SIGN_KEYBOX_IDENTIFIER_KEY = "moc.sign.KeyboxIdentifier";
+ protected static final String SIGN_KEYBOX_IDENTIFIER_KEY = "moc.sign.KeyboxIdentifier";
/**
* The configuration key of the sign request template.
*/
- protected static final String SIGN_REQUEST_TEMPLATE_KEY = "moc.sign.request.detached";
+ protected static final String SIGN_REQUEST_TEMPLATE_KEY = "moc.sign.request.detached";
/**
* The configuration key of the sign URL.
*/
- protected static final String SIGN_URL_KEY = "moc.sign.url";
+ protected static final String SIGN_URL_KEY = "moc.sign.url";
/**
* BKU template file prefix
@@ -334,29 +338,29 @@ public class LocRefDetachedMOCCAConnector implements Connector, LocalConnector {
*/
/* signature verification is not supported by mocca
protected static final String VERIFY_REQUEST_TEMPLATE_KEY = "moc.verify.request.detached";
- */
+ */
/**
* The configuration key of the verify template.
*/
- protected static final String VERIFY_TEMPLATE_KEY = "moc.verify.template.detached";
+ protected static final String VERIFY_TEMPLATE_KEY = "moc.verify.template.detached";
/**
* The configuration key of the verify URL.
*/
/* signature verification is not supported by mocca
protected static final String xxxVERIFY_URL_KEY = "moc.verify.url";
- */
+ */
/**
* The configuration key for the ECDSA cert alg property.
*/
- protected static final String ECDSA_CERT_ALG_KEY = "cert.alg.ecdsa";
+ protected static final String ECDSA_CERT_ALG_KEY = "cert.alg.ecdsa";
/**
* The configuration key for the RSA cert alg property.
*/
- protected static final String RSA_CERT_ALG_KEY = "cert.alg.rsa";
+ protected static final String RSA_CERT_ALG_KEY = "cert.alg.rsa";
protected String profile = null;
@@ -381,7 +385,7 @@ public class LocRefDetachedMOCCAConnector implements Connector, LocalConnector {
protected String cert_alg_ecdsa = null;
protected String cert_alg_rsa = null;
-
+
protected String algorithmId = null;
/**
@@ -411,7 +415,7 @@ public class LocRefDetachedMOCCAConnector implements Connector, LocalConnector {
}
// SIGN REQUEST
-
+
// try specific file
String sign_request_filename = TEMPLATE_FILE_PREFIX + this.algorithmId + SIGN_TEMPLATE_FILE_SUFFIX;
log.debug("Trying to load specific sign request file " + sign_request_filename);
@@ -428,15 +432,15 @@ public class LocRefDetachedMOCCAConnector implements Connector, LocalConnector {
// request file is needed !!!
if (this.sign_request_template == null) {
- throw new ConnectorException(300, "Can not read the create xml request template");
+ throw new ConnectorException(300, "Can not read the create xml request template");
}
this.sign_url = getConnectorValueFromProfile(settings, profile, SIGN_URL_KEY);
-
+
// VERIFY REQUEST
/* signature verification is not supported by mocca
-
+
// try specific file
String verify_request_filename = TEMPLATE_FILE_PREFIX + settings.getValueFromKey("default.moc.algorithm.id") + VERIFY_REQUEST_TEMPLATE_FILE_SUFIX;
log.debug("Trying to load specific verify request file " + verify_request_filename);
@@ -451,11 +455,11 @@ public class LocRefDetachedMOCCAConnector implements Connector, LocalConnector {
// request file is needed !!!
if (this.verify_request_template == null) {
- throw new ConnectorException(ErrorCode.SETTING_NOT_FOUND, "Can not read the verify xml request template");
+ throw new ConnectorException(ErrorCode.SETTING_NOT_FOUND, "Can not read the verify xml request template");
}
-
+
*/
-
+
// load template file
// try specific file
String verify_filename = TEMPLATE_FILE_PREFIX + this.algorithmId + VERIFY_TEMPLATE_SUFFIX;
@@ -473,7 +477,7 @@ public class LocRefDetachedMOCCAConnector implements Connector, LocalConnector {
// signature template is needed !!!
if (this.verify_template == null) {
- throw new ConnectorException(ErrorCode.SETTING_NOT_FOUND, "Can not read the verify template");
+ throw new ConnectorException(ErrorCode.SETTING_NOT_FOUND, "Can not read the verify template");
}
/* signature verification is not supported by mocca
@@ -496,7 +500,7 @@ public class LocRefDetachedMOCCAConnector implements Connector, LocalConnector {
/**
* Returns the LocRef content.
- *
+ *
* @return Returns the LocRef content.
*/
public String getLocRefContent() {
@@ -505,7 +509,7 @@ public class LocRefDetachedMOCCAConnector implements Connector, LocalConnector {
/**
* Returns the sign keybox identifier.
- *
+ *
* @return Returns the sign keybox identifier.
*/
public String getSignKeyboxIdentifier() {
@@ -514,7 +518,7 @@ public class LocRefDetachedMOCCAConnector implements Connector, LocalConnector {
/**
* Returns the sign request template.
- *
+ *
* @return Returns the sign request template.
*/
public String getSignRequestTemplate() {
@@ -523,7 +527,7 @@ public class LocRefDetachedMOCCAConnector implements Connector, LocalConnector {
/**
* Returns the sign URL.
- *
+ *
* @return Returns the sign URL.
*/
public String getSignURL() {
@@ -532,7 +536,7 @@ public class LocRefDetachedMOCCAConnector implements Connector, LocalConnector {
/**
* Returns the verify request template.
- *
+ *
* @return Returns the verify request template.
*/
/* signature verification is not supported by mocca
@@ -543,7 +547,7 @@ public class LocRefDetachedMOCCAConnector implements Connector, LocalConnector {
/**
* Returns the verify template.
- *
+ *
* @return Returns the verify template.
*/
public String getVerifyTemplate() {
@@ -552,7 +556,7 @@ public class LocRefDetachedMOCCAConnector implements Connector, LocalConnector {
/**
* Returns the verify URL.
- *
+ *
* @return Returns the verify URL.
*/
/* signature verification is not supported by mocca
@@ -563,7 +567,7 @@ public class LocRefDetachedMOCCAConnector implements Connector, LocalConnector {
/**
* Returns the ecdsa cert alg property.
- *
+ *
* @return Returns the ecdsa cert alg property.
*/
public String getCertAlgEcdsa() {
@@ -572,7 +576,7 @@ public class LocRefDetachedMOCCAConnector implements Connector, LocalConnector {
/**
* Returns the rsa cert alg property.
- *
+ *
* @return Returns the rsa cert alg property.
*/
public String getCertAlgRsa() {
@@ -582,7 +586,7 @@ public class LocRefDetachedMOCCAConnector implements Connector, LocalConnector {
/**
* Reads the configuration entry given by the key, first from the given
* profile, if not found from the defaults.
- *
+ *
* @param settings
* The settings.
* @param profile
@@ -599,7 +603,7 @@ public class LocRefDetachedMOCCAConnector implements Connector, LocalConnector {
return value;
}
}
-
+
/**
* Parses the common part for all id attributes from a given signature parameter string.
* @param sigIdString The given signature parameter string.
diff --git a/pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/sig/sigkz/SigKZIDHelper.java b/pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/sig/sigkz/SigKZIDHelper.java
index 094880d..03bf931 100644
--- a/pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/sig/sigkz/SigKZIDHelper.java
+++ b/pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/sig/sigkz/SigKZIDHelper.java
@@ -50,49 +50,52 @@ import at.knowcenter.wag.egov.egiz.sig.sigid.HotfixIdFormatter;
*/
public final class SigKZIDHelper
{
-
+
/**
* The Logger.
*/
protected static Log logger = LogFactory.getLog(SigKZIDHelper.class);
-
+
public static boolean isTextual(PdfASID sig_kz)
{
if (sig_kz == null)
{
// Old signature -> must be textual.
-
+
return true;
}
-
+
// new signauture -> sig_kz decides
return sig_kz.getType().equals(SignatorFactory.TYPE_TEXTUAL);
}
-
+
public static boolean isBinary(PdfASID sig_kz)
{
return ! isTextual(sig_kz);
}
-
-
+
+
public static boolean isMOASigned(PdfASID sig_kz, String sig_id)
{
if (sig_kz == null || sig_kz.getVersion().equals(SignatorFactory.VERSION_1_0_0))
{
// old signature - if sig_id is null this means MOA
-
+
return sig_id == null;
}
-
- if(sig_id == null)
+
+ // According to the specification no signature parameter means MOA signature.
+ // Fixed: empty ("") or blank (" "), non-null signature parameter should also be regarded as "no signature parameter"
+// if (sig_id != null)
+ if (StringUtils.isBlank(sig_id))
return true;
-
+
// new signature - sig_id decides
String [] ids = sig_id.split("@");
// dferbas
String prefix = (ids[0].split(":"))[0];
-
-
+
+
if (prefix.equals(DetachedLocRefMOAIdFormatter.SIG_ID_PREFIX))
{
return true;
@@ -116,10 +119,10 @@ public final class SigKZIDHelper
logger.error(e.getMessage(), e);
}
}
-
+
return isMOASigned(kz, sig_id);
}
-
+
/**
* @author tknall
*/
@@ -128,7 +131,7 @@ public final class SigKZIDHelper
if (StringUtils.isEmpty(sig_id)) {
return false;
}
- String[] ids = sig_id.split("@");
+ String[] ids = sig_id.split("@");
if (ArrayUtils.isEmpty(ids)) {
return false;
}
@@ -136,7 +139,7 @@ public final class SigKZIDHelper
if (algorithmId == null) {
return false;
} else {
- return algorithmId.startsWith("etsi-moc-1.0") || algorithmId.startsWith("etsi-moc-1.1");
+ return algorithmId.startsWith("etsi-moc-1.0") || algorithmId.startsWith("etsi-moc-1.1") || algorithmId.startsWith("etsi-moc-1.2");
}
}
@@ -203,16 +206,16 @@ public final class SigKZIDHelper
logger.error(e.getMessage(), e);
}
}
-
+
return isOldBKU(kz, sig_id);
}
-
+
public static String getAlgorithmId(String bkuIdentifier) throws SettingsException, SettingNotFoundException, ConnectorException {
SettingsReader sr = SettingsReader.getInstance();
String base = "signaturelayout.pattern";
Vector v = sr.getSettingKeys(base);
-
+
Iterator it = v.iterator();
while (it.hasNext()) {
String subKey = (String) it.next();
@@ -225,7 +228,7 @@ public final class SigKZIDHelper
return algValue;
}
}
-
+
if ("true".equalsIgnoreCase(sr.getSetting("signaturelayout.strict", "false"))) {
logger.debug("Enforcing bku support check.");
throw new ConnectorException(ErrorCode.BKU_NOT_SUPPORTED, "Unsupported BKU: " + bkuIdentifier);
@@ -233,7 +236,7 @@ public final class SigKZIDHelper
logger.debug("bku support check disabled.");
return null;
}
-
+
}
public static boolean isATrustSigned(SignSignatureObject so) {
@@ -241,7 +244,7 @@ public final class SigKZIDHelper
if (sig_id == null && StringUtils.isEmpty(sig_id)) {
return false;
}
- return sig_id.startsWith("etsi-bka-atrust-1.0");
+ return sig_id.startsWith("etsi-bka-atrust-1.0");
}
/**
@@ -251,11 +254,11 @@ public final class SigKZIDHelper
*/
public static boolean isBKUSigned(SignSignatureObject so) throws ConnectorException {
if (isOldBKU(so)) return true;
-
+
if (so.id.startsWith("etsi-bka-1.0")) {
return true;
}
-
+
return false;
}
diff --git a/pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/sig/signaturelayout/mocca/MoccaXades14SignatureLayoutHandler.java b/pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/sig/signaturelayout/mocca/MoccaXades14SignatureLayoutHandler.java
new file mode 100644
index 0000000..ed14315
--- /dev/null
+++ b/pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/sig/signaturelayout/mocca/MoccaXades14SignatureLayoutHandler.java
@@ -0,0 +1,53 @@
+/**
+ * <copyright> Copyright 2006 by Know-Center, Graz, Austria </copyright>
+ * PDF-AS has been contracted by the E-Government Innovation Center EGIZ, a
+ * joint initiative of the Federal Chancellery Austria and Graz University of
+ * Technology.
+ *
+ * Licensed under the EUPL, Version 1.1 or - as soon they will be approved by
+ * the European Commission - subsequent versions of the EUPL (the "Licence");
+ * You may not use this work except in compliance with the Licence.
+ * You may obtain a copy of the Licence at:
+ * http://www.osor.eu/eupl/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the Licence is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the Licence for the specific language governing permissions and
+ * limitations under the Licence.
+ *
+ * This product combines work with different licenses. See the "NOTICE" text
+ * file for details on the various modules and licenses.
+ * The "NOTICE" text file is part of the distribution. Any derivative works
+ * that you distribute must include a readable copy of the "NOTICE" text file.
+ */
+package at.knowcenter.wag.egov.egiz.sig.signaturelayout.mocca;
+
+import at.knowcenter.wag.egov.egiz.exceptions.ConnectorException;
+import at.knowcenter.wag.egov.egiz.sig.connectors.ConnectorEnvironment;
+import at.knowcenter.wag.egov.egiz.sig.connectors.bku.SignSignatureObject;
+import at.knowcenter.wag.egov.egiz.sig.connectors.mocca.MOCCAHelper;
+import at.knowcenter.wag.egov.egiz.sig.sigid.DetachedMOCIdFormatter;
+import at.knowcenter.wag.egov.egiz.sig.signaturelayout.SignatureLayoutHandler;
+
+/**
+ * Layout handler for XAdES 1.4 based signature layouts.
+ *
+ * @author Datentechnik Innovation GmbH
+ */
+public class MoccaXades14SignatureLayoutHandler implements SignatureLayoutHandler {
+
+ /**
+ * The signature parameter identifier for XAdES 1.4 signatures.
+ */
+ private final static String ALGORITHM_ID = "etsi-moc-1.2";
+
+ /**
+ * Parses the given xmlResponse with respect to the specific signature layout of mocca.
+ */
+ public SignSignatureObject parseCreateXMLSignatureResponse(String xmlResponse, ConnectorEnvironment env)
+ throws ConnectorException {
+ return MOCCAHelper.parseCreateXMLResponse(xmlResponse, new DetachedMOCIdFormatter(ALGORITHM_ID), env);
+ }
+
+}
diff --git a/pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/tools/CodingHelper.java b/pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/tools/CodingHelper.java
index 5132021..3546cd7 100644
--- a/pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/tools/CodingHelper.java
+++ b/pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/tools/CodingHelper.java
@@ -38,7 +38,7 @@ import at.gv.egiz.pdfas.impl.input.helper.DataSourceHelper;
/**
* This class provides encoding and decoding methods and other coding methods.
* All methods are static!
- *
+ *
* @author wlackner
*/
public class CodingHelper
@@ -52,7 +52,7 @@ public class CodingHelper
/**
* This method encodes a given Unicode (Java) String to UTF-8 bytes and then
* encodes these UTF-8 bytes to a Base64 US-ASCII (Java) String.
- *
+ *
* @param plain_string
* to be encoded
* @return the UTF-8 and Base64 encoded string
@@ -68,7 +68,6 @@ public class CodingHelper
}
catch (UnsupportedEncodingException e)
{
- e.printStackTrace();
throw new RuntimeException(e);
}
}
@@ -76,7 +75,7 @@ public class CodingHelper
/**
* This method decodes the UTF-8 bytes from a Base64 US-ASCII (Java) String
* and decodes the UTF-8 bytes to a unicode (Java) String.
- *
+ *
* @param encoded_string
* to be decoded
* @return the Base64 and UTF-8 decoded string
@@ -92,7 +91,6 @@ public class CodingHelper
}
catch (UnsupportedEncodingException e)
{
- e.printStackTrace();
throw new RuntimeException(e);
}
}
@@ -108,7 +106,6 @@ public class CodingHelper
// try {
// utf8 = theString.getBytes("UTF-8");
// } catch (UnsupportedEncodingException e) {
- // e.printStackTrace();
// }
// return utf8;
// }
@@ -139,20 +136,19 @@ public class CodingHelper
// try {
// the_string = new String(ba, "UTF-8");
// } catch (UnsupportedEncodingException e) {
- // e.printStackTrace();
// }
// return the_string;
// }
/**
* This method decodes a given Base64 string.
- *
+ *
* <p>
* Note that the given String must only contain Base64 characters. (The string
* will be converted to a byte array of "US-ASCII" (7 bit) bytes and then this
* byte array will be decoded using the Base64 algorithm.
* </p>
- *
+ *
* @param theString
* to be decoded
* @return a Base64 decoded byte array
@@ -166,14 +162,13 @@ public class CodingHelper
}
catch (UnsupportedEncodingException e)
{
- e.printStackTrace();
throw new RuntimeException("Very Strange: US-ASCII encoding not supported???", e);
}
}
/**
* This method decodes a given Base64 byte array
- *
+ *
* @param ba
* the byte array to be decoded
* @return a Base64 decoded byte array
@@ -185,7 +180,7 @@ public class CodingHelper
/**
* This method encodes a given byte array Base64
- *
+ *
* @param plainString
* the byte array to be encoded
* @return the Base64 encoded string
@@ -199,7 +194,6 @@ public class CodingHelper
}
catch (UnsupportedEncodingException e)
{
- e.printStackTrace();
throw new RuntimeException("Very Strange: US-ASCII encoding not supported???", e);
}
}
@@ -207,15 +201,15 @@ public class CodingHelper
// dferbas
/**
* This method builds an hash value of a given byte array.
- *
+ *
* @param data
* the byte array to build the hash value for
- * @param hashAlg hash algorithm for {@link MessageDigest} e.g. "SHA-1"
+ * @param hashAlg hash algorithm for {@link MessageDigest} e.g. "SHA-1"
* @return the calculated hash value as a byte array
* @see MessageDigest
*/
public static byte[] buildDigest(byte[] data, String hashAlg)
- {
+ {
MessageDigest digester = null;
try
{
@@ -243,10 +237,10 @@ public class CodingHelper
byte [] data = DataSourceHelper.convertDataSourceToByteArray(input);
return buildDigest(data, hashAlg);
}
-
+
/**
* This method escapes a given string with HTML entities.
- *
+ *
* @param rawString
* the string to escaped
* @return the HTML escaped string
@@ -263,7 +257,7 @@ public class CodingHelper
/**
* This method checks, if a byte array contains chars that are not base64
* conform.
- *
+ *
* @param byteArray
* the array to test
* @return boolean, if a byte array is base64 conform, false otherwise
@@ -282,7 +276,7 @@ public class CodingHelper
/**
* This method checks, if a string contains chars that are not base64 conform.
- *
+ *
* @param string
* the chars to test
* @return boolean, if the given string is base64 conform, false otherwise
diff --git a/pdf-as-lib/src/main/java/demo/SignatureVerificationDemo.java b/pdf-as-lib/src/main/java/demo/SignatureVerificationDemo.java
index 0ba95ff..204339a 100644
--- a/pdf-as-lib/src/main/java/demo/SignatureVerificationDemo.java
+++ b/pdf-as-lib/src/main/java/demo/SignatureVerificationDemo.java
@@ -57,7 +57,7 @@ public class SignatureVerificationDemo {
/**
* Starts a demo that verifies a document.
- *
+ *
* @param args
* The parameter(s).
*/
@@ -67,7 +67,7 @@ public class SignatureVerificationDemo {
System.err.println("Please provide path of file to be verified.");
System.exit(1);
}
-
+
File configdir = new File("./work");
// look for work folder in current directory
if (!configdir.exists()) {
@@ -75,7 +75,7 @@ public class SignatureVerificationDemo {
configdir = new File("../work");
}
File signedFile = new File(args[0]);
-
+
AnalyzeResult analyzeResult = null;
try {
@@ -108,7 +108,7 @@ public class SignatureVerificationDemo {
System.out.println("Analyzing...");
analyzeResult = pdfasAPI.analyze(analyzeParameters);
System.out.println("Successfully analyzed.");
-
+
// information on non-textual objects can be used after analysis step and/or after verification
List signatures = analyzeResult.getSignatures();
if (signatures != null && !signatures.isEmpty()) {
@@ -126,7 +126,7 @@ public class SignatureVerificationDemo {
System.out.println(" -> " + info.toString());
}
System.out.println();
-
+
} else {
System.out.println("\nNo non-textual objects detected for this signature.");
}
@@ -139,7 +139,7 @@ public class SignatureVerificationDemo {
}
System.exit(1);
}
-
+
// retrieve reconstructed signature
ReconstructXMLDsigAfterAnalysisParameters recstrParams = new ReconstructXMLDsigAfterAnalysisParameters();
recstrParams.setAnalyzeResult(analyzeResult);
@@ -166,9 +166,9 @@ public class SignatureVerificationDemo {
*/
// setup verification
-
+
// verification without intermediate step of reconstruction
- /*
+ /*
VerifyAfterAnalysisParameters vaap = new VerifyAfterAnalysisParameters();
vaap.setAnalyzeResult(analyzeResult);
vaap.setReturnHashInputData(true);
@@ -178,7 +178,7 @@ public class SignatureVerificationDemo {
// use result.isVerificationDone() in order to find out if a signatures was successfully verified
vaap.setSuppressVerifyExceptions(true);
*/
-
+
// verification with intermediate step of reconstruction
VerifyAfterReconstructXMLDsigParameters varp = new VerifyAfterReconstructXMLDsigParameters();
varp.setReconstructXMLDsigResult(recstrResult);
@@ -192,15 +192,15 @@ public class SignatureVerificationDemo {
// invoke verification
System.out.println("Verifying...");
-
+
// without intermediate step of reconstruction
/*
VerifyResults verifyResults = pdfasAPI.verify(vaap);
*/
-
+
// with intermediate step of reconstruction
VerifyResults verifyResults = pdfasAPI.verify(varp);
-
+
// retrieve results
List verifyResultList = verifyResults.getResults();
System.out.println("Verification complete.\n");
@@ -213,14 +213,14 @@ public class SignatureVerificationDemo {
counter++;
VerifyResult result = (VerifyResult) it.next();
out.println("\n------------------------ SIGNATURE #" + counter + " ------------------------\n");
-
+
// check if signature verification of the current signature was successfully completed (independent from result)
if (!result.isVerificationDone()) {
PdfAsException ex = result.getVerificationException();
out.println(ErrorCodeHelper.formErrorMessage(ex));
continue;
}
-
+
Main.formatVerifyResult(result, out);
XMLDsigData xmlDSigData = result.getReconstructedXMLDsig();
if (xmlDSigData != null) {
@@ -233,12 +233,12 @@ public class SignatureVerificationDemo {
byte[] data = result.getSignedData().getAsByteArray();
out.println("\n Signed Data: " + data.length + " bytes (" + result.getSignatureType() + ")");
}
-
+
// check if there are timestamps
if (result.getTimeStampValue() != null) {
out.println("\n TimeStamp value available for this signature");
}
-
+
// check if non textual elements have been detected for this signature
if (result.hasNonTextualObjects()) {
out.println("\n WARNING: " + result.getNonTextualObjects().size() + " non textual object(s) detected for this signature");
@@ -248,13 +248,13 @@ public class SignatureVerificationDemo {
out.println(" -> " + info.toString());
}
out.println();
-
+
} else {
out.println("\n No non-textual objects detected for this signature.");
}
}
- out.flush();
-
+ out.flush();
+
} catch (PdfAsException e) {
if (ErrorCode.DOCUMENT_NOT_SIGNED == e.getErrorCode() && analyzeResult != null && analyzeResult.hasBeenCorrected()) {
System.err.println("\nThe document could not been processed, maybe due to modification by third party tools. An attempt to correct the document was successful but no verifiable signatures could be found. This/these signature(s) - if any - might got lost.");
diff --git a/pdf-as-lib/src/main/resources/DefaultConfiguration.zip b/pdf-as-lib/src/main/resources/DefaultConfiguration.zip
index 688babd..b1ca984 100644
--- a/pdf-as-lib/src/main/resources/DefaultConfiguration.zip
+++ b/pdf-as-lib/src/main/resources/DefaultConfiguration.zip
Binary files differ
diff --git a/pdf-as-lib/src/main/resources/config/defaultconfig.properties b/pdf-as-lib/src/main/resources/config/defaultconfig.properties
new file mode 100644
index 0000000..2f01080
--- /dev/null
+++ b/pdf-as-lib/src/main/resources/config/defaultconfig.properties
@@ -0,0 +1,209 @@
+###############################################################################
+# PDF-AS Standard-Einstellungen
+#
+# Hier werden sinnvolle Standard-Einstellungen fuer die gewohnte
+# PDF-AS Konfiguration (config.properties) gesetzt. Alle Einstellungen koennen
+# lokal (in config.properties) ueberschrieben werden.
+###############################################################################
+
+
+# Betrifft Signieren:
+# Stellt sicher, dass das verarbeitete Dokument mindestens PDF 1.4 entspricht.
+strict_mode=false
+
+# Betrifft Signieren:
+# Wenn das Dokument nicht verarbeitet werden kann wird versucht es
+# zuerst zu korrigieren und dann das korrigierte Dokument zu signieren.
+correct_document_if_necessary=true
+
+# Betrifft Verifizieren:
+# Wenn das Dokument nicht verarbeitet werden kann wird versucht es
+# zuerst zu korrigieren und dann das korrigierte Dokument zu verifizieren.
+# Dies kann nur fuer textuelle Signaturen erfolgreich sein.
+correct_document_on_verify_if_necessary=true
+
+# Wenn ein Dokument korrigiert werden soll:
+# Gibt an mit welchem Corrector ein zu korrigierendes Dokument korrigiert wird:
+# internal - das Dokument wird mit dem "internen" iText Corrector korrigiert
+# external - das Dokument wird durch einen externen Kommandozeilenaufruf korrigiert.
+# Hinweis: ein externes Programm aufzurufen birgt gewisse Risiken in sich
+# und sollte daher moeglichst nicht verwendet werden.
+corrector=internal
+
+# Kommandozeile fuer den externen Connector.
+# Die Variablen ##input_document## bzw. ##output_document## werden von PDF-AS
+# durch die absoluten Pfad- und Dateinamen des zu korrigierenden bzw. des
+# korrigierten Dokuments ersetzt.
+# Als Pfad-Separator sollte '/' verwendet werden.
+external_corrector_commandline=C:/correct.exe "##input_document##" "##output_document##"
+
+# Timeout (ms) fuer die Ausfuehrung des externen Correctors.
+# Das Kommando wird abgebrochen, wenn das Timeout erreicht wird bevor
+# das Kommando abgearbeitet wurde.
+# Achtung: Es besteht allerdings keine Garantie, dass der Korrekturvorgang auch tatsaechlich
+# durch ein Timeout abgebrochen wird. Dies ist im Wesentlichen abhaengig von der Beschaffenheit
+# des Korrekturprogramms sowie vom verwendeten Betriebssystem.
+external_corrector_timeout=15000
+
+# Aktiviert, oder deaktiviert grundsaetzlich das - potenziell zeit- und ressourcen-aufwaendige
+# Suchen nach Platzhalter-Bildern in PDF-Dokumenten
+# Festlegung fuer einzelnes Profil
+# sig_obj.PROFILE.enable_placeholder_search=[true|false]
+# Die Suche ist standardmaessig aus Sicherheitsgruenden deaktiviert (Defaultwert hier = false)
+# Es muss bewusst sein, dass ueber einen Platzhalter benutzerseitig bestimmte Profile zur Signatur
+# ausgewaehlt werden koennen!
+enable_placeholder_search=false
+
+# Ueberpruefe Korrektheit des Dokuments
+# bei binary_only=true: Fehler falls textuelle Signatur
+# bei assume_only_signature_blocks=false: Fehler falls inkrementelle Updates nach Signatur
+# In beiden Faellen wird check_old_textual_sigs beruecksichtigt.
+check_document=true
+
+# Falls der letzte inkrementelle Updateblock keine Signatur enthaelt wuerde sofern
+# check_document=true gesetzt ist eine Exception geworfen werden und die Pruefung
+# abgebrochen werden. Mit diesem Schalter ist es moeglich, diese Exception zu
+# unterdruecken, um die Auswertung extern vornehmen zu koennen (standard: false)
+supress_exception_when_last_iublock_is_no_signature=false
+
+# VerificationFilterParameters
+binary_only=false
+assume_only_signature_blocks=false
+check_old_textual_sigs=true
+
+
+##################
+# Signaturdienste
+
+## lokale BKU
+bku.available_for_web=true
+bku.available_for_commandline=true
+
+# BKU Signatur
+bku.sign.url=http://127.0.0.1:3495/http-security-layer-request
+bku.sign.KeyboxIdentifier=SecureSignatureKeypair
+
+# BKU Verifikation
+bku.verify.url=http://127.0.0.1:3495/http-security-layer-request
+
+## Online BKU (MOCCA)
+moc.available_for_web=true
+moc.available_for_commandline=false
+
+# MOCCA Signatur
+moc.sign.url=http://127.0.0.1:8080/bkuonline/http-security-layer-request
+moc.sign.KeyboxIdentifier=SecureSignatureKeypair
+
+## Handy
+
+# Handy Signatur
+mobile.sign.url=https://www.handy-signatur.at/mobile/https-security-layer-request/default.aspx
+mobile.sign.KeyboxIdentifier=SecureSignatureKeypair
+
+# Handy Signatur (Test)
+mobiletest.sign.url=https://test1.a-trust.at/https-security-layer-request/default.aspx
+mobiletest.sign.KeyboxIdentifier=SecureSignatureKeypair
+
+## MOA
+moa.available_for_web=true
+moa.available_for_commandline=true
+
+# MOA Signatur
+moa.sign.url=http://localhost:8080/moa-spss/services/SignatureCreation
+moa.sign.KeyIdentifier=KG_allgemein
+
+# MOA Detached Signieren aus Konsole moeglich - zurzeit moeglich nur mit BKU
+moa.sign.console.detached.enabled=false
+
+# MOA Verifikation
+moa.verify.url=http://localhost:8080/moa-spss/services/SignatureVerification
+moa.verify.TrustProfileID=SecureSignature
+
+
+#########################################################
+# Standardfeldlaengen der Felder fuer die Binaersignatur
+defaults.phlength.SIG_DATE=70
+defaults.phlength.SIG_NUMBER=70
+defaults.phlength.SIG_ISSUER=150
+defaults.phlength.SIG_VALUE=350
+
+# Reservierte Anzahl Bytes fuer den Signaturparameter
+# z.B. etsi-moc-1.1:ecdsa-sha256@669ee461
+# etsi-bka-atrust-1.0:ecdsa-sha256:sha256:sha256:sha1
+defaults.phlength.SIG_ID=70
+
+# Reservierte Anzahl an Bytes fuer den Signatornamen, falls SIG_NAME anstelle von SIG_SUBJECT verwendet wird.
+defaults.phlength.SIG_NAME=210
+
+# Reservierte Anzahl an Bytes fuer den Signaturalgorithmus
+# (relevant fuer BAIK-Signaturen)
+# z.B. http://www.w3.org/2001/04/xmldsig-more#ecdsa-sha256
+defaults.phlength.SIG_ALG=100
+
+# Es moeglich in die Werte (value) von eigens definierten Tabellenspalten dynamisch auf Teile des
+# verwendeten Zertifikats zuzugreifen. Konkret kann auf die einzelnen RDNs Teile des Issuer DN
+# und des Subject DN des Signaturzertifikats wie im folgenden Beispiel illustriert zugegriffen
+# werden:
+# (1) sig_obj.PROFIL.value.SIG_SUBJECT= ${subject.CN}${subject.O != null ? ("\n" + subject.O) : ""}
+# (2) sig_obj.PROFIL.value.SIG_SUBJECT= ${subject.T \!\= null ? (subject.T + " ") \: ""}${subject.CN}
+# Beispiel (1) gibt die Organisation des Unterzeichners an, Beispiel (2) Titel und Name
+# Die Notation ${..} ermoeglicht die dynamische Auswertung eines Ausdrucks. Verfuegbar sind "subject"
+# und "issuer" und die im Zertifikat DN vorhandenen RDNs.
+# Achtung: Fuer die binaere Signatur funktioniert diese Ersetzung nur fuer Werte, die als Replacement
+# definiert wurden. Konkret bedeutet dies, dass ein phlength Platzhalter definiert sein muss.
+defaults.phlength.SIG_SUBJECT=128
+
+# Binaersignatur: reservierter Platz fuer Zertifikat
+# profilweise: sig_obj.PROFILE.phlength.certificate=xyz
+defaults.phlength.certificate=10000
+
+# Binaersignatur: reservierte Platz fuer Zeitstempel
+# profilweise: sig_obj.PROFILE.phlength.timestamp=xyz
+defaults.phlength.timestamp=5000
+
+# Standardgroesse des Fensters innerhalb dessen Zeilenumbrueche gesetzt werden duerfe.
+# profilweise: sig_obj.PROFILE.phlength.line_break_tolerance=xyz
+defaults.phlength.line_break_tolerance=10
+
+# Falls die Breite eines Signaturblocks definiert wird (ueber API, Commandline oder ueber das Profil),
+# die unterhalb eines sinnvollen Wertes liegt, dann wird im Log eine Warnung ausgegeben, da
+# Signaturbloecke unter Umstaenden nicht mehr sinnvoll dargestellt werden koennen.
+# Der Standard-Schwellwert fuer diese Warnungen (= 150) kann global oder profilweise festgelegt
+# werden (z.B. um die Warnung zu deaktivieren, kann der Wert auf 0 gesetzt werden).
+# sig_obj.PROFILE.signature_block_width_warning_threshold=xyz
+default.signature_block_width_warning_threshold=150
+
+# PDF/A-1b Unterstuetzung fuer alle Profile einschalten
+default.SIG_PDFA1B_VALID=false
+
+# BAIK-Signatur Unterstuetzung fuer alle Profile einschalten
+default.SIG_BAIK_ENABLED=false
+
+
+#############################################
+# Signaturkennzeichnung (fuer Adobe Acrobat)
+#
+# Jede dieser globalen Einstellungen kann im jeweiligen Profil individuell gesetzt werden.
+# z.B. sig_obj.PROFILE.adobeSignText.binary=Mein Signator
+
+# Adobe Signaturkennzeichnung ein-/ausschalten
+default.adobeSignEnabled=true
+
+# Standard Name fuer die Signaturkennzeichnung (binaer)
+default.adobeSignText.binary=PDF-AS
+
+# Standard Name fuer die Signaturkennzeichnung (textuell)
+default.adobeSignText.textual=PDF-AS
+
+# Standard-Name fuer die PDF-Signatur
+default.adobeSignFieldValue=PDF-AS Signatur
+
+# Standardwert fuer "Reason"-Feld der jeweiligen Signatur
+default.adobeSignReasonValue=Informationen zur Pr\u00FCfung finden Sie unter http://www.signaturpruefung.gv.at
+
+# Standard Prueflink fuer die Adobe Signaturkennzeichnung (nur relevant falls Adobe Plugin fuer Pruefung verwendet wird)
+default.verifyURL=http://www.signaturpruefung.gv.at
+
+# Standard Alternativer Text fuer den Signaturblock (WAI) (globale Einstellung)
+# profilweise: sig_obj.PROFILE.sigLogoAltText=VALUE
+default.sigLogoAltText=Abgebildet ist eine Standard-Signaturbildmarke.
diff --git a/pdf-as-lib/src/main/resources/config/help_text.properties b/pdf-as-lib/src/main/resources/config/help_text.properties
index e3cc17e..500dfde 100644
--- a/pdf-as-lib/src/main/resources/config/help_text.properties
+++ b/pdf-as-lib/src/main/resources/config/help_text.properties
@@ -1,22 +1,24 @@
#ErrorCodeException
error.code.0=Externer Fehler
error.code.1=Das Dokument kann nicht signiert werden.
-error.code.2=Die Signatur für das Dokument kann nicht überprüft werden.
+error.code.2=Die Signatur f\u00fcr das Dokument kann nicht \u00fcberpr\u00fcft werden.
error.code.3=Es wurde kein Dokument zur Signierung angegeben oder das Dokument konnte nicht gespeichert werden.
-error.code.4=Es wurde kein Dokument zur Überprüfung angegeben oder das Dokument konnte nicht gespeichert werden.
-error.code.5=Zum Signieren eines Dokmentes müssen Sie authentifiziert sein.
+error.code.4=Es wurde kein Dokument zur \u00dcberpr\u00fcfung angegeben oder das Dokument konnte nicht gespeichert werden.
+error.code.5=Zum Signieren eines Dokmentes m\u00fcssen Sie authentifiziert sein.
error.code.6=Unbekannter/interner Fehler
-error.code.7=Das Dokument konnte nicht verarbeitet werden, da unzureichend Speicher zu Verfügung steht.
+error.code.7=Das Dokument konnte nicht verarbeitet werden, da unzureichend Speicher zu Verf\u00fcgung steht.
error.code.10=Das System kann nicht initialisiert werden. Bitte wenden Sie sich an einen Systemadministrator.
#SettingNotFoundException
-error.code.100=Der Konfigurationsschlüssel konnte nicht gefunden werden.
+error.code.100=Der Konfigurationsschl\u00fcssel konnte nicht gefunden werden.
error.code.101=Die Konfigurationsdatei konnte nicht geladen werden.
-error.code.102=Das Signaturprofil enthält keinen Bericht für die Kennzeichnung.
-error.code.103=Für den PDA/A Modus muss eine einbettbare TrueType-Schrift konfiguriert sein.
-error.code.104=Die Konfiguration der SignaturLayout-Implementierung fehlt oder ist ungültig.
-error.code.105=Es ist nicht möglich, den Typ der Bürgerkartenumgebung zu ermitteln. Die Antwort der Bürgerkartenumgebung war unvollständig.
+error.code.102=Das Signaturprofil enth\u00e4lt keinen Bericht f\u00fcr die Kennzeichnung.
+error.code.103=F\u00fcr den PDA/A Modus muss eine einbettbare TrueType-Schrift konfiguriert sein.
+error.code.104=Die Konfiguration der SignaturLayout-Implementierung fehlt oder ist ung\u00fcltig.
+error.code.105=Es ist nicht m\u00f6glich, den Typ der B\u00fcrgerkartenumgebung zu ermitteln. Die Antwort der B\u00fcrgerkartenumgebung war unvollst\u00e4ndig.
+error.code.106=Es wurden include-Instruktionen verwendet, die sich gegenseitig referenzieren und dadurch zu einer Endlosschleife f\u00fchren w\u00fcrden.
+error.code.107=Die interne Standard-Konfiguration konnte nicht geladen werden.
#PDFDocumentException
error.code.201=Das PDF Dokument kann nicht gelesen werden, oder die Datei hat ein falsches Format.
@@ -26,61 +28,63 @@ error.code.204=Das Dokument ist bereits signiert.
error.code.205=Das PDF Dokument kann nicht erstellt werden. Der Zugriff auf das Dokument ist blockiert.
error.code.206=Das Dokument ist nicht signiert.
error.code.210=Das Dokument kann nicht geschlossen werden.
-error.code.220=Die Bildmarke für die Signatur kann nicht geladen werden.
-error.code.221=Die Referenz für die Bildmarke der Signatur ist ungültig.
-error.code.222=Der Zugriff auf die Bildmarke der Signatur ist nicht möglich.
+error.code.220=Die Bildmarke f\u00fcr die Signatur kann nicht geladen werden.
+error.code.221=Die Referenz f\u00fcr die Bildmarke der Signatur ist ung\u00fcltig.
+error.code.222=Der Zugriff auf die Bildmarke der Signatur ist nicht m\u00f6glich.
error.code.223=Es ist keine Signaturtabelle definiert.
-error.code.224=Die angegebene Signatur Position ist ungültig.
+error.code.224=Die angegebene Signatur Position ist ung\u00fcltig.
error.code.225=Die angegebene Seite in der absoluten Position darf nicht kleiner als 1 sein.
-error.code.226=Der angegebene Wert für die Breite in der absoluten Position darf nicht kleiner gleich 0 sein.
-error.code.227=Der angegebene Wert für die Seitennummer im Positionsparameter ist zu groß.
-error.code.228=Der angegebene Wert für die x-Position in der absoluten Position darf nicht kleiner gleich 0 sein.
-error.code.229=Der angegebene Wert für die y-Position in der absoluten Position darf nicht kleiner gleich 0 sein.
+error.code.226=Der angegebene Wert f\u00fcr die Breite in der absoluten Position darf nicht kleiner gleich 0 sein.
+error.code.227=Der angegebene Wert f\u00fcr die Seitennummer im Positionsparameter ist zu gro\u00df.
+error.code.228=Der angegebene Wert f\u00fcr die x-Position in der absoluten Position darf nicht kleiner gleich 0 sein.
+error.code.229=Der angegebene Wert f\u00fcr die y-Position in der absoluten Position darf nicht kleiner gleich 0 sein.
error.code.230=Die Schriftart konnte nicht geladen werden.
-error.code.231=Das Dokument kann nicht verarbeitet werden, da es geschützt ist.
-error.code.232=Die Signatur konnte nicht überprüft werden, da das Dokument unvollständige Signaturinformationen enthält.
+error.code.231=Das Dokument kann nicht verarbeitet werden, da es gesch\u00fctzt ist.
+error.code.232=Die Signatur konnte nicht \u00fcberpr\u00fcft werden, da das Dokument unvollst\u00e4ndige Signaturinformationen enth\u00e4lt.
error.code.233=Es konnte kein passender Platzhalter gefunden werden (STRICT mode).
+error.code.234=Das gew\u00e4hlte Signaturprofil kann nicht zur Signatur verwendet werden.
error.code.250=Das angegebene Dokument ist leer.
-error.code.251=Das angegebene Dokument enthält keinen extrahierbaren Text. Falls sich der Inhalt ausschließlich aus Bildern zusammensetzt, wird die Verwendung einer binären Signatur empfohlen.
+error.code.251=Das angegebene Dokument enth\u00e4lt keinen extrahierbaren Text. Falls sich der Inhalt ausschlie\u00dflich aus Bildern zusammensetzt, wird die Verwendung einer bin\u00e4ren Signatur empfohlen.
#SignatureException
error.code.300=Die Signatur kann nicht erstellt werden.
-error.code.301=Die Signatur kann nicht erstellt werden. Das zu signierende Dokument enthält keinen Text.
+error.code.301=Die Signatur kann nicht erstellt werden. Das zu signierende Dokument enth\u00e4lt keinen Text.
error.code.302=Die Signatur kann nicht erstellt werden. Der Signaturtyp ist nicht definiert.
-error.code.303=Die Signatur kann nicht erstellt werden. Die Seriennummer ist ungültig.
+error.code.303=Die Signatur kann nicht erstellt werden. Die Seriennummer ist ung\u00fcltig.
error.code.304=Die Signatur kann nicht erstellt werden. Das Signatur Zertifikat kann nicht gelesen werden.
-error.code.305=Die Signatur kann nicht erstellt werden. Das gewählte Signaturprofil ist nicht für die Textsignatur geeignet, da es nicht alle notwendigen Signaturfelder sichtbar definiert. Bitte wählen Sie ein anderes Signaturprofil oder führen Sie eine Binärsignatur durch.
+error.code.305=Die Signatur kann nicht erstellt werden. Das gew\u00e4hlte Signaturprofil ist nicht f\u00fcr die Textsignatur geeignet, da es nicht alle notwendigen Signaturfelder sichtbar definiert. Bitte w\u00e4hlen Sie ein anderes Signaturprofil oder f\u00fchren Sie eine Bin\u00e4rsignatur durch.
error.code.310=Die Signatur konnte nicht verifiziert werden.
-error.code.311=Der zu prüfende Text ist nicht definiert.
-error.code.312=Die zu prüfende Signatur ist nicht definiert.
+error.code.311=Der zu pr\u00fcfende Text ist nicht definiert.
+error.code.312=Die zu pr\u00fcfende Signatur ist nicht definiert.
error.code.313=Das Zertifikat (Seriennummer oder Aussteller) ist unbekannt oder kann nicht zugeordnet werden.
-error.code.314=Beim Auffinden der Signaturen ist ein Fehler aufgetreten. Es wurden mehrere passende Signaturprofile gefunden, die aber nicht semantisch äquivalent sind. Daher kann die Applikation nicht entscheiden welches Signaturprofil zur Prüfung herangezogen werden muss.
-error.code.315=Beim Auffinden der Signaturen ist ein Fehler aufgetreten. Obwohl mehrere passende Signaturprofile gefunden wurden kann die Applikation auf Grund deren Beschaffenheit nicht eindeutig entscheiden welches Signaturprofil zur Prüfung herangezogen werden muss.
+error.code.314=Beim Auffinden der Signaturen ist ein Fehler aufgetreten. Es wurden mehrere passende Signaturprofile gefunden, die aber nicht semantisch \u00e4quivalent sind. Daher kann die Applikation nicht entscheiden welches Signaturprofil zur Pr\u00fcfung herangezogen werden muss.
+error.code.315=Beim Auffinden der Signaturen ist ein Fehler aufgetreten. Obwohl mehrere passende Signaturprofile gefunden wurden kann die Applikation auf Grund deren Beschaffenheit nicht eindeutig entscheiden welches Signaturprofil zur Pr\u00fcfung herangezogen werden muss.
# added by tzefferer
-error.code.316=Das Dokument wurde nach erfolgter Signierung verändert.
-error.code.317=Das Dokument enthält nicht-binäre Signaturen.
+error.code.316=Das Dokument wurde nach erfolgter Signierung ver\u00e4ndert.
+error.code.317=Das Dokument enth\u00e4lt nicht-bin\u00e4re Signaturen.
-error.code.318=Die binäre Signatur kann nicht geprüft werden. Die Signatur enthält nicht unterstützte /replaces-Namen.
-error.code.319=Die Signatur konnte nicht verifiziert werden, da diese auf einer nicht unterstützten Signaturmethode bzw. einem unbekannten Signaturparameter basiert. Bitte aktualisieren Sie Ihre PDF-AS Software.
+error.code.318=Die bin\u00e4re Signatur kann nicht gepr\u00fcft werden. Die Signatur enth\u00e4lt nicht unterst\u00fctzte /replaces-Namen.
+error.code.319=Die Signatur konnte nicht verifiziert werden, da diese auf einer nicht unterst\u00fctzten Signaturmethode bzw. einem unbekannten Signaturparameter basiert. Bitte aktualisieren Sie Ihre PDF-AS Software.
-error.code.320=Es kann keine Verbindung zur Bürgerkartenumgebung hergestellt werden.
-error.code.330=Es kann keine Verbindung zu MOA hergestellt werden oder MOA hat den Request zurückgewiesen.
-error.code.340=Die Antwort des Signaturgeräts enthielt weder eine Signatur noch ein Verifikationsergebnis.
+error.code.320=Es kann keine Verbindung zur B\u00fcrgerkartenumgebung hergestellt werden.
+error.code.330=Es kann keine Verbindung zu MOA hergestellt werden oder MOA hat den Request zur\u00fcckgewiesen.
+error.code.334=Das Signaturprofil kann nicht f\u00fcr die Signatur verwendet werden.
+error.code.340=Die Antwort des Signaturger\u00e4ts enthielt weder eine Signatur noch ein Verifikationsergebnis.
# TODO remove this when MOA detached is ready
-error.code.370=Eine detached Signature kann zur Zeit mit MOA nicht überprüft werden.
+error.code.370=Eine detached Signature kann zur Zeit mit MOA nicht \u00fcberpr\u00fcft werden.
-# Für die Online-BKU: Signatur-Prüfung wird nicht unterstützt werden.
-error.code.371=Dieses Signaturgerät unterstützt keine Signatur-Prüfung.
+# Fuer die Online-BKU: Signatur-Pruefung wird nicht unterstuetzt werden.
+error.code.371=Dieses Signaturger\u00e4t unterst\u00fctzt keine Signatur-Pr\u00fcfung.
# Workaround for ITS(Mac/Linux) bug concerning the signing time.
-error.code.372=Der Signaturzeitpunkt ist ungültig. Stellen Sie bitte sicher, dass die Systemzeit sowie die Zeitzoneneinstellung Ihres Rechners korrekt sind sowie dass Sie die aktuellste Version Ihrer Bürgerkartenumgebung verwenden.
+error.code.372=Der Signaturzeitpunkt ist ung\u00fcltig. Stellen Sie bitte sicher, dass die Systemzeit sowie die Zeitzoneneinstellung Ihres Rechners korrekt sind sowie dass Sie die aktuellste Version Ihrer B\u00fcrgerkartenumgebung verwenden.
# Unsupported BKU
-error.code.373=Dieses Signaturgerät wird nicht unterstützt.
+error.code.373=Dieses Signaturger\u00e4t wird nicht unterst\u00fctzt.
#NormalizeException
error.code.400=Das Normalisierungsmodul kann nicht initialisiert werden.
@@ -89,14 +93,14 @@ error.code.400=Das Normalisierungsmodul kann nicht initialisiert werden.
error.code.500=Das Zertifikat konnte nicht auf dem LDAP Server gefunden werden.
#Session exception
-error.code.600=Die Sitzung ist entweder ungültig oder wurde bereits beendet.
+error.code.600=Die Sitzung ist entweder ung\u00fcltig oder wurde bereits beendet.
#PlaceholderException
-error.code.700=Der Platzhalter für einen Wert wurde zu kurz gewählt. Es konnte nicht der gesamte Wert in die Signatur eingefügt werden. Bitte vergrößern Sie die Länge des entsprechenden Platzhalters im Signaturprofil.
+error.code.700=Der Platzhalter f\u00fcr einen Wert wurde zu kurz gew\u00e4hlt. Es konnte nicht der gesamte Wert in die Signatur eingef\u00fcgt werden. Bitte vergr\u00f6\u00dfern Sie die L\u00e4nge des entsprechenden Platzhalters im Signaturprofil.
#CaptionNotFoundException
-error.code.701=Die Überschrift (Caption/Label) konnte nicht eindeutig wiedergefunden werden. Dies geschieht gewöhnlich wenn bei der (häufig absoluten) Positionierung zu wenig Platz für die Überschrift (Caption/Label) vorhanden ist und diese ungünstig umgebrochen werden muss. Bitte stellen Sie dieser Überschrift mehr Platz im Signaturblock zur Verfügung oder entfernen Sie aus dieser alle Leerzeichen.
+error.code.701=Die \u00dcberschrift (Caption/Label) konnte nicht eindeutig wiedergefunden werden. Dies geschieht gew\u00f6hnlich wenn bei der (h\u00e4ufig absoluten) Positionierung zu wenig Platz f\u00fcr die \u00dcberschrift (Caption/Label) vorhanden ist und diese ung\u00fcnstig umgebrochen werden muss. Bitte stellen Sie dieser \u00dcberschrift mehr Platz im Signaturblock zur Verf\u00fcgung oder entfernen Sie aus dieser alle Leerzeichen.
#CorrectorException
-error.code.800=Fehler beim Parsen der binären Signatur.
+error.code.800=Fehler beim Parsen der bin\u00e4ren Signatur.
error.code.801=Das Dokument konnte nicht korrigiert werden.
error.code.802=Die externe Korrektur konnte nicht innerhalb des festgesetzten Timeouts fertiggestellt werden.
diff --git a/pdf-as-lib/src/main/resources/config/pdf-as.properties b/pdf-as-lib/src/main/resources/config/pdf-as.properties
index cad47f4..85c5375 100644
--- a/pdf-as-lib/src/main/resources/config/pdf-as.properties
+++ b/pdf-as-lib/src/main/resources/config/pdf-as.properties
@@ -1,5 +1,7 @@
###############################################################################
# PDF-AS system properties
+# Note: This is a collection of fixed properties that CANNOT be overridden by
+# local configurations.
###############################################################################
normalizer.version=V01
@@ -23,9 +25,13 @@ signaturelayout.pattern.moc.none=^((citizen-card-environment/1\\.2 MOCCA(?!.*Sig
signaturelayout.implementation.moc.none=at.knowcenter.wag.egov.egiz.sig.signaturelayout.mocca.OldMOCCASignatureLayoutHandler
# signature layout 1.0 for mocca
-signaturelayout.pattern.moc.10=^citizen-card-environment/1\\.2 MOCCA/.*SignatureLayout/1\\.0.*$
+signaturelayout.pattern.moc.10=^citizen-card-environment/1\\.2 MOCCA/(?!.*-X14).*SignatureLayout/1\\.0.*$
signaturelayout.implementation.moc.10=at.knowcenter.wag.egov.egiz.sig.signaturelayout.mocca.MOCCASignatureLayout10Handler
+# signature layout for mocca with XAdES 1.4 support (works in conjunction with SignatureLayout 1.0 and 1.1
+signaturelayout.pattern.moc.xades14=^citizen-card-environment/1\\.2 MOCCA/.*-X14\\s*SignatureLayout/1\\.[01].*$
+signaturelayout.implementation.moc.xades14=at.knowcenter.wag.egov.egiz.sig.signaturelayout.mocca.MoccaXades14SignatureLayoutHandler
+
# signature layout for supported trustDesk basic versions
signaturelayout.pattern.tdb=^citizen-card-environment/1\\.2 trustDeskbasic((-OSX)|(-Linux))?/((2\\.7\\.\\d)|(2\\.8\\.\\d)|(3\\.0\\.\\d))$
signaturelayout.implementation.tdb=at.knowcenter.wag.egov.egiz.sig.signaturelayout.td.TrustDeskSignatureLayoutHandler
@@ -33,16 +39,12 @@ signaturelayout.implementation.tdb=at.knowcenter.wag.egov.egiz.sig.signaturelayo
# signature layout for supported hotSign
# currently disabled since there are still problems
#signaturelayout.pattern.hotsign=^citizen-card-environment/1\\.2 hotSign/2\\.0\\.0$
-#signaturelayout.implementation.hotsign=at.knowcenter.wag.egov.egiz.sig.signaturelayout.mocca.MOCCASignatureLayout10Handler
+#signaturelayout.implementation.hotsign=[needs to be implemented]
# signature layouts for supported A-Trust CCS
-#for web also a-trust CCS 1.3.0 is ok
-#signaturelayout.pattern.atrust130=^citizen-card-environment/1\\.2 asignSecurityLayer/1\\.3\\.0$
-#signaturelayout.implementation.atrust130=at.knowcenter.wag.egov.egiz.sig.signaturelayout.atrust.ATrustSignatureLayoutHandler
-
-signaturelayout.pattern.atrust133<=^citizen-card-environment/1\\.2 asignSecurityLayer?/((1\\.3\\.3)|(1\\.([4-9]|[1-9][0-9]{1,3})\\.{0,1}(?=[0-9])(?<=\\.)[0-9]{0,3}\\.{0,1}(?=[0-9])(?<=\\.)[0-9]{0,3})|(([2-9]|[1-9][0-9]{1,4})\\.{0,1}(?=[0-9])(?<=\\.)[0-9]{0,3}\\.{0,1}(?=[0-9])(?<=\\.)[0-9]{0,3}\\.{0,1}(?=[0-9])(?<=\\.)[0-9]{0,3}))
-signaturelayout.implementation.atrust133<=at.knowcenter.wag.egov.egiz.sig.signaturelayout.atrust.ATrustSignatureLayoutHandler
+signaturelayout.pattern.atrustlocal=^citizen-card-environment/1\\.2 asignSecurityLayer/((1\\.3\\.3)|(1\\.4\\.[1-2]))$
+signaturelayout.implementation.atrustlocal=at.knowcenter.wag.egov.egiz.sig.signaturelayout.atrust.ATrustSignatureLayoutHandler
# A-Trust Mobile BKU 1.1.0
signaturelayout.pattern.atrustmobile=^citizen-card-environment/1\\.2 asignMobileBku/1\\.1\\.0$
@@ -149,6 +151,13 @@ oid.1_2_40_0_10_1_1_2=Dienstleistereigenschaft
#############################################
+# Signaturkennzeichnung (fuer Adobe Acrobat)
+
+# Adobe Signaturkennzeichnung ein-/ausschalten
+default.adobeSignEnabled=true
+
+
+#############################################
# start LDAP-Mappings
# note: ldap_mapping.xxx.serial_attr may be omitted if value is "eidCertificateSerialNumber"
diff --git a/pdf-as-lib/src/main/resources/config/templates/moc.etsi-moc-1.2.verify.template.xml b/pdf-as-lib/src/main/resources/config/templates/moc.etsi-moc-1.2.verify.template.xml
new file mode 100644
index 0000000..58337ce
--- /dev/null
+++ b/pdf-as-lib/src/main/resources/config/templates/moc.etsi-moc-1.2.verify.template.xml
@@ -0,0 +1 @@
+<dsig:Signature Id="Signature-SigIdReplace-1" xmlns:dsig="http://www.w3.org/2000/09/xmldsig#"><dsig:SignedInfo Id="SignedInfo-SigIdReplace-1"><dsig:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/><dsig:SignatureMethod Algorithm="CertAlgReplace"/><dsig:Reference Id="Reference-SigIdReplace-1" URI="urn:Document"><dsig:DigestMethod Algorithm="DataDigestReplace"/><dsig:DigestValue>DigestValueSignedDataReplace</dsig:DigestValue></dsig:Reference><dsig:Reference Id="Reference-SigIdReplace-2" Type="http://uri.etsi.org/01903#SignedProperties" URI="#SignedProperties-SigIdReplace-1"><dsig:DigestMethod Algorithm="PropertiesDigestReplace"/><dsig:DigestValue>DigestValueSignedPropertiesReplace</dsig:DigestValue></dsig:Reference></dsig:SignedInfo><dsig:SignatureValue Id="SignatureValue-SigIdReplace-1">SignatureValueReplace</dsig:SignatureValue><dsig:KeyInfo><dsig:X509Data><dsig:X509Certificate>X509CertificateReplace</dsig:X509Certificate></dsig:X509Data></dsig:KeyInfo><dsig:Object Id="Object-SigIdReplace-1"><xades:QualifyingProperties Target="#Signature-SigIdReplace-1" xmlns:xades="http://uri.etsi.org/01903/v1.3.2#" xmlns:dsig="http://www.w3.org/2000/09/xmldsig#" xmlns:sl="http://www.buergerkarte.at/namespaces/securitylayer/1.2#"><xades:SignedProperties xmlns:dsig="http://www.w3.org/2000/09/xmldsig#" xmlns:ns3="http://uri.etsi.org/01903/v1.4.1#" xmlns:sl="http://www.buergerkarte.at/namespaces/securitylayer/1.2#" xmlns:xades="http://uri.etsi.org/01903/v1.3.2#" Id="SignedProperties-SigIdReplace-1"><xades:SignedSignatureProperties><xades:SigningTime>SigningTimeReplace</xades:SigningTime><xades:SigningCertificate><xades:Cert><xades:CertDigest><dsig:DigestMethod Algorithm="CertDigestReplace"></dsig:DigestMethod><dsig:DigestValue>DigestValueX509CertificateReplace</dsig:DigestValue></xades:CertDigest><xades:IssuerSerial><dsig:X509IssuerName>X509IssuerNameReplace</dsig:X509IssuerName><dsig:X509SerialNumber>X509SerialNumberReplace</dsig:X509SerialNumber></xades:IssuerSerial></xades:Cert></xades:SigningCertificate><xades:SignaturePolicyIdentifier><xades:SignaturePolicyImplied></xades:SignaturePolicyImplied></xades:SignaturePolicyIdentifier></xades:SignedSignatureProperties><xades:SignedDataObjectProperties><xades:DataObjectFormat ObjectReference="#Reference-SigIdReplace-1"><xades:MimeType>MimeTypeReplace</xades:MimeType></xades:DataObjectFormat></xades:SignedDataObjectProperties></xades:SignedProperties></xades:QualifyingProperties></dsig:Object></dsig:Signature> \ No newline at end of file
diff --git a/pdf-as-lib/src/test/java/at/gv/egiz/pdfas/utils/CsvUtilsTest.java b/pdf-as-lib/src/test/java/at/gv/egiz/pdfas/utils/CsvUtilsTest.java
new file mode 100644
index 0000000..813dab3
--- /dev/null
+++ b/pdf-as-lib/src/test/java/at/gv/egiz/pdfas/utils/CsvUtilsTest.java
@@ -0,0 +1,59 @@
+/**
+ * <copyright> Copyright 2006 by Know-Center, Graz, Austria </copyright>
+ * PDF-AS has been contracted by the E-Government Innovation Center EGIZ, a
+ * joint initiative of the Federal Chancellery Austria and Graz University of
+ * Technology.
+ *
+ * Licensed under the EUPL, Version 1.1 or - as soon they will be approved by
+ * the European Commission - subsequent versions of the EUPL (the "Licence");
+ * You may not use this work except in compliance with the Licence.
+ * You may obtain a copy of the Licence at:
+ * http://www.osor.eu/eupl/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the Licence is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the Licence for the specific language governing permissions and
+ * limitations under the Licence.
+ *
+ * This product combines work with different licenses. See the "NOTICE" text
+ * file for details on the various modules and licenses.
+ * The "NOTICE" text file is part of the distribution. Any derivative works
+ * that you distribute must include a readable copy of the "NOTICE" text file.
+ */
+package at.gv.egiz.pdfas.utils;
+
+import static org.junit.Assert.*;
+
+import org.junit.Test;
+
+/**
+ * Some tests for CSV utils. Note that the German version of CSV is used, with semicolons instead of commas.
+ *
+ * @author Datentechnik Innovation GmbH
+ */
+public class CsvUtilsTest {
+
+ @Test
+ public void testEscapeCsvValue() {
+ assertEquals("", CsvUtils.escapeCsvValue(null));
+ assertEquals("", CsvUtils.escapeCsvValue(""));
+ assertEquals("Hello World", CsvUtils.escapeCsvValue("Hello World"));
+ assertEquals("1,2", CsvUtils.escapeCsvValue("1,2"));
+ assertEquals("3.4", CsvUtils.escapeCsvValue("3.4"));
+ assertEquals("1", CsvUtils.escapeCsvValue(1));
+ }
+
+ @Test
+ public void testEscapeCsvValueQuotes() {
+ // RFC 4180 (6): Fields containing line breaks (CRLF), double quotes, and commas
+ // should be enclosed in double-quotes.
+ assertEquals("\"Hello\nWorld\"", CsvUtils.escapeCsvValue("Hello\nWorld"));
+ assertEquals("\"Hello;World\"", CsvUtils.escapeCsvValue("Hello;World"));
+ // RFC 4180 (7): If double-quotes are used to enclose fields, then a double-quote
+ // appearing inside a field must be escaped by preceding it with
+ // another double quote.
+ assertEquals("\"Hello \"\"World\"\"\"", CsvUtils.escapeCsvValue("Hello \"World\""));
+ }
+
+}
diff --git a/pdf-as-lib/src/test/java/at/knowcenter/wag/egov/egiz/cfg/NestedPropertiesTest.java b/pdf-as-lib/src/test/java/at/knowcenter/wag/egov/egiz/cfg/NestedPropertiesTest.java
new file mode 100644
index 0000000..d2d9c50
--- /dev/null
+++ b/pdf-as-lib/src/test/java/at/knowcenter/wag/egov/egiz/cfg/NestedPropertiesTest.java
@@ -0,0 +1,263 @@
+/**
+ * <copyright> Copyright 2006 by Know-Center, Graz, Austria </copyright>
+ * PDF-AS has been contracted by the E-Government Innovation Center EGIZ, a
+ * joint initiative of the Federal Chancellery Austria and Graz University of
+ * Technology.
+ *
+ * Licensed under the EUPL, Version 1.1 or - as soon they will be approved by
+ * the European Commission - subsequent versions of the EUPL (the "Licence");
+ * You may not use this work except in compliance with the Licence.
+ * You may obtain a copy of the Licence at:
+ * http://www.osor.eu/eupl/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the Licence is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the Licence for the specific language governing permissions and
+ * limitations under the Licence.
+ *
+ * This product combines work with different licenses. See the "NOTICE" text
+ * file for details on the various modules and licenses.
+ * The "NOTICE" text file is part of the distribution. Any derivative works
+ * that you distribute must include a readable copy of the "NOTICE" text file.
+ */
+package at.knowcenter.wag.egov.egiz.cfg;
+
+import static org.junit.Assert.fail;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.Enumeration;
+import java.util.HashSet;
+import java.util.Hashtable;
+import java.util.Properties;
+import java.util.Set;
+
+import org.apache.commons.io.IOUtils;
+import org.apache.commons.lang.StringUtils;
+import org.junit.Test;
+
+/**
+ * Tests dealing with include-capable properties.
+ *
+ * @author Datentechnik Innovation GmbH
+ */
+public class NestedPropertiesTest {
+
+ @Test
+ public void testNoIncludes() throws IOException {
+ File configFile = new File(NestedPropertiesTest.class.getResource("config_noincludes.properties").getFile());
+
+ Properties expectedProperties = new Properties();
+ InputStream in = null;
+ try {
+ expectedProperties.load(in = new FileInputStream(configFile));
+ } finally {
+ IOUtils.closeQuietly(in);
+ }
+
+ NestedProperties nestedProperties = new NestedProperties();
+ nestedProperties.load(configFile);
+
+ assertEquals(expectedProperties, nestedProperties);
+ }
+
+ @Test
+ public void testSingleIncludes() throws IOException {
+ File configFile = new File(NestedPropertiesTest.class.getResource("config_single_includes.properties")
+ .getFile());
+
+ Properties expectedProperties = new Properties();
+ InputStream in = null;
+ try {
+ expectedProperties.load(in = getClass().getResourceAsStream("config_noincludes.properties"));
+ } finally {
+ IOUtils.closeQuietly(in);
+ }
+
+ NestedProperties nestedProperties = new NestedProperties();
+ nestedProperties.load(configFile);
+
+ assertEquals(expectedProperties, nestedProperties);
+ }
+
+ @Test
+ public void testSingleIncludesWithDefaultConfig() throws IOException {
+ // add some properties to a default configuration object
+ Properties defaultConfiguration = new Properties();
+ defaultConfiguration.put("key1", "defaultValue1");
+ defaultConfiguration.put("key2", "defaultValue2");
+ // set a property which will be locally overridden by config_single_includes.properties
+ defaultConfiguration.put("correct_document_on_verify_if_necessary", "false");
+ defaultConfiguration.put("sig_obj.types.INVISIBLE", "off");
+
+ File configFile = new File(NestedPropertiesTest.class.getResource("config_single_includes.properties")
+ .getFile());
+
+ Properties expectedProperties = new Properties();
+ InputStream in = null;
+ try {
+ expectedProperties.load(in = getClass().getResourceAsStream("config_noincludes.properties"));
+ expectedProperties.put("key1", "defaultValue1");
+ expectedProperties.put("key2", "defaultValue2");
+ } finally {
+ IOUtils.closeQuietly(in);
+ }
+
+ // load include aware properties considering default configuration
+ NestedProperties nestedProperties = new NestedProperties(defaultConfiguration);
+ nestedProperties.load(configFile);
+
+ assertEquals(expectedProperties, nestedProperties);
+ }
+
+ @Test
+ public void testWildcardIncludes() throws IOException {
+ File configFile = new File(NestedPropertiesTest.class.getResource("config_wildcard_includes.properties")
+ .getFile());
+
+ Properties expectedProperties = new Properties();
+ InputStream in = null;
+ try {
+ expectedProperties.load(in = getClass().getResourceAsStream("config_noincludes.properties"));
+ } finally {
+ IOUtils.closeQuietly(in);
+ }
+
+ NestedProperties nestedProperties = new NestedProperties();
+ nestedProperties.load(configFile);
+
+ assertEquals(expectedProperties, nestedProperties);
+ }
+
+ @Test
+ public void testNestedIncludes() throws IOException {
+ File configFile = new File(NestedPropertiesTest.class.getResource("config_nested_includes.properties")
+ .getFile());
+
+ Properties expectedProperties = new Properties();
+ InputStream in = null;
+ try {
+ expectedProperties.load(in = getClass().getResourceAsStream("config_noincludes.properties"));
+ } finally {
+ IOUtils.closeQuietly(in);
+ }
+
+ NestedProperties nestedProperties = new NestedProperties();
+ nestedProperties.load(configFile);
+
+ assertEquals(expectedProperties, nestedProperties);
+ }
+
+ @Test
+ public void testSubdirIncludes() throws IOException {
+ File configFile = new File(NestedPropertiesTest.class.getResource("config_subdir_includes.properties")
+ .getFile());
+
+ Properties expectedProperties = new Properties();
+ InputStream in = null;
+ try {
+ expectedProperties.load(in = getClass().getResourceAsStream("config_noincludes.properties"));
+ } finally {
+ IOUtils.closeQuietly(in);
+ }
+
+ NestedProperties nestedProperties = new NestedProperties();
+ nestedProperties.load(configFile);
+
+ assertEquals(expectedProperties, nestedProperties);
+ }
+
+ @Test(timeout = 2500, expected = CircularIncludeException.class)
+ public void testCircularIncludes() throws IOException {
+ File configFile = new File(NestedPropertiesTest.class.getResource("circular/profile.1.properties").getFile());
+ NestedProperties nestedProperties = new NestedProperties();
+ nestedProperties.load(configFile);
+ fail("Circular references should have been detected.");
+ }
+
+ @Test
+ /**
+ * Tests include priority: Included properties should override locally set properties.
+ */
+ public void testLocalVsIncludedProperties() throws IOException {
+ File configFile = new File(NestedPropertiesTest.class.getResource("local_vs_included_properties.properties")
+ .getFile());
+ NestedProperties nestedProperties = new NestedProperties();
+ nestedProperties.load(configFile);
+
+ Properties expectedProperties = new Properties();
+ expectedProperties.put("key1", "included value 1");
+ expectedProperties.put("key2", "local value 2");
+ expectedProperties.put("key3", "local value 3");
+ expectedProperties.put("key4", "local value 4");
+
+ assertEquals(expectedProperties, nestedProperties);
+ }
+
+ @Test
+ public void testIncludeOrder() throws CircularIncludeException, IOException {
+ File configFile = new File(NestedPropertiesTest.class.getResource("include_order.properties").getFile());
+ NestedProperties nestedProperties = new NestedProperties();
+ nestedProperties.load(configFile);
+
+ Properties expectedProperties = new Properties();
+ expectedProperties.put("key1", "include_xyz");
+ expectedProperties.put("key2", "include_abc");
+ expectedProperties.put("key3", "include_3");
+ expectedProperties.put("key4", "include_2");
+ expectedProperties.put("key5", "include_1");
+ expectedProperties.put("key6", "include");
+
+ assertEquals(expectedProperties, nestedProperties);
+ }
+
+ /**
+ * Java default {@link Properties} does not provide equals and hashcode methods therefore default properties are not
+ * taken into consideration when comparing two Properties (using {@link Hashtable#equals(Object)}. This method
+ * compares two Properties considering defaults. Note that this method considers two Properties equal if the
+ * respective union of keys and default keys equals.
+ *
+ * @param expected
+ * The expected set of Properties.
+ * @param actual
+ * Properties to be compared with.
+ */
+ private static void assertEquals(Properties expected, Properties actual) {
+ if (expected == actual) {
+ // same object
+ return;
+ }
+ if (expected == null || actual == null) {
+ fail("expected: <" + expected + "> but was <" + actual + ">");
+ }
+ // fetch all keys (including defaults) from actual properties
+ @SuppressWarnings("unchecked")
+ Enumeration<String> actualPropertyNames = (Enumeration<String>) actual.propertyNames();
+ Set<String> actualKeys = new HashSet<String>();
+ while (actualPropertyNames.hasMoreElements()) {
+ actualKeys.add(actualPropertyNames.nextElement());
+ }
+
+ @SuppressWarnings("unchecked")
+ Enumeration<String> expectedPropertyNames = (Enumeration<String>) expected.propertyNames();
+ while (expectedPropertyNames.hasMoreElements()) {
+ String key = expectedPropertyNames.nextElement();
+ String expectedValue = expected.getProperty(key);
+ if (!actualKeys.contains(key)) {
+ fail("missing entry for key '" + key + "'");
+ }
+ String actualValue = actual.getProperty(key);
+ if (!StringUtils.equals(expectedValue, actualValue)) {
+ fail("key '" + key + "' value expected: <" + expectedValue + "> but was <" + actualValue + ">");
+ }
+ actualKeys.remove(key);
+ }
+ if (!actualKeys.isEmpty()) {
+ fail("more entries found than expected: " + StringUtils.join(actualKeys, ", "));
+ }
+ }
+
+}
diff --git a/pdf-as-lib/src/test/java/at/knowcenter/wag/egov/egiz/sig/SignatureTypesStateTest.java b/pdf-as-lib/src/test/java/at/knowcenter/wag/egov/egiz/sig/SignatureTypesStateTest.java
new file mode 100644
index 0000000..02931eb
--- /dev/null
+++ b/pdf-as-lib/src/test/java/at/knowcenter/wag/egov/egiz/sig/SignatureTypesStateTest.java
@@ -0,0 +1,101 @@
+/**
+ * <copyright> Copyright 2006 by Know-Center, Graz, Austria </copyright>
+ * PDF-AS has been contracted by the E-Government Innovation Center EGIZ, a
+ * joint initiative of the Federal Chancellery Austria and Graz University of
+ * Technology.
+ *
+ * Licensed under the EUPL, Version 1.1 or - as soon they will be approved by
+ * the European Commission - subsequent versions of the EUPL (the "Licence");
+ * You may not use this work except in compliance with the Licence.
+ * You may obtain a copy of the Licence at:
+ * http://www.osor.eu/eupl/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the Licence is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the Licence for the specific language governing permissions and
+ * limitations under the Licence.
+ *
+ * This product combines work with different licenses. See the "NOTICE" text
+ * file for details on the various modules and licenses.
+ * The "NOTICE" text file is part of the distribution. Any derivative works
+ * that you distribute must include a readable copy of the "NOTICE" text file.
+ */
+package at.knowcenter.wag.egov.egiz.sig;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+
+import org.junit.Test;
+
+import at.knowcenter.wag.egov.egiz.sig.SignatureTypes.State;
+
+/**
+ * Tests regarding new signature profile states "verify_only" and "sign_only".
+ *
+ * @author Datentechnik Innovation GmbH
+ */
+public class SignatureTypesStateTest {
+
+ @Test
+ public void testFromString() {
+ assertEquals(State.ON, State.fromString("on"));
+ assertEquals(State.ON, State.fromString("ON"));
+ assertEquals(State.ON, State.fromString("On"));
+ assertEquals(State.ON, State.fromString("enabled"));
+ assertEquals(State.ON, State.fromString("yes"));
+ assertEquals(State.ON, State.fromString("true"));
+
+ assertEquals(State.SIGN_ONLY, State.fromString("sign_only"));
+ assertEquals(State.SIGN_ONLY, State.fromString("signonly"));
+ assertEquals(State.SIGN_ONLY, State.fromString("sign-only"));
+ assertEquals(State.SIGN_ONLY, State.fromString("SignOnly"));
+ assertEquals(State.SIGN_ONLY, State.fromString("SIGN_ONLY"));
+ assertEquals(State.SIGN_ONLY, State.fromString("sign only"));
+ assertEquals(State.SIGN_ONLY, State.fromString("sign"));
+
+ assertEquals(State.VERIFY_ONLY, State.fromString("verify_only"));
+ assertEquals(State.VERIFY_ONLY, State.fromString("verifyonly"));
+ assertEquals(State.VERIFY_ONLY, State.fromString("verify-only"));
+ assertEquals(State.VERIFY_ONLY, State.fromString("Verifyonly"));
+ assertEquals(State.VERIFY_ONLY, State.fromString("VERIFY_ONLY"));
+ assertEquals(State.VERIFY_ONLY, State.fromString("verify only"));
+ assertEquals(State.VERIFY_ONLY, State.fromString("verify"));
+ }
+
+ @Test
+ public void testDefaultState() {
+ assertEquals(State.OFF, State.fromString(""));
+ assertEquals(State.OFF, State.fromString(null));
+ assertEquals(State.OFF, State.fromString("off"));
+ assertEquals(State.OFF, State.fromString("OFF"));
+ assertEquals(State.OFF, State.fromString("foo"));
+ }
+
+ @Test
+ public void testIn() {
+ assertTrue(State.ON.in(State.values()));
+ assertTrue(State.ON.in(State.ON));
+ assertFalse(State.ON.in());
+ assertFalse(State.ON.in((State) null));
+ assertFalse(State.ON.in(State.OFF, State.VERIFY_ONLY, State.SIGN_ONLY));
+ }
+
+ @Test
+ public void testCanSign() {
+ assertTrue(State.ON.canSign());
+ assertFalse(State.OFF.canSign());
+ assertTrue(State.SIGN_ONLY.canSign());
+ assertFalse(State.VERIFY_ONLY.canSign());
+ }
+
+ @Test
+ public void testCanVerify() {
+ assertTrue(State.ON.canVerify());
+ assertFalse(State.OFF.canVerify());
+ assertFalse(State.SIGN_ONLY.canVerify());
+ assertTrue(State.VERIFY_ONLY.canVerify());
+ }
+
+}
diff --git a/pdf-as-lib/src/test/java/at/knowcenter/wag/egov/egiz/sig/signaturelayout/SignatureLayoutHandlerFactoryTests.java b/pdf-as-lib/src/test/java/at/knowcenter/wag/egov/egiz/sig/signaturelayout/SignatureLayoutHandlerFactoryTests.java
new file mode 100644
index 0000000..45572bd
--- /dev/null
+++ b/pdf-as-lib/src/test/java/at/knowcenter/wag/egov/egiz/sig/signaturelayout/SignatureLayoutHandlerFactoryTests.java
@@ -0,0 +1,131 @@
+package at.knowcenter.wag.egov.egiz.sig.signaturelayout;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
+import java.io.File;
+
+import org.junit.BeforeClass;
+import org.junit.Test;
+
+import at.gv.egiz.pdfas.PdfAsFactory;
+import at.gv.egiz.pdfas.api.exceptions.PdfAsException;
+import at.knowcenter.wag.egov.egiz.exceptions.ConnectorException;
+import at.knowcenter.wag.egov.egiz.exceptions.SettingsException;
+import at.knowcenter.wag.egov.egiz.sig.signaturelayout.atrust.ATrustSignatureLayoutHandler;
+import at.knowcenter.wag.egov.egiz.sig.signaturelayout.mocca.MOCCASignatureLayout10Handler;
+import at.knowcenter.wag.egov.egiz.sig.signaturelayout.mocca.MoccaXades14SignatureLayoutHandler;
+import at.knowcenter.wag.egov.egiz.sig.signaturelayout.mocca.OldMOCCASignatureLayoutHandler;
+
+/**
+ * Tests for {@link SignatureLayoutHandlerFactory} providing signature layout handlers for various types of citizen card
+ * software.
+ *
+ * @author Datentechnik Innovation GmbH
+ */
+public class SignatureLayoutHandlerFactoryTests {
+
+ /**
+ * Instantiates the PDF-AS api which will be used for tests.
+ *
+ * @throws PdfAsException
+ * In case the PDF-AS api could not be instantiated (e.g. due to configuration issues).
+ */
+ @BeforeClass
+ public static void init() throws PdfAsException {
+
+ // determine config dir
+ File configFile = new File(SignatureLayoutHandlerFactoryTests.class.getResource(
+ "/at/knowcenter/wag/egov/egiz/signaturelayout/cfg/config.properties").getFile());
+ assertTrue(configFile.exists() && configFile.canRead());
+
+ // determine work dir
+ File workPath = configFile.getParentFile().getParentFile();
+
+ // Note: calculating signature positions without applying signatures is not covered by the api interface.
+ // Therefore we instantiate the api only in order to get the configuration be loaded.
+ PdfAsFactory.createPdfAs(workPath);
+ }
+
+ @Test
+ public void testSupportForMoccaWithXAdES14() throws ConnectorException, SettingsException {
+ String bkuIdentifier = "citizen-card-environment/1.2 MOCCA/1.3.9-SNAPSHOT-r1159-X14 SignatureLayout/1.0";
+ SignatureLayoutHandler signatureLayoutHandler = SignatureLayoutHandlerFactory.getSignatureLayoutHandlerInstance(bkuIdentifier);
+ assertTrue(signatureLayoutHandler instanceof MoccaXades14SignatureLayoutHandler);
+
+ bkuIdentifier = "citizen-card-environment/1.2 MOCCA/1.3.9-r1234-X14 SignatureLayout/1.0";
+ signatureLayoutHandler = SignatureLayoutHandlerFactory.getSignatureLayoutHandlerInstance(bkuIdentifier);
+ assertTrue(signatureLayoutHandler instanceof MoccaXades14SignatureLayoutHandler);
+
+ bkuIdentifier = "citizen-card-environment/1.2 MOCCA/1.3.9-SNAPSHOT-r1159-X14 SignatureLayout/1.1";
+ signatureLayoutHandler = SignatureLayoutHandlerFactory.getSignatureLayoutHandlerInstance(bkuIdentifier);
+ assertTrue(signatureLayoutHandler instanceof MoccaXades14SignatureLayoutHandler);
+
+ bkuIdentifier = "citizen-card-environment/1.2 MOCCA/1.3.9-r1234-X14 SignatureLayout/1.1";
+ signatureLayoutHandler = SignatureLayoutHandlerFactory.getSignatureLayoutHandlerInstance(bkuIdentifier);
+ assertTrue(signatureLayoutHandler instanceof MoccaXades14SignatureLayoutHandler);
+ }
+
+ @Test
+ public void testSupportForMoccaWithSignatureLayout10() throws ConnectorException, SettingsException {
+ String bkuIdentifier = "citizen-card-environment/1.2 MOCCA/1.3.8-r1111 SignatureLayout/1.0";
+ SignatureLayoutHandler signatureLayoutHandler = SignatureLayoutHandlerFactory.getSignatureLayoutHandlerInstance(bkuIdentifier);
+ assertTrue(signatureLayoutHandler instanceof MOCCASignatureLayout10Handler);
+
+ bkuIdentifier = "citizen-card-environment/1.2 MOCCA/1.3.8-r1111 SignatureLayout/1.1";
+ try {
+ SignatureLayoutHandlerFactory.getSignatureLayoutHandlerInstance(bkuIdentifier);
+ fail("ConnectorException expected; SignatureLayout 1.1 not supported.");
+ } catch (ConnectorException e) {
+ assertEquals(373, e.getErrorCode());
+ }
+ }
+
+ @Test
+ public void testSupportForMoccaWithLegacySignatureLayout() throws ConnectorException, SettingsException {
+ String bkuIdentifier = "citizen-card-environment/1.2 MOCCA/1.0.0-r123";
+ SignatureLayoutHandler signatureLayoutHandler = SignatureLayoutHandlerFactory.getSignatureLayoutHandlerInstance(bkuIdentifier);
+ assertTrue(signatureLayoutHandler instanceof OldMOCCASignatureLayoutHandler);
+ }
+
+ @Test
+ public void testSupportForATrustLocal133() throws ConnectorException, SettingsException {
+ String bkuIdentifier = "citizen-card-environment/1.2 asignSecurityLayer/1.3.3";
+ SignatureLayoutHandler signatureLayoutHandler = SignatureLayoutHandlerFactory.getSignatureLayoutHandlerInstance(bkuIdentifier);
+ assertTrue(signatureLayoutHandler instanceof ATrustSignatureLayoutHandler);
+ }
+
+ @Test
+ public void testNonSupportForATrustLocal140() throws ConnectorException, SettingsException {
+ String bkuIdentifier = "citizen-card-environment/1.2 asignSecurityLayer/1.4.0";
+ try {
+ SignatureLayoutHandlerFactory.getSignatureLayoutHandlerInstance(bkuIdentifier);
+ fail("ConnectorException expected; A.Trust BKU 1.4.0 not supported.");
+ } catch (ConnectorException e) {
+ assertEquals(373, e.getErrorCode());
+ }
+ }
+
+ @Test
+ public void testSupportForATrustLocal141() throws ConnectorException, SettingsException {
+ String bkuIdentifier = "citizen-card-environment/1.2 asignSecurityLayer/1.4.1";
+ SignatureLayoutHandler signatureLayoutHandler = SignatureLayoutHandlerFactory.getSignatureLayoutHandlerInstance(bkuIdentifier);
+ assertTrue(signatureLayoutHandler instanceof ATrustSignatureLayoutHandler);
+ }
+
+ @Test
+ public void testSupportForATrustLocal142() throws ConnectorException, SettingsException {
+ String bkuIdentifier = "citizen-card-environment/1.2 asignSecurityLayer/1.4.2";
+ SignatureLayoutHandler signatureLayoutHandler = SignatureLayoutHandlerFactory.getSignatureLayoutHandlerInstance(bkuIdentifier);
+ assertTrue(signatureLayoutHandler instanceof ATrustSignatureLayoutHandler);
+ }
+
+ @Test
+ public void testSupportForATrustMobile110() throws ConnectorException, SettingsException {
+ String bkuIdentifier = "citizen-card-environment/1.2 asignMobileBku/1.1.0";
+ SignatureLayoutHandler signatureLayoutHandler = SignatureLayoutHandlerFactory.getSignatureLayoutHandlerInstance(bkuIdentifier);
+ assertTrue(signatureLayoutHandler instanceof ATrustSignatureLayoutHandler);
+ }
+
+}
diff --git a/pdf-as-lib/src/test/resources/at/knowcenter/wag/egov/egiz/cfg/circular/profile.1.properties b/pdf-as-lib/src/test/resources/at/knowcenter/wag/egov/egiz/cfg/circular/profile.1.properties
new file mode 100644
index 0000000..7b6deb7
--- /dev/null
+++ b/pdf-as-lib/src/test/resources/at/knowcenter/wag/egov/egiz/cfg/circular/profile.1.properties
@@ -0,0 +1 @@
+include = profile.2.properties
diff --git a/pdf-as-lib/src/test/resources/at/knowcenter/wag/egov/egiz/cfg/circular/profile.2.properties b/pdf-as-lib/src/test/resources/at/knowcenter/wag/egov/egiz/cfg/circular/profile.2.properties
new file mode 100644
index 0000000..031a266
--- /dev/null
+++ b/pdf-as-lib/src/test/resources/at/knowcenter/wag/egov/egiz/cfg/circular/profile.2.properties
@@ -0,0 +1 @@
+include = profile.1.properties
diff --git a/pdf-as-lib/src/test/resources/at/knowcenter/wag/egov/egiz/cfg/config_nested_includes.properties b/pdf-as-lib/src/test/resources/at/knowcenter/wag/egov/egiz/cfg/config_nested_includes.properties
new file mode 100644
index 0000000..d9beb95
--- /dev/null
+++ b/pdf-as-lib/src/test/resources/at/knowcenter/wag/egov/egiz/cfg/config_nested_includes.properties
@@ -0,0 +1,252 @@
+# PDF-AS Amtssignaturen Beispiel Konfigurationsdatei
+#
+# Diese Konfigurationsdatei gilt als Referenzbeispiel einer
+# Konfigurationsdatei für die PDF-AS Applikation.
+##############################################################
+
+
+# Beim Signieren: Überprüfung ob Dokument PDF-Version 1.4 (oder weniger) hat
+strict_mode=false
+
+# Beim Signieren:
+# Wenn das Dokument nicht verarbeitet werden kann wird versucht es
+# zuerst zu korrigieren und dann das korrigierte Dokument zu signieren.
+correct_document_if_necessary=true
+
+# Beim Verifizieren:
+# Wenn das Dokument nicht verarbeitet werden kann wird versucht es
+# zuerst zu korrigieren und dann das korrigierte Dokument zu verifizieren.
+# Dies kann nur für textuelle Signaturen erfolgreich sein.
+correct_document_on_verify_if_necessary=true
+
+# Wenn ein Dokument korrigiert werden soll:
+# Gibt an mit welchem Corrector ein zu korrigierendes Dokument korrigiert wird:
+# internal - das Dokument wird mit dem "internen" iText Corrector korrigiert
+# external - das Dokument wird durch einen externen Kommandozeilenaufruf korrigiert.
+# Hinweis: ein externes Programm aufzurufen birgt gewisse Risiken in sich
+# und sollte daher möglichst nicht verwendet werden.
+corrector=internal
+
+# Kommandozeile für den externen Connector.
+# Die Variablen ##input_document## bzw. ##output_document## werden von PDF-AS
+# durch die absoluten Pfad- und Dateinamen des zu korrigierenden bzw. des
+# korrigierten Dokuments ersetzt.
+# Als Pfad-Separator sollte '/' verwendet werden.
+external_corrector_commandline=C:/correct.exe "##input_document##" "##output_document##"
+
+# Timeout (ms) für die Ausführung des externen Correctors.
+# Das Kommando wird abgebrochen, wenn das Timeout erreicht wird bevor
+# das Kommando abgearbeitet wurde.
+# Achtung: Es besteht allerdings keine Garantie, dass der Korrekturvorgang auch tatsächlich
+# durch ein Timeout abgebrochen wird. Dies ist im Wesentlichen abhängig von der Beschaffenheit
+# des Korrekturprogramms sowie vom verwendeten Betriebssystem.
+external_corrector_timeout=15000
+
+# Überprüfe Korrektheit des Dokuments
+# bei binary_only=true: Fehler falls textuelle Signatur
+# bei assume_only_signature_blocks=false: Fehler falls inkremetelle Updates nach Signatur
+# In beiden Fällen wird check_old_textual_sigs berücksichtigt.
+check_document=true
+
+# Falls der letzte inkrementelle Updateblock keine Signatur enthält würde sofern
+# check_document=true gesetzt ist eine Exception geworfen werden und die Prüfung
+# abgebrochen werden. Mit diesem Schalter ist es möglich, diese Exception zu
+# unterdrücken, um die Auswertung extern vornehmen zu können (standard: false)
+# supress_exception_when_last_iublock_is_no_signature=false
+
+# Aktiviert, oder deaktiviert grundsätzlich das - potenziell zeit- und ressourcen-aufwaendige
+# Suchen nach Platzhalter-Bildern in PDF-Dokumenten
+# Festlegung fuer einzelnes Profil
+# sig_obj.PROFILE.enable_placeholder_search=[true|false]
+# Die Suche ist standardmässig aus Sicherheitsgruenden deaktiviert (Defaultwert hier = false)
+# Es muss bewusst sein, dass über einen Platzhalter benutzerseitig bestimmte Profile zur Signatur
+# ausgewaehlt werden koennen!
+enable_placeholder_search=false
+
+# VerificationFilterParameters
+binary_only=false
+assume_only_signature_blocks=false
+check_old_textual_sigs=true
+
+# MOA Detached Signieren aus Konsole möglich - zurzeit möglich nur mit BKU
+moa.sign.console.detached.enabled=false
+
+
+#############################################
+# Signaturdienste
+
+# lokale BKU
+bku.available_for_web=true
+bku.available_for_commandline=true
+
+bku.sign.url=http://127.0.0.1:3495/http-security-layer-request
+#bku.sign.url=https://127.0.0.1:3496/https-security-layer-request
+bku.sign.KeyboxIdentifier=SecureSignatureKeypair
+
+# BKU Verifikation
+bku.verify.url=http://127.0.0.1:3495/http-security-layer-request
+#bku.verify.url=https://127.0.0.1:3496/https-security-layer-request
+
+# Online BKU (MOCCA)
+moc.available_for_web=true
+moc.available_for_commandline=false
+
+# MOCCA Signatur
+moc.sign.url=http://127.0.0.1:8080/bkuonline/http-security-layer-request
+moc.sign.KeyboxIdentifier=SecureSignatureKeypair
+
+# Handy Signatur
+mobile.sign.url=https://www.handy-signatur.at/mobile/https-security-layer-request/default.aspx
+mobile.sign.KeyboxIdentifier=SecureSignatureKeypair
+
+# Handy Signatur (Test)
+mobiletest.sign.url=https://test1.a-trust.at/https-security-layer-request/default.aspx
+mobiletest.sign.KeyboxIdentifier=SecureSignatureKeypair
+
+# MOA
+moa.available_for_web=true
+moa.available_for_commandline=true
+
+# MOA Signatur
+moa.sign.url=http://java-dev.datentechnik-innovation.com:8080/moa-spss/services/SignatureCreation
+moa.sign.KeyIdentifier=KG_Test-Signatur_RSA
+
+# MOA Verifikation
+moa.verify.url=http://java-dev.datentechnik-innovation.com:8080/moa-spss/services/SignatureVerification
+moa.verify.TrustProfileID=SecureSignature
+
+
+#############################################
+# aktivierte/deaktivierte Signaturprofile
+
+include = profiles.default.properties
+include.amtssignatur = profiles.amtssignatur.properties
+include.baik = profiles.baik.properties
+include.deprecated = profiles.deprecated.properties
+
+
+#####################################################
+# Standardfeldlängen der Felder für die Binärsignatur
+defaults.phlength.SIG_DATE=70
+defaults.phlength.SIG_NUMBER=70
+defaults.phlength.SIG_ISSUER=150
+defaults.phlength.SIG_VALUE=350
+defaults.phlength.SIG_ID=70
+defaults.phlength.SIG_NAME=210
+defaults.phlength.SIG_ALG=100
+# Es möglich in die Werte (value) von eigens definierten Tabellenspalten dynamisch auf Teile des
+# verwendeten Zertifikats zuzugreifen. Konkret kann auf die einzelnen RDNs Teile des Issuer DN
+# und des Subject DN des Signaturzertifikats wie im folgenden Beispiel illustriert zugegriffen
+# werden:
+# (1) sig_obj.PROFIL.value.SIG_SUBJECT= ${subject.CN}${subject.O != null ? ("\n" + subject.O) : ""}
+# (2) sig_obj.PROFIL.value.SIG_SUBJECT= ${subject.T \!\= null ? (subject.T + " ") \: ""}${subject.CN}
+# Beispiel (1) gibt die Organisation des Unterzeichners an, Beispiel (2) Titel und Name
+# Die Notation ${..} ermöglicht die dynamische Auswertung eines Ausdrucks. Verfügbar sind "subject"
+# und "issuer" und die im Zertifikat DN vorhandenen RDNs.
+# Achtung: Für die binäre Signatur funktioniert diese Ersetzung nur für Werte, die als Replacement
+# definiert wurden. Konkret bedeutet dies, dass ein phlength Platzhalter definiert sein muss.
+# Als Maximalwerte sind in RFC5280 folgendes definiert:
+# CommonName ::= PrintableString (SIZE (1..ub-common-name-length))
+# X520Title ::= CHOICE {
+# teletexString TeletexString (SIZE (1..ub-title)),
+# printableString PrintableString (SIZE (1..ub-title)),
+# etc.}
+# OrganizationName ::= PrintableString
+# (SIZE (1..ub-organization-name-length))
+# mit jeweils ub-common-name, ub-title INTEGER oder ub-organization-name-length INTEGER ::= 64
+# Für das oben angeführte Beispiel ist daher die folgende Definition erforderlich um die Ersetzungen
+# für Binärsignaturen zu aktivieren:
+# (1) sig_obj.PROFIL.phlength.SIG_SUBJECT=64 (Extraktion der Organisation)
+# (2) sig_obj.PROFIL.phlength.SIG_SUBJECT=128 (Titel + Name)
+# bzw. global defaults.phlength.SIG_SUBJECT=64 (Fall (1) bzw. 128 für Fall (2))
+defaults.phlength.SIG_SUBJECT=128
+
+# Binärsignatur: reservierter Platz für Zertifikat
+# profilweise: sig_obj.PROFILE.phlength.certificate=xyz
+defaults.phlength.certificate=10000
+
+# Binärsignatur: reservierte Platz für Zeitstempel
+# profilweise: sig_obj.PROFILE.phlength.timestamp=xyz
+defaults.phlength.timestamp=5000
+
+# Standardgröße des Fensters innerhalb dessen Zeilenumbrüche gesetzt werden dürfe.
+# profilweise: sig_obj.PROFILE.phlength.line_break_tolerance=xyz
+defaults.phlength.line_break_tolerance=10
+
+# Falls die Breite eines Signaturblocks definiert wird (über API, Commandline oder über das Profil),
+# die unterhalb eines sinnvollen Wertes liegt, dann wird im Log eine Warnung ausgegeben, da
+# Signaturblöcke unter Umständen nicht mehr sinnvoll dargestellt werden können.
+# Der Standard-Schwellwert für diese Warnungen (= 150) kann global oder profilweise festgelegt
+# werden (z.B. um die Warnung zu deaktivieren, kann der Wert auf 0 gesetzt werden).
+# default.signature_block_width_warning_threshold=xyz
+# sig_obj.PROFILE.signature_block_width_warning_threshold=xyz
+
+# PDF/A-1b Unterstützung für alle Profile einschalten
+default.SIG_PDFA1B_VALID=false
+
+# BAIK-Signatur Unterstützung für alle Profile einschalten
+default.SIG_BAIK_ENABLED=false
+
+
+###############################################
+# Signaturkennzeichnung (für Adobe Acrobat)
+#
+# Jede dieser globalen Einstellungen kann im jeweiligen Profil individuell gesetzt werden.
+# z.B. sig_obj.PROFILE.adobeSignText.binary=Mein Signator
+
+# Adobe Signaturkennzeichnung ein-/ausschalten
+default.adobeSignEnabled=true
+
+# Standard Name für die Signaturkennzeichnung (binär)
+default.adobeSignText.binary=PDF-AS
+
+# Standard Name fuer die Signaturkennzeichnung (textuell)
+default.adobeSignText.textual=PDF-AS
+
+# Standard-Name für die PDF-Signatur
+default.adobeSignFieldValue=PDF-AS Signatur
+
+# Standardwert für "Reason"-Feld der jeweiligen Signatur
+default.adobeSignReasonValue=Informationen zur Prüfung finden Sie unter http://www.signaturpruefung.gv.at
+
+# Standard Prüflink für die Adobe Signaturkennzeichnung (nur relevant falls Adobe Plugin für Prüfung verwendet wird)
+default.verifyURL=http://www.signaturpruefung.gv.at
+
+# Standard Alternativer Text für den Signaturblock (WAI) (globale Einstellung)
+# profilweise: sig_obj.PROFILE.sigLogoAltText=VALUE
+default.sigLogoAltText=Abgebildet ist eine Standard-Signaturbildmarke.
+
+# Profilspezifische Festlegung der Position der Signaturmarke
+# sig_obj.PROFILE.pos=[p:["auto"|"new"|pagenumber];][x:["auto"|floatvalue];][y:["auto"|floatvalue];][w:["auto"|width_floatvalue];][f:footerheight_floatvalue]
+# sig_obj.PROFILE.pos=p:1;x:40.0;y:800.0;w:400.0;f:80
+
+# font definition: face,height,weight
+# default_font: HELVETICA,8,NORMAL
+# font_face: HELVETICA | TIMES_ROMAN | COURIER
+# font_height: float value
+# font_weight: NORMAL | BOLD | ITALIC | BOLDITALIC | UNDERLINE | STRIKETHRU
+
+# Horizontale Ausrichtung
+# sig_obj.PROFILE.table.TABLE_NAME.Style.halign=[left|center|right]
+# sig_obj.PROFILE.table.TABLE_NAME.Style.valuehalign=[left|center|right]
+# sig_obj.PROFILE.table.TABLE_NAME.Style.imagehalign=[left|center|right]
+
+# Vertikale Ausrichtung
+# sig_obj.PROFILE.table.TABLE_NAME.Style.valign=[bottom|middle|top]
+# sig_obj.PROFILE.table.TABLE_NAME.Style.valuevalign=[bottom|middle|top]
+# sig_obj.PROFILE.table.TABLE_NAME.Style.imagevalign=[bottom|middle|top]
+
+
+
+#############################################
+# start additional LDAP-Mappings
+# note: ldap_mapping.xxx.serial_attr may be omitted if value is "eidCertificateSerialNumber"
+
+# A-Trust Sample
+#ldap_mapping.asign_prem_sig01.issuer_name=CN=a-sign-Premium-Sig-01,OU=a-sign-Premium-Sig-01,O=A-Trust Ges. f. Sicherheitssysteme im elektr. Datenverkehr GmbH,C=AT
+#ldap_mapping.asign_prem_sig01.url=ldap://ldap.a-trust.at/ou=a-sign-Premium-Sig-01,o=A-Trust,c=at
+#ldap_mapping.asign_prem_sig01.serial_attr=eidCertificateSerialNumber
+
+# end LDAP-Mappings
+#############################################
+
diff --git a/pdf-as-lib/src/test/resources/at/knowcenter/wag/egov/egiz/cfg/config_noincludes.properties b/pdf-as-lib/src/test/resources/at/knowcenter/wag/egov/egiz/cfg/config_noincludes.properties
new file mode 100644
index 0000000..764534a
--- /dev/null
+++ b/pdf-as-lib/src/test/resources/at/knowcenter/wag/egov/egiz/cfg/config_noincludes.properties
@@ -0,0 +1,1643 @@
+# PDF-AS Amtssignaturen Beispiel Konfigurationsdatei
+#
+# Diese Konfigurationsdatei gilt als Referenzbeispiel einer
+# Konfigurationsdatei für die PDF-AS Applikation.
+##############################################################
+
+
+# Beim Signieren: Überprüfung ob Dokument PDF-Version 1.4 (oder weniger) hat
+strict_mode=false
+
+# Beim Signieren:
+# Wenn das Dokument nicht verarbeitet werden kann wird versucht es
+# zuerst zu korrigieren und dann das korrigierte Dokument zu signieren.
+correct_document_if_necessary=true
+
+# Beim Verifizieren:
+# Wenn das Dokument nicht verarbeitet werden kann wird versucht es
+# zuerst zu korrigieren und dann das korrigierte Dokument zu verifizieren.
+# Dies kann nur für textuelle Signaturen erfolgreich sein.
+correct_document_on_verify_if_necessary=true
+
+# Wenn ein Dokument korrigiert werden soll:
+# Gibt an mit welchem Corrector ein zu korrigierendes Dokument korrigiert wird:
+# internal - das Dokument wird mit dem "internen" iText Corrector korrigiert
+# external - das Dokument wird durch einen externen Kommandozeilenaufruf korrigiert.
+# Hinweis: ein externes Programm aufzurufen birgt gewisse Risiken in sich
+# und sollte daher möglichst nicht verwendet werden.
+corrector=internal
+
+# Kommandozeile für den externen Connector.
+# Die Variablen ##input_document## bzw. ##output_document## werden von PDF-AS
+# durch die absoluten Pfad- und Dateinamen des zu korrigierenden bzw. des
+# korrigierten Dokuments ersetzt.
+# Als Pfad-Separator sollte '/' verwendet werden.
+external_corrector_commandline=C:/correct.exe "##input_document##" "##output_document##"
+
+# Timeout (ms) für die Ausführung des externen Correctors.
+# Das Kommando wird abgebrochen, wenn das Timeout erreicht wird bevor
+# das Kommando abgearbeitet wurde.
+# Achtung: Es besteht allerdings keine Garantie, dass der Korrekturvorgang auch tatsächlich
+# durch ein Timeout abgebrochen wird. Dies ist im Wesentlichen abhängig von der Beschaffenheit
+# des Korrekturprogramms sowie vom verwendeten Betriebssystem.
+external_corrector_timeout=15000
+
+# Überprüfe Korrektheit des Dokuments
+# bei binary_only=true: Fehler falls textuelle Signatur
+# bei assume_only_signature_blocks=false: Fehler falls inkremetelle Updates nach Signatur
+# In beiden Fällen wird check_old_textual_sigs berücksichtigt.
+check_document=true
+
+# Falls der letzte inkrementelle Updateblock keine Signatur enthält würde sofern
+# check_document=true gesetzt ist eine Exception geworfen werden und die Prüfung
+# abgebrochen werden. Mit diesem Schalter ist es möglich, diese Exception zu
+# unterdrücken, um die Auswertung extern vornehmen zu können (standard: false)
+# supress_exception_when_last_iublock_is_no_signature=false
+
+# Aktiviert, oder deaktiviert grundsätzlich das - potenziell zeit- und ressourcen-aufwaendige
+# Suchen nach Platzhalter-Bildern in PDF-Dokumenten
+# Festlegung fuer einzelnes Profil
+# sig_obj.PROFILE.enable_placeholder_search=[true|false]
+# Die Suche ist standardmässig aus Sicherheitsgruenden deaktiviert (Defaultwert hier = false)
+# Es muss bewusst sein, dass über einen Platzhalter benutzerseitig bestimmte Profile zur Signatur
+# ausgewaehlt werden koennen!
+enable_placeholder_search=false
+
+# VerificationFilterParameters
+binary_only=false
+assume_only_signature_blocks=false
+check_old_textual_sigs=true
+
+# MOA Detached Signieren aus Konsole möglich - zurzeit möglich nur mit BKU
+moa.sign.console.detached.enabled=false
+
+
+#############################################
+# Signaturdienste
+
+# lokale BKU
+bku.available_for_web=true
+bku.available_for_commandline=true
+
+bku.sign.url=http://127.0.0.1:3495/http-security-layer-request
+#bku.sign.url=https://127.0.0.1:3496/https-security-layer-request
+bku.sign.KeyboxIdentifier=SecureSignatureKeypair
+
+# BKU Verifikation
+bku.verify.url=http://127.0.0.1:3495/http-security-layer-request
+#bku.verify.url=https://127.0.0.1:3496/https-security-layer-request
+
+# Online BKU (MOCCA)
+moc.available_for_web=true
+moc.available_for_commandline=false
+
+# MOCCA Signatur
+moc.sign.url=http://127.0.0.1:8080/bkuonline/http-security-layer-request
+moc.sign.KeyboxIdentifier=SecureSignatureKeypair
+
+# Handy Signatur
+mobile.sign.url=https://www.handy-signatur.at/mobile/https-security-layer-request/default.aspx
+mobile.sign.KeyboxIdentifier=SecureSignatureKeypair
+
+# Handy Signatur (Test)
+mobiletest.sign.url=https://test1.a-trust.at/https-security-layer-request/default.aspx
+mobiletest.sign.KeyboxIdentifier=SecureSignatureKeypair
+
+# MOA
+moa.available_for_web=true
+moa.available_for_commandline=true
+
+# MOA Signatur
+moa.sign.url=http://java-dev.datentechnik-innovation.com:8080/moa-spss/services/SignatureCreation
+moa.sign.KeyIdentifier=KG_Test-Signatur_RSA
+
+# MOA Verifikation
+moa.verify.url=http://java-dev.datentechnik-innovation.com:8080/moa-spss/services/SignatureVerification
+moa.verify.TrustProfileID=SecureSignature
+
+
+#############################################
+# aktivierte/deaktivierte Signaturprofile
+
+sig_obj.type.default=SIGNATURBLOCK_DE
+
+sig_obj.types.SIGNATURBLOCK_DE=on
+sig_obj.types.SIGNATURBLOCK_DE_NOTE=on
+sig_obj.types.SIGNATURBLOCK_EN=on
+sig_obj.types.SIGNATURBLOCK_EN_NOTE=on
+
+sig_obj.types.AMTSSIGNATURBLOCK_DE=on
+sig_obj.types.AMTSSIGNATURBLOCK_EN=on
+
+sig_obj.types.INVISIBLE=on
+
+sig_obj.types.BAIK_ARCHIV_SIGNATUR=on
+sig_obj.types.BAIK_URKUNDE_SIGNATUR=on
+
+sig_obj.types.SIGNATURBLOCK_DE_PDFA=on
+sig_obj.types.SIGNATURBLOCK_DE_PDFA_NOTE=on
+sig_obj.types.SIGNATURBLOCK_EN_PDFA=on
+sig_obj.types.SIGNATURBLOCK_EN_PDFA_NOTE=on
+
+sig_obj.types.SIGNATURBLOCK_MINIMAL_DE=on
+sig_obj.types.SIGNATURBLOCK_MINIMAL_EN=on
+
+sig_obj.types.SIGNATURBLOCK_SMALL_DE=on
+sig_obj.types.SIGNATURBLOCK_SMALL_DE_NOTE=on
+sig_obj.types.SIGNATURBLOCK_SMALL_EN=on
+sig_obj.types.SIGNATURBLOCK_SMALL_EN_NOTE=on
+
+sig_obj.types.SIGNATURBLOCK_DE_DEPRECATED=on
+sig_obj.types.SIGNATURBLOCK_EN_DEPRECATED=on
+
+sig_obj.types.AMTSSIGNATURBLOCK_DE_DEPRECATED=on
+sig_obj.types.AMTSSIGNATURBLOCK_EN_DEPRECATED=on
+
+sig_obj.types.VARIABLER_AMTSSIGNATURBLOCK_DE=on
+
+
+#####################################################
+# Standardfeldlängen der Felder für die Binärsignatur
+defaults.phlength.SIG_DATE=70
+defaults.phlength.SIG_NUMBER=70
+defaults.phlength.SIG_ISSUER=150
+defaults.phlength.SIG_VALUE=350
+defaults.phlength.SIG_ID=70
+defaults.phlength.SIG_NAME=210
+defaults.phlength.SIG_ALG=100
+# Es möglich in die Werte (value) von eigens definierten Tabellenspalten dynamisch auf Teile des
+# verwendeten Zertifikats zuzugreifen. Konkret kann auf die einzelnen RDNs Teile des Issuer DN
+# und des Subject DN des Signaturzertifikats wie im folgenden Beispiel illustriert zugegriffen
+# werden:
+# (1) sig_obj.PROFIL.value.SIG_SUBJECT= ${subject.CN}${subject.O != null ? ("\n" + subject.O) : ""}
+# (2) sig_obj.PROFIL.value.SIG_SUBJECT= ${subject.T \!\= null ? (subject.T + " ") \: ""}${subject.CN}
+# Beispiel (1) gibt die Organisation des Unterzeichners an, Beispiel (2) Titel und Name
+# Die Notation ${..} ermöglicht die dynamische Auswertung eines Ausdrucks. Verfügbar sind "subject"
+# und "issuer" und die im Zertifikat DN vorhandenen RDNs.
+# Achtung: Für die binäre Signatur funktioniert diese Ersetzung nur für Werte, die als Replacement
+# definiert wurden. Konkret bedeutet dies, dass ein phlength Platzhalter definiert sein muss.
+# Als Maximalwerte sind in RFC5280 folgendes definiert:
+# CommonName ::= PrintableString (SIZE (1..ub-common-name-length))
+# X520Title ::= CHOICE {
+# teletexString TeletexString (SIZE (1..ub-title)),
+# printableString PrintableString (SIZE (1..ub-title)),
+# etc.}
+# OrganizationName ::= PrintableString
+# (SIZE (1..ub-organization-name-length))
+# mit jeweils ub-common-name, ub-title INTEGER oder ub-organization-name-length INTEGER ::= 64
+# Für das oben angeführte Beispiel ist daher die folgende Definition erforderlich um die Ersetzungen
+# für Binärsignaturen zu aktivieren:
+# (1) sig_obj.PROFIL.phlength.SIG_SUBJECT=64 (Extraktion der Organisation)
+# (2) sig_obj.PROFIL.phlength.SIG_SUBJECT=128 (Titel + Name)
+# bzw. global defaults.phlength.SIG_SUBJECT=64 (Fall (1) bzw. 128 für Fall (2))
+defaults.phlength.SIG_SUBJECT=128
+
+# Binärsignatur: reservierter Platz für Zertifikat
+# profilweise: sig_obj.PROFILE.phlength.certificate=xyz
+defaults.phlength.certificate=10000
+
+# Binärsignatur: reservierte Platz für Zeitstempel
+# profilweise: sig_obj.PROFILE.phlength.timestamp=xyz
+defaults.phlength.timestamp=5000
+
+# Standardgröße des Fensters innerhalb dessen Zeilenumbrüche gesetzt werden dürfe.
+# profilweise: sig_obj.PROFILE.phlength.line_break_tolerance=xyz
+defaults.phlength.line_break_tolerance=10
+
+# Falls die Breite eines Signaturblocks definiert wird (über API, Commandline oder über das Profil),
+# die unterhalb eines sinnvollen Wertes liegt, dann wird im Log eine Warnung ausgegeben, da
+# Signaturblöcke unter Umständen nicht mehr sinnvoll dargestellt werden können.
+# Der Standard-Schwellwert für diese Warnungen (= 150) kann global oder profilweise festgelegt
+# werden (z.B. um die Warnung zu deaktivieren, kann der Wert auf 0 gesetzt werden).
+# default.signature_block_width_warning_threshold=xyz
+# sig_obj.PROFILE.signature_block_width_warning_threshold=xyz
+
+# PDF/A-1b Unterstützung für alle Profile einschalten
+default.SIG_PDFA1B_VALID=false
+
+# BAIK-Signatur Unterstützung für alle Profile einschalten
+default.SIG_BAIK_ENABLED=false
+
+
+###############################################
+# Signaturkennzeichnung (für Adobe Acrobat)
+#
+# Jede dieser globalen Einstellungen kann im jeweiligen Profil individuell gesetzt werden.
+# z.B. sig_obj.PROFILE.adobeSignText.binary=Mein Signator
+
+# Adobe Signaturkennzeichnung ein-/ausschalten
+default.adobeSignEnabled=true
+
+# Standard Name für die Signaturkennzeichnung (binär)
+default.adobeSignText.binary=PDF-AS
+
+# Standard Name fuer die Signaturkennzeichnung (textuell)
+default.adobeSignText.textual=PDF-AS
+
+# Standard-Name für die PDF-Signatur
+default.adobeSignFieldValue=PDF-AS Signatur
+
+# Standardwert für "Reason"-Feld der jeweiligen Signatur
+default.adobeSignReasonValue=Informationen zur Prüfung finden Sie unter http://www.signaturpruefung.gv.at
+
+# Standard Prüflink für die Adobe Signaturkennzeichnung (nur relevant falls Adobe Plugin für Prüfung verwendet wird)
+default.verifyURL=http://www.signaturpruefung.gv.at
+
+# Standard Alternativer Text für den Signaturblock (WAI) (globale Einstellung)
+# profilweise: sig_obj.PROFILE.sigLogoAltText=VALUE
+default.sigLogoAltText=Abgebildet ist eine Standard-Signaturbildmarke.
+
+# Profilspezifische Festlegung der Position der Signaturmarke
+# sig_obj.PROFILE.pos=[p:["auto"|"new"|pagenumber];][x:["auto"|floatvalue];][y:["auto"|floatvalue];][w:["auto"|width_floatvalue];][f:footerheight_floatvalue]
+# sig_obj.PROFILE.pos=p:1;x:40.0;y:800.0;w:400.0;f:80
+
+# font definition: face,height,weight
+# default_font: HELVETICA,8,NORMAL
+# font_face: HELVETICA | TIMES_ROMAN | COURIER
+# font_height: float value
+# font_weight: NORMAL | BOLD | ITALIC | BOLDITALIC | UNDERLINE | STRIKETHRU
+
+# Horizontale Ausrichtung
+# sig_obj.PROFILE.table.TABLE_NAME.Style.halign=[left|center|right]
+# sig_obj.PROFILE.table.TABLE_NAME.Style.valuehalign=[left|center|right]
+# sig_obj.PROFILE.table.TABLE_NAME.Style.imagehalign=[left|center|right]
+
+# Vertikale Ausrichtung
+# sig_obj.PROFILE.table.TABLE_NAME.Style.valign=[bottom|middle|top]
+# sig_obj.PROFILE.table.TABLE_NAME.Style.valuevalign=[bottom|middle|top]
+# sig_obj.PROFILE.table.TABLE_NAME.Style.imagevalign=[bottom|middle|top]
+
+
+
+###################################################################################################
+# PROFIL: Signaturblock (Deutsch) mit neuem Layout
+
+sig_obj.SIGNATURBLOCK_DE.description=Standardsignatur Deutsch mit neuem Layout
+
+sig_obj.SIGNATURBLOCK_DE.key.SIG_VALUE=Signaturwert
+#sig_obj.SIGNATURBLOCK_DE.key.SIG_NAME=Unterzeichner
+sig_obj.SIGNATURBLOCK_DE.key.SIG_SUBJECT=Unterzeichner
+sig_obj.SIGNATURBLOCK_DE.key.SIG_ISSUER=Aussteller-Zertifikat
+sig_obj.SIGNATURBLOCK_DE.key.SIG_NUMBER=Serien-Nr.
+sig_obj.SIGNATURBLOCK_DE.key.SIG_KZ=Methode
+sig_obj.SIGNATURBLOCK_DE.key.SIG_ID=Parameter
+sig_obj.SIGNATURBLOCK_DE.key.SIG_META=Prüfinformation
+sig_obj.SIGNATURBLOCK_DE.key.SIG_DATE=Datum/Zeit-UTC
+
+
+
+sig_obj.SIGNATURBLOCK_DE.value.SIG_SUBJECT=${subject.T != null ? (subject.T + " ") : ""}${subject.CN}
+
+sig_obj.SIGNATURBLOCK_DE.pos=f:80
+sig_obj.SIGNATURBLOCK_DE.adobeSignFieldValue=PDF-AS Signatur
+sig_obj.SIGNATURBLOCK_DE.adobeSignReasonValue=Signaturpruefung unter http://www.signaturpruefung.gv.at
+sig_obj.SIGNATURBLOCK_DE.verifyURL=http://www.signaturpruefung.gv.at
+
+# WAI
+sig_obj.SIGNATURBLOCK_DE.sigLogoAltText=Abgebildet ist eine Standard-Signaturbildmarke.
+
+sig_obj.SIGNATURBLOCK_DE.value.SIG_META=Signaturpruefung unter: http://www.signaturpruefung.gv.at
+sig_obj.SIGNATURBLOCK_DE.value.SIG_LABEL=./images/signatur-logo_de.png
+
+
+#---------------------- MAIN TABLE -------------------------
+sig_obj.SIGNATURBLOCK_DE.table.main.1=SIG_VALUE-cv
+sig_obj.SIGNATURBLOCK_DE.table.main.2=SIG_LABEL-i|TABLE-info
+sig_obj.SIGNATURBLOCK_DE.table.main.3=SIG_META-cv
+sig_obj.SIGNATURBLOCK_DE.table.main.4=SIG_DATE-cv
+
+
+sig_obj.SIGNATURBLOCK_DE.table.main.ColsWidth=1 6
+sig_obj.SIGNATURBLOCK_DE.table.main.Style.bgcolor=255 255 255
+sig_obj.SIGNATURBLOCK_DE.table.main.Style.padding=4
+sig_obj.SIGNATURBLOCK_DE.table.main.Style.border=0.1
+sig_obj.SIGNATURBLOCK_DE.table.main.Style.halign=center
+sig_obj.SIGNATURBLOCK_DE.table.main.Style.valuehalign=left
+sig_obj.SIGNATURBLOCK_DE.table.main.Style.valign=top
+sig_obj.SIGNATURBLOCK_DE.table.main.Style.imagevalign=middle
+sig_obj.SIGNATURBLOCK_DE.table.main.Style.font=HELVETICA,8,BOLD
+sig_obj.SIGNATURBLOCK_DE.table.main.Style.valuefont=COURIER,8,NORMAL
+
+#---------------------- INFO TABLE -------------------------
+sig_obj.SIGNATURBLOCK_DE.table.info.ColsWidth=1 4
+#sig_obj.SIGNATURBLOCK_DE.table.info.1=SIG_NAME-cv
+sig_obj.SIGNATURBLOCK_DE.table.info.1=SIG_SUBJECT-cv
+sig_obj.SIGNATURBLOCK_DE.table.info.2=SIG_ISSUER-cv
+sig_obj.SIGNATURBLOCK_DE.table.info.3=SIG_NUMBER-cv
+sig_obj.SIGNATURBLOCK_DE.table.info.4=SIG_KZ-cv
+sig_obj.SIGNATURBLOCK_DE.table.info.5=SIG_ID-cv
+
+
+
+###################################################################################################
+# PROFIL: Signaturblock (Deutsch) mit neuem Layout und Hinweistext
+
+sig_obj.SIGNATURBLOCK_DE_NOTE.description=Standardsignatur Deutsch mit neuem Layout
+
+sig_obj.SIGNATURBLOCK_DE_NOTE.key.SIG_VALUE=Signaturwert
+#sig_obj.SIGNATURBLOCK_DE_NOTE.key.SIG_NAME=Unterzeichner
+sig_obj.SIGNATURBLOCK_DE_NOTE.key.SIG_SUBJECT=Unterzeichner
+sig_obj.SIGNATURBLOCK_DE_NOTE.key.SIG_ISSUER=Aussteller-Zertifikat
+sig_obj.SIGNATURBLOCK_DE_NOTE.key.SIG_NUMBER=Serien-Nr.
+sig_obj.SIGNATURBLOCK_DE_NOTE.key.SIG_KZ=Methode
+sig_obj.SIGNATURBLOCK_DE_NOTE.key.SIG_ID=Parameter
+sig_obj.SIGNATURBLOCK_DE_NOTE.key.SIG_META=Prüfinformation
+sig_obj.SIGNATURBLOCK_DE_NOTE.key.SIG_NOTE=Hinweis
+sig_obj.SIGNATURBLOCK_DE_NOTE.key.SIG_DATE=Datum/Zeit-UTC
+
+
+
+sig_obj.SIGNATURBLOCK_DE_NOTE.value.SIG_SUBJECT=${subject.T != null ? (subject.T + " ") : ""}${subject.CN}
+
+sig_obj.SIGNATURBLOCK_DE_NOTE.pos=f:80
+sig_obj.SIGNATURBLOCK_DE_NOTE.adobeSignFieldValue=PDF-AS Signatur
+sig_obj.SIGNATURBLOCK_DE_NOTE.adobeSignReasonValue=Signaturpruefung unter http://www.signaturpruefung.gv.at
+sig_obj.SIGNATURBLOCK_DE_NOTE.verifyURL=http://www.signaturpruefung.gv.at
+
+# WAI
+sig_obj.SIGNATURBLOCK_DE_NOTE.sigLogoAltText=Abgebildet ist eine Standard-Signaturbildmarke.
+
+sig_obj.SIGNATURBLOCK_DE_NOTE.value.SIG_META=Signaturpruefung unter: http://www.signaturpruefung.gv.at
+sig_obj.SIGNATURBLOCK_DE_NOTE.value.SIG_LABEL=./images/signatur-logo_de.png
+sig_obj.SIGNATURBLOCK_DE_NOTE.value.SIG_NOTE=Dieses mit einer qualifizierten elektronischen Signatur versehene Dokument ist gemäß §\u00A04 Abs.\u00A01 Signaturgesetz einem handschriftlich unterschriebenen Dokument grundsätzlich rechtlich gleichgestellt.
+
+
+#---------------------- MAIN TABLE -------------------------
+sig_obj.SIGNATURBLOCK_DE_NOTE.table.main.1=SIG_VALUE-cv
+sig_obj.SIGNATURBLOCK_DE_NOTE.table.main.2=SIG_LABEL-i|TABLE-info
+sig_obj.SIGNATURBLOCK_DE_NOTE.table.main.3=SIG_META-cv
+sig_obj.SIGNATURBLOCK_DE_NOTE.table.main.4=SIG_NOTE-cv
+sig_obj.SIGNATURBLOCK_DE_NOTE.table.main.5=SIG_DATE-cv
+
+
+sig_obj.SIGNATURBLOCK_DE_NOTE.table.main.ColsWidth=1 6
+sig_obj.SIGNATURBLOCK_DE_NOTE.table.main.Style.bgcolor=255 255 255
+sig_obj.SIGNATURBLOCK_DE_NOTE.table.main.Style.padding=4
+sig_obj.SIGNATURBLOCK_DE_NOTE.table.main.Style.border=0.1
+sig_obj.SIGNATURBLOCK_DE_NOTE.table.main.Style.halign=center
+sig_obj.SIGNATURBLOCK_DE_NOTE.table.main.Style.valuehalign=left
+sig_obj.SIGNATURBLOCK_DE_NOTE.table.main.Style.valign=top
+sig_obj.SIGNATURBLOCK_DE_NOTE.table.main.Style.imagevalign=middle
+sig_obj.SIGNATURBLOCK_DE_NOTE.table.main.Style.font=HELVETICA,8,BOLD
+sig_obj.SIGNATURBLOCK_DE_NOTE.table.main.Style.valuefont=COURIER,8,NORMAL
+
+#---------------------- INFO TABLE -------------------------
+sig_obj.SIGNATURBLOCK_DE_NOTE.table.info.ColsWidth=1 4
+#sig_obj.SIGNATURBLOCK_DE_NOTE.table.info.1=SIG_NAME-cv
+sig_obj.SIGNATURBLOCK_DE_NOTE.table.info.1=SIG_SUBJECT-cv
+sig_obj.SIGNATURBLOCK_DE_NOTE.table.info.2=SIG_ISSUER-cv
+sig_obj.SIGNATURBLOCK_DE_NOTE.table.info.3=SIG_NUMBER-cv
+sig_obj.SIGNATURBLOCK_DE_NOTE.table.info.4=SIG_KZ-cv
+sig_obj.SIGNATURBLOCK_DE_NOTE.table.info.5=SIG_ID-cv
+
+
+
+
+###################################################################################################
+# PROFIL: Signaturblock (Englisch) mit neuem Layout
+
+sig_obj.SIGNATURBLOCK_EN.description=Standardsignatur Englisch mit neuem Layout
+
+sig_obj.SIGNATURBLOCK_EN.key.SIG_VALUE=Signature Value
+#sig_obj.SIGNATURBLOCK_EN.key.SIG_NAME=Signatory
+sig_obj.SIGNATURBLOCK_EN.key.SIG_SUBJECT=Signatory
+sig_obj.SIGNATURBLOCK_EN.key.SIG_ISSUER=Issuer-Certificate
+sig_obj.SIGNATURBLOCK_EN.key.SIG_NUMBER=Serial-No.
+sig_obj.SIGNATURBLOCK_EN.key.SIG_KZ=Method
+sig_obj.SIGNATURBLOCK_EN.key.SIG_ID=Parameter
+sig_obj.SIGNATURBLOCK_EN.key.SIG_META=Verification
+sig_obj.SIGNATURBLOCK_EN.key.SIG_DATE=Date/Time-UTC
+
+sig_obj.SIGNATURBLOCK_EN.value.SIG_SUBJECT=${subject.T != null ? (subject.T + " ") : ""}${subject.CN}
+
+sig_obj.SIGNATURBLOCK_EN.pos=f:80
+sig_obj.SIGNATURBLOCK_EN.adobeSignFieldValue=PDF-AS Signature
+sig_obj.SIGNATURBLOCK_EN.adobeSignReasonValue=Signature verification at http://www.signature-verification.gv.at
+sig_obj.SIGNATURBLOCK_EN.verifyURL=http://www.signature-verification.gv.at
+
+# WAI
+sig_obj.SIGNATURBLOCK_EN.sigLogoAltText=A standard signature logo is shown.
+
+sig_obj.SIGNATURBLOCK_EN.value.SIG_META=Signature verification at: http://www.signature-verification.gv.at
+sig_obj.SIGNATURBLOCK_EN.value.SIG_LABEL=./images/signatur-logo_en.png
+
+#---------------------- MAIN TABLE -------------------------
+sig_obj.SIGNATURBLOCK_EN.table.main.1=SIG_VALUE-cv
+sig_obj.SIGNATURBLOCK_EN.table.main.2=SIG_LABEL-i|TABLE-info
+sig_obj.SIGNATURBLOCK_EN.table.main.3=SIG_META-cv
+sig_obj.SIGNATURBLOCK_EN.table.main.4=SIG_DATE-cv
+
+
+sig_obj.SIGNATURBLOCK_EN.table.main.ColsWidth=1 6
+sig_obj.SIGNATURBLOCK_EN.table.main.Style.bgcolor=255 255 255
+sig_obj.SIGNATURBLOCK_EN.table.main.Style.padding=4
+sig_obj.SIGNATURBLOCK_EN.table.main.Style.border=0.1
+sig_obj.SIGNATURBLOCK_EN.table.main.Style.halign=center
+sig_obj.SIGNATURBLOCK_EN.table.main.Style.valuehalign=left
+sig_obj.SIGNATURBLOCK_EN.table.main.Style.valign=top
+sig_obj.SIGNATURBLOCK_EN.table.main.Style.imagevalign=middle
+sig_obj.SIGNATURBLOCK_EN.table.main.Style.font=HELVETICA,8,BOLD
+sig_obj.SIGNATURBLOCK_EN.table.main.Style.valuefont=COURIER,8,NORMAL
+
+#---------------------- INFO TABLE -------------------------
+sig_obj.SIGNATURBLOCK_EN.table.info.ColsWidth=1 5
+#sig_obj.SIGNATURBLOCK_EN.table.info.1=SIG_NAME-cv
+sig_obj.SIGNATURBLOCK_EN.table.info.1=SIG_SUBJECT-cv
+sig_obj.SIGNATURBLOCK_EN.table.info.2=SIG_ISSUER-cv
+sig_obj.SIGNATURBLOCK_EN.table.info.3=SIG_NUMBER-cv
+sig_obj.SIGNATURBLOCK_EN.table.info.4=SIG_KZ-cv
+sig_obj.SIGNATURBLOCK_EN.table.info.5=SIG_ID-cv
+
+
+
+###################################################################################################
+# PROFIL: Signaturblock (Englisch) mit neuem Layout und Hinweistext
+
+sig_obj.SIGNATURBLOCK_EN_NOTE.description=Standardsignatur Englisch mit neuem Layout
+
+sig_obj.SIGNATURBLOCK_EN_NOTE.key.SIG_VALUE=Signature Value
+#sig_obj.SIGNATURBLOCK_EN_NOTE.key.SIG_NAME=Signatory
+sig_obj.SIGNATURBLOCK_EN_NOTE.key.SIG_SUBJECT=Signatory
+sig_obj.SIGNATURBLOCK_EN_NOTE.key.SIG_ISSUER=Issuer-Certificate
+sig_obj.SIGNATURBLOCK_EN_NOTE.key.SIG_NUMBER=Serial-No.
+sig_obj.SIGNATURBLOCK_EN_NOTE.key.SIG_KZ=Method
+sig_obj.SIGNATURBLOCK_EN_NOTE.key.SIG_ID=Parameter
+sig_obj.SIGNATURBLOCK_EN_NOTE.key.SIG_META=Verification
+sig_obj.SIGNATURBLOCK_EN_NOTE.key.SIG_NOTE=Note
+sig_obj.SIGNATURBLOCK_EN_NOTE.key.SIG_DATE=Date/Time-UTC
+
+sig_obj.SIGNATURBLOCK_EN_NOTE.value.SIG_SUBJECT=${subject.T != null ? (subject.T + " ") : ""}${subject.CN}
+
+sig_obj.SIGNATURBLOCK_EN_NOTE.pos=f:80
+sig_obj.SIGNATURBLOCK_EN_NOTE.adobeSignFieldValue=PDF-AS Signature
+sig_obj.SIGNATURBLOCK_EN_NOTE.adobeSignReasonValue=Signature verification at http://www.signature-verification.gv.at
+sig_obj.SIGNATURBLOCK_EN_NOTE.verifyURL=http://www.signature-verification.gv.at
+
+# WAI
+sig_obj.SIGNATURBLOCK_EN_NOTE.sigLogoAltText=A standard signature logo is shown.
+
+sig_obj.SIGNATURBLOCK_EN_NOTE.value.SIG_META=Signature verification at: http://www.signature-verification.gv.at
+sig_obj.SIGNATURBLOCK_EN_NOTE.value.SIG_LABEL=./images/signatur-logo_en.png
+sig_obj.SIGNATURBLOCK_EN_NOTE.value.SIG_NOTE=This document is signed with a qualified electronic signature. According to §\u00A04 art.\u00A01 of the Signature Act it in principle is legally equivalent to an handwritten signature.
+
+
+#---------------------- MAIN TABLE -------------------------
+sig_obj.SIGNATURBLOCK_EN_NOTE.table.main.1=SIG_VALUE-cv
+sig_obj.SIGNATURBLOCK_EN_NOTE.table.main.2=SIG_LABEL-i|TABLE-info
+sig_obj.SIGNATURBLOCK_EN_NOTE.table.main.3=SIG_META-cv
+sig_obj.SIGNATURBLOCK_EN_NOTE.table.main.4=SIG_NOTE-cv
+sig_obj.SIGNATURBLOCK_EN_NOTE.table.main.5=SIG_DATE-cv
+
+
+sig_obj.SIGNATURBLOCK_EN_NOTE.table.main.ColsWidth=1 6
+sig_obj.SIGNATURBLOCK_EN_NOTE.table.main.Style.bgcolor=255 255 255
+sig_obj.SIGNATURBLOCK_EN_NOTE.table.main.Style.padding=4
+sig_obj.SIGNATURBLOCK_EN_NOTE.table.main.Style.border=0.1
+sig_obj.SIGNATURBLOCK_EN_NOTE.table.main.Style.halign=center
+sig_obj.SIGNATURBLOCK_EN_NOTE.table.main.Style.valuehalign=left
+sig_obj.SIGNATURBLOCK_EN_NOTE.table.main.Style.valign=top
+sig_obj.SIGNATURBLOCK_EN_NOTE.table.main.Style.imagevalign=middle
+sig_obj.SIGNATURBLOCK_EN_NOTE.table.main.Style.font=HELVETICA,8,BOLD
+sig_obj.SIGNATURBLOCK_EN_NOTE.table.main.Style.valuefont=COURIER,8,NORMAL
+
+#---------------------- INFO TABLE -------------------------
+sig_obj.SIGNATURBLOCK_EN_NOTE.table.info.ColsWidth=1 5
+#sig_obj.SIGNATURBLOCK_EN_NOTE.table.info.1=SIG_NAME-cv
+sig_obj.SIGNATURBLOCK_EN_NOTE.table.info.1=SIG_SUBJECT-cv
+sig_obj.SIGNATURBLOCK_EN_NOTE.table.info.2=SIG_ISSUER-cv
+sig_obj.SIGNATURBLOCK_EN_NOTE.table.info.3=SIG_NUMBER-cv
+sig_obj.SIGNATURBLOCK_EN_NOTE.table.info.4=SIG_KZ-cv
+sig_obj.SIGNATURBLOCK_EN_NOTE.table.info.5=SIG_ID-cv
+
+
+
+
+
+###################################################################################################
+# PROFIL: Amtssignaturblock (Deutsch) mit neuem Layout
+
+sig_obj.AMTSSIGNATURBLOCK_DE.description=Amtssignaturblock-Deutsch, neues Layout
+
+sig_obj.AMTSSIGNATURBLOCK_DE.key.SIG_VALUE=Signaturwert
+sig_obj.AMTSSIGNATURBLOCK_DE.key.SIG_SUBJECT=Unterzeichner
+sig_obj.AMTSSIGNATURBLOCK_DE.key.SIG_ISSUER=Aussteller-Zertifikat
+sig_obj.AMTSSIGNATURBLOCK_DE.key.SIG_NUMBER=Serien-Nr.
+sig_obj.AMTSSIGNATURBLOCK_DE.key.SIG_KZ=Methode
+sig_obj.AMTSSIGNATURBLOCK_DE.key.SIG_ID=Parameter
+sig_obj.AMTSSIGNATURBLOCK_DE.key.SIG_META=Prüfinformation
+sig_obj.AMTSSIGNATURBLOCK_DE.key.SIG_NOTE=Hinweis
+sig_obj.AMTSSIGNATURBLOCK_DE.key.SIG_DATE=Datum/Zeit-UTC
+
+sig_obj.AMTSSIGNATURBLOCK_DE.value.SIG_SUBJECT=DEMO Amtssignatur
+
+sig_obj.AMTSSIGNATURBLOCK_DE.pos=f:80
+sig_obj.AMTSSIGNATURBLOCK_DE.adobeSignFieldValue=PDF-AS Signatur
+sig_obj.AMTSSIGNATURBLOCK_DE.adobeSignReasonValue=Signaturpruefung unter http://www.signaturpruefung.gv.at
+sig_obj.AMTSSIGNATURBLOCK_DE.verifyURL=http://www.signaturpruefung.gv.at
+
+# WAI
+sig_obj.AMTSSIGNATURBLOCK_DE.sigLogoAltText=Abgebildet ist eine Standard-Signaturbildmarke.
+
+sig_obj.AMTSSIGNATURBLOCK_DE.value.SIG_META=Signaturpruefung unter: http://www.signaturpruefung.gv.at
+sig_obj.AMTSSIGNATURBLOCK_DE.value.SIG_LABEL=./images/signatur-logo_de.png
+sig_obj.AMTSSIGNATURBLOCK_DE.value.SIG_NOTE=Dieses mit einer qualifizierten elektronischen Signatur versehene Dokument ist gemäß §\u00A04 Abs.\u00A01 Signaturgesetz einem handschriftlich unterschriebenen Dokument grundsätzlich rechtlich gleichgestellt.
+
+#---------------------- MAIN TABLE -------------------------
+sig_obj.AMTSSIGNATURBLOCK_DE.table.main.1=SIG_VALUE-cv
+sig_obj.AMTSSIGNATURBLOCK_DE.table.main.2=SIG_LABEL-i|TABLE-info
+sig_obj.AMTSSIGNATURBLOCK_DE.table.main.3=SIG_META-cv
+sig_obj.AMTSSIGNATURBLOCK_DE.table.main.4=SIG_NOTE-cv
+sig_obj.AMTSSIGNATURBLOCK_DE.table.main.5=SIG_DATE-cv
+
+sig_obj.AMTSSIGNATURBLOCK_DE.table.main.ColsWidth=1 6
+sig_obj.AMTSSIGNATURBLOCK_DE.table.main.Style.bgcolor=255 255 255
+sig_obj.AMTSSIGNATURBLOCK_DE.table.main.Style.padding=4
+sig_obj.AMTSSIGNATURBLOCK_DE.table.main.Style.border=0.1
+sig_obj.AMTSSIGNATURBLOCK_DE.table.main.Style.halign=center
+sig_obj.AMTSSIGNATURBLOCK_DE.table.main.Style.valuehalign=left
+sig_obj.AMTSSIGNATURBLOCK_DE.table.main.Style.valign=top
+sig_obj.AMTSSIGNATURBLOCK_DE.table.main.Style.imagevalign=middle
+sig_obj.AMTSSIGNATURBLOCK_DE.table.main.Style.font=HELVETICA,8,BOLD
+sig_obj.AMTSSIGNATURBLOCK_DE.table.main.Style.valuefont=COURIER,8,NORMAL
+
+#---------------------- INFO TABLE -------------------------
+sig_obj.AMTSSIGNATURBLOCK_DE.table.info.ColsWidth=1 4
+sig_obj.AMTSSIGNATURBLOCK_DE.table.info.1=SIG_SUBJECT-cv
+sig_obj.AMTSSIGNATURBLOCK_DE.table.info.2=SIG_ISSUER-cv
+sig_obj.AMTSSIGNATURBLOCK_DE.table.info.3=SIG_NUMBER-cv
+sig_obj.AMTSSIGNATURBLOCK_DE.table.info.4=SIG_KZ-cv
+sig_obj.AMTSSIGNATURBLOCK_DE.table.info.5=SIG_ID-cv
+
+
+
+###################################################################################################
+# PROFIL: Amtssignaturblock (Englisch) mit neuem Layout
+
+sig_obj.AMTSSIGNATURBLOCK_EN.description=Amtssignaturblock-Englisch, neues Layout
+
+sig_obj.AMTSSIGNATURBLOCK_EN.key.SIG_VALUE=Signature Value
+sig_obj.AMTSSIGNATURBLOCK_EN.key.SIG_SUBJECT=Signatory
+sig_obj.AMTSSIGNATURBLOCK_EN.key.SIG_ISSUER=Issuer-Certificate
+sig_obj.AMTSSIGNATURBLOCK_EN.key.SIG_NUMBER=Serial-No.
+sig_obj.AMTSSIGNATURBLOCK_EN.key.SIG_KZ=Method
+sig_obj.AMTSSIGNATURBLOCK_EN.key.SIG_ID=Parameter
+sig_obj.AMTSSIGNATURBLOCK_EN.key.SIG_META=Verification
+sig_obj.AMTSSIGNATURBLOCK_EN.key.SIG_NOTE=Note
+sig_obj.AMTSSIGNATURBLOCK_EN.key.SIG_DATE=Date/Time-UTC
+
+sig_obj.AMTSSIGNATURBLOCK_EN.value.SIG_SUBJECT=Official Signature DEMO
+
+sig_obj.AMTSSIGNATURBLOCK_EN.pos=f:80
+sig_obj.AMTSSIGNATURBLOCK_EN.adobeSignFieldValue=PDF-AS Signature
+sig_obj.AMTSSIGNATURBLOCK_EN.adobeSignReasonValue=Signature verification at: http://www.signature-verification.gv.at
+sig_obj.AMTSSIGNATURBLOCK_EN.verifyURL=http://www.signature-verification.gv.at
+
+# WAI
+sig_obj.AMTSSIGNATURBLOCK_EN.sigLogoAltText=A standard signature logo is shown.
+
+sig_obj.AMTSSIGNATURBLOCK_EN.value.SIG_META=Signature verification at: http://www.signature-verification.gv.at
+sig_obj.AMTSSIGNATURBLOCK_EN.value.SIG_LABEL=./images/signatur-logo_en.png
+sig_obj.AMTSSIGNATURBLOCK_EN.value.SIG_NOTE=This document is signed with a qualified electronic signature. According to §\u00A04 art.\u00A01 of the Signature Act it in principle is legally equivalent to an handwritten signature.
+
+
+#---------------------- MAIN TABLE -------------------------
+sig_obj.AMTSSIGNATURBLOCK_EN.table.main.1=SIG_VALUE-cv
+sig_obj.AMTSSIGNATURBLOCK_EN.table.main.2=SIG_LABEL-i|TABLE-info
+sig_obj.AMTSSIGNATURBLOCK_EN.table.main.3=SIG_META-cv
+sig_obj.AMTSSIGNATURBLOCK_EN.table.main.4=SIG_NOTE-cv
+sig_obj.AMTSSIGNATURBLOCK_EN.table.main.5=SIG_DATE-cv
+
+sig_obj.AMTSSIGNATURBLOCK_EN.table.main.ColsWidth=1 6
+sig_obj.AMTSSIGNATURBLOCK_EN.table.main.Style.bgcolor=255 255 255
+sig_obj.AMTSSIGNATURBLOCK_EN.table.main.Style.padding=4
+sig_obj.AMTSSIGNATURBLOCK_EN.table.main.Style.border=0.1
+sig_obj.AMTSSIGNATURBLOCK_EN.table.main.Style.halign=center
+sig_obj.AMTSSIGNATURBLOCK_EN.table.main.Style.valuehalign=left
+sig_obj.AMTSSIGNATURBLOCK_EN.table.main.Style.valign=top
+sig_obj.AMTSSIGNATURBLOCK_EN.table.main.Style.imagevalign=middle
+sig_obj.AMTSSIGNATURBLOCK_EN.table.main.Style.font=HELVETICA,8,BOLD
+sig_obj.AMTSSIGNATURBLOCK_EN.table.main.Style.valuefont=COURIER,8,NORMAL
+
+#---------------------- INFO TABLE -------------------------
+sig_obj.AMTSSIGNATURBLOCK_EN.table.info.ColsWidth=1 5
+sig_obj.AMTSSIGNATURBLOCK_EN.table.info.1=SIG_SUBJECT-cv
+sig_obj.AMTSSIGNATURBLOCK_EN.table.info.2=SIG_ISSUER-cv
+sig_obj.AMTSSIGNATURBLOCK_EN.table.info.3=SIG_NUMBER-cv
+sig_obj.AMTSSIGNATURBLOCK_EN.table.info.4=SIG_KZ-cv
+sig_obj.AMTSSIGNATURBLOCK_EN.table.info.5=SIG_ID-cv
+
+
+
+###################################################################################################
+# PROFIL: Unsichtbarer Signaturblock
+
+sig_obj.INVISIBLE.description=Unsichtbarer Signaturblock
+
+sig_obj.INVISIBLE.adobeSignFieldValue=PDF-AS Signatur
+sig_obj.INVISIBLE.adobeSignReasonValue=Informationen zur Prüfung finden Sie unter http://www.signaturpruefung.gv.at
+
+# Platzhaltersuche für dieses Profil deaktivieren
+sig_obj.INVISIBLE.enable_placeholder_search=false
+
+sig_obj.INVISIBLE.verifyURL=http://www.signaturpruefung.gv.at
+
+
+
+###################################################################################################
+# PROFIL: BAIK Archivsignatur
+
+sig_obj.BAIK_ARCHIV_SIGNATUR.description=BAIK Archivsignatur
+
+# enable/disable BAIK support for this profile
+sig_obj.BAIK_ARCHIV_SIGNATUR.key.SIG_BAIK_ENABLED=true
+sig_obj.BAIK_ARCHIV_SIGNATUR.key.SIG_PDFA1B_VALID=true
+
+sig_obj.BAIK_ARCHIV_SIGNATUR.key.SIG_VALUE=Signaturwert
+#sig_obj.BAIK_ARCHIV_SIGNATUR.key.SIG_NAME=SIGNATOR
+sig_obj.BAIK_ARCHIV_SIGNATUR.key.SIG_SIG_LABEL=Signator
+sig_obj.BAIK_ARCHIV_SIGNATUR.key.SIG_DATE=Signaturdatum
+sig_obj.BAIK_ARCHIV_SIGNATUR.key.SIG_ISSUER=Zertifizierungsdienst
+sig_obj.BAIK_ARCHIV_SIGNATUR.key.SIG_NUMBER=Seriennummer
+sig_obj.BAIK_ARCHIV_SIGNATUR.key.SIG_ALG=Algorithmus
+sig_obj.BAIK_ARCHIV_SIGNATUR.key.SIG_KZ=Methode
+#sig_obj.BAIK_ARCHIV_SIGNATUR.key.SIG_ID=Parameter
+sig_obj.BAIK_ARCHIV_SIGNATUR.key.SIG_META=Hinweis
+sig_obj.BAIK_ARCHIV_SIGNATUR.key.SIG_TITLE=ELEKTRONISCHE ARCHIVSIGNATUR
+
+sig_obj.BAIK_ARCHIV_SIGNATUR.pos=f:80
+sig_obj.BAIK_ARCHIV_SIGNATUR.adobeSignFieldValue=ELEKTRONISCHE ARCHIVSIGNATUR
+
+# WAI
+sig_obj.BAIK_ARCHIV_SIGNATUR.sigLogoAltText=Abgebildet ist eine Signaturbildmarke mit Bundesadler.
+
+sig_obj.BAIK_ARCHIV_SIGNATUR.value.SIG_META=Dokumentenformat: ${iui.pdfVersion}
+sig_obj.BAIK_ARCHIV_SIGNATUR.value.SIG_LABEL=./images/Baik_Archiv.gif
+sig_obj.BAIK_ARCHIV_SIGNATUR.value.SIG_TITLE=ELEKTRONISCHE ARCHIVSIGNATUR
+
+sig_obj.BAIK_ARCHIV_SIGNATUR.adobeSignFieldValue=Archivsignatur
+sig_obj.BAIK_ARCHIV_SIGNATUR.adobeSignText.binary=Archivsignatur der BAIK
+sig_obj.BAIK_ARCHIV_SIGNATUR.verifyURL=http://www.signaturpruefung.gv.at
+
+sig_obj.BAIK_ARCHIV_SIGNATUR.phlength.SIG_META=50
+
+sig_obj.BAIK_ARCHIV_SIGNATUR.value.SIG_SIG_LABEL=BAIK-Archiv\n\nUrkundenarchiv der Bundeskammer für Architekten und Ingenieurskonsulenten
+
+#---------------------- MAIN TABLE -------------------------
+sig_obj.BAIK_ARCHIV_SIGNATUR.table.main.1=SIG_TITLE-v
+sig_obj.BAIK_ARCHIV_SIGNATUR.table.main.2=SIG_VALUE-cv
+sig_obj.BAIK_ARCHIV_SIGNATUR.table.main.3=SIG_LABEL-i|TABLE-info
+sig_obj.BAIK_ARCHIV_SIGNATUR.table.main.4=SIG_META-cv
+
+sig_obj.BAIK_ARCHIV_SIGNATUR.table.main.ColsWidth=1 5
+sig_obj.BAIK_ARCHIV_SIGNATUR.table.main.Style.bgcolor=161 198 252
+sig_obj.BAIK_ARCHIV_SIGNATUR.table.main.Style.padding=4
+sig_obj.BAIK_ARCHIV_SIGNATUR.table.main.Style.border=0.1
+sig_obj.BAIK_ARCHIV_SIGNATUR.table.main.Style.halign=center
+sig_obj.BAIK_ARCHIV_SIGNATUR.table.main.Style.valuehalign=left
+sig_obj.BAIK_ARCHIV_SIGNATUR.table.main.Style.valign=middle
+sig_obj.BAIK_ARCHIV_SIGNATUR.table.main.Style.imagevalign=middle
+sig_obj.BAIK_ARCHIV_SIGNATUR.table.main.Style.font=TTF:DejaVuSansCondensed.ttf,8
+sig_obj.BAIK_ARCHIV_SIGNATUR.table.main.Style.valuefont=TTF:DejaVuSansCondensed.ttf,8
+
+#---------------------- INFO TABLE -------------------------
+sig_obj.BAIK_ARCHIV_SIGNATUR.table.info.ColsWidth=1 4
+sig_obj.BAIK_ARCHIV_SIGNATUR.table.info.Style.halign=left
+sig_obj.BAIK_ARCHIV_SIGNATUR.table.info.Style.valuehalign=left
+sig_obj.BAIK_ARCHIV_SIGNATUR.table.info.Style.valign=middle
+
+#sig_obj.BAIK_ARCHIV_SIGNATUR.table.info.1=SIG_NAME-cv
+sig_obj.BAIK_ARCHIV_SIGNATUR.table.info.1=SIG_SIG_LABEL-cv
+sig_obj.BAIK_ARCHIV_SIGNATUR.table.info.2=SIG_DATE-cv
+sig_obj.BAIK_ARCHIV_SIGNATUR.table.info.3=SIG_ISSUER-cv
+sig_obj.BAIK_ARCHIV_SIGNATUR.table.info.4=SIG_NUMBER-cv
+sig_obj.BAIK_ARCHIV_SIGNATUR.table.info.5=SIG_ALG-cv
+sig_obj.BAIK_ARCHIV_SIGNATUR.table.info.6=SIG_KZ-cv
+
+
+
+###################################################################################################
+# PROFIL: BAIK Beurkundungssignatur
+
+sig_obj.BAIK_URKUNDE_SIGNATUR.description=BAIK Beurkundungssignatur
+
+# enable/disable BAIK support for this profile
+sig_obj.BAIK_URKUNDE_SIGNATUR.key.SIG_BAIK_ENABLED=true
+sig_obj.BAIK_URKUNDE_SIGNATUR.key.SIG_PDFA1B_VALID=true
+
+sig_obj.BAIK_URKUNDE_SIGNATUR.key.SIG_VALUE=Signaturwert
+#sig_obj.BAIK_URKUNDE_SIGNATUR.key.SIG_NAME=SIGNATOR
+sig_obj.BAIK_URKUNDE_SIGNATUR.key.SIG_SIG_LABEL=Signator
+sig_obj.BAIK_URKUNDE_SIGNATUR.key.SIG_DATE=Signaturdatum
+sig_obj.BAIK_URKUNDE_SIGNATUR.key.SIG_ISSUER=Zertifizierungsdienst
+sig_obj.BAIK_URKUNDE_SIGNATUR.key.SIG_NUMBER=Seriennummer
+sig_obj.BAIK_URKUNDE_SIGNATUR.key.SIG_ALG=Algorithmus
+sig_obj.BAIK_URKUNDE_SIGNATUR.key.SIG_KZ=Methode
+#sig_obj.BAIK_URKUNDE_SIGNATUR.key.SIG_ID=Parameter
+sig_obj.BAIK_URKUNDE_SIGNATUR.key.SIG_META=Hinweis:
+sig_obj.BAIK_URKUNDE_SIGNATUR.key.SIG_TITLE=ELEKTRONISCHE BEURKUNDUNGSSIGNATUR
+
+# WAI
+sig_obj.BAIK_URKUNDE_SIGNATUR.sigLogoAltText=Abgebildet ist die Signaturbildmarke eines staatlich befugten und beeideten Ziviltechnikers mit Bundesadler.
+
+sig_obj.BAIK_URKUNDE_SIGNATUR.pos=f:80
+sig_obj.BAIK_URKUNDE_SIGNATUR.adobeSignFieldValue=Urkundensignatur
+sig_obj.BAIK_URKUNDE_SIGNATUR.adobeSignText.binary=Urkundensignatur der BAIK
+sig_obj.BAIK_URKUNDE_SIGNATUR.verifyURL=http://www.signaturpruefung.gv.at
+
+sig_obj.BAIK_URKUNDE_SIGNATUR.value.SIG_META=Dokumentenformat: ${iui.pdfVersion}
+sig_obj.BAIK_URKUNDE_SIGNATUR.value.SIG_LABEL=./images/Baik_Urkunde.gif
+sig_obj.BAIK_URKUNDE_SIGNATUR.value.SIG_TITLE=ELEKTRONISCHE BEURKUNDUNGSSIGNATUR
+
+sig_obj.BAIK_URKUNDE_SIGNATUR.phlength.SIG_META=50
+sig_obj.BAIK_URKUNDE_SIGNATUR.phlength.SIG_SIG_LABEL=200
+
+sig_obj.BAIK_URKUNDE_SIGNATUR.value.SIG_SIG_LABEL=${subject.CN}${subject.O != null ? ("\n" + subject.O) : ""}${subject.L != null ? ("\nKanzleisitz: " + subject.L) : ""}
+
+#---------------------- MAIN TABLE -------------------------
+sig_obj.BAIK_URKUNDE_SIGNATUR.table.main.1=SIG_TITLE-v
+sig_obj.BAIK_URKUNDE_SIGNATUR.table.main.2=SIG_VALUE-cv
+sig_obj.BAIK_URKUNDE_SIGNATUR.table.main.3=SIG_LABEL-i|TABLE-info
+sig_obj.BAIK_URKUNDE_SIGNATUR.table.main.4=SIG_META-cv
+
+sig_obj.BAIK_URKUNDE_SIGNATUR.table.main.ColsWidth=1 5
+sig_obj.BAIK_URKUNDE_SIGNATUR.table.main.Style.bgcolor=248 254 150
+sig_obj.BAIK_URKUNDE_SIGNATUR.table.main.Style.padding=4
+sig_obj.BAIK_URKUNDE_SIGNATUR.table.main.Style.border=0.1
+sig_obj.BAIK_URKUNDE_SIGNATUR.table.main.Style.halign=center
+sig_obj.BAIK_URKUNDE_SIGNATUR.table.main.Style.valuehalign=left
+sig_obj.BAIK_URKUNDE_SIGNATUR.table.main.Style.valign=middle
+sig_obj.BAIK_URKUNDE_SIGNATUR.table.main.Style.imagevalign=middle
+sig_obj.BAIK_URKUNDE_SIGNATUR.table.main.Style.font=TTF:DejaVuSansCondensed.ttf,8
+sig_obj.BAIK_URKUNDE_SIGNATUR.table.main.Style.valuefont=TTF:DejaVuSansCondensed.ttf,8
+
+#---------------------- INFO TABLE -------------------------
+sig_obj.BAIK_URKUNDE_SIGNATUR.table.info.ColsWidth=1 4
+sig_obj.BAIK_URKUNDE_SIGNATUR.table.info.Style.halign=left
+sig_obj.BAIK_URKUNDE_SIGNATUR.table.info.Style.valuehalign=left
+
+#sig_obj.BAIK_URKUNDE_SIGNATUR.table.info.1=SIG_NAME-cv
+sig_obj.BAIK_URKUNDE_SIGNATUR.table.info.1=SIG_SIG_LABEL-cv
+sig_obj.BAIK_URKUNDE_SIGNATUR.table.info.2=SIG_DATE-cv
+sig_obj.BAIK_URKUNDE_SIGNATUR.table.info.3=SIG_ISSUER-cv
+sig_obj.BAIK_URKUNDE_SIGNATUR.table.info.4=SIG_NUMBER-cv
+sig_obj.BAIK_URKUNDE_SIGNATUR.table.info.5=SIG_ALG-cv
+sig_obj.BAIK_URKUNDE_SIGNATUR.table.info.6=SIG_KZ-cv
+
+
+
+###################################################################################################
+# PROFIL: Signaturblock (Deutsch), PDF/A-1b
+
+sig_obj.SIGNATURBLOCK_DE_PDFA.description=Standardsignatur Deutsch, PDF/A-1b
+
+# enable/disable PDF/A1b support for this profile
+sig_obj.SIGNATURBLOCK_DE_PDFA.key.SIG_PDFA1B_VALID=true
+
+sig_obj.SIGNATURBLOCK_DE_PDFA.key.SIG_VALUE=Signaturwert
+#sig_obj.SIGNATURBLOCK_DE_PDFA.key.SIG_NAME=Unterzeichner
+sig_obj.SIGNATURBLOCK_DE_PDFA.key.SIG_SUBJECT=Unterzeichner
+sig_obj.SIGNATURBLOCK_DE_PDFA.key.SIG_ISSUER=Aussteller-Zertifikat
+sig_obj.SIGNATURBLOCK_DE_PDFA.key.SIG_NUMBER=Serien-Nr.
+sig_obj.SIGNATURBLOCK_DE_PDFA.key.SIG_KZ=Methode
+sig_obj.SIGNATURBLOCK_DE_PDFA.key.SIG_ID=Parameter
+sig_obj.SIGNATURBLOCK_DE_PDFA.key.SIG_META=Prüfinformation
+sig_obj.SIGNATURBLOCK_DE_PDFA.key.SIG_DATE=Datum/Zeit-UTC
+
+
+sig_obj.SIGNATURBLOCK_DE_PDFA.value.SIG_SUBJECT=${subject.T != null ? (subject.T + " ") : ""}${subject.CN}
+
+sig_obj.SIGNATURBLOCK_DE_PDFA.pos=f:80
+sig_obj.SIGNATURBLOCK_DE_PDFA.adobeSignFieldValue=PDF-AS Signatur
+sig_obj.SIGNATURBLOCK_DE_PDFA.adobeSignReasonValue=Signaturpruefung unter: http://www.signaturpruefung.gv.at
+sig_obj.SIGNATURBLOCK_DE_PDFA.verifyURL=http://www.signaturpruefung.gv.at
+
+# WAI
+sig_obj.SIGNATURBLOCK_DE_PDFA.sigLogoAltText=Abgebildet ist eine Standard-Signaturbildmarke.
+
+sig_obj.SIGNATURBLOCK_DE_PDFA.value.SIG_META=Signaturpruefung unter: http://www.signaturpruefung.gv.at
+sig_obj.SIGNATURBLOCK_DE_PDFA.value.SIG_LABEL=./images/signatur-logo_de.png
+
+#---------------------- MAIN TABLE -------------------------
+sig_obj.SIGNATURBLOCK_DE_PDFA.table.main.1=SIG_VALUE-cv
+sig_obj.SIGNATURBLOCK_DE_PDFA.table.main.2=SIG_LABEL-i|TABLE-info
+sig_obj.SIGNATURBLOCK_DE_PDFA.table.main.3=SIG_META-cv
+sig_obj.SIGNATURBLOCK_DE_PDFA.table.main.4=SIG_DATE-cv
+
+sig_obj.SIGNATURBLOCK_DE_PDFA.table.main.ColsWidth=1 5.5
+sig_obj.SIGNATURBLOCK_DE_PDFA.table.main.Style.bgcolor=255 255 255
+sig_obj.SIGNATURBLOCK_DE_PDFA.table.main.Style.padding=4
+sig_obj.SIGNATURBLOCK_DE_PDFA.table.main.Style.border=0.1
+sig_obj.SIGNATURBLOCK_DE_PDFA.table.main.Style.halign=center
+sig_obj.SIGNATURBLOCK_DE_PDFA.table.main.Style.valuehalign=left
+sig_obj.SIGNATURBLOCK_DE_PDFA.table.main.Style.valign=top
+sig_obj.SIGNATURBLOCK_DE_PDFA.table.main.Style.imagevalign=middle
+sig_obj.SIGNATURBLOCK_DE_PDFA.table.main.Style.font=TTF:DejaVuSansCondensed-Bold.ttf,8
+sig_obj.SIGNATURBLOCK_DE_PDFA.table.main.Style.valuefont=TTF:DejaVuSansMono.ttf,8
+
+#---------------------- INFO TABLE -------------------------
+sig_obj.SIGNATURBLOCK_DE_PDFA.table.info.ColsWidth=1 3.5
+#sig_obj.SIGNATURBLOCK_DE_PDFA.table.info.1=SIG_NAME-cv
+sig_obj.SIGNATURBLOCK_DE_PDFA.table.info.1=SIG_SUBJECT-cv
+sig_obj.SIGNATURBLOCK_DE_PDFA.table.info.2=SIG_ISSUER-cv
+sig_obj.SIGNATURBLOCK_DE_PDFA.table.info.3=SIG_NUMBER-cv
+sig_obj.SIGNATURBLOCK_DE_PDFA.table.info.4=SIG_KZ-cv
+sig_obj.SIGNATURBLOCK_DE_PDFA.table.info.5=SIG_ID-cv
+
+
+
+###################################################################################################
+# PROFIL: Signaturblock (Deutsch), PDF/A-1b und mit Hinweistext
+
+sig_obj.SIGNATURBLOCK_DE_PDFA_NOTE.description=Standardsignatur Deutsch, PDF/A-1b
+
+# enable/disable PDF/A1b support for this profile
+sig_obj.SIGNATURBLOCK_DE_PDFA_NOTE.key.SIG_PDFA1B_VALID=true
+
+sig_obj.SIGNATURBLOCK_DE_PDFA_NOTE.key.SIG_VALUE=Signaturwert
+#sig_obj.SIGNATURBLOCK_DE_PDFA_NOTE.key.SIG_NAME=Unterzeichner
+sig_obj.SIGNATURBLOCK_DE_PDFA_NOTE.key.SIG_SUBJECT=Unterzeichner
+sig_obj.SIGNATURBLOCK_DE_PDFA_NOTE.key.SIG_ISSUER=Aussteller-Zertifikat
+sig_obj.SIGNATURBLOCK_DE_PDFA_NOTE.key.SIG_NUMBER=Serien-Nr.
+sig_obj.SIGNATURBLOCK_DE_PDFA_NOTE.key.SIG_KZ=Methode
+sig_obj.SIGNATURBLOCK_DE_PDFA_NOTE.key.SIG_ID=Parameter
+sig_obj.SIGNATURBLOCK_DE_PDFA_NOTE.key.SIG_META=Prüfinformation
+sig_obj.SIGNATURBLOCK_DE_PDFA_NOTE.key.SIG_NOTE=Hinweis
+sig_obj.SIGNATURBLOCK_DE_PDFA_NOTE.key.SIG_DATE=Datum/Zeit-UTC
+
+
+sig_obj.SIGNATURBLOCK_DE_PDFA_NOTE.value.SIG_SUBJECT=${subject.T != null ? (subject.T + " ") : ""}${subject.CN}
+
+sig_obj.SIGNATURBLOCK_DE_PDFA_NOTE.pos=f:80
+sig_obj.SIGNATURBLOCK_DE_PDFA_NOTE.adobeSignFieldValue=PDF-AS Signatur
+sig_obj.SIGNATURBLOCK_DE_PDFA_NOTE.adobeSignReasonValue=Signaturpruefung unter: http://www.signaturpruefung.gv.at
+sig_obj.SIGNATURBLOCK_DE_PDFA_NOTE.verifyURL=http://www.signaturpruefung.gv.at
+
+# WAI
+sig_obj.SIGNATURBLOCK_DE_PDFA_NOTE.sigLogoAltText=Abgebildet ist eine Standard-Signaturbildmarke.
+
+sig_obj.SIGNATURBLOCK_DE_PDFA_NOTE.value.SIG_META=Signaturpruefung unter: http://www.signaturpruefung.gv.at
+sig_obj.SIGNATURBLOCK_DE_PDFA_NOTE.value.SIG_LABEL=./images/signatur-logo_de.png
+sig_obj.SIGNATURBLOCK_DE_PDFA_NOTE.value.SIG_NOTE=Dieses mit einer qualifizierten elektronischen Signatur versehene Dokument ist gemäß §\u00A04 Abs.\u00A01 Signaturgesetz einem handschriftlich unterschriebenen Dokument grundsätzlich rechtlich gleichgestellt.
+
+#---------------------- MAIN TABLE -------------------------
+sig_obj.SIGNATURBLOCK_DE_PDFA_NOTE.table.main.1=SIG_VALUE-cv
+sig_obj.SIGNATURBLOCK_DE_PDFA_NOTE.table.main.2=SIG_LABEL-i|TABLE-info
+sig_obj.SIGNATURBLOCK_DE_PDFA_NOTE.table.main.3=SIG_META-cv
+sig_obj.SIGNATURBLOCK_DE_PDFA_NOTE.table.main.4=SIG_NOTE-cv
+sig_obj.SIGNATURBLOCK_DE_PDFA_NOTE.table.main.5=SIG_DATE-cv
+
+sig_obj.SIGNATURBLOCK_DE_PDFA_NOTE.table.main.ColsWidth=1 5.5
+sig_obj.SIGNATURBLOCK_DE_PDFA_NOTE.table.main.Style.bgcolor=255 255 255
+sig_obj.SIGNATURBLOCK_DE_PDFA_NOTE.table.main.Style.padding=4
+sig_obj.SIGNATURBLOCK_DE_PDFA_NOTE.table.main.Style.border=0.1
+sig_obj.SIGNATURBLOCK_DE_PDFA_NOTE.table.main.Style.halign=center
+sig_obj.SIGNATURBLOCK_DE_PDFA_NOTE.table.main.Style.valuehalign=left
+sig_obj.SIGNATURBLOCK_DE_PDFA_NOTE.table.main.Style.valign=top
+sig_obj.SIGNATURBLOCK_DE_PDFA_NOTE.table.main.Style.imagevalign=middle
+sig_obj.SIGNATURBLOCK_DE_PDFA_NOTE.table.main.Style.font=TTF:DejaVuSansCondensed-Bold.ttf,8
+sig_obj.SIGNATURBLOCK_DE_PDFA_NOTE.table.main.Style.valuefont=TTF:DejaVuSansMono.ttf,8
+
+#---------------------- INFO TABLE -------------------------
+sig_obj.SIGNATURBLOCK_DE_PDFA_NOTE.table.info.ColsWidth=1 3.5
+#sig_obj.SIGNATURBLOCK_DE_PDFA_NOTE.table.info.1=SIG_NAME-cv
+sig_obj.SIGNATURBLOCK_DE_PDFA_NOTE.table.info.1=SIG_SUBJECT-cv
+sig_obj.SIGNATURBLOCK_DE_PDFA_NOTE.table.info.2=SIG_ISSUER-cv
+sig_obj.SIGNATURBLOCK_DE_PDFA_NOTE.table.info.3=SIG_NUMBER-cv
+sig_obj.SIGNATURBLOCK_DE_PDFA_NOTE.table.info.4=SIG_KZ-cv
+sig_obj.SIGNATURBLOCK_DE_PDFA_NOTE.table.info.5=SIG_ID-cv
+
+
+
+
+
+###################################################################################################
+# PROFIL: Signaturblock (Englisch), PDF/A-1b
+
+sig_obj.SIGNATURBLOCK_EN_PDFA.description=Standardsignatur Englisch, PDF/A-1b
+
+# enable/disable PDF/A1b support for this profile
+sig_obj.SIGNATURBLOCK_EN_PDFA.key.SIG_PDFA1B_VALID=true
+
+sig_obj.SIGNATURBLOCK_EN_PDFA.key.SIG_VALUE=Signature Value
+#sig_obj.SIGNATURBLOCK_EN_PDFA.key.SIG_NAME=Signatory
+sig_obj.SIGNATURBLOCK_EN_PDFA.key.SIG_SUBJECT=Signatory
+sig_obj.SIGNATURBLOCK_EN_PDFA.key.SIG_ISSUER=Issuer-Certificate
+sig_obj.SIGNATURBLOCK_EN_PDFA.key.SIG_NUMBER=Serial-No.
+sig_obj.SIGNATURBLOCK_EN_PDFA.key.SIG_KZ=Method
+sig_obj.SIGNATURBLOCK_EN_PDFA.key.SIG_ID=Parameter
+sig_obj.SIGNATURBLOCK_EN_PDFA.key.SIG_META=Verification
+sig_obj.SIGNATURBLOCK_EN_PDFA.key.SIG_DATE=Date/Time-UTC
+
+
+sig_obj.SIGNATURBLOCK_EN_PDFA.value.SIG_SUBJECT=${subject.T != null ? (subject.T + " ") : ""}${subject.CN}
+
+sig_obj.SIGNATURBLOCK_EN_PDFA.pos=f:80
+sig_obj.SIGNATURBLOCK_EN_PDFA.adobeSignFieldValue=PDF-AS Signature
+sig_obj.SIGNATURBLOCK_EN_PDFA.adobeSignReasonValue=Signature verification at http://www.signature-verification.gv.at
+sig_obj.SIGNATURBLOCK_EN_PDFA.verifyURL=http://www.signature-verification.gv.at
+
+# WAI
+sig_obj.SIGNATURBLOCK_EN_PDFA.sigLogoAltText=A standard signature logo is shown.
+
+sig_obj.SIGNATURBLOCK_EN_PDFA.value.SIG_META=Signature verification at: http://www.signature-verification.gv.at
+sig_obj.SIGNATURBLOCK_EN_PDFA.value.SIG_LABEL=./images/signatur-logo_en.png
+
+#---------------------- MAIN TABLE -------------------------
+sig_obj.SIGNATURBLOCK_EN_PDFA.table.main.1=SIG_VALUE-cv
+sig_obj.SIGNATURBLOCK_EN_PDFA.table.main.2=SIG_LABEL-i|TABLE-info
+sig_obj.SIGNATURBLOCK_EN_PDFA.table.main.3=SIG_META-cv
+sig_obj.SIGNATURBLOCK_EN_PDFA.table.main.4=SIG_DATE-cv
+
+sig_obj.SIGNATURBLOCK_EN_PDFA.table.main.ColsWidth=1 5.5
+sig_obj.SIGNATURBLOCK_EN_PDFA.table.main.Style.bgcolor=255 255 255
+sig_obj.SIGNATURBLOCK_EN_PDFA.table.main.Style.padding=4
+sig_obj.SIGNATURBLOCK_EN_PDFA.table.main.Style.border=0.1
+sig_obj.SIGNATURBLOCK_EN_PDFA.table.main.Style.halign=center
+sig_obj.SIGNATURBLOCK_EN_PDFA.table.main.Style.valuehalign=left
+sig_obj.SIGNATURBLOCK_EN_PDFA.table.main.Style.valign=top
+sig_obj.SIGNATURBLOCK_EN_PDFA.table.main.Style.imagevalign=middle
+sig_obj.SIGNATURBLOCK_EN_PDFA.table.main.Style.font=TTF:DejaVuSansCondensed-Bold.ttf,8
+sig_obj.SIGNATURBLOCK_EN_PDFA.table.main.Style.valuefont=TTF:DejaVuSansMono.ttf,8
+
+#---------------------- INFO TABLE -------------------------
+sig_obj.SIGNATURBLOCK_EN_PDFA.table.info.ColsWidth=1 4.5
+#sig_obj.SIGNATURBLOCK_EN_PDFA.table.info.1=SIG_NAME-cv
+sig_obj.SIGNATURBLOCK_EN_PDFA.table.info.1=SIG_SUBJECT-cv
+sig_obj.SIGNATURBLOCK_EN_PDFA.table.info.2=SIG_ISSUER-cv
+sig_obj.SIGNATURBLOCK_EN_PDFA.table.info.3=SIG_NUMBER-cv
+sig_obj.SIGNATURBLOCK_EN_PDFA.table.info.4=SIG_KZ-cv
+sig_obj.SIGNATURBLOCK_EN_PDFA.table.info.5=SIG_ID-cv
+
+
+
+###################################################################################################
+# PROFIL: Signaturblock (Englisch), PDF/A-1b und mit Hinweistext
+
+sig_obj.SIGNATURBLOCK_EN_PDFA_NOTE.description=Standardsignatur Englisch, PDF/A-1b
+
+# enable/disable PDF/A1b support for this profile
+sig_obj.SIGNATURBLOCK_EN_PDFA_NOTE.key.SIG_PDFA1B_VALID=true
+
+sig_obj.SIGNATURBLOCK_EN_PDFA_NOTE.key.SIG_VALUE=Signature Value
+#sig_obj.SIGNATURBLOCK_EN_PDFA_NOTE.key.SIG_NAME=Signatory
+sig_obj.SIGNATURBLOCK_EN_PDFA_NOTE.key.SIG_SUBJECT=Signatory
+sig_obj.SIGNATURBLOCK_EN_PDFA_NOTE.key.SIG_ISSUER=Issuer-Certificate
+sig_obj.SIGNATURBLOCK_EN_PDFA_NOTE.key.SIG_NUMBER=Serial-No.
+sig_obj.SIGNATURBLOCK_EN_PDFA_NOTE.key.SIG_KZ=Method
+sig_obj.SIGNATURBLOCK_EN_PDFA_NOTE.key.SIG_ID=Parameter
+sig_obj.SIGNATURBLOCK_EN_PDFA_NOTE.key.SIG_META=Verification
+sig_obj.SIGNATURBLOCK_EN_PDFA_NOTE.key.SIG_NOTE=Note
+sig_obj.SIGNATURBLOCK_EN_PDFA_NOTE.key.SIG_DATE=Date/Time-UTC
+
+
+sig_obj.SIGNATURBLOCK_EN_PDFA_NOTE.value.SIG_SUBJECT=${subject.T != null ? (subject.T + " ") : ""}${subject.CN}
+
+sig_obj.SIGNATURBLOCK_EN_PDFA_NOTE.pos=f:80
+sig_obj.SIGNATURBLOCK_EN_PDFA_NOTE.adobeSignFieldValue=PDF-AS Signature
+sig_obj.SIGNATURBLOCK_EN_PDFA_NOTE.adobeSignReasonValue=Signature verification at http://www.signature-verification.gv.at
+sig_obj.SIGNATURBLOCK_EN_PDFA_NOTE.verifyURL=http://www.signature-verification.gv.at
+
+# WAI
+sig_obj.SIGNATURBLOCK_EN_PDFA_NOTE.sigLogoAltText=A standard signature logo is shown.
+
+sig_obj.SIGNATURBLOCK_EN_PDFA_NOTE.value.SIG_META=Signature verification at: http://www.signature-verification.gv.at
+sig_obj.SIGNATURBLOCK_EN_PDFA_NOTE.value.SIG_LABEL=./images/signatur-logo_en.png
+sig_obj.SIGNATURBLOCK_EN_PDFA_NOTE.value.SIG_NOTE=This document is signed with a qualified electronic signature. According to §\u00A04 art.\u00A01 of the Signature Act it in principle is legally equivalent to an handwritten signature.
+
+#---------------------- MAIN TABLE -------------------------
+sig_obj.SIGNATURBLOCK_EN_PDFA_NOTE.table.main.1=SIG_VALUE-cv
+sig_obj.SIGNATURBLOCK_EN_PDFA_NOTE.table.main.2=SIG_LABEL-i|TABLE-info
+sig_obj.SIGNATURBLOCK_EN_PDFA_NOTE.table.main.3=SIG_META-cv
+sig_obj.SIGNATURBLOCK_EN_PDFA_NOTE.table.main.4=SIG_NOTE-cv
+sig_obj.SIGNATURBLOCK_EN_PDFA_NOTE.table.main.5=SIG_DATE-cv
+
+sig_obj.SIGNATURBLOCK_EN_PDFA_NOTE.table.main.ColsWidth=1 5.5
+sig_obj.SIGNATURBLOCK_EN_PDFA_NOTE.table.main.Style.bgcolor=255 255 255
+sig_obj.SIGNATURBLOCK_EN_PDFA_NOTE.table.main.Style.padding=4
+sig_obj.SIGNATURBLOCK_EN_PDFA_NOTE.table.main.Style.border=0.1
+sig_obj.SIGNATURBLOCK_EN_PDFA_NOTE.table.main.Style.halign=center
+sig_obj.SIGNATURBLOCK_EN_PDFA_NOTE.table.main.Style.valuehalign=left
+sig_obj.SIGNATURBLOCK_EN_PDFA_NOTE.table.main.Style.valign=top
+sig_obj.SIGNATURBLOCK_EN_PDFA_NOTE.table.main.Style.imagevalign=middle
+sig_obj.SIGNATURBLOCK_EN_PDFA_NOTE.table.main.Style.font=TTF:DejaVuSansCondensed-Bold.ttf,8
+sig_obj.SIGNATURBLOCK_EN_PDFA_NOTE.table.main.Style.valuefont=TTF:DejaVuSansMono.ttf,8
+
+#---------------------- INFO TABLE -------------------------
+sig_obj.SIGNATURBLOCK_EN_PDFA_NOTE.table.info.ColsWidth=1 4.5
+#sig_obj.SIGNATURBLOCK_EN_PDFA_NOTE.table.info.1=SIG_NAME-cv
+sig_obj.SIGNATURBLOCK_EN_PDFA_NOTE.table.info.1=SIG_SUBJECT-cv
+sig_obj.SIGNATURBLOCK_EN_PDFA_NOTE.table.info.2=SIG_ISSUER-cv
+sig_obj.SIGNATURBLOCK_EN_PDFA_NOTE.table.info.3=SIG_NUMBER-cv
+sig_obj.SIGNATURBLOCK_EN_PDFA_NOTE.table.info.4=SIG_KZ-cv
+sig_obj.SIGNATURBLOCK_EN_PDFA_NOTE.table.info.5=SIG_ID-cv
+
+
+
+
+###################################################################################################
+# PROFIL: minimaler Signaturblock (Deutsch)
+
+sig_obj.SIGNATURBLOCK_MINIMAL_DE.description=minimale Standardsignatur Deutsch
+sig_obj.SIGNATURBLOCK_MINIMAL_DE.key.SIG_META=Prüfinformation
+
+sig_obj.SIGNATURBLOCK_MINIMAL_DE.pos=w:230.0;f:80
+sig_obj.SIGNATURBLOCK_MINIMAL_DE.adobeSignFieldValue=PDF-AS Signatur
+sig_obj.SIGNATURBLOCK_MINIMAL_DE.adobeSignReasonValue=Signaturpruefung unter http://www.signaturpruefung.gv.at
+sig_obj.SIGNATURBLOCK_MINIMAL_DE.verifyURL=http://www.signaturpruefung.gv.at
+
+sig_obj.SIGNATURBLOCK_MINIMAL_DE.value.SIG_META=Signaturpruefung unter: http://www.signaturpruefung.gv.at
+sig_obj.SIGNATURBLOCK_MINIMAL_DE.value.SIG_LABEL=./images/signatur-logo_de.png
+sig_obj.SIGNATURBLOCK_MINIMAL_DE.table.main.Style.imagescaletofit=65.0;65.0
+
+# WAI
+sig_obj.SIGNATURBLOCK_MINIMAL_DE.sigLogoAltText=Abgebildet ist eine Standard-Signaturbildmarke.
+
+#---------------------- MAIN TABLE -------------------------
+sig_obj.SIGNATURBLOCK_MINIMAL_DE.table.main.1=SIG_LABEL-i
+sig_obj.SIGNATURBLOCK_MINIMAL_DE.table.main.2=SIG_META-v
+
+sig_obj.SIGNATURBLOCK_MINIMAL_DE.table.main.ColsWidth=1
+sig_obj.SIGNATURBLOCK_MINIMAL_DE.table.main.Style.bgcolor=255 255 255
+sig_obj.SIGNATURBLOCK_MINIMAL_DE.table.main.Style.padding=4
+sig_obj.SIGNATURBLOCK_MINIMAL_DE.table.main.Style.border=0
+sig_obj.SIGNATURBLOCK_MINIMAL_DE.table.main.Style.halign=center
+sig_obj.SIGNATURBLOCK_MINIMAL_DE.table.main.Style.valuehalign=left
+sig_obj.SIGNATURBLOCK_MINIMAL_DE.table.main.Style.valign=middle
+sig_obj.SIGNATURBLOCK_MINIMAL_DE.table.main.Style.font=HELVETICA,9,NORMAL
+sig_obj.SIGNATURBLOCK_MINIMAL_DE.table.main.Style.valuefont=HELVETICA,9,NORMAL
+
+###################################################################################################
+# PROFIL: minimaler Signaturblock (Englisch)
+
+sig_obj.SIGNATURBLOCK_MINIMAL_EN.description=minimale Standardsignatur Englisch
+sig_obj.SIGNATURBLOCK_MINIMAL_EN.key.SIG_META=Verification
+
+sig_obj.SIGNATURBLOCK_MINIMAL_EN.pos=w:230.0;f:80
+sig_obj.SIGNATURBLOCK_MINIMAL_EN.adobeSignFieldValue=PDF-AS Signature
+sig_obj.SIGNATURBLOCK_MINIMAL_EN.adobeSignReasonValue=Information about the verification can be found at http://www.signature-verification.gv.at
+sig_obj.SIGNATURBLOCK_MINIMAL_EN.verifyURL=http://www.signature-verification.gv.at
+
+sig_obj.SIGNATURBLOCK_MINIMAL_EN.value.SIG_META=Signature verification at: http://www.signature-verification.gv.at
+sig_obj.SIGNATURBLOCK_MINIMAL_EN.value.SIG_LABEL=./images/signatur-logo_en.png
+sig_obj.SIGNATURBLOCK_MINIMAL_EN.table.main.Style.imagescaletofit=65.0;65.0
+
+# WAI
+sig_obj.SIGNATURBLOCK_MINIMAL_EN.sigLogoAltText=A standard signature logo is shown.
+
+#---------------------- MAIN TABLE -------------------------
+sig_obj.SIGNATURBLOCK_MINIMAL_EN.table.main.1=SIG_LABEL-i
+sig_obj.SIGNATURBLOCK_MINIMAL_EN.table.main.2=SIG_META-v
+
+sig_obj.SIGNATURBLOCK_MINIMAL_EN.table.main.ColsWidth=1
+sig_obj.SIGNATURBLOCK_MINIMAL_EN.table.main.Style.bgcolor=255 255 255
+sig_obj.SIGNATURBLOCK_MINIMAL_EN.table.main.Style.padding=4
+sig_obj.SIGNATURBLOCK_MINIMAL_EN.table.main.Style.border=0
+sig_obj.SIGNATURBLOCK_MINIMAL_EN.table.main.Style.halign=center
+sig_obj.SIGNATURBLOCK_MINIMAL_EN.table.main.Style.valuehalign=left
+sig_obj.SIGNATURBLOCK_MINIMAL_EN.table.main.Style.valign=middle
+sig_obj.SIGNATURBLOCK_MINIMAL_EN.table.main.Style.font=HELVETICA,9,NORMAL
+sig_obj.SIGNATURBLOCK_MINIMAL_EN.table.main.Style.valuefont=HELVETICA,9,NORMAL
+
+
+
+###################################################################################################
+# PROFIL: Signaturblock klein (Deutsch)
+
+sig_obj.SIGNATURBLOCK_SMALL_DE.description=Standardsignatur klein Deutsch
+
+sig_obj.SIGNATURBLOCK_SMALL_DE.key.SIG_VALUE=Signaturwert
+#sig_obj.SIGNATURBLOCK_SMALL_DE.key.SIG_NAME=Unterzeichner
+sig_obj.SIGNATURBLOCK_SMALL_DE.key.SIG_SUBJECT=Unterzeichner
+sig_obj.SIGNATURBLOCK_SMALL_DE.key.SIG_ISSUER=Aussteller-Zertifikat
+sig_obj.SIGNATURBLOCK_SMALL_DE.key.SIG_NUMBER=Serien-Nr.
+sig_obj.SIGNATURBLOCK_SMALL_DE.key.SIG_KZ=Methode
+sig_obj.SIGNATURBLOCK_SMALL_DE.key.SIG_ID=Parameter
+sig_obj.SIGNATURBLOCK_SMALL_DE.key.SIG_META=Prüfinformation
+sig_obj.SIGNATURBLOCK_SMALL_DE.key.SIG_DATE=Datum/Zeit-UTC
+
+
+sig_obj.SIGNATURBLOCK_SMALL_DE.value.SIG_SUBJECT=${subject.T != null ? (subject.T + " ") : ""}${subject.CN}
+
+sig_obj.SIGNATURBLOCK_SMALL_DE.pos=f:80;w:230
+sig_obj.SIGNATURBLOCK_SMALL_DE.adobeSignFieldValue=PDF-AS Signatur
+sig_obj.SIGNATURBLOCK_SMALL_DE.adobeSignReasonValue=Signaturpruefung unter http://www.signaturpruefung.gv.at
+sig_obj.SIGNATURBLOCK_SMALL_DE.verifyURL=http://www.signaturpruefung.gv.at
+
+# WAI
+sig_obj.SIGNATURBLOCK_SMALL_DE.sigLogoAltText=Abgebildet ist eine Standard-Signaturbildmarke.
+
+sig_obj.SIGNATURBLOCK_SMALL_DE.value.SIG_META=Signaturpruefung unter: http://www.signaturpruefung.gv.at
+sig_obj.SIGNATURBLOCK_SMALL_DE.value.SIG_LABEL=./images/signatur-logo_de.png
+
+#---------------------- MAIN TABLE -------------------------
+sig_obj.SIGNATURBLOCK_SMALL_DE.table.main.1=SIG_VALUE-cv
+sig_obj.SIGNATURBLOCK_SMALL_DE.table.main.2=SIG_LABEL-i|TABLE-info
+sig_obj.SIGNATURBLOCK_SMALL_DE.table.main.3=SIG_META-cv
+sig_obj.SIGNATURBLOCK_SMALL_DE.table.main.4=SIG_DATE-cv
+
+sig_obj.SIGNATURBLOCK_SMALL_DE.table.main.ColsWidth=1 4.5
+sig_obj.SIGNATURBLOCK_SMALL_DE.table.main.Style.bgcolor=255 255 255
+sig_obj.SIGNATURBLOCK_SMALL_DE.table.main.Style.padding=2
+sig_obj.SIGNATURBLOCK_SMALL_DE.table.main.Style.border=0.1
+sig_obj.SIGNATURBLOCK_SMALL_DE.table.main.Style.halign=center
+sig_obj.SIGNATURBLOCK_SMALL_DE.table.main.Style.valuehalign=left
+sig_obj.SIGNATURBLOCK_SMALL_DE.table.main.Style.valign=top
+sig_obj.SIGNATURBLOCK_SMALL_DE.table.main.Style.imagevalign=middle
+sig_obj.SIGNATURBLOCK_SMALL_DE.table.main.Style.font=HELVETICA,5,BOLD
+sig_obj.SIGNATURBLOCK_SMALL_DE.table.main.Style.valuefont=COURIER,5,NORMAL
+
+#---------------------- INFO TABLE -------------------------
+sig_obj.SIGNATURBLOCK_SMALL_DE.table.info.ColsWidth=1 2.7
+#sig_obj.SIGNATURBLOCK_SMALL_DE.table.info.1=SIG_NAME-cv
+sig_obj.SIGNATURBLOCK_SMALL_DE.table.info.1=SIG_SUBJECT-cv
+sig_obj.SIGNATURBLOCK_SMALL_DE.table.info.2=SIG_ISSUER-cv
+sig_obj.SIGNATURBLOCK_SMALL_DE.table.info.3=SIG_NUMBER-cv
+sig_obj.SIGNATURBLOCK_SMALL_DE.table.info.4=SIG_KZ-cv
+sig_obj.SIGNATURBLOCK_SMALL_DE.table.info.5=SIG_ID-cv
+
+
+
+###################################################################################################
+# PROFIL: Signaturblock klein (Deutsch) mit Hinweistext
+
+sig_obj.SIGNATURBLOCK_SMALL_DE_NOTE.description=Standardsignatur klein Deutsch
+
+sig_obj.SIGNATURBLOCK_SMALL_DE_NOTE.key.SIG_VALUE=Signaturwert
+#sig_obj.SIGNATURBLOCK_SMALL_DE_NOTE.key.SIG_NAME=Unterzeichner
+sig_obj.SIGNATURBLOCK_SMALL_DE_NOTE.key.SIG_SUBJECT=Unterzeichner
+sig_obj.SIGNATURBLOCK_SMALL_DE_NOTE.key.SIG_ISSUER=Aussteller-Zertifikat
+sig_obj.SIGNATURBLOCK_SMALL_DE_NOTE.key.SIG_NUMBER=Serien-Nr.
+sig_obj.SIGNATURBLOCK_SMALL_DE_NOTE.key.SIG_KZ=Methode
+sig_obj.SIGNATURBLOCK_SMALL_DE_NOTE.key.SIG_ID=Parameter
+sig_obj.SIGNATURBLOCK_SMALL_DE_NOTE.key.SIG_META=Prüfinformation
+sig_obj.SIGNATURBLOCK_SMALL_DE_NOTE.key.SIG_NOTE=Hinweis
+sig_obj.SIGNATURBLOCK_SMALL_DE_NOTE.key.SIG_DATE=Datum/Zeit-UTC
+
+
+sig_obj.SIGNATURBLOCK_SMALL_DE_NOTE.value.SIG_SUBJECT=${subject.T != null ? (subject.T + " ") : ""}${subject.CN}
+
+sig_obj.SIGNATURBLOCK_SMALL_DE_NOTE.pos=f:80;w:230
+sig_obj.SIGNATURBLOCK_SMALL_DE_NOTE.adobeSignFieldValue=PDF-AS Signatur
+sig_obj.SIGNATURBLOCK_SMALL_DE_NOTE.adobeSignReasonValue=Signaturpruefung unter http://www.signaturpruefung.gv.at
+sig_obj.SIGNATURBLOCK_SMALL_DE_NOTE.verifyURL=http://www.signaturpruefung.gv.at
+
+# WAI
+sig_obj.SIGNATURBLOCK_SMALL_DE_NOTE.sigLogoAltText=Abgebildet ist eine Standard-Signaturbildmarke.
+
+sig_obj.SIGNATURBLOCK_SMALL_DE_NOTE.value.SIG_META=Signaturpruefung unter: http://www.signaturpruefung.gv.at
+sig_obj.SIGNATURBLOCK_SMALL_DE_NOTE.value.SIG_LABEL=./images/signatur-logo_de.png
+sig_obj.SIGNATURBLOCK_SMALL_DE_NOTE.value.SIG_NOTE=Dieses mit einer qualifizierten elektronischen Signatur versehene Dokument ist gemäß §\u00A04 Abs.\u00A01 Signaturgesetz einem handschriftlich unterschriebenen Dokument grundsätzlich rechtlich gleichgestellt.
+
+#---------------------- MAIN TABLE -------------------------
+sig_obj.SIGNATURBLOCK_SMALL_DE_NOTE.table.main.1=SIG_VALUE-cv
+sig_obj.SIGNATURBLOCK_SMALL_DE_NOTE.table.main.2=SIG_LABEL-i|TABLE-info
+sig_obj.SIGNATURBLOCK_SMALL_DE_NOTE.table.main.3=SIG_META-cv
+sig_obj.SIGNATURBLOCK_SMALL_DE_NOTE.table.main.4=SIG_NOTE-cv
+sig_obj.SIGNATURBLOCK_SMALL_DE_NOTE.table.main.5=SIG_DATE-cv
+
+sig_obj.SIGNATURBLOCK_SMALL_DE_NOTE.table.main.ColsWidth=1 4.5
+sig_obj.SIGNATURBLOCK_SMALL_DE_NOTE.table.main.Style.bgcolor=255 255 255
+sig_obj.SIGNATURBLOCK_SMALL_DE_NOTE.table.main.Style.padding=2
+sig_obj.SIGNATURBLOCK_SMALL_DE_NOTE.table.main.Style.border=0.1
+sig_obj.SIGNATURBLOCK_SMALL_DE_NOTE.table.main.Style.halign=center
+sig_obj.SIGNATURBLOCK_SMALL_DE_NOTE.table.main.Style.valuehalign=left
+sig_obj.SIGNATURBLOCK_SMALL_DE_NOTE.table.main.Style.valign=top
+sig_obj.SIGNATURBLOCK_SMALL_DE_NOTE.table.main.Style.imagevalign=middle
+sig_obj.SIGNATURBLOCK_SMALL_DE_NOTE.table.main.Style.font=HELVETICA,5,BOLD
+sig_obj.SIGNATURBLOCK_SMALL_DE_NOTE.table.main.Style.valuefont=COURIER,5,NORMAL
+
+#---------------------- INFO TABLE -------------------------
+sig_obj.SIGNATURBLOCK_SMALL_DE_NOTE.table.info.ColsWidth=1 2.7
+#sig_obj.SIGNATURBLOCK_SMALL_DE_NOTE.table.info.1=SIG_NAME-cv
+sig_obj.SIGNATURBLOCK_SMALL_DE_NOTE.table.info.1=SIG_SUBJECT-cv
+sig_obj.SIGNATURBLOCK_SMALL_DE_NOTE.table.info.2=SIG_ISSUER-cv
+sig_obj.SIGNATURBLOCK_SMALL_DE_NOTE.table.info.3=SIG_NUMBER-cv
+sig_obj.SIGNATURBLOCK_SMALL_DE_NOTE.table.info.4=SIG_KZ-cv
+sig_obj.SIGNATURBLOCK_SMALL_DE_NOTE.table.info.5=SIG_ID-cv
+
+
+
+
+
+
+###################################################################################################
+# PROFIL: Signaturblock Small (Englisch)
+
+sig_obj.SIGNATURBLOCK_SMALL_EN.description=Standardsignatur klein Englisch
+
+sig_obj.SIGNATURBLOCK_SMALL_EN.key.SIG_VALUE=Signature Value
+#sig_obj.SIGNATURBLOCK_SMALL_EN.key.SIG_NAME=Signatory
+sig_obj.SIGNATURBLOCK_SMALL_EN.key.SIG_SUBJECT=Signatory
+sig_obj.SIGNATURBLOCK_SMALL_EN.key.SIG_ISSUER=Issuer-Certificate
+sig_obj.SIGNATURBLOCK_SMALL_EN.key.SIG_NUMBER=Serial-No.
+sig_obj.SIGNATURBLOCK_SMALL_EN.key.SIG_KZ=Method
+sig_obj.SIGNATURBLOCK_SMALL_EN.key.SIG_ID=Parameter
+sig_obj.SIGNATURBLOCK_SMALL_EN.key.SIG_META=Verification
+sig_obj.SIGNATURBLOCK_SMALL_EN.key.SIG_DATE=Date/Time-UTC
+
+
+sig_obj.SIGNATURBLOCK_SMALL_EN.value.SIG_SUBJECT=${subject.T != null ? (subject.T + " ") : ""}${subject.CN}
+
+sig_obj.SIGNATURBLOCK_SMALL_EN.pos=f:80;w:260
+sig_obj.SIGNATURBLOCK_SMALL_EN.adobeSignFieldValue=PDF-AS Signature
+sig_obj.SIGNATURBLOCK_SMALL_EN.adobeSignReasonValue=Signature verification at: http://www.signature-verification.gv.at
+sig_obj.SIGNATURBLOCK_SMALL_EN.verifyURL=http://www.signature-verification.gv.at
+
+sig_obj.SIGNATURBLOCK_SMALL_EN.value.SIG_META=Signature verification at: http://www.signature-verification.gv.at
+sig_obj.SIGNATURBLOCK_SMALL_EN.value.SIG_LABEL=./images/signatur-logo_en.png
+
+# WAI
+sig_obj.SIGNATURBLOCK_SMALL_EN.sigLogoAltText=A standard signature logo is shown.
+
+#---------------------- MAIN TABLE -------------------------
+sig_obj.SIGNATURBLOCK_SMALL_EN.table.main.1=SIG_VALUE-cv
+sig_obj.SIGNATURBLOCK_SMALL_EN.table.main.2=SIG_LABEL-i|TABLE-info
+sig_obj.SIGNATURBLOCK_SMALL_EN.table.main.3=SIG_META-cv
+sig_obj.SIGNATURBLOCK_SMALL_EN.table.main.4=SIG_DATE-cv
+
+sig_obj.SIGNATURBLOCK_SMALL_EN.table.main.ColsWidth=1 4.5
+sig_obj.SIGNATURBLOCK_SMALL_EN.table.main.Style.bgcolor=255 255 255
+sig_obj.SIGNATURBLOCK_SMALL_EN.table.main.Style.padding=2
+sig_obj.SIGNATURBLOCK_SMALL_EN.table.main.Style.border=0.1
+sig_obj.SIGNATURBLOCK_SMALL_EN.table.main.Style.halign=center
+sig_obj.SIGNATURBLOCK_SMALL_EN.table.main.Style.valuehalign=left
+sig_obj.SIGNATURBLOCK_SMALL_EN.table.main.Style.valign=top
+sig_obj.SIGNATURBLOCK_SMALL_EN.table.main.Style.imagevalign=middle
+sig_obj.SIGNATURBLOCK_SMALL_EN.table.main.Style.font=HELVETICA,5,BOLD
+sig_obj.SIGNATURBLOCK_SMALL_EN.table.main.Style.valuefont=COURIER,5,NORMAL
+
+#---------------------- INFO TABLE -------------------------
+sig_obj.SIGNATURBLOCK_SMALL_EN.table.info.ColsWidth=1 3.2
+#sig_obj.SIGNATURBLOCK_SMALL_EN.table.info.1=SIG_NAME-cv
+sig_obj.SIGNATURBLOCK_SMALL_EN.table.info.1=SIG_SUBJECT-cv
+sig_obj.SIGNATURBLOCK_SMALL_EN.table.info.2=SIG_ISSUER-cv
+sig_obj.SIGNATURBLOCK_SMALL_EN.table.info.3=SIG_NUMBER-cv
+sig_obj.SIGNATURBLOCK_SMALL_EN.table.info.4=SIG_KZ-cv
+sig_obj.SIGNATURBLOCK_SMALL_EN.table.info.5=SIG_ID-cv
+
+
+
+###################################################################################################
+# PROFIL: Signaturblock Small (Englisch) mit Hinweistext
+
+sig_obj.SIGNATURBLOCK_SMALL_EN_NOTE.description=Standardsignatur klein Englisch
+
+sig_obj.SIGNATURBLOCK_SMALL_EN_NOTE.key.SIG_VALUE=Signature Value
+#sig_obj.SIGNATURBLOCK_SMALL_EN_NOTE.key.SIG_NAME=Signatory
+sig_obj.SIGNATURBLOCK_SMALL_EN_NOTE.key.SIG_SUBJECT=Signatory
+sig_obj.SIGNATURBLOCK_SMALL_EN_NOTE.key.SIG_ISSUER=Issuer-Certificate
+sig_obj.SIGNATURBLOCK_SMALL_EN_NOTE.key.SIG_NUMBER=Serial-No.
+sig_obj.SIGNATURBLOCK_SMALL_EN_NOTE.key.SIG_KZ=Method
+sig_obj.SIGNATURBLOCK_SMALL_EN_NOTE.key.SIG_ID=Parameter
+sig_obj.SIGNATURBLOCK_SMALL_EN_NOTE.key.SIG_META=Verification
+sig_obj.SIGNATURBLOCK_SMALL_EN_NOTE.key.SIG_NOTE=Note
+sig_obj.SIGNATURBLOCK_SMALL_EN_NOTE.key.SIG_DATE=Date/Time-UTC
+
+
+sig_obj.SIGNATURBLOCK_SMALL_EN_NOTE.value.SIG_SUBJECT=${subject.T != null ? (subject.T + " ") : ""}${subject.CN}
+
+sig_obj.SIGNATURBLOCK_SMALL_EN_NOTE.pos=f:80;w:260
+sig_obj.SIGNATURBLOCK_SMALL_EN_NOTE.adobeSignFieldValue=PDF-AS Signature
+sig_obj.SIGNATURBLOCK_SMALL_EN_NOTE.adobeSignReasonValue=Signature verification at: http://www.signature-verification.gv.at
+sig_obj.SIGNATURBLOCK_SMALL_EN_NOTE.verifyURL=http://www.signature-verification.gv.at
+
+sig_obj.SIGNATURBLOCK_SMALL_EN_NOTE.value.SIG_META=Signature verification at: http://www.signature-verification.gv.at
+sig_obj.SIGNATURBLOCK_SMALL_EN_NOTE.value.SIG_LABEL=./images/signatur-logo_en.png
+sig_obj.SIGNATURBLOCK_SMALL_EN_NOTE.value.SIG_NOTE=This document is signed with a qualified electronic signature. According to §\u00A04 art.\u00A01 of the Signature Act it in principle is legally equivalent to an handwritten signature.
+
+# WAI
+sig_obj.SIGNATURBLOCK_SMALL_EN_NOTE.sigLogoAltText=A standard signature logo is shown.
+
+#---------------------- MAIN TABLE -------------------------
+sig_obj.SIGNATURBLOCK_SMALL_EN_NOTE.table.main.1=SIG_VALUE-cv
+sig_obj.SIGNATURBLOCK_SMALL_EN_NOTE.table.main.2=SIG_LABEL-i|TABLE-info
+sig_obj.SIGNATURBLOCK_SMALL_EN_NOTE.table.main.3=SIG_META-cv
+sig_obj.SIGNATURBLOCK_SMALL_EN_NOTE.table.main.4=SIG_NOTE-cv
+sig_obj.SIGNATURBLOCK_SMALL_EN_NOTE.table.main.5=SIG_DATE-cv
+
+sig_obj.SIGNATURBLOCK_SMALL_EN_NOTE.table.main.ColsWidth=1 4.5
+sig_obj.SIGNATURBLOCK_SMALL_EN_NOTE.table.main.Style.bgcolor=255 255 255
+sig_obj.SIGNATURBLOCK_SMALL_EN_NOTE.table.main.Style.padding=2
+sig_obj.SIGNATURBLOCK_SMALL_EN_NOTE.table.main.Style.border=0.1
+sig_obj.SIGNATURBLOCK_SMALL_EN_NOTE.table.main.Style.halign=center
+sig_obj.SIGNATURBLOCK_SMALL_EN_NOTE.table.main.Style.valuehalign=left
+sig_obj.SIGNATURBLOCK_SMALL_EN_NOTE.table.main.Style.valign=top
+sig_obj.SIGNATURBLOCK_SMALL_EN_NOTE.table.main.Style.imagevalign=middle
+sig_obj.SIGNATURBLOCK_SMALL_EN_NOTE.table.main.Style.font=HELVETICA,5,BOLD
+sig_obj.SIGNATURBLOCK_SMALL_EN_NOTE.table.main.Style.valuefont=COURIER,5,NORMAL
+
+#---------------------- INFO TABLE -------------------------
+sig_obj.SIGNATURBLOCK_SMALL_EN_NOTE.table.info.ColsWidth=1 3.2
+#sig_obj.SIGNATURBLOCK_SMALL_EN_NOTE.table.info.1=SIG_NAME-cv
+sig_obj.SIGNATURBLOCK_SMALL_EN_NOTE.table.info.1=SIG_SUBJECT-cv
+sig_obj.SIGNATURBLOCK_SMALL_EN_NOTE.table.info.2=SIG_ISSUER-cv
+sig_obj.SIGNATURBLOCK_SMALL_EN_NOTE.table.info.3=SIG_NUMBER-cv
+sig_obj.SIGNATURBLOCK_SMALL_EN_NOTE.table.info.4=SIG_KZ-cv
+sig_obj.SIGNATURBLOCK_SMALL_EN_NOTE.table.info.5=SIG_ID-cv
+
+
+
+
+
+
+###################################################################################################
+# PROFIL: Signaturblock (Deutsch)
+
+sig_obj.SIGNATURBLOCK_DE_DEPRECATED.description=Standardsignatur Deutsch
+
+sig_obj.SIGNATURBLOCK_DE_DEPRECATED.key.SIG_VALUE=Signaturwert
+#sig_obj.SIGNATURBLOCK_DE_DEPRECATED.key.SIG_NAME=Unterzeichner
+sig_obj.SIGNATURBLOCK_DE_DEPRECATED.key.SIG_SUBJECT=Unterzeichner
+sig_obj.SIGNATURBLOCK_DE_DEPRECATED.key.SIG_DATE=Datum/Zeit-UTC
+sig_obj.SIGNATURBLOCK_DE_DEPRECATED.key.SIG_ISSUER=Aussteller-Zertifikat
+sig_obj.SIGNATURBLOCK_DE_DEPRECATED.key.SIG_NUMBER=Serien-Nr.
+sig_obj.SIGNATURBLOCK_DE_DEPRECATED.key.SIG_KZ=Methode
+sig_obj.SIGNATURBLOCK_DE_DEPRECATED.key.SIG_ID=Parameter
+sig_obj.SIGNATURBLOCK_DE_DEPRECATED.key.SIG_META=Prüfinformation
+
+sig_obj.SIGNATURBLOCK_DE_DEPRECATED.value.SIG_SUBJECT=${subject.T != null ? (subject.T + " ") : ""}${subject.CN}
+
+sig_obj.SIGNATURBLOCK_DE_DEPRECATED.pos=f:80
+sig_obj.SIGNATURBLOCK_DE_DEPRECATED.adobeSignFieldValue=PDF-AS Signatur
+sig_obj.SIGNATURBLOCK_DE_DEPRECATED.adobeSignReasonValue=Informationen zur Prüfung finden Sie unter http://www.signaturpruefung.gv.at
+sig_obj.SIGNATURBLOCK_DE_DEPRECATED.verifyURL=http://www.signaturpruefung.gv.at
+
+# WAI
+sig_obj.SIGNATURBLOCK_DE_DEPRECATED.sigLogoAltText=Abgebildet ist eine Standard-Signaturbildmarke.
+
+sig_obj.SIGNATURBLOCK_DE_DEPRECATED.value.SIG_META=Signaturpruefung unter: http://www.signaturpruefung.gv.at
+sig_obj.SIGNATURBLOCK_DE_DEPRECATED.value.SIG_LABEL=./images/signatur-logo_de.png
+
+#---------------------- MAIN TABLE -------------------------
+sig_obj.SIGNATURBLOCK_DE_DEPRECATED.table.main.1=SIG_VALUE-cv
+sig_obj.SIGNATURBLOCK_DE_DEPRECATED.table.main.2=SIG_LABEL-i|TABLE-info
+sig_obj.SIGNATURBLOCK_DE_DEPRECATED.table.main.3=SIG_META-cv
+
+sig_obj.SIGNATURBLOCK_DE_DEPRECATED.table.main.ColsWidth=1 6
+sig_obj.SIGNATURBLOCK_DE_DEPRECATED.table.main.Style.bgcolor=255 255 255
+sig_obj.SIGNATURBLOCK_DE_DEPRECATED.table.main.Style.padding=4
+sig_obj.SIGNATURBLOCK_DE_DEPRECATED.table.main.Style.border=0.1
+sig_obj.SIGNATURBLOCK_DE_DEPRECATED.table.main.Style.halign=center
+sig_obj.SIGNATURBLOCK_DE_DEPRECATED.table.main.Style.valuehalign=left
+sig_obj.SIGNATURBLOCK_DE_DEPRECATED.table.main.Style.valign=middle
+sig_obj.SIGNATURBLOCK_DE_DEPRECATED.table.main.Style.imagevalign=middle
+sig_obj.SIGNATURBLOCK_DE_DEPRECATED.table.main.Style.font=HELVETICA,8,BOLD
+sig_obj.SIGNATURBLOCK_DE_DEPRECATED.table.main.Style.valuefont=COURIER,8,NORMAL
+
+#---------------------- INFO TABLE -------------------------
+sig_obj.SIGNATURBLOCK_DE_DEPRECATED.table.info.ColsWidth=1 4
+#sig_obj.SIGNATURBLOCK_DE_DEPRECATED.table.info.1=SIG_NAME-cv
+sig_obj.SIGNATURBLOCK_DE_DEPRECATED.table.info.1=SIG_SUBJECT-cv
+sig_obj.SIGNATURBLOCK_DE_DEPRECATED.table.info.2=SIG_DATE-cv
+sig_obj.SIGNATURBLOCK_DE_DEPRECATED.table.info.3=SIG_ISSUER-cv
+sig_obj.SIGNATURBLOCK_DE_DEPRECATED.table.info.4=SIG_NUMBER-cv
+sig_obj.SIGNATURBLOCK_DE_DEPRECATED.table.info.5=SIG_KZ-cv
+sig_obj.SIGNATURBLOCK_DE_DEPRECATED.table.info.6=SIG_ID-cv
+
+
+
+###################################################################################################
+# PROFIL: Signaturblock (Englisch)
+
+sig_obj.SIGNATURBLOCK_EN_DEPRECATED.description=Standardsignatur Englisch
+
+sig_obj.SIGNATURBLOCK_EN_DEPRECATED.key.SIG_VALUE=Signature Value
+#sig_obj.SIGNATURBLOCK_EN_DEPRECATED.key.SIG_NAME=Signatory
+sig_obj.SIGNATURBLOCK_EN_DEPRECATED.key.SIG_SUBJECT=Signatory
+sig_obj.SIGNATURBLOCK_EN_DEPRECATED.key.SIG_DATE=Date/Time-UTC
+sig_obj.SIGNATURBLOCK_EN_DEPRECATED.key.SIG_ISSUER=Issuer-Certificate
+sig_obj.SIGNATURBLOCK_EN_DEPRECATED.key.SIG_NUMBER=Serial-No.
+sig_obj.SIGNATURBLOCK_EN_DEPRECATED.key.SIG_KZ=Method
+sig_obj.SIGNATURBLOCK_EN_DEPRECATED.key.SIG_ID=Parameter
+sig_obj.SIGNATURBLOCK_EN_DEPRECATED.key.SIG_META=Verification
+
+sig_obj.SIGNATURBLOCK_EN_DEPRECATED.value.SIG_SUBJECT=${subject.T != null ? (subject.T + " ") : ""}${subject.CN}
+
+sig_obj.SIGNATURBLOCK_EN_DEPRECATED.pos=f:80
+sig_obj.SIGNATURBLOCK_EN_DEPRECATED.adobeSignFieldValue=PDF-AS Signature
+sig_obj.SIGNATURBLOCK_EN_DEPRECATED.adobeSignReasonValue=Information about the verification can be found at http://www.signature-verification.gv.at
+sig_obj.SIGNATURBLOCK_EN_DEPRECATED.verifyURL=http://www.signature-verification.gv.at
+
+# WAI
+sig_obj.SIGNATURBLOCK_EN_DEPRECATED.sigLogoAltText=A standard signature logo is shown.
+
+sig_obj.SIGNATURBLOCK_EN_DEPRECATED.value.SIG_META=Signature verification at: http://www.signature-verification.gv.at
+sig_obj.SIGNATURBLOCK_EN_DEPRECATED.value.SIG_LABEL=./images/signatur-logo_en.png
+
+#---------------------- MAIN TABLE -------------------------
+sig_obj.SIGNATURBLOCK_EN_DEPRECATED.table.main.1=SIG_VALUE-cv
+sig_obj.SIGNATURBLOCK_EN_DEPRECATED.table.main.2=SIG_LABEL-i|TABLE-info
+sig_obj.SIGNATURBLOCK_EN_DEPRECATED.table.main.3=SIG_META-cv
+
+sig_obj.SIGNATURBLOCK_EN_DEPRECATED.table.main.ColsWidth=1 6
+sig_obj.SIGNATURBLOCK_EN_DEPRECATED.table.main.Style.bgcolor=255 255 255
+sig_obj.SIGNATURBLOCK_EN_DEPRECATED.table.main.Style.padding=4
+sig_obj.SIGNATURBLOCK_EN_DEPRECATED.table.main.Style.border=0.1
+sig_obj.SIGNATURBLOCK_EN_DEPRECATED.table.main.Style.halign=center
+sig_obj.SIGNATURBLOCK_EN_DEPRECATED.table.main.Style.valuehalign=left
+sig_obj.SIGNATURBLOCK_EN_DEPRECATED.table.main.Style.valign=middle
+sig_obj.SIGNATURBLOCK_EN_DEPRECATED.table.main.Style.imagevalign=middle
+sig_obj.SIGNATURBLOCK_EN_DEPRECATED.table.main.Style.font=HELVETICA,8,BOLD
+sig_obj.SIGNATURBLOCK_EN_DEPRECATED.table.main.Style.valuefont=COURIER,8,NORMAL
+
+#---------------------- INFO TABLE -------------------------
+sig_obj.SIGNATURBLOCK_EN_DEPRECATED.table.info.ColsWidth=1 5
+#sig_obj.SIGNATURBLOCK_EN_DEPRECATED.table.info.1=SIG_NAME-cv
+sig_obj.SIGNATURBLOCK_EN_DEPRECATED.table.info.1=SIG_SUBJECT-cv
+sig_obj.SIGNATURBLOCK_EN_DEPRECATED.table.info.2=SIG_DATE-cv
+sig_obj.SIGNATURBLOCK_EN_DEPRECATED.table.info.3=SIG_ISSUER-cv
+sig_obj.SIGNATURBLOCK_EN_DEPRECATED.table.info.4=SIG_NUMBER-cv
+sig_obj.SIGNATURBLOCK_EN_DEPRECATED.table.info.5=SIG_KZ-cv
+sig_obj.SIGNATURBLOCK_EN_DEPRECATED.table.info.6=SIG_ID-cv
+
+
+
+###################################################################################################
+# PROFIL: Amtssignaturblock (Deutsch)
+
+sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.description=Amtssignaturblock-Deutsch
+
+sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.key.SIG_VALUE=Signaturwert
+sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.key.SIG_SUBJECT=Unterzeichner
+sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.key.SIG_DATE=Datum/Zeit-UTC
+sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.key.SIG_ISSUER=Aussteller-Zertifikat
+sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.key.SIG_NUMBER=Serien-Nr.
+sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.key.SIG_KZ=Methode
+sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.key.SIG_ID=Parameter
+sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.key.SIG_META=Prüfinformation
+sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.key.SIG_NOTE=Hinweis
+
+sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.value.SIG_SUBJECT=DEMO Amtssignatur
+
+sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.pos=f:80
+sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.adobeSignFieldValue=PDF-AS Signatur
+sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.adobeSignReasonValue=Informationen zur Prüfung finden Sie unter http://www.signaturpruefung.gv.at
+sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.verifyURL=http://www.signaturpruefung.gv.at
+
+# WAI
+sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.sigLogoAltText=Abgebildet ist eine Standard-Signaturbildmarke.
+
+sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.value.SIG_META=Signaturpruefung unter: http://www.signaturpruefung.gv.at
+sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.value.SIG_LABEL=./images/signatur-logo_de.png
+sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.value.SIG_NOTE=Dieses Dokument wurde amtssigniert. Auch ein Ausdruck dieses Dokuments hat gemäß § 20 E-Government-Gesetz die Beweiskraft einer öffentlichen Urkunde.
+
+#---------------------- MAIN TABLE -------------------------
+sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.table.main.1=SIG_VALUE-cv
+sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.table.main.2=SIG_LABEL-i|TABLE-info
+sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.table.main.3=SIG_META-cv
+sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.table.main.4=SIG_NOTE-cv
+
+sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.table.main.ColsWidth=1 6
+sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.table.main.Style.bgcolor=255 255 255
+sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.table.main.Style.padding=4
+sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.table.main.Style.border=0.1
+sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.table.main.Style.halign=center
+sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.table.main.Style.valuehalign=left
+sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.table.main.Style.valign=middle
+sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.table.main.Style.imagevalign=middle
+sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.table.main.Style.font=HELVETICA,8,BOLD
+sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.table.main.Style.valuefont=COURIER,8,NORMAL
+
+#---------------------- INFO TABLE -------------------------
+sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.table.info.ColsWidth=1 4
+sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.table.info.1=SIG_SUBJECT-cv
+sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.table.info.2=SIG_DATE-cv
+sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.table.info.3=SIG_ISSUER-cv
+sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.table.info.4=SIG_NUMBER-cv
+sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.table.info.5=SIG_KZ-cv
+sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.table.info.6=SIG_ID-cv
+
+
+
+###################################################################################################
+# PROFIL: Amtssignaturblock (Englisch)
+
+sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.description=Amtssignaturblock-Englisch
+
+sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.key.SIG_VALUE=Signature Value
+sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.key.SIG_SUBJECT=Signatory
+sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.key.SIG_DATE=Date/Time-UTC
+sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.key.SIG_ISSUER=Issuer-Certificate
+sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.key.SIG_NUMBER=Serial-No.
+sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.key.SIG_KZ=Method
+sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.key.SIG_ID=Parameter
+sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.key.SIG_META=Verification
+sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.key.SIG_NOTE=Note
+
+sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.value.SIG_SUBJECT=Official Signature DEMO
+
+sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.pos=f:80
+sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.adobeSignFieldValue=PDF-AS Signature
+sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.adobeSignReasonValue=Information about the verification can be found at http://www.signature-verification.gv.at
+sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.verifyURL=http://www.signature-verification.gv.at
+
+# WAI
+sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.sigLogoAltText=A standard signature logo is shown.
+
+sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.value.SIG_META=Signature verification at: http://www.signature-verification.gv.at
+sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.value.SIG_LABEL=./images/signatur-logo_en.png
+sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.value.SIG_NOTE=This document was signed with an official signature. According to § 20 E-Government-Act a printout of this document has the probative value of an official document.
+
+#---------------------- MAIN TABLE -------------------------
+sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.table.main.1=SIG_VALUE-cv
+sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.table.main.2=SIG_LABEL-i|TABLE-info
+sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.table.main.3=SIG_META-cv
+sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.table.main.4=SIG_NOTE-cv
+
+sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.table.main.ColsWidth=1 6
+sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.table.main.Style.bgcolor=255 255 255
+sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.table.main.Style.padding=4
+sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.table.main.Style.border=0.1
+sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.table.main.Style.halign=center
+sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.table.main.Style.valuehalign=left
+sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.table.main.Style.valign=middle
+sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.table.main.Style.imagevalign=middle
+sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.table.main.Style.font=HELVETICA,8,BOLD
+sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.table.main.Style.valuefont=COURIER,8,NORMAL
+
+#---------------------- INFO TABLE -------------------------
+sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.table.info.ColsWidth=1 5
+sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.table.info.1=SIG_SUBJECT-cv
+sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.table.info.2=SIG_DATE-cv
+sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.table.info.3=SIG_ISSUER-cv
+sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.table.info.4=SIG_NUMBER-cv
+sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.table.info.5=SIG_KZ-cv
+sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.table.info.6=SIG_ID-cv
+
+
+###################################################################################################
+# PROFIL: Zusätzlicher Amtssignaturblock (Deutsch) mit neuem Layout
+# Unterzeichner Musteramt
+
+sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.description=Variabler Amtssignaturblock-Deutsch, neues Layout
+
+sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.key.SIG_VALUE=Signaturwert
+sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.key.SIG_SUBJECT=Unterzeichner
+sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.key.SIG_ISSUER=Aussteller-Zertifikat
+sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.key.SIG_NUMBER=Serien-Nr.
+sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.key.SIG_KZ=Methode
+sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.key.SIG_ID=Parameter
+sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.key.SIG_META=Prüfinformation
+sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.key.SIG_NOTE=Hinweis
+sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.key.SIG_DATE=Datum/Zeit-UTC
+
+sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.phlength.SIG_SUBJECT=200
+sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.phlength.SIG_ISSUER=130
+sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.phlength.SIG_NUMBER=30
+sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.phlength.SIG_ID=30
+sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.value.SIG_SUBJECT=Für die Richtigkeit der Ausfertigung:\nMusteramt\nMusterstadt
+#sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.moa.sign.KeyIdentifier=MusteramtatrustKey
+
+sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.pos=f:80
+sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.adobeSignFieldValue=PDF-AS Signatur
+sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.adobeSignReasonValue=Informationen zur Prüfung finden Sie unter http://www.signaturpruefung.gv.at
+sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.verifyURL=http://www.signaturpruefung.gv.at
+
+# WAI
+sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.sigLogoAltText=Abgebildet ist eine Standard-Signaturbildmarke.
+
+sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.value.SIG_META=Informationen zur Prüfung der elektronischen Signatur finden Sie unter: http://www.signaturpruefung.gv.at\nInformationen zur Prüfung des Ausdrucks finden Sie unter: http://musteramt.musterstadt.gv.at
+sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.value.SIG_LABEL=./images/signatur-logo_de.png
+sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.value.SIG_NOTE=Dieses Dokument wurde amtssigniert. Auch ein Ausdruck dieses Dokuments hat gemäß § 20 E-Government-Gesetz die Beweiskraft einer öffentlichen Urkunde.
+
+#---------------------- MAIN TABLE -------------------------
+sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.table.main.1=SIG_VALUE-cv
+sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.table.main.2=SIG_LABEL-i|TABLE-info
+sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.table.main.3=SIG_META-cv
+sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.table.main.4=SIG_NOTE-cv
+sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.table.main.5=SIG_DATE-cv
+
+sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.table.main.ColsWidth=1 6
+sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.table.main.Style.bgcolor=255 255 255
+sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.table.main.Style.padding=4
+sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.table.main.Style.border=0.1
+sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.table.main.Style.halign=center
+sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.table.main.Style.valuehalign=left
+sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.table.main.Style.valign=top
+sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.table.main.Style.imagevalign=middle
+sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.table.main.Style.font=HELVETICA,8,BOLD
+sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.table.main.Style.valuefont=COURIER,8,NORMAL
+
+#---------------------- INFO TABLE -------------------------
+sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.table.info.ColsWidth=1 4
+sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.table.info.1=SIG_SUBJECT-cv
+sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.table.info.2=SIG_ISSUER-cv
+sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.table.info.3=SIG_NUMBER-cv
+sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.table.info.4=SIG_KZ-cv
+sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.table.info.5=SIG_ID-cv
+
+#####################################################
+
+
+#############################################
+# start additional LDAP-Mappings
+# note: ldap_mapping.xxx.serial_attr may be omitted if value is "eidCertificateSerialNumber"
+
+# A-Trust Sample
+#ldap_mapping.asign_prem_sig01.issuer_name=CN=a-sign-Premium-Sig-01,OU=a-sign-Premium-Sig-01,O=A-Trust Ges. f. Sicherheitssysteme im elektr. Datenverkehr GmbH,C=AT
+#ldap_mapping.asign_prem_sig01.url=ldap://ldap.a-trust.at/ou=a-sign-Premium-Sig-01,o=A-Trust,c=at
+#ldap_mapping.asign_prem_sig01.serial_attr=eidCertificateSerialNumber
+
+# end LDAP-Mappings
+#############################################
+
diff --git a/pdf-as-lib/src/test/resources/at/knowcenter/wag/egov/egiz/cfg/config_single_includes.properties b/pdf-as-lib/src/test/resources/at/knowcenter/wag/egov/egiz/cfg/config_single_includes.properties
new file mode 100644
index 0000000..a9a871c
--- /dev/null
+++ b/pdf-as-lib/src/test/resources/at/knowcenter/wag/egov/egiz/cfg/config_single_includes.properties
@@ -0,0 +1,272 @@
+# PDF-AS Amtssignaturen Beispiel Konfigurationsdatei
+#
+# Diese Konfigurationsdatei gilt als Referenzbeispiel einer
+# Konfigurationsdatei für die PDF-AS Applikation.
+##############################################################
+
+
+# Beim Signieren: Überprüfung ob Dokument PDF-Version 1.4 (oder weniger) hat
+strict_mode=false
+
+# Beim Signieren:
+# Wenn das Dokument nicht verarbeitet werden kann wird versucht es
+# zuerst zu korrigieren und dann das korrigierte Dokument zu signieren.
+correct_document_if_necessary=true
+
+# Beim Verifizieren:
+# Wenn das Dokument nicht verarbeitet werden kann wird versucht es
+# zuerst zu korrigieren und dann das korrigierte Dokument zu verifizieren.
+# Dies kann nur für textuelle Signaturen erfolgreich sein.
+correct_document_on_verify_if_necessary=true
+
+# Wenn ein Dokument korrigiert werden soll:
+# Gibt an mit welchem Corrector ein zu korrigierendes Dokument korrigiert wird:
+# internal - das Dokument wird mit dem "internen" iText Corrector korrigiert
+# external - das Dokument wird durch einen externen Kommandozeilenaufruf korrigiert.
+# Hinweis: ein externes Programm aufzurufen birgt gewisse Risiken in sich
+# und sollte daher möglichst nicht verwendet werden.
+corrector=internal
+
+# Kommandozeile für den externen Connector.
+# Die Variablen ##input_document## bzw. ##output_document## werden von PDF-AS
+# durch die absoluten Pfad- und Dateinamen des zu korrigierenden bzw. des
+# korrigierten Dokuments ersetzt.
+# Als Pfad-Separator sollte '/' verwendet werden.
+external_corrector_commandline=C:/correct.exe "##input_document##" "##output_document##"
+
+# Timeout (ms) für die Ausführung des externen Correctors.
+# Das Kommando wird abgebrochen, wenn das Timeout erreicht wird bevor
+# das Kommando abgearbeitet wurde.
+# Achtung: Es besteht allerdings keine Garantie, dass der Korrekturvorgang auch tatsächlich
+# durch ein Timeout abgebrochen wird. Dies ist im Wesentlichen abhängig von der Beschaffenheit
+# des Korrekturprogramms sowie vom verwendeten Betriebssystem.
+external_corrector_timeout=15000
+
+# Überprüfe Korrektheit des Dokuments
+# bei binary_only=true: Fehler falls textuelle Signatur
+# bei assume_only_signature_blocks=false: Fehler falls inkremetelle Updates nach Signatur
+# In beiden Fällen wird check_old_textual_sigs berücksichtigt.
+check_document=true
+
+# Falls der letzte inkrementelle Updateblock keine Signatur enthält würde sofern
+# check_document=true gesetzt ist eine Exception geworfen werden und die Prüfung
+# abgebrochen werden. Mit diesem Schalter ist es möglich, diese Exception zu
+# unterdrücken, um die Auswertung extern vornehmen zu können (standard: false)
+# supress_exception_when_last_iublock_is_no_signature=false
+
+# Aktiviert, oder deaktiviert grundsätzlich das - potenziell zeit- und ressourcen-aufwaendige
+# Suchen nach Platzhalter-Bildern in PDF-Dokumenten
+# Festlegung fuer einzelnes Profil
+# sig_obj.PROFILE.enable_placeholder_search=[true|false]
+# Die Suche ist standardmässig aus Sicherheitsgruenden deaktiviert (Defaultwert hier = false)
+# Es muss bewusst sein, dass über einen Platzhalter benutzerseitig bestimmte Profile zur Signatur
+# ausgewaehlt werden koennen!
+enable_placeholder_search=false
+
+# VerificationFilterParameters
+binary_only=false
+assume_only_signature_blocks=false
+check_old_textual_sigs=true
+
+# MOA Detached Signieren aus Konsole möglich - zurzeit möglich nur mit BKU
+moa.sign.console.detached.enabled=false
+
+
+#############################################
+# Signaturdienste
+
+# lokale BKU
+bku.available_for_web=true
+bku.available_for_commandline=true
+
+bku.sign.url=http://127.0.0.1:3495/http-security-layer-request
+#bku.sign.url=https://127.0.0.1:3496/https-security-layer-request
+bku.sign.KeyboxIdentifier=SecureSignatureKeypair
+
+# BKU Verifikation
+bku.verify.url=http://127.0.0.1:3495/http-security-layer-request
+#bku.verify.url=https://127.0.0.1:3496/https-security-layer-request
+
+# Online BKU (MOCCA)
+moc.available_for_web=true
+moc.available_for_commandline=false
+
+# MOCCA Signatur
+moc.sign.url=http://127.0.0.1:8080/bkuonline/http-security-layer-request
+moc.sign.KeyboxIdentifier=SecureSignatureKeypair
+
+# Handy Signatur
+mobile.sign.url=https://www.handy-signatur.at/mobile/https-security-layer-request/default.aspx
+mobile.sign.KeyboxIdentifier=SecureSignatureKeypair
+
+# Handy Signatur (Test)
+mobiletest.sign.url=https://test1.a-trust.at/https-security-layer-request/default.aspx
+mobiletest.sign.KeyboxIdentifier=SecureSignatureKeypair
+
+# MOA
+moa.available_for_web=true
+moa.available_for_commandline=true
+
+# MOA Signatur
+moa.sign.url=http://java-dev.datentechnik-innovation.com:8080/moa-spss/services/SignatureCreation
+moa.sign.KeyIdentifier=KG_Test-Signatur_RSA
+
+# MOA Verifikation
+moa.verify.url=http://java-dev.datentechnik-innovation.com:8080/moa-spss/services/SignatureVerification
+moa.verify.TrustProfileID=SecureSignature
+
+
+#############################################
+# aktivierte/deaktivierte Signaturprofile
+
+include.01=profile.AMTSSIGNATURBLOCK_DE.properties
+include.02=profile.AMTSSIGNATURBLOCK_DE_DEPRECATED.properties
+include.03=profile.AMTSSIGNATURBLOCK_EN.properties
+include.04=profile.AMTSSIGNATURBLOCK_EN_DEPRECATED.properties
+include.05=profile.BAIK_ARCHIV_SIGNATUR.properties
+include.06=profile.BAIK_URKUNDE_SIGNATUR.properties
+include.07=profile.INVISIBLE.properties
+include.08=profile.SIGNATURBLOCK_DE.properties
+include.09=profile.SIGNATURBLOCK_DE_DEPRECATED.properties
+include.10=profile.SIGNATURBLOCK_DE_NOTE.properties
+include.11=profile.SIGNATURBLOCK_DE_PDFA.properties
+include.12=profile.SIGNATURBLOCK_DE_PDFA_NOTE.properties
+include.13=profile.SIGNATURBLOCK_EN.properties
+include.14=profile.SIGNATURBLOCK_EN_DEPRECATED.properties
+include.15=profile.SIGNATURBLOCK_EN_NOTE.properties
+include.16=profile.SIGNATURBLOCK_EN_PDFA.properties
+include.17=profile.SIGNATURBLOCK_EN_PDFA_NOTE.properties
+include.18=profile.SIGNATURBLOCK_MINIMAL_DE.properties
+include.19=profile.SIGNATURBLOCK_MINIMAL_EN.properties
+include.20=profile.SIGNATURBLOCK_SMALL_DE.properties
+include.21=profile.SIGNATURBLOCK_SMALL_DE_NOTE.properties
+include.22=profile.SIGNATURBLOCK_SMALL_EN.properties
+include.23=profile.SIGNATURBLOCK_SMALL_EN_NOTE.properties
+include.24=profile.VARIABLER_AMTSSIGNATURBLOCK_DE.properties
+
+
+#####################################################
+# Standardfeldlängen der Felder für die Binärsignatur
+defaults.phlength.SIG_DATE=70
+defaults.phlength.SIG_NUMBER=70
+defaults.phlength.SIG_ISSUER=150
+defaults.phlength.SIG_VALUE=350
+defaults.phlength.SIG_ID=70
+defaults.phlength.SIG_NAME=210
+defaults.phlength.SIG_ALG=100
+# Es möglich in die Werte (value) von eigens definierten Tabellenspalten dynamisch auf Teile des
+# verwendeten Zertifikats zuzugreifen. Konkret kann auf die einzelnen RDNs Teile des Issuer DN
+# und des Subject DN des Signaturzertifikats wie im folgenden Beispiel illustriert zugegriffen
+# werden:
+# (1) sig_obj.PROFIL.value.SIG_SUBJECT= ${subject.CN}${subject.O != null ? ("\n" + subject.O) : ""}
+# (2) sig_obj.PROFIL.value.SIG_SUBJECT= ${subject.T \!\= null ? (subject.T + " ") \: ""}${subject.CN}
+# Beispiel (1) gibt die Organisation des Unterzeichners an, Beispiel (2) Titel und Name
+# Die Notation ${..} ermöglicht die dynamische Auswertung eines Ausdrucks. Verfügbar sind "subject"
+# und "issuer" und die im Zertifikat DN vorhandenen RDNs.
+# Achtung: Für die binäre Signatur funktioniert diese Ersetzung nur für Werte, die als Replacement
+# definiert wurden. Konkret bedeutet dies, dass ein phlength Platzhalter definiert sein muss.
+# Als Maximalwerte sind in RFC5280 folgendes definiert:
+# CommonName ::= PrintableString (SIZE (1..ub-common-name-length))
+# X520Title ::= CHOICE {
+# teletexString TeletexString (SIZE (1..ub-title)),
+# printableString PrintableString (SIZE (1..ub-title)),
+# etc.}
+# OrganizationName ::= PrintableString
+# (SIZE (1..ub-organization-name-length))
+# mit jeweils ub-common-name, ub-title INTEGER oder ub-organization-name-length INTEGER ::= 64
+# Für das oben angeführte Beispiel ist daher die folgende Definition erforderlich um die Ersetzungen
+# für Binärsignaturen zu aktivieren:
+# (1) sig_obj.PROFIL.phlength.SIG_SUBJECT=64 (Extraktion der Organisation)
+# (2) sig_obj.PROFIL.phlength.SIG_SUBJECT=128 (Titel + Name)
+# bzw. global defaults.phlength.SIG_SUBJECT=64 (Fall (1) bzw. 128 für Fall (2))
+defaults.phlength.SIG_SUBJECT=128
+
+# Binärsignatur: reservierter Platz für Zertifikat
+# profilweise: sig_obj.PROFILE.phlength.certificate=xyz
+defaults.phlength.certificate=10000
+
+# Binärsignatur: reservierte Platz für Zeitstempel
+# profilweise: sig_obj.PROFILE.phlength.timestamp=xyz
+defaults.phlength.timestamp=5000
+
+# Standardgröße des Fensters innerhalb dessen Zeilenumbrüche gesetzt werden dürfe.
+# profilweise: sig_obj.PROFILE.phlength.line_break_tolerance=xyz
+defaults.phlength.line_break_tolerance=10
+
+# Falls die Breite eines Signaturblocks definiert wird (über API, Commandline oder über das Profil),
+# die unterhalb eines sinnvollen Wertes liegt, dann wird im Log eine Warnung ausgegeben, da
+# Signaturblöcke unter Umständen nicht mehr sinnvoll dargestellt werden können.
+# Der Standard-Schwellwert für diese Warnungen (= 150) kann global oder profilweise festgelegt
+# werden (z.B. um die Warnung zu deaktivieren, kann der Wert auf 0 gesetzt werden).
+# default.signature_block_width_warning_threshold=xyz
+# sig_obj.PROFILE.signature_block_width_warning_threshold=xyz
+
+# PDF/A-1b Unterstützung für alle Profile einschalten
+default.SIG_PDFA1B_VALID=false
+
+# BAIK-Signatur Unterstützung für alle Profile einschalten
+default.SIG_BAIK_ENABLED=false
+
+
+###############################################
+# Signaturkennzeichnung (für Adobe Acrobat)
+#
+# Jede dieser globalen Einstellungen kann im jeweiligen Profil individuell gesetzt werden.
+# z.B. sig_obj.PROFILE.adobeSignText.binary=Mein Signator
+
+# Adobe Signaturkennzeichnung ein-/ausschalten
+default.adobeSignEnabled=true
+
+# Standard Name für die Signaturkennzeichnung (binär)
+default.adobeSignText.binary=PDF-AS
+
+# Standard Name fuer die Signaturkennzeichnung (textuell)
+default.adobeSignText.textual=PDF-AS
+
+# Standard-Name für die PDF-Signatur
+default.adobeSignFieldValue=PDF-AS Signatur
+
+# Standardwert für "Reason"-Feld der jeweiligen Signatur
+default.adobeSignReasonValue=Informationen zur Prüfung finden Sie unter http://www.signaturpruefung.gv.at
+
+# Standard Prüflink für die Adobe Signaturkennzeichnung (nur relevant falls Adobe Plugin für Prüfung verwendet wird)
+default.verifyURL=http://www.signaturpruefung.gv.at
+
+# Standard Alternativer Text für den Signaturblock (WAI) (globale Einstellung)
+# profilweise: sig_obj.PROFILE.sigLogoAltText=VALUE
+default.sigLogoAltText=Abgebildet ist eine Standard-Signaturbildmarke.
+
+# Profilspezifische Festlegung der Position der Signaturmarke
+# sig_obj.PROFILE.pos=[p:["auto"|"new"|pagenumber];][x:["auto"|floatvalue];][y:["auto"|floatvalue];][w:["auto"|width_floatvalue];][f:footerheight_floatvalue]
+# sig_obj.PROFILE.pos=p:1;x:40.0;y:800.0;w:400.0;f:80
+
+# font definition: face,height,weight
+# default_font: HELVETICA,8,NORMAL
+# font_face: HELVETICA | TIMES_ROMAN | COURIER
+# font_height: float value
+# font_weight: NORMAL | BOLD | ITALIC | BOLDITALIC | UNDERLINE | STRIKETHRU
+
+# Horizontale Ausrichtung
+# sig_obj.PROFILE.table.TABLE_NAME.Style.halign=[left|center|right]
+# sig_obj.PROFILE.table.TABLE_NAME.Style.valuehalign=[left|center|right]
+# sig_obj.PROFILE.table.TABLE_NAME.Style.imagehalign=[left|center|right]
+
+# Vertikale Ausrichtung
+# sig_obj.PROFILE.table.TABLE_NAME.Style.valign=[bottom|middle|top]
+# sig_obj.PROFILE.table.TABLE_NAME.Style.valuevalign=[bottom|middle|top]
+# sig_obj.PROFILE.table.TABLE_NAME.Style.imagevalign=[bottom|middle|top]
+
+
+
+#############################################
+# start additional LDAP-Mappings
+# note: ldap_mapping.xxx.serial_attr may be omitted if value is "eidCertificateSerialNumber"
+
+# A-Trust Sample
+#ldap_mapping.asign_prem_sig01.issuer_name=CN=a-sign-Premium-Sig-01,OU=a-sign-Premium-Sig-01,O=A-Trust Ges. f. Sicherheitssysteme im elektr. Datenverkehr GmbH,C=AT
+#ldap_mapping.asign_prem_sig01.url=ldap://ldap.a-trust.at/ou=a-sign-Premium-Sig-01,o=A-Trust,c=at
+#ldap_mapping.asign_prem_sig01.serial_attr=eidCertificateSerialNumber
+
+# end LDAP-Mappings
+#############################################
+
diff --git a/pdf-as-lib/src/test/resources/at/knowcenter/wag/egov/egiz/cfg/config_subdir_includes.properties b/pdf-as-lib/src/test/resources/at/knowcenter/wag/egov/egiz/cfg/config_subdir_includes.properties
new file mode 100644
index 0000000..8eea4f2
--- /dev/null
+++ b/pdf-as-lib/src/test/resources/at/knowcenter/wag/egov/egiz/cfg/config_subdir_includes.properties
@@ -0,0 +1,250 @@
+# PDF-AS Amtssignaturen Beispiel Konfigurationsdatei
+#
+# Diese Konfigurationsdatei gilt als Referenzbeispiel einer
+# Konfigurationsdatei für die PDF-AS Applikation.
+##############################################################
+
+
+# Beim Signieren: Überprüfung ob Dokument PDF-Version 1.4 (oder weniger) hat
+strict_mode=false
+
+# Beim Signieren:
+# Wenn das Dokument nicht verarbeitet werden kann wird versucht es
+# zuerst zu korrigieren und dann das korrigierte Dokument zu signieren.
+correct_document_if_necessary=true
+
+# Beim Verifizieren:
+# Wenn das Dokument nicht verarbeitet werden kann wird versucht es
+# zuerst zu korrigieren und dann das korrigierte Dokument zu verifizieren.
+# Dies kann nur für textuelle Signaturen erfolgreich sein.
+correct_document_on_verify_if_necessary=true
+
+# Wenn ein Dokument korrigiert werden soll:
+# Gibt an mit welchem Corrector ein zu korrigierendes Dokument korrigiert wird:
+# internal - das Dokument wird mit dem "internen" iText Corrector korrigiert
+# external - das Dokument wird durch einen externen Kommandozeilenaufruf korrigiert.
+# Hinweis: ein externes Programm aufzurufen birgt gewisse Risiken in sich
+# und sollte daher möglichst nicht verwendet werden.
+corrector=internal
+
+# Kommandozeile für den externen Connector.
+# Die Variablen ##input_document## bzw. ##output_document## werden von PDF-AS
+# durch die absoluten Pfad- und Dateinamen des zu korrigierenden bzw. des
+# korrigierten Dokuments ersetzt.
+# Als Pfad-Separator sollte '/' verwendet werden.
+external_corrector_commandline=C:/correct.exe "##input_document##" "##output_document##"
+
+# Timeout (ms) für die Ausführung des externen Correctors.
+# Das Kommando wird abgebrochen, wenn das Timeout erreicht wird bevor
+# das Kommando abgearbeitet wurde.
+# Achtung: Es besteht allerdings keine Garantie, dass der Korrekturvorgang auch tatsächlich
+# durch ein Timeout abgebrochen wird. Dies ist im Wesentlichen abhängig von der Beschaffenheit
+# des Korrekturprogramms sowie vom verwendeten Betriebssystem.
+external_corrector_timeout=15000
+
+# Überprüfe Korrektheit des Dokuments
+# bei binary_only=true: Fehler falls textuelle Signatur
+# bei assume_only_signature_blocks=false: Fehler falls inkremetelle Updates nach Signatur
+# In beiden Fällen wird check_old_textual_sigs berücksichtigt.
+check_document=true
+
+# Falls der letzte inkrementelle Updateblock keine Signatur enthält würde sofern
+# check_document=true gesetzt ist eine Exception geworfen werden und die Prüfung
+# abgebrochen werden. Mit diesem Schalter ist es möglich, diese Exception zu
+# unterdrücken, um die Auswertung extern vornehmen zu können (standard: false)
+# supress_exception_when_last_iublock_is_no_signature=false
+
+# Aktiviert, oder deaktiviert grundsätzlich das - potenziell zeit- und ressourcen-aufwaendige
+# Suchen nach Platzhalter-Bildern in PDF-Dokumenten
+# Festlegung fuer einzelnes Profil
+# sig_obj.PROFILE.enable_placeholder_search=[true|false]
+# Die Suche ist standardmässig aus Sicherheitsgruenden deaktiviert (Defaultwert hier = false)
+# Es muss bewusst sein, dass über einen Platzhalter benutzerseitig bestimmte Profile zur Signatur
+# ausgewaehlt werden koennen!
+enable_placeholder_search=false
+
+# VerificationFilterParameters
+binary_only=false
+assume_only_signature_blocks=false
+check_old_textual_sigs=true
+
+# MOA Detached Signieren aus Konsole möglich - zurzeit möglich nur mit BKU
+moa.sign.console.detached.enabled=false
+
+
+#############################################
+# Signaturdienste
+
+# lokale BKU
+bku.available_for_web=true
+bku.available_for_commandline=true
+
+bku.sign.url=http://127.0.0.1:3495/http-security-layer-request
+#bku.sign.url=https://127.0.0.1:3496/https-security-layer-request
+bku.sign.KeyboxIdentifier=SecureSignatureKeypair
+
+# BKU Verifikation
+bku.verify.url=http://127.0.0.1:3495/http-security-layer-request
+#bku.verify.url=https://127.0.0.1:3496/https-security-layer-request
+
+# Online BKU (MOCCA)
+moc.available_for_web=true
+moc.available_for_commandline=false
+
+# MOCCA Signatur
+moc.sign.url=http://127.0.0.1:8080/bkuonline/http-security-layer-request
+moc.sign.KeyboxIdentifier=SecureSignatureKeypair
+
+# Handy Signatur
+mobile.sign.url=https://www.handy-signatur.at/mobile/https-security-layer-request/default.aspx
+mobile.sign.KeyboxIdentifier=SecureSignatureKeypair
+
+# Handy Signatur (Test)
+mobiletest.sign.url=https://test1.a-trust.at/https-security-layer-request/default.aspx
+mobiletest.sign.KeyboxIdentifier=SecureSignatureKeypair
+
+# MOA
+moa.available_for_web=true
+moa.available_for_commandline=true
+
+# MOA Signatur
+moa.sign.url=http://java-dev.datentechnik-innovation.com:8080/moa-spss/services/SignatureCreation
+moa.sign.KeyIdentifier=KG_Test-Signatur_RSA
+
+# MOA Verifikation
+moa.verify.url=http://java-dev.datentechnik-innovation.com:8080/moa-spss/services/SignatureVerification
+moa.verify.TrustProfileID=SecureSignature
+
+
+#############################################
+# aktivierte/deaktivierte Signaturprofile
+
+include=profile.S*.properties
+include.firstsubdir=subdir1/profile.*.properties
+include.thirdsubdir=subdir1/subdir2/subdir3/profile.INVISIBLE.properties
+
+#####################################################
+# Standardfeldlängen der Felder für die Binärsignatur
+defaults.phlength.SIG_DATE=70
+defaults.phlength.SIG_NUMBER=70
+defaults.phlength.SIG_ISSUER=150
+defaults.phlength.SIG_VALUE=350
+defaults.phlength.SIG_ID=70
+defaults.phlength.SIG_NAME=210
+defaults.phlength.SIG_ALG=100
+# Es möglich in die Werte (value) von eigens definierten Tabellenspalten dynamisch auf Teile des
+# verwendeten Zertifikats zuzugreifen. Konkret kann auf die einzelnen RDNs Teile des Issuer DN
+# und des Subject DN des Signaturzertifikats wie im folgenden Beispiel illustriert zugegriffen
+# werden:
+# (1) sig_obj.PROFIL.value.SIG_SUBJECT= ${subject.CN}${subject.O != null ? ("\n" + subject.O) : ""}
+# (2) sig_obj.PROFIL.value.SIG_SUBJECT= ${subject.T \!\= null ? (subject.T + " ") \: ""}${subject.CN}
+# Beispiel (1) gibt die Organisation des Unterzeichners an, Beispiel (2) Titel und Name
+# Die Notation ${..} ermöglicht die dynamische Auswertung eines Ausdrucks. Verfügbar sind "subject"
+# und "issuer" und die im Zertifikat DN vorhandenen RDNs.
+# Achtung: Für die binäre Signatur funktioniert diese Ersetzung nur für Werte, die als Replacement
+# definiert wurden. Konkret bedeutet dies, dass ein phlength Platzhalter definiert sein muss.
+# Als Maximalwerte sind in RFC5280 folgendes definiert:
+# CommonName ::= PrintableString (SIZE (1..ub-common-name-length))
+# X520Title ::= CHOICE {
+# teletexString TeletexString (SIZE (1..ub-title)),
+# printableString PrintableString (SIZE (1..ub-title)),
+# etc.}
+# OrganizationName ::= PrintableString
+# (SIZE (1..ub-organization-name-length))
+# mit jeweils ub-common-name, ub-title INTEGER oder ub-organization-name-length INTEGER ::= 64
+# Für das oben angeführte Beispiel ist daher die folgende Definition erforderlich um die Ersetzungen
+# für Binärsignaturen zu aktivieren:
+# (1) sig_obj.PROFIL.phlength.SIG_SUBJECT=64 (Extraktion der Organisation)
+# (2) sig_obj.PROFIL.phlength.SIG_SUBJECT=128 (Titel + Name)
+# bzw. global defaults.phlength.SIG_SUBJECT=64 (Fall (1) bzw. 128 für Fall (2))
+defaults.phlength.SIG_SUBJECT=128
+
+# Binärsignatur: reservierter Platz für Zertifikat
+# profilweise: sig_obj.PROFILE.phlength.certificate=xyz
+defaults.phlength.certificate=10000
+
+# Binärsignatur: reservierte Platz für Zeitstempel
+# profilweise: sig_obj.PROFILE.phlength.timestamp=xyz
+defaults.phlength.timestamp=5000
+
+# Standardgröße des Fensters innerhalb dessen Zeilenumbrüche gesetzt werden dürfe.
+# profilweise: sig_obj.PROFILE.phlength.line_break_tolerance=xyz
+defaults.phlength.line_break_tolerance=10
+
+# Falls die Breite eines Signaturblocks definiert wird (über API, Commandline oder über das Profil),
+# die unterhalb eines sinnvollen Wertes liegt, dann wird im Log eine Warnung ausgegeben, da
+# Signaturblöcke unter Umständen nicht mehr sinnvoll dargestellt werden können.
+# Der Standard-Schwellwert für diese Warnungen (= 150) kann global oder profilweise festgelegt
+# werden (z.B. um die Warnung zu deaktivieren, kann der Wert auf 0 gesetzt werden).
+# default.signature_block_width_warning_threshold=xyz
+# sig_obj.PROFILE.signature_block_width_warning_threshold=xyz
+
+# PDF/A-1b Unterstützung für alle Profile einschalten
+default.SIG_PDFA1B_VALID=false
+
+# BAIK-Signatur Unterstützung für alle Profile einschalten
+default.SIG_BAIK_ENABLED=false
+
+
+###############################################
+# Signaturkennzeichnung (für Adobe Acrobat)
+#
+# Jede dieser globalen Einstellungen kann im jeweiligen Profil individuell gesetzt werden.
+# z.B. sig_obj.PROFILE.adobeSignText.binary=Mein Signator
+
+# Adobe Signaturkennzeichnung ein-/ausschalten
+default.adobeSignEnabled=true
+
+# Standard Name für die Signaturkennzeichnung (binär)
+default.adobeSignText.binary=PDF-AS
+
+# Standard Name fuer die Signaturkennzeichnung (textuell)
+default.adobeSignText.textual=PDF-AS
+
+# Standard-Name für die PDF-Signatur
+default.adobeSignFieldValue=PDF-AS Signatur
+
+# Standardwert für "Reason"-Feld der jeweiligen Signatur
+default.adobeSignReasonValue=Informationen zur Prüfung finden Sie unter http://www.signaturpruefung.gv.at
+
+# Standard Prüflink für die Adobe Signaturkennzeichnung (nur relevant falls Adobe Plugin für Prüfung verwendet wird)
+default.verifyURL=http://www.signaturpruefung.gv.at
+
+# Standard Alternativer Text für den Signaturblock (WAI) (globale Einstellung)
+# profilweise: sig_obj.PROFILE.sigLogoAltText=VALUE
+default.sigLogoAltText=Abgebildet ist eine Standard-Signaturbildmarke.
+
+# Profilspezifische Festlegung der Position der Signaturmarke
+# sig_obj.PROFILE.pos=[p:["auto"|"new"|pagenumber];][x:["auto"|floatvalue];][y:["auto"|floatvalue];][w:["auto"|width_floatvalue];][f:footerheight_floatvalue]
+# sig_obj.PROFILE.pos=p:1;x:40.0;y:800.0;w:400.0;f:80
+
+# font definition: face,height,weight
+# default_font: HELVETICA,8,NORMAL
+# font_face: HELVETICA | TIMES_ROMAN | COURIER
+# font_height: float value
+# font_weight: NORMAL | BOLD | ITALIC | BOLDITALIC | UNDERLINE | STRIKETHRU
+
+# Horizontale Ausrichtung
+# sig_obj.PROFILE.table.TABLE_NAME.Style.halign=[left|center|right]
+# sig_obj.PROFILE.table.TABLE_NAME.Style.valuehalign=[left|center|right]
+# sig_obj.PROFILE.table.TABLE_NAME.Style.imagehalign=[left|center|right]
+
+# Vertikale Ausrichtung
+# sig_obj.PROFILE.table.TABLE_NAME.Style.valign=[bottom|middle|top]
+# sig_obj.PROFILE.table.TABLE_NAME.Style.valuevalign=[bottom|middle|top]
+# sig_obj.PROFILE.table.TABLE_NAME.Style.imagevalign=[bottom|middle|top]
+
+
+
+#############################################
+# start additional LDAP-Mappings
+# note: ldap_mapping.xxx.serial_attr may be omitted if value is "eidCertificateSerialNumber"
+
+# A-Trust Sample
+#ldap_mapping.asign_prem_sig01.issuer_name=CN=a-sign-Premium-Sig-01,OU=a-sign-Premium-Sig-01,O=A-Trust Ges. f. Sicherheitssysteme im elektr. Datenverkehr GmbH,C=AT
+#ldap_mapping.asign_prem_sig01.url=ldap://ldap.a-trust.at/ou=a-sign-Premium-Sig-01,o=A-Trust,c=at
+#ldap_mapping.asign_prem_sig01.serial_attr=eidCertificateSerialNumber
+
+# end LDAP-Mappings
+#############################################
+
diff --git a/pdf-as-lib/src/test/resources/at/knowcenter/wag/egov/egiz/cfg/config_wildcard_includes.properties b/pdf-as-lib/src/test/resources/at/knowcenter/wag/egov/egiz/cfg/config_wildcard_includes.properties
new file mode 100644
index 0000000..a86e9d4
--- /dev/null
+++ b/pdf-as-lib/src/test/resources/at/knowcenter/wag/egov/egiz/cfg/config_wildcard_includes.properties
@@ -0,0 +1,249 @@
+# PDF-AS Amtssignaturen Beispiel Konfigurationsdatei
+#
+# Diese Konfigurationsdatei gilt als Referenzbeispiel einer
+# Konfigurationsdatei für die PDF-AS Applikation.
+##############################################################
+
+
+# Beim Signieren: Überprüfung ob Dokument PDF-Version 1.4 (oder weniger) hat
+strict_mode=false
+
+# Beim Signieren:
+# Wenn das Dokument nicht verarbeitet werden kann wird versucht es
+# zuerst zu korrigieren und dann das korrigierte Dokument zu signieren.
+correct_document_if_necessary=true
+
+# Beim Verifizieren:
+# Wenn das Dokument nicht verarbeitet werden kann wird versucht es
+# zuerst zu korrigieren und dann das korrigierte Dokument zu verifizieren.
+# Dies kann nur für textuelle Signaturen erfolgreich sein.
+correct_document_on_verify_if_necessary=true
+
+# Wenn ein Dokument korrigiert werden soll:
+# Gibt an mit welchem Corrector ein zu korrigierendes Dokument korrigiert wird:
+# internal - das Dokument wird mit dem "internen" iText Corrector korrigiert
+# external - das Dokument wird durch einen externen Kommandozeilenaufruf korrigiert.
+# Hinweis: ein externes Programm aufzurufen birgt gewisse Risiken in sich
+# und sollte daher möglichst nicht verwendet werden.
+corrector=internal
+
+# Kommandozeile für den externen Connector.
+# Die Variablen ##input_document## bzw. ##output_document## werden von PDF-AS
+# durch die absoluten Pfad- und Dateinamen des zu korrigierenden bzw. des
+# korrigierten Dokuments ersetzt.
+# Als Pfad-Separator sollte '/' verwendet werden.
+external_corrector_commandline=C:/correct.exe "##input_document##" "##output_document##"
+
+# Timeout (ms) für die Ausführung des externen Correctors.
+# Das Kommando wird abgebrochen, wenn das Timeout erreicht wird bevor
+# das Kommando abgearbeitet wurde.
+# Achtung: Es besteht allerdings keine Garantie, dass der Korrekturvorgang auch tatsächlich
+# durch ein Timeout abgebrochen wird. Dies ist im Wesentlichen abhängig von der Beschaffenheit
+# des Korrekturprogramms sowie vom verwendeten Betriebssystem.
+external_corrector_timeout=15000
+
+# Überprüfe Korrektheit des Dokuments
+# bei binary_only=true: Fehler falls textuelle Signatur
+# bei assume_only_signature_blocks=false: Fehler falls inkremetelle Updates nach Signatur
+# In beiden Fällen wird check_old_textual_sigs berücksichtigt.
+check_document=true
+
+# Falls der letzte inkrementelle Updateblock keine Signatur enthält würde sofern
+# check_document=true gesetzt ist eine Exception geworfen werden und die Prüfung
+# abgebrochen werden. Mit diesem Schalter ist es möglich, diese Exception zu
+# unterdrücken, um die Auswertung extern vornehmen zu können (standard: false)
+# supress_exception_when_last_iublock_is_no_signature=false
+
+# Aktiviert, oder deaktiviert grundsätzlich das - potenziell zeit- und ressourcen-aufwaendige
+# Suchen nach Platzhalter-Bildern in PDF-Dokumenten
+# Festlegung fuer einzelnes Profil
+# sig_obj.PROFILE.enable_placeholder_search=[true|false]
+# Die Suche ist standardmässig aus Sicherheitsgruenden deaktiviert (Defaultwert hier = false)
+# Es muss bewusst sein, dass über einen Platzhalter benutzerseitig bestimmte Profile zur Signatur
+# ausgewaehlt werden koennen!
+enable_placeholder_search=false
+
+# VerificationFilterParameters
+binary_only=false
+assume_only_signature_blocks=false
+check_old_textual_sigs=true
+
+# MOA Detached Signieren aus Konsole möglich - zurzeit möglich nur mit BKU
+moa.sign.console.detached.enabled=false
+
+
+#############################################
+# Signaturdienste
+
+# lokale BKU
+bku.available_for_web=true
+bku.available_for_commandline=true
+
+bku.sign.url=http://127.0.0.1:3495/http-security-layer-request
+#bku.sign.url=https://127.0.0.1:3496/https-security-layer-request
+bku.sign.KeyboxIdentifier=SecureSignatureKeypair
+
+# BKU Verifikation
+bku.verify.url=http://127.0.0.1:3495/http-security-layer-request
+#bku.verify.url=https://127.0.0.1:3496/https-security-layer-request
+
+# Online BKU (MOCCA)
+moc.available_for_web=true
+moc.available_for_commandline=false
+
+# MOCCA Signatur
+moc.sign.url=http://127.0.0.1:8080/bkuonline/http-security-layer-request
+moc.sign.KeyboxIdentifier=SecureSignatureKeypair
+
+# Handy Signatur
+mobile.sign.url=https://www.handy-signatur.at/mobile/https-security-layer-request/default.aspx
+mobile.sign.KeyboxIdentifier=SecureSignatureKeypair
+
+# Handy Signatur (Test)
+mobiletest.sign.url=https://test1.a-trust.at/https-security-layer-request/default.aspx
+mobiletest.sign.KeyboxIdentifier=SecureSignatureKeypair
+
+# MOA
+moa.available_for_web=true
+moa.available_for_commandline=true
+
+# MOA Signatur
+moa.sign.url=http://java-dev.datentechnik-innovation.com:8080/moa-spss/services/SignatureCreation
+moa.sign.KeyIdentifier=KG_Test-Signatur_RSA
+
+# MOA Verifikation
+moa.verify.url=http://java-dev.datentechnik-innovation.com:8080/moa-spss/services/SignatureVerification
+moa.verify.TrustProfileID=SecureSignature
+
+
+#############################################
+# aktivierte/deaktivierte Signaturprofile
+
+include = profile.*.properties
+
+
+#####################################################
+# Standardfeldlängen der Felder für die Binärsignatur
+defaults.phlength.SIG_DATE=70
+defaults.phlength.SIG_NUMBER=70
+defaults.phlength.SIG_ISSUER=150
+defaults.phlength.SIG_VALUE=350
+defaults.phlength.SIG_ID=70
+defaults.phlength.SIG_NAME=210
+defaults.phlength.SIG_ALG=100
+# Es möglich in die Werte (value) von eigens definierten Tabellenspalten dynamisch auf Teile des
+# verwendeten Zertifikats zuzugreifen. Konkret kann auf die einzelnen RDNs Teile des Issuer DN
+# und des Subject DN des Signaturzertifikats wie im folgenden Beispiel illustriert zugegriffen
+# werden:
+# (1) sig_obj.PROFIL.value.SIG_SUBJECT= ${subject.CN}${subject.O != null ? ("\n" + subject.O) : ""}
+# (2) sig_obj.PROFIL.value.SIG_SUBJECT= ${subject.T \!\= null ? (subject.T + " ") \: ""}${subject.CN}
+# Beispiel (1) gibt die Organisation des Unterzeichners an, Beispiel (2) Titel und Name
+# Die Notation ${..} ermöglicht die dynamische Auswertung eines Ausdrucks. Verfügbar sind "subject"
+# und "issuer" und die im Zertifikat DN vorhandenen RDNs.
+# Achtung: Für die binäre Signatur funktioniert diese Ersetzung nur für Werte, die als Replacement
+# definiert wurden. Konkret bedeutet dies, dass ein phlength Platzhalter definiert sein muss.
+# Als Maximalwerte sind in RFC5280 folgendes definiert:
+# CommonName ::= PrintableString (SIZE (1..ub-common-name-length))
+# X520Title ::= CHOICE {
+# teletexString TeletexString (SIZE (1..ub-title)),
+# printableString PrintableString (SIZE (1..ub-title)),
+# etc.}
+# OrganizationName ::= PrintableString
+# (SIZE (1..ub-organization-name-length))
+# mit jeweils ub-common-name, ub-title INTEGER oder ub-organization-name-length INTEGER ::= 64
+# Für das oben angeführte Beispiel ist daher die folgende Definition erforderlich um die Ersetzungen
+# für Binärsignaturen zu aktivieren:
+# (1) sig_obj.PROFIL.phlength.SIG_SUBJECT=64 (Extraktion der Organisation)
+# (2) sig_obj.PROFIL.phlength.SIG_SUBJECT=128 (Titel + Name)
+# bzw. global defaults.phlength.SIG_SUBJECT=64 (Fall (1) bzw. 128 für Fall (2))
+defaults.phlength.SIG_SUBJECT=128
+
+# Binärsignatur: reservierter Platz für Zertifikat
+# profilweise: sig_obj.PROFILE.phlength.certificate=xyz
+defaults.phlength.certificate=10000
+
+# Binärsignatur: reservierte Platz für Zeitstempel
+# profilweise: sig_obj.PROFILE.phlength.timestamp=xyz
+defaults.phlength.timestamp=5000
+
+# Standardgröße des Fensters innerhalb dessen Zeilenumbrüche gesetzt werden dürfe.
+# profilweise: sig_obj.PROFILE.phlength.line_break_tolerance=xyz
+defaults.phlength.line_break_tolerance=10
+
+# Falls die Breite eines Signaturblocks definiert wird (über API, Commandline oder über das Profil),
+# die unterhalb eines sinnvollen Wertes liegt, dann wird im Log eine Warnung ausgegeben, da
+# Signaturblöcke unter Umständen nicht mehr sinnvoll dargestellt werden können.
+# Der Standard-Schwellwert für diese Warnungen (= 150) kann global oder profilweise festgelegt
+# werden (z.B. um die Warnung zu deaktivieren, kann der Wert auf 0 gesetzt werden).
+# default.signature_block_width_warning_threshold=xyz
+# sig_obj.PROFILE.signature_block_width_warning_threshold=xyz
+
+# PDF/A-1b Unterstützung für alle Profile einschalten
+default.SIG_PDFA1B_VALID=false
+
+# BAIK-Signatur Unterstützung für alle Profile einschalten
+default.SIG_BAIK_ENABLED=false
+
+
+###############################################
+# Signaturkennzeichnung (für Adobe Acrobat)
+#
+# Jede dieser globalen Einstellungen kann im jeweiligen Profil individuell gesetzt werden.
+# z.B. sig_obj.PROFILE.adobeSignText.binary=Mein Signator
+
+# Adobe Signaturkennzeichnung ein-/ausschalten
+default.adobeSignEnabled=true
+
+# Standard Name für die Signaturkennzeichnung (binär)
+default.adobeSignText.binary=PDF-AS
+
+# Standard Name fuer die Signaturkennzeichnung (textuell)
+default.adobeSignText.textual=PDF-AS
+
+# Standard-Name für die PDF-Signatur
+default.adobeSignFieldValue=PDF-AS Signatur
+
+# Standardwert für "Reason"-Feld der jeweiligen Signatur
+default.adobeSignReasonValue=Informationen zur Prüfung finden Sie unter http://www.signaturpruefung.gv.at
+
+# Standard Prüflink für die Adobe Signaturkennzeichnung (nur relevant falls Adobe Plugin für Prüfung verwendet wird)
+default.verifyURL=http://www.signaturpruefung.gv.at
+
+# Standard Alternativer Text für den Signaturblock (WAI) (globale Einstellung)
+# profilweise: sig_obj.PROFILE.sigLogoAltText=VALUE
+default.sigLogoAltText=Abgebildet ist eine Standard-Signaturbildmarke.
+
+# Profilspezifische Festlegung der Position der Signaturmarke
+# sig_obj.PROFILE.pos=[p:["auto"|"new"|pagenumber];][x:["auto"|floatvalue];][y:["auto"|floatvalue];][w:["auto"|width_floatvalue];][f:footerheight_floatvalue]
+# sig_obj.PROFILE.pos=p:1;x:40.0;y:800.0;w:400.0;f:80
+
+# font definition: face,height,weight
+# default_font: HELVETICA,8,NORMAL
+# font_face: HELVETICA | TIMES_ROMAN | COURIER
+# font_height: float value
+# font_weight: NORMAL | BOLD | ITALIC | BOLDITALIC | UNDERLINE | STRIKETHRU
+
+# Horizontale Ausrichtung
+# sig_obj.PROFILE.table.TABLE_NAME.Style.halign=[left|center|right]
+# sig_obj.PROFILE.table.TABLE_NAME.Style.valuehalign=[left|center|right]
+# sig_obj.PROFILE.table.TABLE_NAME.Style.imagehalign=[left|center|right]
+
+# Vertikale Ausrichtung
+# sig_obj.PROFILE.table.TABLE_NAME.Style.valign=[bottom|middle|top]
+# sig_obj.PROFILE.table.TABLE_NAME.Style.valuevalign=[bottom|middle|top]
+# sig_obj.PROFILE.table.TABLE_NAME.Style.imagevalign=[bottom|middle|top]
+
+
+
+#############################################
+# start additional LDAP-Mappings
+# note: ldap_mapping.xxx.serial_attr may be omitted if value is "eidCertificateSerialNumber"
+
+# A-Trust Sample
+#ldap_mapping.asign_prem_sig01.issuer_name=CN=a-sign-Premium-Sig-01,OU=a-sign-Premium-Sig-01,O=A-Trust Ges. f. Sicherheitssysteme im elektr. Datenverkehr GmbH,C=AT
+#ldap_mapping.asign_prem_sig01.url=ldap://ldap.a-trust.at/ou=a-sign-Premium-Sig-01,o=A-Trust,c=at
+#ldap_mapping.asign_prem_sig01.serial_attr=eidCertificateSerialNumber
+
+# end LDAP-Mappings
+#############################################
+
diff --git a/pdf-as-lib/src/test/resources/at/knowcenter/wag/egov/egiz/cfg/includeOrder/include.properties b/pdf-as-lib/src/test/resources/at/knowcenter/wag/egov/egiz/cfg/includeOrder/include.properties
new file mode 100644
index 0000000..d5db006
--- /dev/null
+++ b/pdf-as-lib/src/test/resources/at/knowcenter/wag/egov/egiz/cfg/includeOrder/include.properties
@@ -0,0 +1,6 @@
+key1 = include
+key2 = include
+key3 = include
+key4 = include
+key5 = include
+key6 = include
diff --git a/pdf-as-lib/src/test/resources/at/knowcenter/wag/egov/egiz/cfg/includeOrder/include_1.properties b/pdf-as-lib/src/test/resources/at/knowcenter/wag/egov/egiz/cfg/includeOrder/include_1.properties
new file mode 100644
index 0000000..602731d
--- /dev/null
+++ b/pdf-as-lib/src/test/resources/at/knowcenter/wag/egov/egiz/cfg/includeOrder/include_1.properties
@@ -0,0 +1,5 @@
+key1 = include_1
+key2 = include_1
+key3 = include_1
+key4 = include_1
+key5 = include_1
diff --git a/pdf-as-lib/src/test/resources/at/knowcenter/wag/egov/egiz/cfg/includeOrder/include_2.properties b/pdf-as-lib/src/test/resources/at/knowcenter/wag/egov/egiz/cfg/includeOrder/include_2.properties
new file mode 100644
index 0000000..9a8f769
--- /dev/null
+++ b/pdf-as-lib/src/test/resources/at/knowcenter/wag/egov/egiz/cfg/includeOrder/include_2.properties
@@ -0,0 +1,4 @@
+key1 = include_2
+key2 = include_2
+key3 = include_2
+key4 = include_2
diff --git a/pdf-as-lib/src/test/resources/at/knowcenter/wag/egov/egiz/cfg/includeOrder/include_3.properties b/pdf-as-lib/src/test/resources/at/knowcenter/wag/egov/egiz/cfg/includeOrder/include_3.properties
new file mode 100644
index 0000000..e99f5ed
--- /dev/null
+++ b/pdf-as-lib/src/test/resources/at/knowcenter/wag/egov/egiz/cfg/includeOrder/include_3.properties
@@ -0,0 +1,3 @@
+key1 = include_3
+key2 = include_3
+key3 = include_3
diff --git a/pdf-as-lib/src/test/resources/at/knowcenter/wag/egov/egiz/cfg/includeOrder/include_abc.properties b/pdf-as-lib/src/test/resources/at/knowcenter/wag/egov/egiz/cfg/includeOrder/include_abc.properties
new file mode 100644
index 0000000..11acb35
--- /dev/null
+++ b/pdf-as-lib/src/test/resources/at/knowcenter/wag/egov/egiz/cfg/includeOrder/include_abc.properties
@@ -0,0 +1,2 @@
+key1 = include_abc
+key2 = include_abc
diff --git a/pdf-as-lib/src/test/resources/at/knowcenter/wag/egov/egiz/cfg/includeOrder/include_xyz.properties b/pdf-as-lib/src/test/resources/at/knowcenter/wag/egov/egiz/cfg/includeOrder/include_xyz.properties
new file mode 100644
index 0000000..1b27566
--- /dev/null
+++ b/pdf-as-lib/src/test/resources/at/knowcenter/wag/egov/egiz/cfg/includeOrder/include_xyz.properties
@@ -0,0 +1 @@
+key1 = include_xyz
diff --git a/pdf-as-lib/src/test/resources/at/knowcenter/wag/egov/egiz/cfg/include_order.properties b/pdf-as-lib/src/test/resources/at/knowcenter/wag/egov/egiz/cfg/include_order.properties
new file mode 100644
index 0000000..472d333
--- /dev/null
+++ b/pdf-as-lib/src/test/resources/at/knowcenter/wag/egov/egiz/cfg/include_order.properties
@@ -0,0 +1,14 @@
+include.2 = includeOrder/include_2.properties
+include.3 = includeOrder/include_3.properties
+include.1 = includeOrder/include_1.properties
+include.xyz = includeOrder/include_xyz.properties
+include.abc = includeOrder/include_abc.properties
+include = includeOrder/include.properties
+
+# should result in the following order (include instructions are being sorted before being executed)
+# include = includeOrder/include.properies
+# include.1 = includeOrder/include_1.properties
+# include.2 = includeOrder/include_2.properties
+# include.3 = includeOrder/include_3.properties
+# include.abc = includeOrder/include_abc.properties
+# include.xyz = includeOrder/include_xyz.properties
diff --git a/pdf-as-lib/src/test/resources/at/knowcenter/wag/egov/egiz/cfg/local_vs_included_properties.properties b/pdf-as-lib/src/test/resources/at/knowcenter/wag/egov/egiz/cfg/local_vs_included_properties.properties
new file mode 100644
index 0000000..570da29
--- /dev/null
+++ b/pdf-as-lib/src/test/resources/at/knowcenter/wag/egov/egiz/cfg/local_vs_included_properties.properties
@@ -0,0 +1,8 @@
+key1 = local value 1
+key2 = local value 2
+key3 = local value 3
+key4 = local value 4
+
+# include instruction that includes property "key1 = included value 1":
+include = local_vs_included_properties_include.properties
+ \ No newline at end of file
diff --git a/pdf-as-lib/src/test/resources/at/knowcenter/wag/egov/egiz/cfg/local_vs_included_properties_include.properties b/pdf-as-lib/src/test/resources/at/knowcenter/wag/egov/egiz/cfg/local_vs_included_properties_include.properties
new file mode 100644
index 0000000..33369d6
--- /dev/null
+++ b/pdf-as-lib/src/test/resources/at/knowcenter/wag/egov/egiz/cfg/local_vs_included_properties_include.properties
@@ -0,0 +1 @@
+key1 = included value 1
diff --git a/pdf-as-lib/src/test/resources/at/knowcenter/wag/egov/egiz/cfg/profile.AMTSSIGNATURBLOCK_DE.properties b/pdf-as-lib/src/test/resources/at/knowcenter/wag/egov/egiz/cfg/profile.AMTSSIGNATURBLOCK_DE.properties
new file mode 100644
index 0000000..807b507
--- /dev/null
+++ b/pdf-as-lib/src/test/resources/at/knowcenter/wag/egov/egiz/cfg/profile.AMTSSIGNATURBLOCK_DE.properties
@@ -0,0 +1,56 @@
+###################################################################################################
+# PROFIL: Amtssignaturblock (Deutsch) mit neuem Layout
+
+sig_obj.AMTSSIGNATURBLOCK_DE.description=Amtssignaturblock-Deutsch, neues Layout
+
+sig_obj.types.AMTSSIGNATURBLOCK_DE=on
+
+sig_obj.AMTSSIGNATURBLOCK_DE.key.SIG_VALUE=Signaturwert
+sig_obj.AMTSSIGNATURBLOCK_DE.key.SIG_SUBJECT=Unterzeichner
+sig_obj.AMTSSIGNATURBLOCK_DE.key.SIG_ISSUER=Aussteller-Zertifikat
+sig_obj.AMTSSIGNATURBLOCK_DE.key.SIG_NUMBER=Serien-Nr.
+sig_obj.AMTSSIGNATURBLOCK_DE.key.SIG_KZ=Methode
+sig_obj.AMTSSIGNATURBLOCK_DE.key.SIG_ID=Parameter
+sig_obj.AMTSSIGNATURBLOCK_DE.key.SIG_META=Pr\u00fcfinformation
+sig_obj.AMTSSIGNATURBLOCK_DE.key.SIG_NOTE=Hinweis
+sig_obj.AMTSSIGNATURBLOCK_DE.key.SIG_DATE=Datum/Zeit-UTC
+
+sig_obj.AMTSSIGNATURBLOCK_DE.value.SIG_SUBJECT=DEMO Amtssignatur
+
+sig_obj.AMTSSIGNATURBLOCK_DE.pos=f:80
+sig_obj.AMTSSIGNATURBLOCK_DE.adobeSignFieldValue=PDF-AS Signatur
+sig_obj.AMTSSIGNATURBLOCK_DE.adobeSignReasonValue=Signaturpruefung unter http://www.signaturpruefung.gv.at
+sig_obj.AMTSSIGNATURBLOCK_DE.verifyURL=http://www.signaturpruefung.gv.at
+
+# WAI
+sig_obj.AMTSSIGNATURBLOCK_DE.sigLogoAltText=Abgebildet ist eine Standard-Signaturbildmarke.
+
+sig_obj.AMTSSIGNATURBLOCK_DE.value.SIG_META=Signaturpruefung unter: http://www.signaturpruefung.gv.at
+sig_obj.AMTSSIGNATURBLOCK_DE.value.SIG_LABEL=./images/signatur-logo_de.png
+sig_obj.AMTSSIGNATURBLOCK_DE.value.SIG_NOTE=Dieses mit einer qualifizierten elektronischen Signatur versehene Dokument ist gem\u00e4\u00df \u00a7\u00A04 Abs.\u00A01 Signaturgesetz einem handschriftlich unterschriebenen Dokument grunds\u00e4tzlich rechtlich gleichgestellt.
+
+#---------------------- MAIN TABLE -------------------------
+sig_obj.AMTSSIGNATURBLOCK_DE.table.main.1=SIG_VALUE-cv
+sig_obj.AMTSSIGNATURBLOCK_DE.table.main.2=SIG_LABEL-i|TABLE-info
+sig_obj.AMTSSIGNATURBLOCK_DE.table.main.3=SIG_META-cv
+sig_obj.AMTSSIGNATURBLOCK_DE.table.main.4=SIG_NOTE-cv
+sig_obj.AMTSSIGNATURBLOCK_DE.table.main.5=SIG_DATE-cv
+
+sig_obj.AMTSSIGNATURBLOCK_DE.table.main.ColsWidth=1 6
+sig_obj.AMTSSIGNATURBLOCK_DE.table.main.Style.bgcolor=255 255 255
+sig_obj.AMTSSIGNATURBLOCK_DE.table.main.Style.padding=4
+sig_obj.AMTSSIGNATURBLOCK_DE.table.main.Style.border=0.1
+sig_obj.AMTSSIGNATURBLOCK_DE.table.main.Style.halign=center
+sig_obj.AMTSSIGNATURBLOCK_DE.table.main.Style.valuehalign=left
+sig_obj.AMTSSIGNATURBLOCK_DE.table.main.Style.valign=top
+sig_obj.AMTSSIGNATURBLOCK_DE.table.main.Style.imagevalign=middle
+sig_obj.AMTSSIGNATURBLOCK_DE.table.main.Style.font=HELVETICA,8,BOLD
+sig_obj.AMTSSIGNATURBLOCK_DE.table.main.Style.valuefont=COURIER,8,NORMAL
+
+#---------------------- INFO TABLE -------------------------
+sig_obj.AMTSSIGNATURBLOCK_DE.table.info.ColsWidth=1 4
+sig_obj.AMTSSIGNATURBLOCK_DE.table.info.1=SIG_SUBJECT-cv
+sig_obj.AMTSSIGNATURBLOCK_DE.table.info.2=SIG_ISSUER-cv
+sig_obj.AMTSSIGNATURBLOCK_DE.table.info.3=SIG_NUMBER-cv
+sig_obj.AMTSSIGNATURBLOCK_DE.table.info.4=SIG_KZ-cv
+sig_obj.AMTSSIGNATURBLOCK_DE.table.info.5=SIG_ID-cv
diff --git a/pdf-as-lib/src/test/resources/at/knowcenter/wag/egov/egiz/cfg/profile.AMTSSIGNATURBLOCK_DE_DEPRECATED.properties b/pdf-as-lib/src/test/resources/at/knowcenter/wag/egov/egiz/cfg/profile.AMTSSIGNATURBLOCK_DE_DEPRECATED.properties
new file mode 100644
index 0000000..1ffeca4
--- /dev/null
+++ b/pdf-as-lib/src/test/resources/at/knowcenter/wag/egov/egiz/cfg/profile.AMTSSIGNATURBLOCK_DE_DEPRECATED.properties
@@ -0,0 +1,56 @@
+###################################################################################################
+# PROFIL: Amtssignaturblock (Deutsch)
+
+sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.description=Amtssignaturblock-Deutsch
+
+sig_obj.types.AMTSSIGNATURBLOCK_DE_DEPRECATED=on
+
+sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.key.SIG_VALUE=Signaturwert
+sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.key.SIG_SUBJECT=Unterzeichner
+sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.key.SIG_DATE=Datum/Zeit-UTC
+sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.key.SIG_ISSUER=Aussteller-Zertifikat
+sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.key.SIG_NUMBER=Serien-Nr.
+sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.key.SIG_KZ=Methode
+sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.key.SIG_ID=Parameter
+sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.key.SIG_META=Pr\u00fcfinformation
+sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.key.SIG_NOTE=Hinweis
+
+sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.value.SIG_SUBJECT=DEMO Amtssignatur
+
+sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.pos=f:80
+sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.adobeSignFieldValue=PDF-AS Signatur
+sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.adobeSignReasonValue=Informationen zur Pr\u00fcfung finden Sie unter http://www.signaturpruefung.gv.at
+sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.verifyURL=http://www.signaturpruefung.gv.at
+
+# WAI
+sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.sigLogoAltText=Abgebildet ist eine Standard-Signaturbildmarke.
+
+sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.value.SIG_META=Signaturpruefung unter: http://www.signaturpruefung.gv.at
+sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.value.SIG_LABEL=./images/signatur-logo_de.png
+sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.value.SIG_NOTE=Dieses Dokument wurde amtssigniert. Auch ein Ausdruck dieses Dokuments hat gem\u00e4\u00df \u00a7 20 E-Government-Gesetz die Beweiskraft einer \u00f6ffentlichen Urkunde.
+
+#---------------------- MAIN TABLE -------------------------
+sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.table.main.1=SIG_VALUE-cv
+sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.table.main.2=SIG_LABEL-i|TABLE-info
+sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.table.main.3=SIG_META-cv
+sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.table.main.4=SIG_NOTE-cv
+
+sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.table.main.ColsWidth=1 6
+sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.table.main.Style.bgcolor=255 255 255
+sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.table.main.Style.padding=4
+sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.table.main.Style.border=0.1
+sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.table.main.Style.halign=center
+sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.table.main.Style.valuehalign=left
+sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.table.main.Style.valign=middle
+sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.table.main.Style.imagevalign=middle
+sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.table.main.Style.font=HELVETICA,8,BOLD
+sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.table.main.Style.valuefont=COURIER,8,NORMAL
+
+#---------------------- INFO TABLE -------------------------
+sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.table.info.ColsWidth=1 4
+sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.table.info.1=SIG_SUBJECT-cv
+sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.table.info.2=SIG_DATE-cv
+sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.table.info.3=SIG_ISSUER-cv
+sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.table.info.4=SIG_NUMBER-cv
+sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.table.info.5=SIG_KZ-cv
+sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.table.info.6=SIG_ID-cv
diff --git a/pdf-as-lib/src/test/resources/at/knowcenter/wag/egov/egiz/cfg/profile.AMTSSIGNATURBLOCK_EN.properties b/pdf-as-lib/src/test/resources/at/knowcenter/wag/egov/egiz/cfg/profile.AMTSSIGNATURBLOCK_EN.properties
new file mode 100644
index 0000000..6fca535
--- /dev/null
+++ b/pdf-as-lib/src/test/resources/at/knowcenter/wag/egov/egiz/cfg/profile.AMTSSIGNATURBLOCK_EN.properties
@@ -0,0 +1,57 @@
+###################################################################################################
+# PROFIL: Amtssignaturblock (Englisch) mit neuem Layout
+
+sig_obj.AMTSSIGNATURBLOCK_EN.description=Amtssignaturblock-Englisch, neues Layout
+
+sig_obj.types.AMTSSIGNATURBLOCK_EN=on
+
+sig_obj.AMTSSIGNATURBLOCK_EN.key.SIG_VALUE=Signature Value
+sig_obj.AMTSSIGNATURBLOCK_EN.key.SIG_SUBJECT=Signatory
+sig_obj.AMTSSIGNATURBLOCK_EN.key.SIG_ISSUER=Issuer-Certificate
+sig_obj.AMTSSIGNATURBLOCK_EN.key.SIG_NUMBER=Serial-No.
+sig_obj.AMTSSIGNATURBLOCK_EN.key.SIG_KZ=Method
+sig_obj.AMTSSIGNATURBLOCK_EN.key.SIG_ID=Parameter
+sig_obj.AMTSSIGNATURBLOCK_EN.key.SIG_META=Verification
+sig_obj.AMTSSIGNATURBLOCK_EN.key.SIG_NOTE=Note
+sig_obj.AMTSSIGNATURBLOCK_EN.key.SIG_DATE=Date/Time-UTC
+
+sig_obj.AMTSSIGNATURBLOCK_EN.value.SIG_SUBJECT=Official Signature DEMO
+
+sig_obj.AMTSSIGNATURBLOCK_EN.pos=f:80
+sig_obj.AMTSSIGNATURBLOCK_EN.adobeSignFieldValue=PDF-AS Signature
+sig_obj.AMTSSIGNATURBLOCK_EN.adobeSignReasonValue=Signature verification at: http://www.signature-verification.gv.at
+sig_obj.AMTSSIGNATURBLOCK_EN.verifyURL=http://www.signature-verification.gv.at
+
+# WAI
+sig_obj.AMTSSIGNATURBLOCK_EN.sigLogoAltText=A standard signature logo is shown.
+
+sig_obj.AMTSSIGNATURBLOCK_EN.value.SIG_META=Signature verification at: http://www.signature-verification.gv.at
+sig_obj.AMTSSIGNATURBLOCK_EN.value.SIG_LABEL=./images/signatur-logo_en.png
+sig_obj.AMTSSIGNATURBLOCK_EN.value.SIG_NOTE=This document is signed with a qualified electronic signature. According to \u00a7\u00A04 art.\u00A01 of the Signature Act it in principle is legally equivalent to an handwritten signature.
+
+
+#---------------------- MAIN TABLE -------------------------
+sig_obj.AMTSSIGNATURBLOCK_EN.table.main.1=SIG_VALUE-cv
+sig_obj.AMTSSIGNATURBLOCK_EN.table.main.2=SIG_LABEL-i|TABLE-info
+sig_obj.AMTSSIGNATURBLOCK_EN.table.main.3=SIG_META-cv
+sig_obj.AMTSSIGNATURBLOCK_EN.table.main.4=SIG_NOTE-cv
+sig_obj.AMTSSIGNATURBLOCK_EN.table.main.5=SIG_DATE-cv
+
+sig_obj.AMTSSIGNATURBLOCK_EN.table.main.ColsWidth=1 6
+sig_obj.AMTSSIGNATURBLOCK_EN.table.main.Style.bgcolor=255 255 255
+sig_obj.AMTSSIGNATURBLOCK_EN.table.main.Style.padding=4
+sig_obj.AMTSSIGNATURBLOCK_EN.table.main.Style.border=0.1
+sig_obj.AMTSSIGNATURBLOCK_EN.table.main.Style.halign=center
+sig_obj.AMTSSIGNATURBLOCK_EN.table.main.Style.valuehalign=left
+sig_obj.AMTSSIGNATURBLOCK_EN.table.main.Style.valign=top
+sig_obj.AMTSSIGNATURBLOCK_EN.table.main.Style.imagevalign=middle
+sig_obj.AMTSSIGNATURBLOCK_EN.table.main.Style.font=HELVETICA,8,BOLD
+sig_obj.AMTSSIGNATURBLOCK_EN.table.main.Style.valuefont=COURIER,8,NORMAL
+
+#---------------------- INFO TABLE -------------------------
+sig_obj.AMTSSIGNATURBLOCK_EN.table.info.ColsWidth=1 5
+sig_obj.AMTSSIGNATURBLOCK_EN.table.info.1=SIG_SUBJECT-cv
+sig_obj.AMTSSIGNATURBLOCK_EN.table.info.2=SIG_ISSUER-cv
+sig_obj.AMTSSIGNATURBLOCK_EN.table.info.3=SIG_NUMBER-cv
+sig_obj.AMTSSIGNATURBLOCK_EN.table.info.4=SIG_KZ-cv
+sig_obj.AMTSSIGNATURBLOCK_EN.table.info.5=SIG_ID-cv
diff --git a/pdf-as-lib/src/test/resources/at/knowcenter/wag/egov/egiz/cfg/profile.AMTSSIGNATURBLOCK_EN_DEPRECATED.properties b/pdf-as-lib/src/test/resources/at/knowcenter/wag/egov/egiz/cfg/profile.AMTSSIGNATURBLOCK_EN_DEPRECATED.properties
new file mode 100644
index 0000000..0eab478
--- /dev/null
+++ b/pdf-as-lib/src/test/resources/at/knowcenter/wag/egov/egiz/cfg/profile.AMTSSIGNATURBLOCK_EN_DEPRECATED.properties
@@ -0,0 +1,56 @@
+###################################################################################################
+# PROFIL: Amtssignaturblock (Englisch)
+
+sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.description=Amtssignaturblock-Englisch
+
+sig_obj.types.AMTSSIGNATURBLOCK_EN_DEPRECATED=on
+
+sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.key.SIG_VALUE=Signature Value
+sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.key.SIG_SUBJECT=Signatory
+sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.key.SIG_DATE=Date/Time-UTC
+sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.key.SIG_ISSUER=Issuer-Certificate
+sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.key.SIG_NUMBER=Serial-No.
+sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.key.SIG_KZ=Method
+sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.key.SIG_ID=Parameter
+sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.key.SIG_META=Verification
+sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.key.SIG_NOTE=Note
+
+sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.value.SIG_SUBJECT=Official Signature DEMO
+
+sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.pos=f:80
+sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.adobeSignFieldValue=PDF-AS Signature
+sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.adobeSignReasonValue=Information about the verification can be found at http://www.signature-verification.gv.at
+sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.verifyURL=http://www.signature-verification.gv.at
+
+# WAI
+sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.sigLogoAltText=A standard signature logo is shown.
+
+sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.value.SIG_META=Signature verification at: http://www.signature-verification.gv.at
+sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.value.SIG_LABEL=./images/signatur-logo_en.png
+sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.value.SIG_NOTE=This document was signed with an official signature. According to \u00a7 20 E-Government-Act a printout of this document has the probative value of an official document.
+
+#---------------------- MAIN TABLE -------------------------
+sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.table.main.1=SIG_VALUE-cv
+sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.table.main.2=SIG_LABEL-i|TABLE-info
+sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.table.main.3=SIG_META-cv
+sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.table.main.4=SIG_NOTE-cv
+
+sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.table.main.ColsWidth=1 6
+sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.table.main.Style.bgcolor=255 255 255
+sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.table.main.Style.padding=4
+sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.table.main.Style.border=0.1
+sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.table.main.Style.halign=center
+sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.table.main.Style.valuehalign=left
+sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.table.main.Style.valign=middle
+sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.table.main.Style.imagevalign=middle
+sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.table.main.Style.font=HELVETICA,8,BOLD
+sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.table.main.Style.valuefont=COURIER,8,NORMAL
+
+#---------------------- INFO TABLE -------------------------
+sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.table.info.ColsWidth=1 5
+sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.table.info.1=SIG_SUBJECT-cv
+sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.table.info.2=SIG_DATE-cv
+sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.table.info.3=SIG_ISSUER-cv
+sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.table.info.4=SIG_NUMBER-cv
+sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.table.info.5=SIG_KZ-cv
+sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.table.info.6=SIG_ID-cv
diff --git a/pdf-as-lib/src/test/resources/at/knowcenter/wag/egov/egiz/cfg/profile.BAIK_ARCHIV_SIGNATUR.properties b/pdf-as-lib/src/test/resources/at/knowcenter/wag/egov/egiz/cfg/profile.BAIK_ARCHIV_SIGNATUR.properties
new file mode 100644
index 0000000..4ed8bfd
--- /dev/null
+++ b/pdf-as-lib/src/test/resources/at/knowcenter/wag/egov/egiz/cfg/profile.BAIK_ARCHIV_SIGNATUR.properties
@@ -0,0 +1,71 @@
+###################################################################################################
+# PROFIL: BAIK Archivsignatur
+
+sig_obj.BAIK_ARCHIV_SIGNATUR.description=BAIK Archivsignatur
+
+sig_obj.types.BAIK_ARCHIV_SIGNATUR=on
+
+# enable/disable BAIK support for this profile
+sig_obj.BAIK_ARCHIV_SIGNATUR.key.SIG_BAIK_ENABLED=true
+sig_obj.BAIK_ARCHIV_SIGNATUR.key.SIG_PDFA1B_VALID=true
+
+sig_obj.BAIK_ARCHIV_SIGNATUR.key.SIG_VALUE=Signaturwert
+#sig_obj.BAIK_ARCHIV_SIGNATUR.key.SIG_NAME=SIGNATOR
+sig_obj.BAIK_ARCHIV_SIGNATUR.key.SIG_SIG_LABEL=Signator
+sig_obj.BAIK_ARCHIV_SIGNATUR.key.SIG_DATE=Signaturdatum
+sig_obj.BAIK_ARCHIV_SIGNATUR.key.SIG_ISSUER=Zertifizierungsdienst
+sig_obj.BAIK_ARCHIV_SIGNATUR.key.SIG_NUMBER=Seriennummer
+sig_obj.BAIK_ARCHIV_SIGNATUR.key.SIG_ALG=Algorithmus
+sig_obj.BAIK_ARCHIV_SIGNATUR.key.SIG_KZ=Methode
+#sig_obj.BAIK_ARCHIV_SIGNATUR.key.SIG_ID=Parameter
+sig_obj.BAIK_ARCHIV_SIGNATUR.key.SIG_META=Hinweis
+sig_obj.BAIK_ARCHIV_SIGNATUR.key.SIG_TITLE=ELEKTRONISCHE ARCHIVSIGNATUR
+
+sig_obj.BAIK_ARCHIV_SIGNATUR.pos=f:80
+sig_obj.BAIK_ARCHIV_SIGNATUR.adobeSignFieldValue=ELEKTRONISCHE ARCHIVSIGNATUR
+
+# WAI
+sig_obj.BAIK_ARCHIV_SIGNATUR.sigLogoAltText=Abgebildet ist eine Signaturbildmarke mit Bundesadler.
+
+sig_obj.BAIK_ARCHIV_SIGNATUR.value.SIG_META=Dokumentenformat: ${iui.pdfVersion}
+sig_obj.BAIK_ARCHIV_SIGNATUR.value.SIG_LABEL=./images/Baik_Archiv.gif
+sig_obj.BAIK_ARCHIV_SIGNATUR.value.SIG_TITLE=ELEKTRONISCHE ARCHIVSIGNATUR
+
+sig_obj.BAIK_ARCHIV_SIGNATUR.adobeSignFieldValue=Archivsignatur
+sig_obj.BAIK_ARCHIV_SIGNATUR.adobeSignText.binary=Archivsignatur der BAIK
+sig_obj.BAIK_ARCHIV_SIGNATUR.verifyURL=http://www.signaturpruefung.gv.at
+
+sig_obj.BAIK_ARCHIV_SIGNATUR.phlength.SIG_META=50
+
+sig_obj.BAIK_ARCHIV_SIGNATUR.value.SIG_SIG_LABEL=BAIK-Archiv\n\nUrkundenarchiv der Bundeskammer f\u00fcr Architekten und Ingenieurskonsulenten
+
+#---------------------- MAIN TABLE -------------------------
+sig_obj.BAIK_ARCHIV_SIGNATUR.table.main.1=SIG_TITLE-v
+sig_obj.BAIK_ARCHIV_SIGNATUR.table.main.2=SIG_VALUE-cv
+sig_obj.BAIK_ARCHIV_SIGNATUR.table.main.3=SIG_LABEL-i|TABLE-info
+sig_obj.BAIK_ARCHIV_SIGNATUR.table.main.4=SIG_META-cv
+
+sig_obj.BAIK_ARCHIV_SIGNATUR.table.main.ColsWidth=1 5
+sig_obj.BAIK_ARCHIV_SIGNATUR.table.main.Style.bgcolor=161 198 252
+sig_obj.BAIK_ARCHIV_SIGNATUR.table.main.Style.padding=4
+sig_obj.BAIK_ARCHIV_SIGNATUR.table.main.Style.border=0.1
+sig_obj.BAIK_ARCHIV_SIGNATUR.table.main.Style.halign=center
+sig_obj.BAIK_ARCHIV_SIGNATUR.table.main.Style.valuehalign=left
+sig_obj.BAIK_ARCHIV_SIGNATUR.table.main.Style.valign=middle
+sig_obj.BAIK_ARCHIV_SIGNATUR.table.main.Style.imagevalign=middle
+sig_obj.BAIK_ARCHIV_SIGNATUR.table.main.Style.font=TTF:DejaVuSansCondensed.ttf,8
+sig_obj.BAIK_ARCHIV_SIGNATUR.table.main.Style.valuefont=TTF:DejaVuSansCondensed.ttf,8
+
+#---------------------- INFO TABLE -------------------------
+sig_obj.BAIK_ARCHIV_SIGNATUR.table.info.ColsWidth=1 4
+sig_obj.BAIK_ARCHIV_SIGNATUR.table.info.Style.halign=left
+sig_obj.BAIK_ARCHIV_SIGNATUR.table.info.Style.valuehalign=left
+sig_obj.BAIK_ARCHIV_SIGNATUR.table.info.Style.valign=middle
+
+#sig_obj.BAIK_ARCHIV_SIGNATUR.table.info.1=SIG_NAME-cv
+sig_obj.BAIK_ARCHIV_SIGNATUR.table.info.1=SIG_SIG_LABEL-cv
+sig_obj.BAIK_ARCHIV_SIGNATUR.table.info.2=SIG_DATE-cv
+sig_obj.BAIK_ARCHIV_SIGNATUR.table.info.3=SIG_ISSUER-cv
+sig_obj.BAIK_ARCHIV_SIGNATUR.table.info.4=SIG_NUMBER-cv
+sig_obj.BAIK_ARCHIV_SIGNATUR.table.info.5=SIG_ALG-cv
+sig_obj.BAIK_ARCHIV_SIGNATUR.table.info.6=SIG_KZ-cv
diff --git a/pdf-as-lib/src/test/resources/at/knowcenter/wag/egov/egiz/cfg/profile.BAIK_URKUNDE_SIGNATUR.properties b/pdf-as-lib/src/test/resources/at/knowcenter/wag/egov/egiz/cfg/profile.BAIK_URKUNDE_SIGNATUR.properties
new file mode 100644
index 0000000..dd9e527
--- /dev/null
+++ b/pdf-as-lib/src/test/resources/at/knowcenter/wag/egov/egiz/cfg/profile.BAIK_URKUNDE_SIGNATUR.properties
@@ -0,0 +1,69 @@
+###################################################################################################
+# PROFIL: BAIK Beurkundungssignatur
+
+sig_obj.BAIK_URKUNDE_SIGNATUR.description=BAIK Beurkundungssignatur
+
+sig_obj.types.BAIK_URKUNDE_SIGNATUR=on
+
+# enable/disable BAIK support for this profile
+sig_obj.BAIK_URKUNDE_SIGNATUR.key.SIG_BAIK_ENABLED=true
+sig_obj.BAIK_URKUNDE_SIGNATUR.key.SIG_PDFA1B_VALID=true
+
+sig_obj.BAIK_URKUNDE_SIGNATUR.key.SIG_VALUE=Signaturwert
+#sig_obj.BAIK_URKUNDE_SIGNATUR.key.SIG_NAME=SIGNATOR
+sig_obj.BAIK_URKUNDE_SIGNATUR.key.SIG_SIG_LABEL=Signator
+sig_obj.BAIK_URKUNDE_SIGNATUR.key.SIG_DATE=Signaturdatum
+sig_obj.BAIK_URKUNDE_SIGNATUR.key.SIG_ISSUER=Zertifizierungsdienst
+sig_obj.BAIK_URKUNDE_SIGNATUR.key.SIG_NUMBER=Seriennummer
+sig_obj.BAIK_URKUNDE_SIGNATUR.key.SIG_ALG=Algorithmus
+sig_obj.BAIK_URKUNDE_SIGNATUR.key.SIG_KZ=Methode
+#sig_obj.BAIK_URKUNDE_SIGNATUR.key.SIG_ID=Parameter
+sig_obj.BAIK_URKUNDE_SIGNATUR.key.SIG_META=Hinweis:
+sig_obj.BAIK_URKUNDE_SIGNATUR.key.SIG_TITLE=ELEKTRONISCHE BEURKUNDUNGSSIGNATUR
+
+# WAI
+sig_obj.BAIK_URKUNDE_SIGNATUR.sigLogoAltText=Abgebildet ist die Signaturbildmarke eines staatlich befugten und beeideten Ziviltechnikers mit Bundesadler.
+
+sig_obj.BAIK_URKUNDE_SIGNATUR.pos=f:80
+sig_obj.BAIK_URKUNDE_SIGNATUR.adobeSignFieldValue=Urkundensignatur
+sig_obj.BAIK_URKUNDE_SIGNATUR.adobeSignText.binary=Urkundensignatur der BAIK
+sig_obj.BAIK_URKUNDE_SIGNATUR.verifyURL=http://www.signaturpruefung.gv.at
+
+sig_obj.BAIK_URKUNDE_SIGNATUR.value.SIG_META=Dokumentenformat: ${iui.pdfVersion}
+sig_obj.BAIK_URKUNDE_SIGNATUR.value.SIG_LABEL=./images/Baik_Urkunde.gif
+sig_obj.BAIK_URKUNDE_SIGNATUR.value.SIG_TITLE=ELEKTRONISCHE BEURKUNDUNGSSIGNATUR
+
+sig_obj.BAIK_URKUNDE_SIGNATUR.phlength.SIG_META=50
+sig_obj.BAIK_URKUNDE_SIGNATUR.phlength.SIG_SIG_LABEL=200
+
+sig_obj.BAIK_URKUNDE_SIGNATUR.value.SIG_SIG_LABEL=${subject.CN}${subject.O != null ? ("\n" + subject.O) : ""}${subject.L != null ? ("\nKanzleisitz: " + subject.L) : ""}
+
+#---------------------- MAIN TABLE -------------------------
+sig_obj.BAIK_URKUNDE_SIGNATUR.table.main.1=SIG_TITLE-v
+sig_obj.BAIK_URKUNDE_SIGNATUR.table.main.2=SIG_VALUE-cv
+sig_obj.BAIK_URKUNDE_SIGNATUR.table.main.3=SIG_LABEL-i|TABLE-info
+sig_obj.BAIK_URKUNDE_SIGNATUR.table.main.4=SIG_META-cv
+
+sig_obj.BAIK_URKUNDE_SIGNATUR.table.main.ColsWidth=1 5
+sig_obj.BAIK_URKUNDE_SIGNATUR.table.main.Style.bgcolor=248 254 150
+sig_obj.BAIK_URKUNDE_SIGNATUR.table.main.Style.padding=4
+sig_obj.BAIK_URKUNDE_SIGNATUR.table.main.Style.border=0.1
+sig_obj.BAIK_URKUNDE_SIGNATUR.table.main.Style.halign=center
+sig_obj.BAIK_URKUNDE_SIGNATUR.table.main.Style.valuehalign=left
+sig_obj.BAIK_URKUNDE_SIGNATUR.table.main.Style.valign=middle
+sig_obj.BAIK_URKUNDE_SIGNATUR.table.main.Style.imagevalign=middle
+sig_obj.BAIK_URKUNDE_SIGNATUR.table.main.Style.font=TTF:DejaVuSansCondensed.ttf,8
+sig_obj.BAIK_URKUNDE_SIGNATUR.table.main.Style.valuefont=TTF:DejaVuSansCondensed.ttf,8
+
+#---------------------- INFO TABLE -------------------------
+sig_obj.BAIK_URKUNDE_SIGNATUR.table.info.ColsWidth=1 4
+sig_obj.BAIK_URKUNDE_SIGNATUR.table.info.Style.halign=left
+sig_obj.BAIK_URKUNDE_SIGNATUR.table.info.Style.valuehalign=left
+
+#sig_obj.BAIK_URKUNDE_SIGNATUR.table.info.1=SIG_NAME-cv
+sig_obj.BAIK_URKUNDE_SIGNATUR.table.info.1=SIG_SIG_LABEL-cv
+sig_obj.BAIK_URKUNDE_SIGNATUR.table.info.2=SIG_DATE-cv
+sig_obj.BAIK_URKUNDE_SIGNATUR.table.info.3=SIG_ISSUER-cv
+sig_obj.BAIK_URKUNDE_SIGNATUR.table.info.4=SIG_NUMBER-cv
+sig_obj.BAIK_URKUNDE_SIGNATUR.table.info.5=SIG_ALG-cv
+sig_obj.BAIK_URKUNDE_SIGNATUR.table.info.6=SIG_KZ-cv
diff --git a/pdf-as-lib/src/test/resources/at/knowcenter/wag/egov/egiz/cfg/profile.INVISIBLE.properties b/pdf-as-lib/src/test/resources/at/knowcenter/wag/egov/egiz/cfg/profile.INVISIBLE.properties
new file mode 100644
index 0000000..ad2b6a5
--- /dev/null
+++ b/pdf-as-lib/src/test/resources/at/knowcenter/wag/egov/egiz/cfg/profile.INVISIBLE.properties
@@ -0,0 +1,14 @@
+###################################################################################################
+# PROFIL: Unsichtbarer Signaturblock
+
+sig_obj.INVISIBLE.description=Unsichtbarer Signaturblock
+
+sig_obj.types.INVISIBLE=on
+
+sig_obj.INVISIBLE.adobeSignFieldValue=PDF-AS Signatur
+sig_obj.INVISIBLE.adobeSignReasonValue=Informationen zur Pr\u00fcfung finden Sie unter http://www.signaturpruefung.gv.at
+
+# Platzhaltersuche f\u00fcr dieses Profil deaktivieren
+sig_obj.INVISIBLE.enable_placeholder_search=false
+
+sig_obj.INVISIBLE.verifyURL=http://www.signaturpruefung.gv.at
diff --git a/pdf-as-lib/src/test/resources/at/knowcenter/wag/egov/egiz/cfg/profile.SIGNATURBLOCK_DE.properties b/pdf-as-lib/src/test/resources/at/knowcenter/wag/egov/egiz/cfg/profile.SIGNATURBLOCK_DE.properties
new file mode 100644
index 0000000..f76ba57
--- /dev/null
+++ b/pdf-as-lib/src/test/resources/at/knowcenter/wag/egov/egiz/cfg/profile.SIGNATURBLOCK_DE.properties
@@ -0,0 +1,60 @@
+sig_obj.type.default=SIGNATURBLOCK_DE
+
+###################################################################################################
+# PROFIL: Signaturblock (Deutsch) mit neuem Layout
+
+sig_obj.SIGNATURBLOCK_DE.description=Standardsignatur Deutsch mit neuem Layout
+
+sig_obj.types.SIGNATURBLOCK_DE=on
+
+sig_obj.SIGNATURBLOCK_DE.key.SIG_VALUE=Signaturwert
+#sig_obj.SIGNATURBLOCK_DE.key.SIG_NAME=Unterzeichner
+sig_obj.SIGNATURBLOCK_DE.key.SIG_SUBJECT=Unterzeichner
+sig_obj.SIGNATURBLOCK_DE.key.SIG_ISSUER=Aussteller-Zertifikat
+sig_obj.SIGNATURBLOCK_DE.key.SIG_NUMBER=Serien-Nr.
+sig_obj.SIGNATURBLOCK_DE.key.SIG_KZ=Methode
+sig_obj.SIGNATURBLOCK_DE.key.SIG_ID=Parameter
+sig_obj.SIGNATURBLOCK_DE.key.SIG_META=Pr\u00fcfinformation
+sig_obj.SIGNATURBLOCK_DE.key.SIG_DATE=Datum/Zeit-UTC
+
+
+sig_obj.SIGNATURBLOCK_DE.value.SIG_SUBJECT=${subject.T != null ? (subject.T + " ") : ""}${subject.CN}
+
+sig_obj.SIGNATURBLOCK_DE.pos=f:80
+sig_obj.SIGNATURBLOCK_DE.adobeSignFieldValue=PDF-AS Signatur
+sig_obj.SIGNATURBLOCK_DE.adobeSignReasonValue=Signaturpruefung unter http://www.signaturpruefung.gv.at
+sig_obj.SIGNATURBLOCK_DE.verifyURL=http://www.signaturpruefung.gv.at
+
+# WAI
+sig_obj.SIGNATURBLOCK_DE.sigLogoAltText=Abgebildet ist eine Standard-Signaturbildmarke.
+
+sig_obj.SIGNATURBLOCK_DE.value.SIG_META=Signaturpruefung unter: http://www.signaturpruefung.gv.at
+sig_obj.SIGNATURBLOCK_DE.value.SIG_LABEL=./images/signatur-logo_de.png
+
+
+#---------------------- MAIN TABLE -------------------------
+sig_obj.SIGNATURBLOCK_DE.table.main.1=SIG_VALUE-cv
+sig_obj.SIGNATURBLOCK_DE.table.main.2=SIG_LABEL-i|TABLE-info
+sig_obj.SIGNATURBLOCK_DE.table.main.3=SIG_META-cv
+sig_obj.SIGNATURBLOCK_DE.table.main.4=SIG_DATE-cv
+
+
+sig_obj.SIGNATURBLOCK_DE.table.main.ColsWidth=1 6
+sig_obj.SIGNATURBLOCK_DE.table.main.Style.bgcolor=255 255 255
+sig_obj.SIGNATURBLOCK_DE.table.main.Style.padding=4
+sig_obj.SIGNATURBLOCK_DE.table.main.Style.border=0.1
+sig_obj.SIGNATURBLOCK_DE.table.main.Style.halign=center
+sig_obj.SIGNATURBLOCK_DE.table.main.Style.valuehalign=left
+sig_obj.SIGNATURBLOCK_DE.table.main.Style.valign=top
+sig_obj.SIGNATURBLOCK_DE.table.main.Style.imagevalign=middle
+sig_obj.SIGNATURBLOCK_DE.table.main.Style.font=HELVETICA,8,BOLD
+sig_obj.SIGNATURBLOCK_DE.table.main.Style.valuefont=COURIER,8,NORMAL
+
+#---------------------- INFO TABLE -------------------------
+sig_obj.SIGNATURBLOCK_DE.table.info.ColsWidth=1 4
+#sig_obj.SIGNATURBLOCK_DE.table.info.1=SIG_NAME-cv
+sig_obj.SIGNATURBLOCK_DE.table.info.1=SIG_SUBJECT-cv
+sig_obj.SIGNATURBLOCK_DE.table.info.2=SIG_ISSUER-cv
+sig_obj.SIGNATURBLOCK_DE.table.info.3=SIG_NUMBER-cv
+sig_obj.SIGNATURBLOCK_DE.table.info.4=SIG_KZ-cv
+sig_obj.SIGNATURBLOCK_DE.table.info.5=SIG_ID-cv
diff --git a/pdf-as-lib/src/test/resources/at/knowcenter/wag/egov/egiz/cfg/profile.SIGNATURBLOCK_DE_DEPRECATED.properties b/pdf-as-lib/src/test/resources/at/knowcenter/wag/egov/egiz/cfg/profile.SIGNATURBLOCK_DE_DEPRECATED.properties
new file mode 100644
index 0000000..f70f5c9
--- /dev/null
+++ b/pdf-as-lib/src/test/resources/at/knowcenter/wag/egov/egiz/cfg/profile.SIGNATURBLOCK_DE_DEPRECATED.properties
@@ -0,0 +1,55 @@
+###################################################################################################
+# PROFIL: Signaturblock (Deutsch)
+
+sig_obj.SIGNATURBLOCK_DE_DEPRECATED.description=Standardsignatur Deutsch
+
+sig_obj.types.SIGNATURBLOCK_DE_DEPRECATED=on
+
+sig_obj.SIGNATURBLOCK_DE_DEPRECATED.key.SIG_VALUE=Signaturwert
+#sig_obj.SIGNATURBLOCK_DE_DEPRECATED.key.SIG_NAME=Unterzeichner
+sig_obj.SIGNATURBLOCK_DE_DEPRECATED.key.SIG_SUBJECT=Unterzeichner
+sig_obj.SIGNATURBLOCK_DE_DEPRECATED.key.SIG_DATE=Datum/Zeit-UTC
+sig_obj.SIGNATURBLOCK_DE_DEPRECATED.key.SIG_ISSUER=Aussteller-Zertifikat
+sig_obj.SIGNATURBLOCK_DE_DEPRECATED.key.SIG_NUMBER=Serien-Nr.
+sig_obj.SIGNATURBLOCK_DE_DEPRECATED.key.SIG_KZ=Methode
+sig_obj.SIGNATURBLOCK_DE_DEPRECATED.key.SIG_ID=Parameter
+sig_obj.SIGNATURBLOCK_DE_DEPRECATED.key.SIG_META=Pr\u00fcfinformation
+
+sig_obj.SIGNATURBLOCK_DE_DEPRECATED.value.SIG_SUBJECT=${subject.T != null ? (subject.T + " ") : ""}${subject.CN}
+
+sig_obj.SIGNATURBLOCK_DE_DEPRECATED.pos=f:80
+sig_obj.SIGNATURBLOCK_DE_DEPRECATED.adobeSignFieldValue=PDF-AS Signatur
+sig_obj.SIGNATURBLOCK_DE_DEPRECATED.adobeSignReasonValue=Informationen zur Pr\u00fcfung finden Sie unter http://www.signaturpruefung.gv.at
+sig_obj.SIGNATURBLOCK_DE_DEPRECATED.verifyURL=http://www.signaturpruefung.gv.at
+
+# WAI
+sig_obj.SIGNATURBLOCK_DE_DEPRECATED.sigLogoAltText=Abgebildet ist eine Standard-Signaturbildmarke.
+
+sig_obj.SIGNATURBLOCK_DE_DEPRECATED.value.SIG_META=Signaturpruefung unter: http://www.signaturpruefung.gv.at
+sig_obj.SIGNATURBLOCK_DE_DEPRECATED.value.SIG_LABEL=./images/signatur-logo_de.png
+
+#---------------------- MAIN TABLE -------------------------
+sig_obj.SIGNATURBLOCK_DE_DEPRECATED.table.main.1=SIG_VALUE-cv
+sig_obj.SIGNATURBLOCK_DE_DEPRECATED.table.main.2=SIG_LABEL-i|TABLE-info
+sig_obj.SIGNATURBLOCK_DE_DEPRECATED.table.main.3=SIG_META-cv
+
+sig_obj.SIGNATURBLOCK_DE_DEPRECATED.table.main.ColsWidth=1 6
+sig_obj.SIGNATURBLOCK_DE_DEPRECATED.table.main.Style.bgcolor=255 255 255
+sig_obj.SIGNATURBLOCK_DE_DEPRECATED.table.main.Style.padding=4
+sig_obj.SIGNATURBLOCK_DE_DEPRECATED.table.main.Style.border=0.1
+sig_obj.SIGNATURBLOCK_DE_DEPRECATED.table.main.Style.halign=center
+sig_obj.SIGNATURBLOCK_DE_DEPRECATED.table.main.Style.valuehalign=left
+sig_obj.SIGNATURBLOCK_DE_DEPRECATED.table.main.Style.valign=middle
+sig_obj.SIGNATURBLOCK_DE_DEPRECATED.table.main.Style.imagevalign=middle
+sig_obj.SIGNATURBLOCK_DE_DEPRECATED.table.main.Style.font=HELVETICA,8,BOLD
+sig_obj.SIGNATURBLOCK_DE_DEPRECATED.table.main.Style.valuefont=COURIER,8,NORMAL
+
+#---------------------- INFO TABLE -------------------------
+sig_obj.SIGNATURBLOCK_DE_DEPRECATED.table.info.ColsWidth=1 4
+#sig_obj.SIGNATURBLOCK_DE_DEPRECATED.table.info.1=SIG_NAME-cv
+sig_obj.SIGNATURBLOCK_DE_DEPRECATED.table.info.1=SIG_SUBJECT-cv
+sig_obj.SIGNATURBLOCK_DE_DEPRECATED.table.info.2=SIG_DATE-cv
+sig_obj.SIGNATURBLOCK_DE_DEPRECATED.table.info.3=SIG_ISSUER-cv
+sig_obj.SIGNATURBLOCK_DE_DEPRECATED.table.info.4=SIG_NUMBER-cv
+sig_obj.SIGNATURBLOCK_DE_DEPRECATED.table.info.5=SIG_KZ-cv
+sig_obj.SIGNATURBLOCK_DE_DEPRECATED.table.info.6=SIG_ID-cv
diff --git a/pdf-as-lib/src/test/resources/at/knowcenter/wag/egov/egiz/cfg/profile.SIGNATURBLOCK_DE_NOTE.properties b/pdf-as-lib/src/test/resources/at/knowcenter/wag/egov/egiz/cfg/profile.SIGNATURBLOCK_DE_NOTE.properties
new file mode 100644
index 0000000..4c3b9e8
--- /dev/null
+++ b/pdf-as-lib/src/test/resources/at/knowcenter/wag/egov/egiz/cfg/profile.SIGNATURBLOCK_DE_NOTE.properties
@@ -0,0 +1,62 @@
+###################################################################################################
+# PROFIL: Signaturblock (Deutsch) mit neuem Layout und Hinweistext
+
+sig_obj.SIGNATURBLOCK_DE_NOTE.description=Standardsignatur Deutsch mit neuem Layout
+
+sig_obj.types.SIGNATURBLOCK_DE_NOTE=on
+
+sig_obj.SIGNATURBLOCK_DE_NOTE.key.SIG_VALUE=Signaturwert
+#sig_obj.SIGNATURBLOCK_DE_NOTE.key.SIG_NAME=Unterzeichner
+sig_obj.SIGNATURBLOCK_DE_NOTE.key.SIG_SUBJECT=Unterzeichner
+sig_obj.SIGNATURBLOCK_DE_NOTE.key.SIG_ISSUER=Aussteller-Zertifikat
+sig_obj.SIGNATURBLOCK_DE_NOTE.key.SIG_NUMBER=Serien-Nr.
+sig_obj.SIGNATURBLOCK_DE_NOTE.key.SIG_KZ=Methode
+sig_obj.SIGNATURBLOCK_DE_NOTE.key.SIG_ID=Parameter
+sig_obj.SIGNATURBLOCK_DE_NOTE.key.SIG_META=Pr\u00fcfinformation
+sig_obj.SIGNATURBLOCK_DE_NOTE.key.SIG_NOTE=Hinweis
+sig_obj.SIGNATURBLOCK_DE_NOTE.key.SIG_DATE=Datum/Zeit-UTC
+
+
+
+sig_obj.SIGNATURBLOCK_DE_NOTE.value.SIG_SUBJECT=${subject.T != null ? (subject.T + " ") : ""}${subject.CN}
+
+sig_obj.SIGNATURBLOCK_DE_NOTE.pos=f:80
+sig_obj.SIGNATURBLOCK_DE_NOTE.adobeSignFieldValue=PDF-AS Signatur
+sig_obj.SIGNATURBLOCK_DE_NOTE.adobeSignReasonValue=Signaturpruefung unter http://www.signaturpruefung.gv.at
+sig_obj.SIGNATURBLOCK_DE_NOTE.verifyURL=http://www.signaturpruefung.gv.at
+
+# WAI
+sig_obj.SIGNATURBLOCK_DE_NOTE.sigLogoAltText=Abgebildet ist eine Standard-Signaturbildmarke.
+
+sig_obj.SIGNATURBLOCK_DE_NOTE.value.SIG_META=Signaturpruefung unter: http://www.signaturpruefung.gv.at
+sig_obj.SIGNATURBLOCK_DE_NOTE.value.SIG_LABEL=./images/signatur-logo_de.png
+sig_obj.SIGNATURBLOCK_DE_NOTE.value.SIG_NOTE=Dieses mit einer qualifizierten elektronischen Signatur versehene Dokument ist gem\u00e4\u00df \u00a7\u00A04 Abs.\u00A01 Signaturgesetz einem handschriftlich unterschriebenen Dokument grunds\u00e4tzlich rechtlich gleichgestellt.
+
+
+#---------------------- MAIN TABLE -------------------------
+sig_obj.SIGNATURBLOCK_DE_NOTE.table.main.1=SIG_VALUE-cv
+sig_obj.SIGNATURBLOCK_DE_NOTE.table.main.2=SIG_LABEL-i|TABLE-info
+sig_obj.SIGNATURBLOCK_DE_NOTE.table.main.3=SIG_META-cv
+sig_obj.SIGNATURBLOCK_DE_NOTE.table.main.4=SIG_NOTE-cv
+sig_obj.SIGNATURBLOCK_DE_NOTE.table.main.5=SIG_DATE-cv
+
+
+sig_obj.SIGNATURBLOCK_DE_NOTE.table.main.ColsWidth=1 6
+sig_obj.SIGNATURBLOCK_DE_NOTE.table.main.Style.bgcolor=255 255 255
+sig_obj.SIGNATURBLOCK_DE_NOTE.table.main.Style.padding=4
+sig_obj.SIGNATURBLOCK_DE_NOTE.table.main.Style.border=0.1
+sig_obj.SIGNATURBLOCK_DE_NOTE.table.main.Style.halign=center
+sig_obj.SIGNATURBLOCK_DE_NOTE.table.main.Style.valuehalign=left
+sig_obj.SIGNATURBLOCK_DE_NOTE.table.main.Style.valign=top
+sig_obj.SIGNATURBLOCK_DE_NOTE.table.main.Style.imagevalign=middle
+sig_obj.SIGNATURBLOCK_DE_NOTE.table.main.Style.font=HELVETICA,8,BOLD
+sig_obj.SIGNATURBLOCK_DE_NOTE.table.main.Style.valuefont=COURIER,8,NORMAL
+
+#---------------------- INFO TABLE -------------------------
+sig_obj.SIGNATURBLOCK_DE_NOTE.table.info.ColsWidth=1 4
+#sig_obj.SIGNATURBLOCK_DE_NOTE.table.info.1=SIG_NAME-cv
+sig_obj.SIGNATURBLOCK_DE_NOTE.table.info.1=SIG_SUBJECT-cv
+sig_obj.SIGNATURBLOCK_DE_NOTE.table.info.2=SIG_ISSUER-cv
+sig_obj.SIGNATURBLOCK_DE_NOTE.table.info.3=SIG_NUMBER-cv
+sig_obj.SIGNATURBLOCK_DE_NOTE.table.info.4=SIG_KZ-cv
+sig_obj.SIGNATURBLOCK_DE_NOTE.table.info.5=SIG_ID-cv
diff --git a/pdf-as-lib/src/test/resources/at/knowcenter/wag/egov/egiz/cfg/profile.SIGNATURBLOCK_DE_PDFA.properties b/pdf-as-lib/src/test/resources/at/knowcenter/wag/egov/egiz/cfg/profile.SIGNATURBLOCK_DE_PDFA.properties
new file mode 100644
index 0000000..ef4ffe5
--- /dev/null
+++ b/pdf-as-lib/src/test/resources/at/knowcenter/wag/egov/egiz/cfg/profile.SIGNATURBLOCK_DE_PDFA.properties
@@ -0,0 +1,59 @@
+###################################################################################################
+# PROFIL: Signaturblock (Deutsch), PDF/A-1b
+
+sig_obj.SIGNATURBLOCK_DE_PDFA.description=Standardsignatur Deutsch, PDF/A-1b
+
+sig_obj.types.SIGNATURBLOCK_DE_PDFA=on
+
+# enable/disable PDF/A1b support for this profile
+sig_obj.SIGNATURBLOCK_DE_PDFA.key.SIG_PDFA1B_VALID=true
+
+sig_obj.SIGNATURBLOCK_DE_PDFA.key.SIG_VALUE=Signaturwert
+#sig_obj.SIGNATURBLOCK_DE_PDFA.key.SIG_NAME=Unterzeichner
+sig_obj.SIGNATURBLOCK_DE_PDFA.key.SIG_SUBJECT=Unterzeichner
+sig_obj.SIGNATURBLOCK_DE_PDFA.key.SIG_ISSUER=Aussteller-Zertifikat
+sig_obj.SIGNATURBLOCK_DE_PDFA.key.SIG_NUMBER=Serien-Nr.
+sig_obj.SIGNATURBLOCK_DE_PDFA.key.SIG_KZ=Methode
+sig_obj.SIGNATURBLOCK_DE_PDFA.key.SIG_ID=Parameter
+sig_obj.SIGNATURBLOCK_DE_PDFA.key.SIG_META=Pr\u00fcfinformation
+sig_obj.SIGNATURBLOCK_DE_PDFA.key.SIG_DATE=Datum/Zeit-UTC
+
+
+sig_obj.SIGNATURBLOCK_DE_PDFA.value.SIG_SUBJECT=${subject.T != null ? (subject.T + " ") : ""}${subject.CN}
+
+sig_obj.SIGNATURBLOCK_DE_PDFA.pos=f:80
+sig_obj.SIGNATURBLOCK_DE_PDFA.adobeSignFieldValue=PDF-AS Signatur
+sig_obj.SIGNATURBLOCK_DE_PDFA.adobeSignReasonValue=Signaturpruefung unter: http://www.signaturpruefung.gv.at
+sig_obj.SIGNATURBLOCK_DE_PDFA.verifyURL=http://www.signaturpruefung.gv.at
+
+# WAI
+sig_obj.SIGNATURBLOCK_DE_PDFA.sigLogoAltText=Abgebildet ist eine Standard-Signaturbildmarke.
+
+sig_obj.SIGNATURBLOCK_DE_PDFA.value.SIG_META=Signaturpruefung unter: http://www.signaturpruefung.gv.at
+sig_obj.SIGNATURBLOCK_DE_PDFA.value.SIG_LABEL=./images/signatur-logo_de.png
+
+#---------------------- MAIN TABLE -------------------------
+sig_obj.SIGNATURBLOCK_DE_PDFA.table.main.1=SIG_VALUE-cv
+sig_obj.SIGNATURBLOCK_DE_PDFA.table.main.2=SIG_LABEL-i|TABLE-info
+sig_obj.SIGNATURBLOCK_DE_PDFA.table.main.3=SIG_META-cv
+sig_obj.SIGNATURBLOCK_DE_PDFA.table.main.4=SIG_DATE-cv
+
+sig_obj.SIGNATURBLOCK_DE_PDFA.table.main.ColsWidth=1 5.5
+sig_obj.SIGNATURBLOCK_DE_PDFA.table.main.Style.bgcolor=255 255 255
+sig_obj.SIGNATURBLOCK_DE_PDFA.table.main.Style.padding=4
+sig_obj.SIGNATURBLOCK_DE_PDFA.table.main.Style.border=0.1
+sig_obj.SIGNATURBLOCK_DE_PDFA.table.main.Style.halign=center
+sig_obj.SIGNATURBLOCK_DE_PDFA.table.main.Style.valuehalign=left
+sig_obj.SIGNATURBLOCK_DE_PDFA.table.main.Style.valign=top
+sig_obj.SIGNATURBLOCK_DE_PDFA.table.main.Style.imagevalign=middle
+sig_obj.SIGNATURBLOCK_DE_PDFA.table.main.Style.font=TTF:DejaVuSansCondensed-Bold.ttf,8
+sig_obj.SIGNATURBLOCK_DE_PDFA.table.main.Style.valuefont=TTF:DejaVuSansMono.ttf,8
+
+#---------------------- INFO TABLE -------------------------
+sig_obj.SIGNATURBLOCK_DE_PDFA.table.info.ColsWidth=1 3.5
+#sig_obj.SIGNATURBLOCK_DE_PDFA.table.info.1=SIG_NAME-cv
+sig_obj.SIGNATURBLOCK_DE_PDFA.table.info.1=SIG_SUBJECT-cv
+sig_obj.SIGNATURBLOCK_DE_PDFA.table.info.2=SIG_ISSUER-cv
+sig_obj.SIGNATURBLOCK_DE_PDFA.table.info.3=SIG_NUMBER-cv
+sig_obj.SIGNATURBLOCK_DE_PDFA.table.info.4=SIG_KZ-cv
+sig_obj.SIGNATURBLOCK_DE_PDFA.table.info.5=SIG_ID-cv
diff --git a/pdf-as-lib/src/test/resources/at/knowcenter/wag/egov/egiz/cfg/profile.SIGNATURBLOCK_DE_PDFA_NOTE.properties b/pdf-as-lib/src/test/resources/at/knowcenter/wag/egov/egiz/cfg/profile.SIGNATURBLOCK_DE_PDFA_NOTE.properties
new file mode 100644
index 0000000..0fd71a1
--- /dev/null
+++ b/pdf-as-lib/src/test/resources/at/knowcenter/wag/egov/egiz/cfg/profile.SIGNATURBLOCK_DE_PDFA_NOTE.properties
@@ -0,0 +1,62 @@
+###################################################################################################
+# PROFIL: Signaturblock (Deutsch), PDF/A-1b und mit Hinweistext
+
+sig_obj.SIGNATURBLOCK_DE_PDFA_NOTE.description=Standardsignatur Deutsch, PDF/A-1b
+
+sig_obj.types.SIGNATURBLOCK_DE_PDFA_NOTE=on
+
+# enable/disable PDF/A1b support for this profile
+sig_obj.SIGNATURBLOCK_DE_PDFA_NOTE.key.SIG_PDFA1B_VALID=true
+
+sig_obj.SIGNATURBLOCK_DE_PDFA_NOTE.key.SIG_VALUE=Signaturwert
+#sig_obj.SIGNATURBLOCK_DE_PDFA_NOTE.key.SIG_NAME=Unterzeichner
+sig_obj.SIGNATURBLOCK_DE_PDFA_NOTE.key.SIG_SUBJECT=Unterzeichner
+sig_obj.SIGNATURBLOCK_DE_PDFA_NOTE.key.SIG_ISSUER=Aussteller-Zertifikat
+sig_obj.SIGNATURBLOCK_DE_PDFA_NOTE.key.SIG_NUMBER=Serien-Nr.
+sig_obj.SIGNATURBLOCK_DE_PDFA_NOTE.key.SIG_KZ=Methode
+sig_obj.SIGNATURBLOCK_DE_PDFA_NOTE.key.SIG_ID=Parameter
+sig_obj.SIGNATURBLOCK_DE_PDFA_NOTE.key.SIG_META=Pr\u00fcfinformation
+sig_obj.SIGNATURBLOCK_DE_PDFA_NOTE.key.SIG_NOTE=Hinweis
+sig_obj.SIGNATURBLOCK_DE_PDFA_NOTE.key.SIG_DATE=Datum/Zeit-UTC
+
+
+sig_obj.SIGNATURBLOCK_DE_PDFA_NOTE.value.SIG_SUBJECT=${subject.T != null ? (subject.T + " ") : ""}${subject.CN}
+
+sig_obj.SIGNATURBLOCK_DE_PDFA_NOTE.pos=f:80
+sig_obj.SIGNATURBLOCK_DE_PDFA_NOTE.adobeSignFieldValue=PDF-AS Signatur
+sig_obj.SIGNATURBLOCK_DE_PDFA_NOTE.adobeSignReasonValue=Signaturpruefung unter: http://www.signaturpruefung.gv.at
+sig_obj.SIGNATURBLOCK_DE_PDFA_NOTE.verifyURL=http://www.signaturpruefung.gv.at
+
+# WAI
+sig_obj.SIGNATURBLOCK_DE_PDFA_NOTE.sigLogoAltText=Abgebildet ist eine Standard-Signaturbildmarke.
+
+sig_obj.SIGNATURBLOCK_DE_PDFA_NOTE.value.SIG_META=Signaturpruefung unter: http://www.signaturpruefung.gv.at
+sig_obj.SIGNATURBLOCK_DE_PDFA_NOTE.value.SIG_LABEL=./images/signatur-logo_de.png
+sig_obj.SIGNATURBLOCK_DE_PDFA_NOTE.value.SIG_NOTE=Dieses mit einer qualifizierten elektronischen Signatur versehene Dokument ist gem\u00e4\u00df \u00a7\u00A04 Abs.\u00A01 Signaturgesetz einem handschriftlich unterschriebenen Dokument grunds\u00e4tzlich rechtlich gleichgestellt.
+
+#---------------------- MAIN TABLE -------------------------
+sig_obj.SIGNATURBLOCK_DE_PDFA_NOTE.table.main.1=SIG_VALUE-cv
+sig_obj.SIGNATURBLOCK_DE_PDFA_NOTE.table.main.2=SIG_LABEL-i|TABLE-info
+sig_obj.SIGNATURBLOCK_DE_PDFA_NOTE.table.main.3=SIG_META-cv
+sig_obj.SIGNATURBLOCK_DE_PDFA_NOTE.table.main.4=SIG_NOTE-cv
+sig_obj.SIGNATURBLOCK_DE_PDFA_NOTE.table.main.5=SIG_DATE-cv
+
+sig_obj.SIGNATURBLOCK_DE_PDFA_NOTE.table.main.ColsWidth=1 5.5
+sig_obj.SIGNATURBLOCK_DE_PDFA_NOTE.table.main.Style.bgcolor=255 255 255
+sig_obj.SIGNATURBLOCK_DE_PDFA_NOTE.table.main.Style.padding=4
+sig_obj.SIGNATURBLOCK_DE_PDFA_NOTE.table.main.Style.border=0.1
+sig_obj.SIGNATURBLOCK_DE_PDFA_NOTE.table.main.Style.halign=center
+sig_obj.SIGNATURBLOCK_DE_PDFA_NOTE.table.main.Style.valuehalign=left
+sig_obj.SIGNATURBLOCK_DE_PDFA_NOTE.table.main.Style.valign=top
+sig_obj.SIGNATURBLOCK_DE_PDFA_NOTE.table.main.Style.imagevalign=middle
+sig_obj.SIGNATURBLOCK_DE_PDFA_NOTE.table.main.Style.font=TTF:DejaVuSansCondensed-Bold.ttf,8
+sig_obj.SIGNATURBLOCK_DE_PDFA_NOTE.table.main.Style.valuefont=TTF:DejaVuSansMono.ttf,8
+
+#---------------------- INFO TABLE -------------------------
+sig_obj.SIGNATURBLOCK_DE_PDFA_NOTE.table.info.ColsWidth=1 3.5
+#sig_obj.SIGNATURBLOCK_DE_PDFA_NOTE.table.info.1=SIG_NAME-cv
+sig_obj.SIGNATURBLOCK_DE_PDFA_NOTE.table.info.1=SIG_SUBJECT-cv
+sig_obj.SIGNATURBLOCK_DE_PDFA_NOTE.table.info.2=SIG_ISSUER-cv
+sig_obj.SIGNATURBLOCK_DE_PDFA_NOTE.table.info.3=SIG_NUMBER-cv
+sig_obj.SIGNATURBLOCK_DE_PDFA_NOTE.table.info.4=SIG_KZ-cv
+sig_obj.SIGNATURBLOCK_DE_PDFA_NOTE.table.info.5=SIG_ID-cv
diff --git a/pdf-as-lib/src/test/resources/at/knowcenter/wag/egov/egiz/cfg/profile.SIGNATURBLOCK_EN.properties b/pdf-as-lib/src/test/resources/at/knowcenter/wag/egov/egiz/cfg/profile.SIGNATURBLOCK_EN.properties
new file mode 100644
index 0000000..890579e
--- /dev/null
+++ b/pdf-as-lib/src/test/resources/at/knowcenter/wag/egov/egiz/cfg/profile.SIGNATURBLOCK_EN.properties
@@ -0,0 +1,56 @@
+###################################################################################################
+# PROFIL: Signaturblock (Englisch) mit neuem Layout
+
+sig_obj.SIGNATURBLOCK_EN.description=Standardsignatur Englisch mit neuem Layout
+
+sig_obj.types.SIGNATURBLOCK_EN=on
+
+sig_obj.SIGNATURBLOCK_EN.key.SIG_VALUE=Signature Value
+#sig_obj.SIGNATURBLOCK_EN.key.SIG_NAME=Signatory
+sig_obj.SIGNATURBLOCK_EN.key.SIG_SUBJECT=Signatory
+sig_obj.SIGNATURBLOCK_EN.key.SIG_ISSUER=Issuer-Certificate
+sig_obj.SIGNATURBLOCK_EN.key.SIG_NUMBER=Serial-No.
+sig_obj.SIGNATURBLOCK_EN.key.SIG_KZ=Method
+sig_obj.SIGNATURBLOCK_EN.key.SIG_ID=Parameter
+sig_obj.SIGNATURBLOCK_EN.key.SIG_META=Verification
+sig_obj.SIGNATURBLOCK_EN.key.SIG_DATE=Date/Time-UTC
+
+sig_obj.SIGNATURBLOCK_EN.value.SIG_SUBJECT=${subject.T != null ? (subject.T + " ") : ""}${subject.CN}
+
+sig_obj.SIGNATURBLOCK_EN.pos=f:80
+sig_obj.SIGNATURBLOCK_EN.adobeSignFieldValue=PDF-AS Signature
+sig_obj.SIGNATURBLOCK_EN.adobeSignReasonValue=Signature verification at http://www.signature-verification.gv.at
+sig_obj.SIGNATURBLOCK_EN.verifyURL=http://www.signature-verification.gv.at
+
+# WAI
+sig_obj.SIGNATURBLOCK_EN.sigLogoAltText=A standard signature logo is shown.
+
+sig_obj.SIGNATURBLOCK_EN.value.SIG_META=Signature verification at: http://www.signature-verification.gv.at
+sig_obj.SIGNATURBLOCK_EN.value.SIG_LABEL=./images/signatur-logo_en.png
+
+#---------------------- MAIN TABLE -------------------------
+sig_obj.SIGNATURBLOCK_EN.table.main.1=SIG_VALUE-cv
+sig_obj.SIGNATURBLOCK_EN.table.main.2=SIG_LABEL-i|TABLE-info
+sig_obj.SIGNATURBLOCK_EN.table.main.3=SIG_META-cv
+sig_obj.SIGNATURBLOCK_EN.table.main.4=SIG_DATE-cv
+
+
+sig_obj.SIGNATURBLOCK_EN.table.main.ColsWidth=1 6
+sig_obj.SIGNATURBLOCK_EN.table.main.Style.bgcolor=255 255 255
+sig_obj.SIGNATURBLOCK_EN.table.main.Style.padding=4
+sig_obj.SIGNATURBLOCK_EN.table.main.Style.border=0.1
+sig_obj.SIGNATURBLOCK_EN.table.main.Style.halign=center
+sig_obj.SIGNATURBLOCK_EN.table.main.Style.valuehalign=left
+sig_obj.SIGNATURBLOCK_EN.table.main.Style.valign=top
+sig_obj.SIGNATURBLOCK_EN.table.main.Style.imagevalign=middle
+sig_obj.SIGNATURBLOCK_EN.table.main.Style.font=HELVETICA,8,BOLD
+sig_obj.SIGNATURBLOCK_EN.table.main.Style.valuefont=COURIER,8,NORMAL
+
+#---------------------- INFO TABLE -------------------------
+sig_obj.SIGNATURBLOCK_EN.table.info.ColsWidth=1 5
+#sig_obj.SIGNATURBLOCK_EN.table.info.1=SIG_NAME-cv
+sig_obj.SIGNATURBLOCK_EN.table.info.1=SIG_SUBJECT-cv
+sig_obj.SIGNATURBLOCK_EN.table.info.2=SIG_ISSUER-cv
+sig_obj.SIGNATURBLOCK_EN.table.info.3=SIG_NUMBER-cv
+sig_obj.SIGNATURBLOCK_EN.table.info.4=SIG_KZ-cv
+sig_obj.SIGNATURBLOCK_EN.table.info.5=SIG_ID-cv
diff --git a/pdf-as-lib/src/test/resources/at/knowcenter/wag/egov/egiz/cfg/profile.SIGNATURBLOCK_EN_DEPRECATED.properties b/pdf-as-lib/src/test/resources/at/knowcenter/wag/egov/egiz/cfg/profile.SIGNATURBLOCK_EN_DEPRECATED.properties
new file mode 100644
index 0000000..e1cf19b
--- /dev/null
+++ b/pdf-as-lib/src/test/resources/at/knowcenter/wag/egov/egiz/cfg/profile.SIGNATURBLOCK_EN_DEPRECATED.properties
@@ -0,0 +1,55 @@
+###################################################################################################
+# PROFIL: Signaturblock (Englisch)
+
+sig_obj.SIGNATURBLOCK_EN_DEPRECATED.description=Standardsignatur Englisch
+
+sig_obj.types.SIGNATURBLOCK_EN_DEPRECATED=on
+
+sig_obj.SIGNATURBLOCK_EN_DEPRECATED.key.SIG_VALUE=Signature Value
+#sig_obj.SIGNATURBLOCK_EN_DEPRECATED.key.SIG_NAME=Signatory
+sig_obj.SIGNATURBLOCK_EN_DEPRECATED.key.SIG_SUBJECT=Signatory
+sig_obj.SIGNATURBLOCK_EN_DEPRECATED.key.SIG_DATE=Date/Time-UTC
+sig_obj.SIGNATURBLOCK_EN_DEPRECATED.key.SIG_ISSUER=Issuer-Certificate
+sig_obj.SIGNATURBLOCK_EN_DEPRECATED.key.SIG_NUMBER=Serial-No.
+sig_obj.SIGNATURBLOCK_EN_DEPRECATED.key.SIG_KZ=Method
+sig_obj.SIGNATURBLOCK_EN_DEPRECATED.key.SIG_ID=Parameter
+sig_obj.SIGNATURBLOCK_EN_DEPRECATED.key.SIG_META=Verification
+
+sig_obj.SIGNATURBLOCK_EN_DEPRECATED.value.SIG_SUBJECT=${subject.T != null ? (subject.T + " ") : ""}${subject.CN}
+
+sig_obj.SIGNATURBLOCK_EN_DEPRECATED.pos=f:80
+sig_obj.SIGNATURBLOCK_EN_DEPRECATED.adobeSignFieldValue=PDF-AS Signature
+sig_obj.SIGNATURBLOCK_EN_DEPRECATED.adobeSignReasonValue=Information about the verification can be found at http://www.signature-verification.gv.at
+sig_obj.SIGNATURBLOCK_EN_DEPRECATED.verifyURL=http://www.signature-verification.gv.at
+
+# WAI
+sig_obj.SIGNATURBLOCK_EN_DEPRECATED.sigLogoAltText=A standard signature logo is shown.
+
+sig_obj.SIGNATURBLOCK_EN_DEPRECATED.value.SIG_META=Signature verification at: http://www.signature-verification.gv.at
+sig_obj.SIGNATURBLOCK_EN_DEPRECATED.value.SIG_LABEL=./images/signatur-logo_en.png
+
+#---------------------- MAIN TABLE -------------------------
+sig_obj.SIGNATURBLOCK_EN_DEPRECATED.table.main.1=SIG_VALUE-cv
+sig_obj.SIGNATURBLOCK_EN_DEPRECATED.table.main.2=SIG_LABEL-i|TABLE-info
+sig_obj.SIGNATURBLOCK_EN_DEPRECATED.table.main.3=SIG_META-cv
+
+sig_obj.SIGNATURBLOCK_EN_DEPRECATED.table.main.ColsWidth=1 6
+sig_obj.SIGNATURBLOCK_EN_DEPRECATED.table.main.Style.bgcolor=255 255 255
+sig_obj.SIGNATURBLOCK_EN_DEPRECATED.table.main.Style.padding=4
+sig_obj.SIGNATURBLOCK_EN_DEPRECATED.table.main.Style.border=0.1
+sig_obj.SIGNATURBLOCK_EN_DEPRECATED.table.main.Style.halign=center
+sig_obj.SIGNATURBLOCK_EN_DEPRECATED.table.main.Style.valuehalign=left
+sig_obj.SIGNATURBLOCK_EN_DEPRECATED.table.main.Style.valign=middle
+sig_obj.SIGNATURBLOCK_EN_DEPRECATED.table.main.Style.imagevalign=middle
+sig_obj.SIGNATURBLOCK_EN_DEPRECATED.table.main.Style.font=HELVETICA,8,BOLD
+sig_obj.SIGNATURBLOCK_EN_DEPRECATED.table.main.Style.valuefont=COURIER,8,NORMAL
+
+#---------------------- INFO TABLE -------------------------
+sig_obj.SIGNATURBLOCK_EN_DEPRECATED.table.info.ColsWidth=1 5
+#sig_obj.SIGNATURBLOCK_EN_DEPRECATED.table.info.1=SIG_NAME-cv
+sig_obj.SIGNATURBLOCK_EN_DEPRECATED.table.info.1=SIG_SUBJECT-cv
+sig_obj.SIGNATURBLOCK_EN_DEPRECATED.table.info.2=SIG_DATE-cv
+sig_obj.SIGNATURBLOCK_EN_DEPRECATED.table.info.3=SIG_ISSUER-cv
+sig_obj.SIGNATURBLOCK_EN_DEPRECATED.table.info.4=SIG_NUMBER-cv
+sig_obj.SIGNATURBLOCK_EN_DEPRECATED.table.info.5=SIG_KZ-cv
+sig_obj.SIGNATURBLOCK_EN_DEPRECATED.table.info.6=SIG_ID-cv
diff --git a/pdf-as-lib/src/test/resources/at/knowcenter/wag/egov/egiz/cfg/profile.SIGNATURBLOCK_EN_NOTE.properties b/pdf-as-lib/src/test/resources/at/knowcenter/wag/egov/egiz/cfg/profile.SIGNATURBLOCK_EN_NOTE.properties
new file mode 100644
index 0000000..8bf6dd3
--- /dev/null
+++ b/pdf-as-lib/src/test/resources/at/knowcenter/wag/egov/egiz/cfg/profile.SIGNATURBLOCK_EN_NOTE.properties
@@ -0,0 +1,60 @@
+###################################################################################################
+# PROFIL: Signaturblock (Englisch) mit neuem Layout und Hinweistext
+
+sig_obj.SIGNATURBLOCK_EN_NOTE.description=Standardsignatur Englisch mit neuem Layout
+
+sig_obj.types.SIGNATURBLOCK_EN_NOTE=on
+
+sig_obj.SIGNATURBLOCK_EN_NOTE.key.SIG_VALUE=Signature Value
+#sig_obj.SIGNATURBLOCK_EN_NOTE.key.SIG_NAME=Signatory
+sig_obj.SIGNATURBLOCK_EN_NOTE.key.SIG_SUBJECT=Signatory
+sig_obj.SIGNATURBLOCK_EN_NOTE.key.SIG_ISSUER=Issuer-Certificate
+sig_obj.SIGNATURBLOCK_EN_NOTE.key.SIG_NUMBER=Serial-No.
+sig_obj.SIGNATURBLOCK_EN_NOTE.key.SIG_KZ=Method
+sig_obj.SIGNATURBLOCK_EN_NOTE.key.SIG_ID=Parameter
+sig_obj.SIGNATURBLOCK_EN_NOTE.key.SIG_META=Verification
+sig_obj.SIGNATURBLOCK_EN_NOTE.key.SIG_NOTE=Note
+sig_obj.SIGNATURBLOCK_EN_NOTE.key.SIG_DATE=Date/Time-UTC
+
+sig_obj.SIGNATURBLOCK_EN_NOTE.value.SIG_SUBJECT=${subject.T != null ? (subject.T + " ") : ""}${subject.CN}
+
+sig_obj.SIGNATURBLOCK_EN_NOTE.pos=f:80
+sig_obj.SIGNATURBLOCK_EN_NOTE.adobeSignFieldValue=PDF-AS Signature
+sig_obj.SIGNATURBLOCK_EN_NOTE.adobeSignReasonValue=Signature verification at http://www.signature-verification.gv.at
+sig_obj.SIGNATURBLOCK_EN_NOTE.verifyURL=http://www.signature-verification.gv.at
+
+# WAI
+sig_obj.SIGNATURBLOCK_EN_NOTE.sigLogoAltText=A standard signature logo is shown.
+
+sig_obj.SIGNATURBLOCK_EN_NOTE.value.SIG_META=Signature verification at: http://www.signature-verification.gv.at
+sig_obj.SIGNATURBLOCK_EN_NOTE.value.SIG_LABEL=./images/signatur-logo_en.png
+sig_obj.SIGNATURBLOCK_EN_NOTE.value.SIG_NOTE=This document is signed with a qualified electronic signature. According to \u00a7\u00A04 art.\u00A01 of the Signature Act it in principle is legally equivalent to an handwritten signature.
+
+
+#---------------------- MAIN TABLE -------------------------
+sig_obj.SIGNATURBLOCK_EN_NOTE.table.main.1=SIG_VALUE-cv
+sig_obj.SIGNATURBLOCK_EN_NOTE.table.main.2=SIG_LABEL-i|TABLE-info
+sig_obj.SIGNATURBLOCK_EN_NOTE.table.main.3=SIG_META-cv
+sig_obj.SIGNATURBLOCK_EN_NOTE.table.main.4=SIG_NOTE-cv
+sig_obj.SIGNATURBLOCK_EN_NOTE.table.main.5=SIG_DATE-cv
+
+
+sig_obj.SIGNATURBLOCK_EN_NOTE.table.main.ColsWidth=1 6
+sig_obj.SIGNATURBLOCK_EN_NOTE.table.main.Style.bgcolor=255 255 255
+sig_obj.SIGNATURBLOCK_EN_NOTE.table.main.Style.padding=4
+sig_obj.SIGNATURBLOCK_EN_NOTE.table.main.Style.border=0.1
+sig_obj.SIGNATURBLOCK_EN_NOTE.table.main.Style.halign=center
+sig_obj.SIGNATURBLOCK_EN_NOTE.table.main.Style.valuehalign=left
+sig_obj.SIGNATURBLOCK_EN_NOTE.table.main.Style.valign=top
+sig_obj.SIGNATURBLOCK_EN_NOTE.table.main.Style.imagevalign=middle
+sig_obj.SIGNATURBLOCK_EN_NOTE.table.main.Style.font=HELVETICA,8,BOLD
+sig_obj.SIGNATURBLOCK_EN_NOTE.table.main.Style.valuefont=COURIER,8,NORMAL
+
+#---------------------- INFO TABLE -------------------------
+sig_obj.SIGNATURBLOCK_EN_NOTE.table.info.ColsWidth=1 5
+#sig_obj.SIGNATURBLOCK_EN_NOTE.table.info.1=SIG_NAME-cv
+sig_obj.SIGNATURBLOCK_EN_NOTE.table.info.1=SIG_SUBJECT-cv
+sig_obj.SIGNATURBLOCK_EN_NOTE.table.info.2=SIG_ISSUER-cv
+sig_obj.SIGNATURBLOCK_EN_NOTE.table.info.3=SIG_NUMBER-cv
+sig_obj.SIGNATURBLOCK_EN_NOTE.table.info.4=SIG_KZ-cv
+sig_obj.SIGNATURBLOCK_EN_NOTE.table.info.5=SIG_ID-cv
diff --git a/pdf-as-lib/src/test/resources/at/knowcenter/wag/egov/egiz/cfg/profile.SIGNATURBLOCK_EN_PDFA.properties b/pdf-as-lib/src/test/resources/at/knowcenter/wag/egov/egiz/cfg/profile.SIGNATURBLOCK_EN_PDFA.properties
new file mode 100644
index 0000000..602e35d
--- /dev/null
+++ b/pdf-as-lib/src/test/resources/at/knowcenter/wag/egov/egiz/cfg/profile.SIGNATURBLOCK_EN_PDFA.properties
@@ -0,0 +1,59 @@
+###################################################################################################
+# PROFIL: Signaturblock (Englisch), PDF/A-1b
+
+sig_obj.SIGNATURBLOCK_EN_PDFA.description=Standardsignatur Englisch, PDF/A-1b
+
+sig_obj.types.SIGNATURBLOCK_EN_PDFA=on
+
+# enable/disable PDF/A1b support for this profile
+sig_obj.SIGNATURBLOCK_EN_PDFA.key.SIG_PDFA1B_VALID=true
+
+sig_obj.SIGNATURBLOCK_EN_PDFA.key.SIG_VALUE=Signature Value
+#sig_obj.SIGNATURBLOCK_EN_PDFA.key.SIG_NAME=Signatory
+sig_obj.SIGNATURBLOCK_EN_PDFA.key.SIG_SUBJECT=Signatory
+sig_obj.SIGNATURBLOCK_EN_PDFA.key.SIG_ISSUER=Issuer-Certificate
+sig_obj.SIGNATURBLOCK_EN_PDFA.key.SIG_NUMBER=Serial-No.
+sig_obj.SIGNATURBLOCK_EN_PDFA.key.SIG_KZ=Method
+sig_obj.SIGNATURBLOCK_EN_PDFA.key.SIG_ID=Parameter
+sig_obj.SIGNATURBLOCK_EN_PDFA.key.SIG_META=Verification
+sig_obj.SIGNATURBLOCK_EN_PDFA.key.SIG_DATE=Date/Time-UTC
+
+
+sig_obj.SIGNATURBLOCK_EN_PDFA.value.SIG_SUBJECT=${subject.T != null ? (subject.T + " ") : ""}${subject.CN}
+
+sig_obj.SIGNATURBLOCK_EN_PDFA.pos=f:80
+sig_obj.SIGNATURBLOCK_EN_PDFA.adobeSignFieldValue=PDF-AS Signature
+sig_obj.SIGNATURBLOCK_EN_PDFA.adobeSignReasonValue=Signature verification at http://www.signature-verification.gv.at
+sig_obj.SIGNATURBLOCK_EN_PDFA.verifyURL=http://www.signature-verification.gv.at
+
+# WAI
+sig_obj.SIGNATURBLOCK_EN_PDFA.sigLogoAltText=A standard signature logo is shown.
+
+sig_obj.SIGNATURBLOCK_EN_PDFA.value.SIG_META=Signature verification at: http://www.signature-verification.gv.at
+sig_obj.SIGNATURBLOCK_EN_PDFA.value.SIG_LABEL=./images/signatur-logo_en.png
+
+#---------------------- MAIN TABLE -------------------------
+sig_obj.SIGNATURBLOCK_EN_PDFA.table.main.1=SIG_VALUE-cv
+sig_obj.SIGNATURBLOCK_EN_PDFA.table.main.2=SIG_LABEL-i|TABLE-info
+sig_obj.SIGNATURBLOCK_EN_PDFA.table.main.3=SIG_META-cv
+sig_obj.SIGNATURBLOCK_EN_PDFA.table.main.4=SIG_DATE-cv
+
+sig_obj.SIGNATURBLOCK_EN_PDFA.table.main.ColsWidth=1 5.5
+sig_obj.SIGNATURBLOCK_EN_PDFA.table.main.Style.bgcolor=255 255 255
+sig_obj.SIGNATURBLOCK_EN_PDFA.table.main.Style.padding=4
+sig_obj.SIGNATURBLOCK_EN_PDFA.table.main.Style.border=0.1
+sig_obj.SIGNATURBLOCK_EN_PDFA.table.main.Style.halign=center
+sig_obj.SIGNATURBLOCK_EN_PDFA.table.main.Style.valuehalign=left
+sig_obj.SIGNATURBLOCK_EN_PDFA.table.main.Style.valign=top
+sig_obj.SIGNATURBLOCK_EN_PDFA.table.main.Style.imagevalign=middle
+sig_obj.SIGNATURBLOCK_EN_PDFA.table.main.Style.font=TTF:DejaVuSansCondensed-Bold.ttf,8
+sig_obj.SIGNATURBLOCK_EN_PDFA.table.main.Style.valuefont=TTF:DejaVuSansMono.ttf,8
+
+#---------------------- INFO TABLE -------------------------
+sig_obj.SIGNATURBLOCK_EN_PDFA.table.info.ColsWidth=1 4.5
+#sig_obj.SIGNATURBLOCK_EN_PDFA.table.info.1=SIG_NAME-cv
+sig_obj.SIGNATURBLOCK_EN_PDFA.table.info.1=SIG_SUBJECT-cv
+sig_obj.SIGNATURBLOCK_EN_PDFA.table.info.2=SIG_ISSUER-cv
+sig_obj.SIGNATURBLOCK_EN_PDFA.table.info.3=SIG_NUMBER-cv
+sig_obj.SIGNATURBLOCK_EN_PDFA.table.info.4=SIG_KZ-cv
+sig_obj.SIGNATURBLOCK_EN_PDFA.table.info.5=SIG_ID-cv
diff --git a/pdf-as-lib/src/test/resources/at/knowcenter/wag/egov/egiz/cfg/profile.SIGNATURBLOCK_EN_PDFA_NOTE.properties b/pdf-as-lib/src/test/resources/at/knowcenter/wag/egov/egiz/cfg/profile.SIGNATURBLOCK_EN_PDFA_NOTE.properties
new file mode 100644
index 0000000..8f1ed11
--- /dev/null
+++ b/pdf-as-lib/src/test/resources/at/knowcenter/wag/egov/egiz/cfg/profile.SIGNATURBLOCK_EN_PDFA_NOTE.properties
@@ -0,0 +1,62 @@
+###################################################################################################
+# PROFIL: Signaturblock (Englisch), PDF/A-1b und mit Hinweistext
+
+sig_obj.SIGNATURBLOCK_EN_PDFA_NOTE.description=Standardsignatur Englisch, PDF/A-1b
+
+sig_obj.types.SIGNATURBLOCK_EN_PDFA_NOTE=on
+
+# enable/disable PDF/A1b support for this profile
+sig_obj.SIGNATURBLOCK_EN_PDFA_NOTE.key.SIG_PDFA1B_VALID=true
+
+sig_obj.SIGNATURBLOCK_EN_PDFA_NOTE.key.SIG_VALUE=Signature Value
+#sig_obj.SIGNATURBLOCK_EN_PDFA_NOTE.key.SIG_NAME=Signatory
+sig_obj.SIGNATURBLOCK_EN_PDFA_NOTE.key.SIG_SUBJECT=Signatory
+sig_obj.SIGNATURBLOCK_EN_PDFA_NOTE.key.SIG_ISSUER=Issuer-Certificate
+sig_obj.SIGNATURBLOCK_EN_PDFA_NOTE.key.SIG_NUMBER=Serial-No.
+sig_obj.SIGNATURBLOCK_EN_PDFA_NOTE.key.SIG_KZ=Method
+sig_obj.SIGNATURBLOCK_EN_PDFA_NOTE.key.SIG_ID=Parameter
+sig_obj.SIGNATURBLOCK_EN_PDFA_NOTE.key.SIG_META=Verification
+sig_obj.SIGNATURBLOCK_EN_PDFA_NOTE.key.SIG_NOTE=Note
+sig_obj.SIGNATURBLOCK_EN_PDFA_NOTE.key.SIG_DATE=Date/Time-UTC
+
+
+sig_obj.SIGNATURBLOCK_EN_PDFA_NOTE.value.SIG_SUBJECT=${subject.T != null ? (subject.T + " ") : ""}${subject.CN}
+
+sig_obj.SIGNATURBLOCK_EN_PDFA_NOTE.pos=f:80
+sig_obj.SIGNATURBLOCK_EN_PDFA_NOTE.adobeSignFieldValue=PDF-AS Signature
+sig_obj.SIGNATURBLOCK_EN_PDFA_NOTE.adobeSignReasonValue=Signature verification at http://www.signature-verification.gv.at
+sig_obj.SIGNATURBLOCK_EN_PDFA_NOTE.verifyURL=http://www.signature-verification.gv.at
+
+# WAI
+sig_obj.SIGNATURBLOCK_EN_PDFA_NOTE.sigLogoAltText=A standard signature logo is shown.
+
+sig_obj.SIGNATURBLOCK_EN_PDFA_NOTE.value.SIG_META=Signature verification at: http://www.signature-verification.gv.at
+sig_obj.SIGNATURBLOCK_EN_PDFA_NOTE.value.SIG_LABEL=./images/signatur-logo_en.png
+sig_obj.SIGNATURBLOCK_EN_PDFA_NOTE.value.SIG_NOTE=This document is signed with a qualified electronic signature. According to \u00a7\u00A04 art.\u00A01 of the Signature Act it in principle is legally equivalent to an handwritten signature.
+
+#---------------------- MAIN TABLE -------------------------
+sig_obj.SIGNATURBLOCK_EN_PDFA_NOTE.table.main.1=SIG_VALUE-cv
+sig_obj.SIGNATURBLOCK_EN_PDFA_NOTE.table.main.2=SIG_LABEL-i|TABLE-info
+sig_obj.SIGNATURBLOCK_EN_PDFA_NOTE.table.main.3=SIG_META-cv
+sig_obj.SIGNATURBLOCK_EN_PDFA_NOTE.table.main.4=SIG_NOTE-cv
+sig_obj.SIGNATURBLOCK_EN_PDFA_NOTE.table.main.5=SIG_DATE-cv
+
+sig_obj.SIGNATURBLOCK_EN_PDFA_NOTE.table.main.ColsWidth=1 5.5
+sig_obj.SIGNATURBLOCK_EN_PDFA_NOTE.table.main.Style.bgcolor=255 255 255
+sig_obj.SIGNATURBLOCK_EN_PDFA_NOTE.table.main.Style.padding=4
+sig_obj.SIGNATURBLOCK_EN_PDFA_NOTE.table.main.Style.border=0.1
+sig_obj.SIGNATURBLOCK_EN_PDFA_NOTE.table.main.Style.halign=center
+sig_obj.SIGNATURBLOCK_EN_PDFA_NOTE.table.main.Style.valuehalign=left
+sig_obj.SIGNATURBLOCK_EN_PDFA_NOTE.table.main.Style.valign=top
+sig_obj.SIGNATURBLOCK_EN_PDFA_NOTE.table.main.Style.imagevalign=middle
+sig_obj.SIGNATURBLOCK_EN_PDFA_NOTE.table.main.Style.font=TTF:DejaVuSansCondensed-Bold.ttf,8
+sig_obj.SIGNATURBLOCK_EN_PDFA_NOTE.table.main.Style.valuefont=TTF:DejaVuSansMono.ttf,8
+
+#---------------------- INFO TABLE -------------------------
+sig_obj.SIGNATURBLOCK_EN_PDFA_NOTE.table.info.ColsWidth=1 4.5
+#sig_obj.SIGNATURBLOCK_EN_PDFA_NOTE.table.info.1=SIG_NAME-cv
+sig_obj.SIGNATURBLOCK_EN_PDFA_NOTE.table.info.1=SIG_SUBJECT-cv
+sig_obj.SIGNATURBLOCK_EN_PDFA_NOTE.table.info.2=SIG_ISSUER-cv
+sig_obj.SIGNATURBLOCK_EN_PDFA_NOTE.table.info.3=SIG_NUMBER-cv
+sig_obj.SIGNATURBLOCK_EN_PDFA_NOTE.table.info.4=SIG_KZ-cv
+sig_obj.SIGNATURBLOCK_EN_PDFA_NOTE.table.info.5=SIG_ID-cv
diff --git a/pdf-as-lib/src/test/resources/at/knowcenter/wag/egov/egiz/cfg/profile.SIGNATURBLOCK_MINIMAL_DE.properties b/pdf-as-lib/src/test/resources/at/knowcenter/wag/egov/egiz/cfg/profile.SIGNATURBLOCK_MINIMAL_DE.properties
new file mode 100644
index 0000000..6ed88e9
--- /dev/null
+++ b/pdf-as-lib/src/test/resources/at/knowcenter/wag/egov/egiz/cfg/profile.SIGNATURBLOCK_MINIMAL_DE.properties
@@ -0,0 +1,33 @@
+###################################################################################################
+# PROFIL: minimaler Signaturblock (Deutsch)
+
+sig_obj.types.SIGNATURBLOCK_MINIMAL_DE=on
+
+sig_obj.SIGNATURBLOCK_MINIMAL_DE.description=minimale Standardsignatur Deutsch
+sig_obj.SIGNATURBLOCK_MINIMAL_DE.key.SIG_META=Pr\u00fcfinformation
+
+sig_obj.SIGNATURBLOCK_MINIMAL_DE.pos=w:230.0;f:80
+sig_obj.SIGNATURBLOCK_MINIMAL_DE.adobeSignFieldValue=PDF-AS Signatur
+sig_obj.SIGNATURBLOCK_MINIMAL_DE.adobeSignReasonValue=Signaturpruefung unter http://www.signaturpruefung.gv.at
+sig_obj.SIGNATURBLOCK_MINIMAL_DE.verifyURL=http://www.signaturpruefung.gv.at
+
+sig_obj.SIGNATURBLOCK_MINIMAL_DE.value.SIG_META=Signaturpruefung unter: http://www.signaturpruefung.gv.at
+sig_obj.SIGNATURBLOCK_MINIMAL_DE.value.SIG_LABEL=./images/signatur-logo_de.png
+sig_obj.SIGNATURBLOCK_MINIMAL_DE.table.main.Style.imagescaletofit=65.0;65.0
+
+# WAI
+sig_obj.SIGNATURBLOCK_MINIMAL_DE.sigLogoAltText=Abgebildet ist eine Standard-Signaturbildmarke.
+
+#---------------------- MAIN TABLE -------------------------
+sig_obj.SIGNATURBLOCK_MINIMAL_DE.table.main.1=SIG_LABEL-i
+sig_obj.SIGNATURBLOCK_MINIMAL_DE.table.main.2=SIG_META-v
+
+sig_obj.SIGNATURBLOCK_MINIMAL_DE.table.main.ColsWidth=1
+sig_obj.SIGNATURBLOCK_MINIMAL_DE.table.main.Style.bgcolor=255 255 255
+sig_obj.SIGNATURBLOCK_MINIMAL_DE.table.main.Style.padding=4
+sig_obj.SIGNATURBLOCK_MINIMAL_DE.table.main.Style.border=0
+sig_obj.SIGNATURBLOCK_MINIMAL_DE.table.main.Style.halign=center
+sig_obj.SIGNATURBLOCK_MINIMAL_DE.table.main.Style.valuehalign=left
+sig_obj.SIGNATURBLOCK_MINIMAL_DE.table.main.Style.valign=middle
+sig_obj.SIGNATURBLOCK_MINIMAL_DE.table.main.Style.font=HELVETICA,9,NORMAL
+sig_obj.SIGNATURBLOCK_MINIMAL_DE.table.main.Style.valuefont=HELVETICA,9,NORMAL
diff --git a/pdf-as-lib/src/test/resources/at/knowcenter/wag/egov/egiz/cfg/profile.SIGNATURBLOCK_MINIMAL_EN.properties b/pdf-as-lib/src/test/resources/at/knowcenter/wag/egov/egiz/cfg/profile.SIGNATURBLOCK_MINIMAL_EN.properties
new file mode 100644
index 0000000..6a6374b
--- /dev/null
+++ b/pdf-as-lib/src/test/resources/at/knowcenter/wag/egov/egiz/cfg/profile.SIGNATURBLOCK_MINIMAL_EN.properties
@@ -0,0 +1,33 @@
+###################################################################################################
+# PROFIL: minimaler Signaturblock (Englisch)
+
+sig_obj.SIGNATURBLOCK_MINIMAL_EN.description=minimale Standardsignatur Englisch
+
+sig_obj.types.SIGNATURBLOCK_MINIMAL_EN=on
+
+sig_obj.SIGNATURBLOCK_MINIMAL_EN.key.SIG_META=Verification
+sig_obj.SIGNATURBLOCK_MINIMAL_EN.pos=w:230.0;f:80
+sig_obj.SIGNATURBLOCK_MINIMAL_EN.adobeSignFieldValue=PDF-AS Signature
+sig_obj.SIGNATURBLOCK_MINIMAL_EN.adobeSignReasonValue=Information about the verification can be found at http://www.signature-verification.gv.at
+sig_obj.SIGNATURBLOCK_MINIMAL_EN.verifyURL=http://www.signature-verification.gv.at
+
+sig_obj.SIGNATURBLOCK_MINIMAL_EN.value.SIG_META=Signature verification at: http://www.signature-verification.gv.at
+sig_obj.SIGNATURBLOCK_MINIMAL_EN.value.SIG_LABEL=./images/signatur-logo_en.png
+sig_obj.SIGNATURBLOCK_MINIMAL_EN.table.main.Style.imagescaletofit=65.0;65.0
+
+# WAI
+sig_obj.SIGNATURBLOCK_MINIMAL_EN.sigLogoAltText=A standard signature logo is shown.
+
+#---------------------- MAIN TABLE -------------------------
+sig_obj.SIGNATURBLOCK_MINIMAL_EN.table.main.1=SIG_LABEL-i
+sig_obj.SIGNATURBLOCK_MINIMAL_EN.table.main.2=SIG_META-v
+
+sig_obj.SIGNATURBLOCK_MINIMAL_EN.table.main.ColsWidth=1
+sig_obj.SIGNATURBLOCK_MINIMAL_EN.table.main.Style.bgcolor=255 255 255
+sig_obj.SIGNATURBLOCK_MINIMAL_EN.table.main.Style.padding=4
+sig_obj.SIGNATURBLOCK_MINIMAL_EN.table.main.Style.border=0
+sig_obj.SIGNATURBLOCK_MINIMAL_EN.table.main.Style.halign=center
+sig_obj.SIGNATURBLOCK_MINIMAL_EN.table.main.Style.valuehalign=left
+sig_obj.SIGNATURBLOCK_MINIMAL_EN.table.main.Style.valign=middle
+sig_obj.SIGNATURBLOCK_MINIMAL_EN.table.main.Style.font=HELVETICA,9,NORMAL
+sig_obj.SIGNATURBLOCK_MINIMAL_EN.table.main.Style.valuefont=HELVETICA,9,NORMAL
diff --git a/pdf-as-lib/src/test/resources/at/knowcenter/wag/egov/egiz/cfg/profile.SIGNATURBLOCK_SMALL_DE.properties b/pdf-as-lib/src/test/resources/at/knowcenter/wag/egov/egiz/cfg/profile.SIGNATURBLOCK_SMALL_DE.properties
new file mode 100644
index 0000000..ff36ee5
--- /dev/null
+++ b/pdf-as-lib/src/test/resources/at/knowcenter/wag/egov/egiz/cfg/profile.SIGNATURBLOCK_SMALL_DE.properties
@@ -0,0 +1,56 @@
+###################################################################################################
+# PROFIL: Signaturblock klein (Deutsch)
+
+sig_obj.SIGNATURBLOCK_SMALL_DE.description=Standardsignatur klein Deutsch
+
+sig_obj.types.SIGNATURBLOCK_SMALL_DE=on
+
+sig_obj.SIGNATURBLOCK_SMALL_DE.key.SIG_VALUE=Signaturwert
+#sig_obj.SIGNATURBLOCK_SMALL_DE.key.SIG_NAME=Unterzeichner
+sig_obj.SIGNATURBLOCK_SMALL_DE.key.SIG_SUBJECT=Unterzeichner
+sig_obj.SIGNATURBLOCK_SMALL_DE.key.SIG_ISSUER=Aussteller-Zertifikat
+sig_obj.SIGNATURBLOCK_SMALL_DE.key.SIG_NUMBER=Serien-Nr.
+sig_obj.SIGNATURBLOCK_SMALL_DE.key.SIG_KZ=Methode
+sig_obj.SIGNATURBLOCK_SMALL_DE.key.SIG_ID=Parameter
+sig_obj.SIGNATURBLOCK_SMALL_DE.key.SIG_META=Pr\u00fcfinformation
+sig_obj.SIGNATURBLOCK_SMALL_DE.key.SIG_DATE=Datum/Zeit-UTC
+
+
+sig_obj.SIGNATURBLOCK_SMALL_DE.value.SIG_SUBJECT=${subject.T != null ? (subject.T + " ") : ""}${subject.CN}
+
+sig_obj.SIGNATURBLOCK_SMALL_DE.pos=f:80;w:230
+sig_obj.SIGNATURBLOCK_SMALL_DE.adobeSignFieldValue=PDF-AS Signatur
+sig_obj.SIGNATURBLOCK_SMALL_DE.adobeSignReasonValue=Signaturpruefung unter http://www.signaturpruefung.gv.at
+sig_obj.SIGNATURBLOCK_SMALL_DE.verifyURL=http://www.signaturpruefung.gv.at
+
+# WAI
+sig_obj.SIGNATURBLOCK_SMALL_DE.sigLogoAltText=Abgebildet ist eine Standard-Signaturbildmarke.
+
+sig_obj.SIGNATURBLOCK_SMALL_DE.value.SIG_META=Signaturpruefung unter: http://www.signaturpruefung.gv.at
+sig_obj.SIGNATURBLOCK_SMALL_DE.value.SIG_LABEL=./images/signatur-logo_de.png
+
+#---------------------- MAIN TABLE -------------------------
+sig_obj.SIGNATURBLOCK_SMALL_DE.table.main.1=SIG_VALUE-cv
+sig_obj.SIGNATURBLOCK_SMALL_DE.table.main.2=SIG_LABEL-i|TABLE-info
+sig_obj.SIGNATURBLOCK_SMALL_DE.table.main.3=SIG_META-cv
+sig_obj.SIGNATURBLOCK_SMALL_DE.table.main.4=SIG_DATE-cv
+
+sig_obj.SIGNATURBLOCK_SMALL_DE.table.main.ColsWidth=1 4.5
+sig_obj.SIGNATURBLOCK_SMALL_DE.table.main.Style.bgcolor=255 255 255
+sig_obj.SIGNATURBLOCK_SMALL_DE.table.main.Style.padding=2
+sig_obj.SIGNATURBLOCK_SMALL_DE.table.main.Style.border=0.1
+sig_obj.SIGNATURBLOCK_SMALL_DE.table.main.Style.halign=center
+sig_obj.SIGNATURBLOCK_SMALL_DE.table.main.Style.valuehalign=left
+sig_obj.SIGNATURBLOCK_SMALL_DE.table.main.Style.valign=top
+sig_obj.SIGNATURBLOCK_SMALL_DE.table.main.Style.imagevalign=middle
+sig_obj.SIGNATURBLOCK_SMALL_DE.table.main.Style.font=HELVETICA,5,BOLD
+sig_obj.SIGNATURBLOCK_SMALL_DE.table.main.Style.valuefont=COURIER,5,NORMAL
+
+#---------------------- INFO TABLE -------------------------
+sig_obj.SIGNATURBLOCK_SMALL_DE.table.info.ColsWidth=1 2.7
+#sig_obj.SIGNATURBLOCK_SMALL_DE.table.info.1=SIG_NAME-cv
+sig_obj.SIGNATURBLOCK_SMALL_DE.table.info.1=SIG_SUBJECT-cv
+sig_obj.SIGNATURBLOCK_SMALL_DE.table.info.2=SIG_ISSUER-cv
+sig_obj.SIGNATURBLOCK_SMALL_DE.table.info.3=SIG_NUMBER-cv
+sig_obj.SIGNATURBLOCK_SMALL_DE.table.info.4=SIG_KZ-cv
+sig_obj.SIGNATURBLOCK_SMALL_DE.table.info.5=SIG_ID-cv
diff --git a/pdf-as-lib/src/test/resources/at/knowcenter/wag/egov/egiz/cfg/profile.SIGNATURBLOCK_SMALL_DE_NOTE.properties b/pdf-as-lib/src/test/resources/at/knowcenter/wag/egov/egiz/cfg/profile.SIGNATURBLOCK_SMALL_DE_NOTE.properties
new file mode 100644
index 0000000..a0c0fcb
--- /dev/null
+++ b/pdf-as-lib/src/test/resources/at/knowcenter/wag/egov/egiz/cfg/profile.SIGNATURBLOCK_SMALL_DE_NOTE.properties
@@ -0,0 +1,59 @@
+###################################################################################################
+# PROFIL: Signaturblock klein (Deutsch) mit Hinweistext
+
+sig_obj.SIGNATURBLOCK_SMALL_DE_NOTE.description=Standardsignatur klein Deutsch
+
+sig_obj.types.SIGNATURBLOCK_SMALL_DE_NOTE=on
+
+sig_obj.SIGNATURBLOCK_SMALL_DE_NOTE.key.SIG_VALUE=Signaturwert
+#sig_obj.SIGNATURBLOCK_SMALL_DE_NOTE.key.SIG_NAME=Unterzeichner
+sig_obj.SIGNATURBLOCK_SMALL_DE_NOTE.key.SIG_SUBJECT=Unterzeichner
+sig_obj.SIGNATURBLOCK_SMALL_DE_NOTE.key.SIG_ISSUER=Aussteller-Zertifikat
+sig_obj.SIGNATURBLOCK_SMALL_DE_NOTE.key.SIG_NUMBER=Serien-Nr.
+sig_obj.SIGNATURBLOCK_SMALL_DE_NOTE.key.SIG_KZ=Methode
+sig_obj.SIGNATURBLOCK_SMALL_DE_NOTE.key.SIG_ID=Parameter
+sig_obj.SIGNATURBLOCK_SMALL_DE_NOTE.key.SIG_META=Pr\u00fcfinformation
+sig_obj.SIGNATURBLOCK_SMALL_DE_NOTE.key.SIG_NOTE=Hinweis
+sig_obj.SIGNATURBLOCK_SMALL_DE_NOTE.key.SIG_DATE=Datum/Zeit-UTC
+
+
+sig_obj.SIGNATURBLOCK_SMALL_DE_NOTE.value.SIG_SUBJECT=${subject.T != null ? (subject.T + " ") : ""}${subject.CN}
+
+sig_obj.SIGNATURBLOCK_SMALL_DE_NOTE.pos=f:80;w:230
+sig_obj.SIGNATURBLOCK_SMALL_DE_NOTE.adobeSignFieldValue=PDF-AS Signatur
+sig_obj.SIGNATURBLOCK_SMALL_DE_NOTE.adobeSignReasonValue=Signaturpruefung unter http://www.signaturpruefung.gv.at
+sig_obj.SIGNATURBLOCK_SMALL_DE_NOTE.verifyURL=http://www.signaturpruefung.gv.at
+
+# WAI
+sig_obj.SIGNATURBLOCK_SMALL_DE_NOTE.sigLogoAltText=Abgebildet ist eine Standard-Signaturbildmarke.
+
+sig_obj.SIGNATURBLOCK_SMALL_DE_NOTE.value.SIG_META=Signaturpruefung unter: http://www.signaturpruefung.gv.at
+sig_obj.SIGNATURBLOCK_SMALL_DE_NOTE.value.SIG_LABEL=./images/signatur-logo_de.png
+sig_obj.SIGNATURBLOCK_SMALL_DE_NOTE.value.SIG_NOTE=Dieses mit einer qualifizierten elektronischen Signatur versehene Dokument ist gem\u00e4\u00df \u00a7\u00A04 Abs.\u00A01 Signaturgesetz einem handschriftlich unterschriebenen Dokument grunds\u00e4tzlich rechtlich gleichgestellt.
+
+#---------------------- MAIN TABLE -------------------------
+sig_obj.SIGNATURBLOCK_SMALL_DE_NOTE.table.main.1=SIG_VALUE-cv
+sig_obj.SIGNATURBLOCK_SMALL_DE_NOTE.table.main.2=SIG_LABEL-i|TABLE-info
+sig_obj.SIGNATURBLOCK_SMALL_DE_NOTE.table.main.3=SIG_META-cv
+sig_obj.SIGNATURBLOCK_SMALL_DE_NOTE.table.main.4=SIG_NOTE-cv
+sig_obj.SIGNATURBLOCK_SMALL_DE_NOTE.table.main.5=SIG_DATE-cv
+
+sig_obj.SIGNATURBLOCK_SMALL_DE_NOTE.table.main.ColsWidth=1 4.5
+sig_obj.SIGNATURBLOCK_SMALL_DE_NOTE.table.main.Style.bgcolor=255 255 255
+sig_obj.SIGNATURBLOCK_SMALL_DE_NOTE.table.main.Style.padding=2
+sig_obj.SIGNATURBLOCK_SMALL_DE_NOTE.table.main.Style.border=0.1
+sig_obj.SIGNATURBLOCK_SMALL_DE_NOTE.table.main.Style.halign=center
+sig_obj.SIGNATURBLOCK_SMALL_DE_NOTE.table.main.Style.valuehalign=left
+sig_obj.SIGNATURBLOCK_SMALL_DE_NOTE.table.main.Style.valign=top
+sig_obj.SIGNATURBLOCK_SMALL_DE_NOTE.table.main.Style.imagevalign=middle
+sig_obj.SIGNATURBLOCK_SMALL_DE_NOTE.table.main.Style.font=HELVETICA,5,BOLD
+sig_obj.SIGNATURBLOCK_SMALL_DE_NOTE.table.main.Style.valuefont=COURIER,5,NORMAL
+
+#---------------------- INFO TABLE -------------------------
+sig_obj.SIGNATURBLOCK_SMALL_DE_NOTE.table.info.ColsWidth=1 2.7
+#sig_obj.SIGNATURBLOCK_SMALL_DE_NOTE.table.info.1=SIG_NAME-cv
+sig_obj.SIGNATURBLOCK_SMALL_DE_NOTE.table.info.1=SIG_SUBJECT-cv
+sig_obj.SIGNATURBLOCK_SMALL_DE_NOTE.table.info.2=SIG_ISSUER-cv
+sig_obj.SIGNATURBLOCK_SMALL_DE_NOTE.table.info.3=SIG_NUMBER-cv
+sig_obj.SIGNATURBLOCK_SMALL_DE_NOTE.table.info.4=SIG_KZ-cv
+sig_obj.SIGNATURBLOCK_SMALL_DE_NOTE.table.info.5=SIG_ID-cv
diff --git a/pdf-as-lib/src/test/resources/at/knowcenter/wag/egov/egiz/cfg/profile.SIGNATURBLOCK_SMALL_EN.properties b/pdf-as-lib/src/test/resources/at/knowcenter/wag/egov/egiz/cfg/profile.SIGNATURBLOCK_SMALL_EN.properties
new file mode 100644
index 0000000..fd161f3
--- /dev/null
+++ b/pdf-as-lib/src/test/resources/at/knowcenter/wag/egov/egiz/cfg/profile.SIGNATURBLOCK_SMALL_EN.properties
@@ -0,0 +1,56 @@
+###################################################################################################
+# PROFIL: Signaturblock Small (Englisch)
+
+sig_obj.SIGNATURBLOCK_SMALL_EN.description=Standardsignatur klein Englisch
+
+sig_obj.types.SIGNATURBLOCK_SMALL_EN=on
+
+sig_obj.SIGNATURBLOCK_SMALL_EN.key.SIG_VALUE=Signature Value
+#sig_obj.SIGNATURBLOCK_SMALL_EN.key.SIG_NAME=Signatory
+sig_obj.SIGNATURBLOCK_SMALL_EN.key.SIG_SUBJECT=Signatory
+sig_obj.SIGNATURBLOCK_SMALL_EN.key.SIG_ISSUER=Issuer-Certificate
+sig_obj.SIGNATURBLOCK_SMALL_EN.key.SIG_NUMBER=Serial-No.
+sig_obj.SIGNATURBLOCK_SMALL_EN.key.SIG_KZ=Method
+sig_obj.SIGNATURBLOCK_SMALL_EN.key.SIG_ID=Parameter
+sig_obj.SIGNATURBLOCK_SMALL_EN.key.SIG_META=Verification
+sig_obj.SIGNATURBLOCK_SMALL_EN.key.SIG_DATE=Date/Time-UTC
+
+
+sig_obj.SIGNATURBLOCK_SMALL_EN.value.SIG_SUBJECT=${subject.T != null ? (subject.T + " ") : ""}${subject.CN}
+
+sig_obj.SIGNATURBLOCK_SMALL_EN.pos=f:80;w:260
+sig_obj.SIGNATURBLOCK_SMALL_EN.adobeSignFieldValue=PDF-AS Signature
+sig_obj.SIGNATURBLOCK_SMALL_EN.adobeSignReasonValue=Signature verification at: http://www.signature-verification.gv.at
+sig_obj.SIGNATURBLOCK_SMALL_EN.verifyURL=http://www.signature-verification.gv.at
+
+sig_obj.SIGNATURBLOCK_SMALL_EN.value.SIG_META=Signature verification at: http://www.signature-verification.gv.at
+sig_obj.SIGNATURBLOCK_SMALL_EN.value.SIG_LABEL=./images/signatur-logo_en.png
+
+# WAI
+sig_obj.SIGNATURBLOCK_SMALL_EN.sigLogoAltText=A standard signature logo is shown.
+
+#---------------------- MAIN TABLE -------------------------
+sig_obj.SIGNATURBLOCK_SMALL_EN.table.main.1=SIG_VALUE-cv
+sig_obj.SIGNATURBLOCK_SMALL_EN.table.main.2=SIG_LABEL-i|TABLE-info
+sig_obj.SIGNATURBLOCK_SMALL_EN.table.main.3=SIG_META-cv
+sig_obj.SIGNATURBLOCK_SMALL_EN.table.main.4=SIG_DATE-cv
+
+sig_obj.SIGNATURBLOCK_SMALL_EN.table.main.ColsWidth=1 4.5
+sig_obj.SIGNATURBLOCK_SMALL_EN.table.main.Style.bgcolor=255 255 255
+sig_obj.SIGNATURBLOCK_SMALL_EN.table.main.Style.padding=2
+sig_obj.SIGNATURBLOCK_SMALL_EN.table.main.Style.border=0.1
+sig_obj.SIGNATURBLOCK_SMALL_EN.table.main.Style.halign=center
+sig_obj.SIGNATURBLOCK_SMALL_EN.table.main.Style.valuehalign=left
+sig_obj.SIGNATURBLOCK_SMALL_EN.table.main.Style.valign=top
+sig_obj.SIGNATURBLOCK_SMALL_EN.table.main.Style.imagevalign=middle
+sig_obj.SIGNATURBLOCK_SMALL_EN.table.main.Style.font=HELVETICA,5,BOLD
+sig_obj.SIGNATURBLOCK_SMALL_EN.table.main.Style.valuefont=COURIER,5,NORMAL
+
+#---------------------- INFO TABLE -------------------------
+sig_obj.SIGNATURBLOCK_SMALL_EN.table.info.ColsWidth=1 3.2
+#sig_obj.SIGNATURBLOCK_SMALL_EN.table.info.1=SIG_NAME-cv
+sig_obj.SIGNATURBLOCK_SMALL_EN.table.info.1=SIG_SUBJECT-cv
+sig_obj.SIGNATURBLOCK_SMALL_EN.table.info.2=SIG_ISSUER-cv
+sig_obj.SIGNATURBLOCK_SMALL_EN.table.info.3=SIG_NUMBER-cv
+sig_obj.SIGNATURBLOCK_SMALL_EN.table.info.4=SIG_KZ-cv
+sig_obj.SIGNATURBLOCK_SMALL_EN.table.info.5=SIG_ID-cv
diff --git a/pdf-as-lib/src/test/resources/at/knowcenter/wag/egov/egiz/cfg/profile.SIGNATURBLOCK_SMALL_EN_NOTE.properties b/pdf-as-lib/src/test/resources/at/knowcenter/wag/egov/egiz/cfg/profile.SIGNATURBLOCK_SMALL_EN_NOTE.properties
new file mode 100644
index 0000000..9e7ebd0
--- /dev/null
+++ b/pdf-as-lib/src/test/resources/at/knowcenter/wag/egov/egiz/cfg/profile.SIGNATURBLOCK_SMALL_EN_NOTE.properties
@@ -0,0 +1,59 @@
+###################################################################################################
+# PROFIL: Signaturblock Small (Englisch) mit Hinweistext
+
+sig_obj.SIGNATURBLOCK_SMALL_EN_NOTE.description=Standardsignatur klein Englisch
+
+sig_obj.types.SIGNATURBLOCK_SMALL_EN_NOTE=on
+
+sig_obj.SIGNATURBLOCK_SMALL_EN_NOTE.key.SIG_VALUE=Signature Value
+#sig_obj.SIGNATURBLOCK_SMALL_EN_NOTE.key.SIG_NAME=Signatory
+sig_obj.SIGNATURBLOCK_SMALL_EN_NOTE.key.SIG_SUBJECT=Signatory
+sig_obj.SIGNATURBLOCK_SMALL_EN_NOTE.key.SIG_ISSUER=Issuer-Certificate
+sig_obj.SIGNATURBLOCK_SMALL_EN_NOTE.key.SIG_NUMBER=Serial-No.
+sig_obj.SIGNATURBLOCK_SMALL_EN_NOTE.key.SIG_KZ=Method
+sig_obj.SIGNATURBLOCK_SMALL_EN_NOTE.key.SIG_ID=Parameter
+sig_obj.SIGNATURBLOCK_SMALL_EN_NOTE.key.SIG_META=Verification
+sig_obj.SIGNATURBLOCK_SMALL_EN_NOTE.key.SIG_NOTE=Note
+sig_obj.SIGNATURBLOCK_SMALL_EN_NOTE.key.SIG_DATE=Date/Time-UTC
+
+
+sig_obj.SIGNATURBLOCK_SMALL_EN_NOTE.value.SIG_SUBJECT=${subject.T != null ? (subject.T + " ") : ""}${subject.CN}
+
+sig_obj.SIGNATURBLOCK_SMALL_EN_NOTE.pos=f:80;w:260
+sig_obj.SIGNATURBLOCK_SMALL_EN_NOTE.adobeSignFieldValue=PDF-AS Signature
+sig_obj.SIGNATURBLOCK_SMALL_EN_NOTE.adobeSignReasonValue=Signature verification at: http://www.signature-verification.gv.at
+sig_obj.SIGNATURBLOCK_SMALL_EN_NOTE.verifyURL=http://www.signature-verification.gv.at
+
+sig_obj.SIGNATURBLOCK_SMALL_EN_NOTE.value.SIG_META=Signature verification at: http://www.signature-verification.gv.at
+sig_obj.SIGNATURBLOCK_SMALL_EN_NOTE.value.SIG_LABEL=./images/signatur-logo_en.png
+sig_obj.SIGNATURBLOCK_SMALL_EN_NOTE.value.SIG_NOTE=This document is signed with a qualified electronic signature. According to \u00a7\u00A04 art.\u00A01 of the Signature Act it in principle is legally equivalent to an handwritten signature.
+
+# WAI
+sig_obj.SIGNATURBLOCK_SMALL_EN_NOTE.sigLogoAltText=A standard signature logo is shown.
+
+#---------------------- MAIN TABLE -------------------------
+sig_obj.SIGNATURBLOCK_SMALL_EN_NOTE.table.main.1=SIG_VALUE-cv
+sig_obj.SIGNATURBLOCK_SMALL_EN_NOTE.table.main.2=SIG_LABEL-i|TABLE-info
+sig_obj.SIGNATURBLOCK_SMALL_EN_NOTE.table.main.3=SIG_META-cv
+sig_obj.SIGNATURBLOCK_SMALL_EN_NOTE.table.main.4=SIG_NOTE-cv
+sig_obj.SIGNATURBLOCK_SMALL_EN_NOTE.table.main.5=SIG_DATE-cv
+
+sig_obj.SIGNATURBLOCK_SMALL_EN_NOTE.table.main.ColsWidth=1 4.5
+sig_obj.SIGNATURBLOCK_SMALL_EN_NOTE.table.main.Style.bgcolor=255 255 255
+sig_obj.SIGNATURBLOCK_SMALL_EN_NOTE.table.main.Style.padding=2
+sig_obj.SIGNATURBLOCK_SMALL_EN_NOTE.table.main.Style.border=0.1
+sig_obj.SIGNATURBLOCK_SMALL_EN_NOTE.table.main.Style.halign=center
+sig_obj.SIGNATURBLOCK_SMALL_EN_NOTE.table.main.Style.valuehalign=left
+sig_obj.SIGNATURBLOCK_SMALL_EN_NOTE.table.main.Style.valign=top
+sig_obj.SIGNATURBLOCK_SMALL_EN_NOTE.table.main.Style.imagevalign=middle
+sig_obj.SIGNATURBLOCK_SMALL_EN_NOTE.table.main.Style.font=HELVETICA,5,BOLD
+sig_obj.SIGNATURBLOCK_SMALL_EN_NOTE.table.main.Style.valuefont=COURIER,5,NORMAL
+
+#---------------------- INFO TABLE -------------------------
+sig_obj.SIGNATURBLOCK_SMALL_EN_NOTE.table.info.ColsWidth=1 3.2
+#sig_obj.SIGNATURBLOCK_SMALL_EN_NOTE.table.info.1=SIG_NAME-cv
+sig_obj.SIGNATURBLOCK_SMALL_EN_NOTE.table.info.1=SIG_SUBJECT-cv
+sig_obj.SIGNATURBLOCK_SMALL_EN_NOTE.table.info.2=SIG_ISSUER-cv
+sig_obj.SIGNATURBLOCK_SMALL_EN_NOTE.table.info.3=SIG_NUMBER-cv
+sig_obj.SIGNATURBLOCK_SMALL_EN_NOTE.table.info.4=SIG_KZ-cv
+sig_obj.SIGNATURBLOCK_SMALL_EN_NOTE.table.info.5=SIG_ID-cv
diff --git a/pdf-as-lib/src/test/resources/at/knowcenter/wag/egov/egiz/cfg/profile.VARIABLER_AMTSSIGNATURBLOCK_DE.properties b/pdf-as-lib/src/test/resources/at/knowcenter/wag/egov/egiz/cfg/profile.VARIABLER_AMTSSIGNATURBLOCK_DE.properties
new file mode 100644
index 0000000..a47cb3e
--- /dev/null
+++ b/pdf-as-lib/src/test/resources/at/knowcenter/wag/egov/egiz/cfg/profile.VARIABLER_AMTSSIGNATURBLOCK_DE.properties
@@ -0,0 +1,62 @@
+###################################################################################################
+# PROFIL: Zus\u00e4tzlicher Amtssignaturblock (Deutsch) mit neuem Layout
+# Unterzeichner Musteramt
+
+sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.description=Variabler Amtssignaturblock-Deutsch, neues Layout
+
+sig_obj.types.VARIABLER_AMTSSIGNATURBLOCK_DE=on
+
+sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.key.SIG_VALUE=Signaturwert
+sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.key.SIG_SUBJECT=Unterzeichner
+sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.key.SIG_ISSUER=Aussteller-Zertifikat
+sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.key.SIG_NUMBER=Serien-Nr.
+sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.key.SIG_KZ=Methode
+sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.key.SIG_ID=Parameter
+sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.key.SIG_META=Pr\u00fcfinformation
+sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.key.SIG_NOTE=Hinweis
+sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.key.SIG_DATE=Datum/Zeit-UTC
+
+sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.phlength.SIG_SUBJECT=200
+sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.phlength.SIG_ISSUER=130
+sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.phlength.SIG_NUMBER=30
+sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.phlength.SIG_ID=30
+sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.value.SIG_SUBJECT=F\u00fcr die Richtigkeit der Ausfertigung:\nMusteramt\nMusterstadt
+#sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.moa.sign.KeyIdentifier=MusteramtatrustKey
+
+sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.pos=f:80
+sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.adobeSignFieldValue=PDF-AS Signatur
+sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.adobeSignReasonValue=Informationen zur Pr\u00fcfung finden Sie unter http://www.signaturpruefung.gv.at
+sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.verifyURL=http://www.signaturpruefung.gv.at
+
+# WAI
+sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.sigLogoAltText=Abgebildet ist eine Standard-Signaturbildmarke.
+
+sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.value.SIG_META=Informationen zur Pr\u00fcfung der elektronischen Signatur finden Sie unter: http://www.signaturpruefung.gv.at\nInformationen zur Pr\u00fcfung des Ausdrucks finden Sie unter: http://musteramt.musterstadt.gv.at
+sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.value.SIG_LABEL=./images/signatur-logo_de.png
+sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.value.SIG_NOTE=Dieses Dokument wurde amtssigniert. Auch ein Ausdruck dieses Dokuments hat gem\u00e4\u00df \u00a7 20 E-Government-Gesetz die Beweiskraft einer \u00f6ffentlichen Urkunde.
+
+#---------------------- MAIN TABLE -------------------------
+sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.table.main.1=SIG_VALUE-cv
+sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.table.main.2=SIG_LABEL-i|TABLE-info
+sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.table.main.3=SIG_META-cv
+sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.table.main.4=SIG_NOTE-cv
+sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.table.main.5=SIG_DATE-cv
+
+sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.table.main.ColsWidth=1 6
+sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.table.main.Style.bgcolor=255 255 255
+sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.table.main.Style.padding=4
+sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.table.main.Style.border=0.1
+sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.table.main.Style.halign=center
+sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.table.main.Style.valuehalign=left
+sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.table.main.Style.valign=top
+sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.table.main.Style.imagevalign=middle
+sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.table.main.Style.font=HELVETICA,8,BOLD
+sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.table.main.Style.valuefont=COURIER,8,NORMAL
+
+#---------------------- INFO TABLE -------------------------
+sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.table.info.ColsWidth=1 4
+sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.table.info.1=SIG_SUBJECT-cv
+sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.table.info.2=SIG_ISSUER-cv
+sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.table.info.3=SIG_NUMBER-cv
+sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.table.info.4=SIG_KZ-cv
+sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.table.info.5=SIG_ID-cv
diff --git a/pdf-as-lib/src/test/resources/at/knowcenter/wag/egov/egiz/cfg/profiles.amtssignatur.properties b/pdf-as-lib/src/test/resources/at/knowcenter/wag/egov/egiz/cfg/profiles.amtssignatur.properties
new file mode 100644
index 0000000..f8ddd05
--- /dev/null
+++ b/pdf-as-lib/src/test/resources/at/knowcenter/wag/egov/egiz/cfg/profiles.amtssignatur.properties
@@ -0,0 +1,5 @@
+include.01=profile.AMTSSIGNATURBLOCK_DE.properties
+include.02=profile.AMTSSIGNATURBLOCK_DE_DEPRECATED.properties
+include.03=profile.AMTSSIGNATURBLOCK_EN.properties
+include.04=profile.AMTSSIGNATURBLOCK_EN_DEPRECATED.properties
+include.05=profile.VARIABLER_AMTSSIGNATURBLOCK_DE.properties
diff --git a/pdf-as-lib/src/test/resources/at/knowcenter/wag/egov/egiz/cfg/profiles.baik.properties b/pdf-as-lib/src/test/resources/at/knowcenter/wag/egov/egiz/cfg/profiles.baik.properties
new file mode 100644
index 0000000..47128bd
--- /dev/null
+++ b/pdf-as-lib/src/test/resources/at/knowcenter/wag/egov/egiz/cfg/profiles.baik.properties
@@ -0,0 +1,2 @@
+include.01=profile.BAIK_ARCHIV_SIGNATUR.properties
+include.02=profile.BAIK_URKUNDE_SIGNATUR.properties
diff --git a/pdf-as-lib/src/test/resources/at/knowcenter/wag/egov/egiz/cfg/profiles.default.properties b/pdf-as-lib/src/test/resources/at/knowcenter/wag/egov/egiz/cfg/profiles.default.properties
new file mode 100644
index 0000000..332e56a
--- /dev/null
+++ b/pdf-as-lib/src/test/resources/at/knowcenter/wag/egov/egiz/cfg/profiles.default.properties
@@ -0,0 +1,15 @@
+include.01=profile.INVISIBLE.properties
+include.02=profile.SIGNATURBLOCK_DE.properties
+include.03=profile.SIGNATURBLOCK_EN.properties
+include.04=profile.SIGNATURBLOCK_DE_NOTE.properties
+include.05=profile.SIGNATURBLOCK_DE_PDFA.properties
+include.06=profile.SIGNATURBLOCK_DE_PDFA_NOTE.properties
+include.07=profile.SIGNATURBLOCK_EN_NOTE.properties
+include.08=profile.SIGNATURBLOCK_EN_PDFA.properties
+include.09=profile.SIGNATURBLOCK_EN_PDFA_NOTE.properties
+include.10=profile.SIGNATURBLOCK_MINIMAL_DE.properties
+include.11=profile.SIGNATURBLOCK_MINIMAL_EN.properties
+include.12=profile.SIGNATURBLOCK_SMALL_DE.properties
+include.13=profile.SIGNATURBLOCK_SMALL_DE_NOTE.properties
+include.14=profile.SIGNATURBLOCK_SMALL_EN.properties
+include.15=profile.SIGNATURBLOCK_SMALL_EN_NOTE.properties
diff --git a/pdf-as-lib/src/test/resources/at/knowcenter/wag/egov/egiz/cfg/profiles.deprecated.properties b/pdf-as-lib/src/test/resources/at/knowcenter/wag/egov/egiz/cfg/profiles.deprecated.properties
new file mode 100644
index 0000000..532d3ec
--- /dev/null
+++ b/pdf-as-lib/src/test/resources/at/knowcenter/wag/egov/egiz/cfg/profiles.deprecated.properties
@@ -0,0 +1,2 @@
+include.01=profile.SIGNATURBLOCK_DE_DEPRECATED.properties
+include.02=profile.SIGNATURBLOCK_EN_DEPRECATED.properties
diff --git a/pdf-as-lib/src/test/resources/at/knowcenter/wag/egov/egiz/cfg/subdir1/profile.AMTSSIGNATURBLOCK_DE.properties b/pdf-as-lib/src/test/resources/at/knowcenter/wag/egov/egiz/cfg/subdir1/profile.AMTSSIGNATURBLOCK_DE.properties
new file mode 100644
index 0000000..807b507
--- /dev/null
+++ b/pdf-as-lib/src/test/resources/at/knowcenter/wag/egov/egiz/cfg/subdir1/profile.AMTSSIGNATURBLOCK_DE.properties
@@ -0,0 +1,56 @@
+###################################################################################################
+# PROFIL: Amtssignaturblock (Deutsch) mit neuem Layout
+
+sig_obj.AMTSSIGNATURBLOCK_DE.description=Amtssignaturblock-Deutsch, neues Layout
+
+sig_obj.types.AMTSSIGNATURBLOCK_DE=on
+
+sig_obj.AMTSSIGNATURBLOCK_DE.key.SIG_VALUE=Signaturwert
+sig_obj.AMTSSIGNATURBLOCK_DE.key.SIG_SUBJECT=Unterzeichner
+sig_obj.AMTSSIGNATURBLOCK_DE.key.SIG_ISSUER=Aussteller-Zertifikat
+sig_obj.AMTSSIGNATURBLOCK_DE.key.SIG_NUMBER=Serien-Nr.
+sig_obj.AMTSSIGNATURBLOCK_DE.key.SIG_KZ=Methode
+sig_obj.AMTSSIGNATURBLOCK_DE.key.SIG_ID=Parameter
+sig_obj.AMTSSIGNATURBLOCK_DE.key.SIG_META=Pr\u00fcfinformation
+sig_obj.AMTSSIGNATURBLOCK_DE.key.SIG_NOTE=Hinweis
+sig_obj.AMTSSIGNATURBLOCK_DE.key.SIG_DATE=Datum/Zeit-UTC
+
+sig_obj.AMTSSIGNATURBLOCK_DE.value.SIG_SUBJECT=DEMO Amtssignatur
+
+sig_obj.AMTSSIGNATURBLOCK_DE.pos=f:80
+sig_obj.AMTSSIGNATURBLOCK_DE.adobeSignFieldValue=PDF-AS Signatur
+sig_obj.AMTSSIGNATURBLOCK_DE.adobeSignReasonValue=Signaturpruefung unter http://www.signaturpruefung.gv.at
+sig_obj.AMTSSIGNATURBLOCK_DE.verifyURL=http://www.signaturpruefung.gv.at
+
+# WAI
+sig_obj.AMTSSIGNATURBLOCK_DE.sigLogoAltText=Abgebildet ist eine Standard-Signaturbildmarke.
+
+sig_obj.AMTSSIGNATURBLOCK_DE.value.SIG_META=Signaturpruefung unter: http://www.signaturpruefung.gv.at
+sig_obj.AMTSSIGNATURBLOCK_DE.value.SIG_LABEL=./images/signatur-logo_de.png
+sig_obj.AMTSSIGNATURBLOCK_DE.value.SIG_NOTE=Dieses mit einer qualifizierten elektronischen Signatur versehene Dokument ist gem\u00e4\u00df \u00a7\u00A04 Abs.\u00A01 Signaturgesetz einem handschriftlich unterschriebenen Dokument grunds\u00e4tzlich rechtlich gleichgestellt.
+
+#---------------------- MAIN TABLE -------------------------
+sig_obj.AMTSSIGNATURBLOCK_DE.table.main.1=SIG_VALUE-cv
+sig_obj.AMTSSIGNATURBLOCK_DE.table.main.2=SIG_LABEL-i|TABLE-info
+sig_obj.AMTSSIGNATURBLOCK_DE.table.main.3=SIG_META-cv
+sig_obj.AMTSSIGNATURBLOCK_DE.table.main.4=SIG_NOTE-cv
+sig_obj.AMTSSIGNATURBLOCK_DE.table.main.5=SIG_DATE-cv
+
+sig_obj.AMTSSIGNATURBLOCK_DE.table.main.ColsWidth=1 6
+sig_obj.AMTSSIGNATURBLOCK_DE.table.main.Style.bgcolor=255 255 255
+sig_obj.AMTSSIGNATURBLOCK_DE.table.main.Style.padding=4
+sig_obj.AMTSSIGNATURBLOCK_DE.table.main.Style.border=0.1
+sig_obj.AMTSSIGNATURBLOCK_DE.table.main.Style.halign=center
+sig_obj.AMTSSIGNATURBLOCK_DE.table.main.Style.valuehalign=left
+sig_obj.AMTSSIGNATURBLOCK_DE.table.main.Style.valign=top
+sig_obj.AMTSSIGNATURBLOCK_DE.table.main.Style.imagevalign=middle
+sig_obj.AMTSSIGNATURBLOCK_DE.table.main.Style.font=HELVETICA,8,BOLD
+sig_obj.AMTSSIGNATURBLOCK_DE.table.main.Style.valuefont=COURIER,8,NORMAL
+
+#---------------------- INFO TABLE -------------------------
+sig_obj.AMTSSIGNATURBLOCK_DE.table.info.ColsWidth=1 4
+sig_obj.AMTSSIGNATURBLOCK_DE.table.info.1=SIG_SUBJECT-cv
+sig_obj.AMTSSIGNATURBLOCK_DE.table.info.2=SIG_ISSUER-cv
+sig_obj.AMTSSIGNATURBLOCK_DE.table.info.3=SIG_NUMBER-cv
+sig_obj.AMTSSIGNATURBLOCK_DE.table.info.4=SIG_KZ-cv
+sig_obj.AMTSSIGNATURBLOCK_DE.table.info.5=SIG_ID-cv
diff --git a/pdf-as-lib/src/test/resources/at/knowcenter/wag/egov/egiz/cfg/subdir1/profile.AMTSSIGNATURBLOCK_DE_DEPRECATED.properties b/pdf-as-lib/src/test/resources/at/knowcenter/wag/egov/egiz/cfg/subdir1/profile.AMTSSIGNATURBLOCK_DE_DEPRECATED.properties
new file mode 100644
index 0000000..1ffeca4
--- /dev/null
+++ b/pdf-as-lib/src/test/resources/at/knowcenter/wag/egov/egiz/cfg/subdir1/profile.AMTSSIGNATURBLOCK_DE_DEPRECATED.properties
@@ -0,0 +1,56 @@
+###################################################################################################
+# PROFIL: Amtssignaturblock (Deutsch)
+
+sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.description=Amtssignaturblock-Deutsch
+
+sig_obj.types.AMTSSIGNATURBLOCK_DE_DEPRECATED=on
+
+sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.key.SIG_VALUE=Signaturwert
+sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.key.SIG_SUBJECT=Unterzeichner
+sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.key.SIG_DATE=Datum/Zeit-UTC
+sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.key.SIG_ISSUER=Aussteller-Zertifikat
+sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.key.SIG_NUMBER=Serien-Nr.
+sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.key.SIG_KZ=Methode
+sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.key.SIG_ID=Parameter
+sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.key.SIG_META=Pr\u00fcfinformation
+sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.key.SIG_NOTE=Hinweis
+
+sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.value.SIG_SUBJECT=DEMO Amtssignatur
+
+sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.pos=f:80
+sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.adobeSignFieldValue=PDF-AS Signatur
+sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.adobeSignReasonValue=Informationen zur Pr\u00fcfung finden Sie unter http://www.signaturpruefung.gv.at
+sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.verifyURL=http://www.signaturpruefung.gv.at
+
+# WAI
+sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.sigLogoAltText=Abgebildet ist eine Standard-Signaturbildmarke.
+
+sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.value.SIG_META=Signaturpruefung unter: http://www.signaturpruefung.gv.at
+sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.value.SIG_LABEL=./images/signatur-logo_de.png
+sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.value.SIG_NOTE=Dieses Dokument wurde amtssigniert. Auch ein Ausdruck dieses Dokuments hat gem\u00e4\u00df \u00a7 20 E-Government-Gesetz die Beweiskraft einer \u00f6ffentlichen Urkunde.
+
+#---------------------- MAIN TABLE -------------------------
+sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.table.main.1=SIG_VALUE-cv
+sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.table.main.2=SIG_LABEL-i|TABLE-info
+sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.table.main.3=SIG_META-cv
+sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.table.main.4=SIG_NOTE-cv
+
+sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.table.main.ColsWidth=1 6
+sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.table.main.Style.bgcolor=255 255 255
+sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.table.main.Style.padding=4
+sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.table.main.Style.border=0.1
+sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.table.main.Style.halign=center
+sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.table.main.Style.valuehalign=left
+sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.table.main.Style.valign=middle
+sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.table.main.Style.imagevalign=middle
+sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.table.main.Style.font=HELVETICA,8,BOLD
+sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.table.main.Style.valuefont=COURIER,8,NORMAL
+
+#---------------------- INFO TABLE -------------------------
+sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.table.info.ColsWidth=1 4
+sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.table.info.1=SIG_SUBJECT-cv
+sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.table.info.2=SIG_DATE-cv
+sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.table.info.3=SIG_ISSUER-cv
+sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.table.info.4=SIG_NUMBER-cv
+sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.table.info.5=SIG_KZ-cv
+sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.table.info.6=SIG_ID-cv
diff --git a/pdf-as-lib/src/test/resources/at/knowcenter/wag/egov/egiz/cfg/subdir1/profile.AMTSSIGNATURBLOCK_EN.properties b/pdf-as-lib/src/test/resources/at/knowcenter/wag/egov/egiz/cfg/subdir1/profile.AMTSSIGNATURBLOCK_EN.properties
new file mode 100644
index 0000000..6fca535
--- /dev/null
+++ b/pdf-as-lib/src/test/resources/at/knowcenter/wag/egov/egiz/cfg/subdir1/profile.AMTSSIGNATURBLOCK_EN.properties
@@ -0,0 +1,57 @@
+###################################################################################################
+# PROFIL: Amtssignaturblock (Englisch) mit neuem Layout
+
+sig_obj.AMTSSIGNATURBLOCK_EN.description=Amtssignaturblock-Englisch, neues Layout
+
+sig_obj.types.AMTSSIGNATURBLOCK_EN=on
+
+sig_obj.AMTSSIGNATURBLOCK_EN.key.SIG_VALUE=Signature Value
+sig_obj.AMTSSIGNATURBLOCK_EN.key.SIG_SUBJECT=Signatory
+sig_obj.AMTSSIGNATURBLOCK_EN.key.SIG_ISSUER=Issuer-Certificate
+sig_obj.AMTSSIGNATURBLOCK_EN.key.SIG_NUMBER=Serial-No.
+sig_obj.AMTSSIGNATURBLOCK_EN.key.SIG_KZ=Method
+sig_obj.AMTSSIGNATURBLOCK_EN.key.SIG_ID=Parameter
+sig_obj.AMTSSIGNATURBLOCK_EN.key.SIG_META=Verification
+sig_obj.AMTSSIGNATURBLOCK_EN.key.SIG_NOTE=Note
+sig_obj.AMTSSIGNATURBLOCK_EN.key.SIG_DATE=Date/Time-UTC
+
+sig_obj.AMTSSIGNATURBLOCK_EN.value.SIG_SUBJECT=Official Signature DEMO
+
+sig_obj.AMTSSIGNATURBLOCK_EN.pos=f:80
+sig_obj.AMTSSIGNATURBLOCK_EN.adobeSignFieldValue=PDF-AS Signature
+sig_obj.AMTSSIGNATURBLOCK_EN.adobeSignReasonValue=Signature verification at: http://www.signature-verification.gv.at
+sig_obj.AMTSSIGNATURBLOCK_EN.verifyURL=http://www.signature-verification.gv.at
+
+# WAI
+sig_obj.AMTSSIGNATURBLOCK_EN.sigLogoAltText=A standard signature logo is shown.
+
+sig_obj.AMTSSIGNATURBLOCK_EN.value.SIG_META=Signature verification at: http://www.signature-verification.gv.at
+sig_obj.AMTSSIGNATURBLOCK_EN.value.SIG_LABEL=./images/signatur-logo_en.png
+sig_obj.AMTSSIGNATURBLOCK_EN.value.SIG_NOTE=This document is signed with a qualified electronic signature. According to \u00a7\u00A04 art.\u00A01 of the Signature Act it in principle is legally equivalent to an handwritten signature.
+
+
+#---------------------- MAIN TABLE -------------------------
+sig_obj.AMTSSIGNATURBLOCK_EN.table.main.1=SIG_VALUE-cv
+sig_obj.AMTSSIGNATURBLOCK_EN.table.main.2=SIG_LABEL-i|TABLE-info
+sig_obj.AMTSSIGNATURBLOCK_EN.table.main.3=SIG_META-cv
+sig_obj.AMTSSIGNATURBLOCK_EN.table.main.4=SIG_NOTE-cv
+sig_obj.AMTSSIGNATURBLOCK_EN.table.main.5=SIG_DATE-cv
+
+sig_obj.AMTSSIGNATURBLOCK_EN.table.main.ColsWidth=1 6
+sig_obj.AMTSSIGNATURBLOCK_EN.table.main.Style.bgcolor=255 255 255
+sig_obj.AMTSSIGNATURBLOCK_EN.table.main.Style.padding=4
+sig_obj.AMTSSIGNATURBLOCK_EN.table.main.Style.border=0.1
+sig_obj.AMTSSIGNATURBLOCK_EN.table.main.Style.halign=center
+sig_obj.AMTSSIGNATURBLOCK_EN.table.main.Style.valuehalign=left
+sig_obj.AMTSSIGNATURBLOCK_EN.table.main.Style.valign=top
+sig_obj.AMTSSIGNATURBLOCK_EN.table.main.Style.imagevalign=middle
+sig_obj.AMTSSIGNATURBLOCK_EN.table.main.Style.font=HELVETICA,8,BOLD
+sig_obj.AMTSSIGNATURBLOCK_EN.table.main.Style.valuefont=COURIER,8,NORMAL
+
+#---------------------- INFO TABLE -------------------------
+sig_obj.AMTSSIGNATURBLOCK_EN.table.info.ColsWidth=1 5
+sig_obj.AMTSSIGNATURBLOCK_EN.table.info.1=SIG_SUBJECT-cv
+sig_obj.AMTSSIGNATURBLOCK_EN.table.info.2=SIG_ISSUER-cv
+sig_obj.AMTSSIGNATURBLOCK_EN.table.info.3=SIG_NUMBER-cv
+sig_obj.AMTSSIGNATURBLOCK_EN.table.info.4=SIG_KZ-cv
+sig_obj.AMTSSIGNATURBLOCK_EN.table.info.5=SIG_ID-cv
diff --git a/pdf-as-lib/src/test/resources/at/knowcenter/wag/egov/egiz/cfg/subdir1/profile.AMTSSIGNATURBLOCK_EN_DEPRECATED.properties b/pdf-as-lib/src/test/resources/at/knowcenter/wag/egov/egiz/cfg/subdir1/profile.AMTSSIGNATURBLOCK_EN_DEPRECATED.properties
new file mode 100644
index 0000000..0eab478
--- /dev/null
+++ b/pdf-as-lib/src/test/resources/at/knowcenter/wag/egov/egiz/cfg/subdir1/profile.AMTSSIGNATURBLOCK_EN_DEPRECATED.properties
@@ -0,0 +1,56 @@
+###################################################################################################
+# PROFIL: Amtssignaturblock (Englisch)
+
+sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.description=Amtssignaturblock-Englisch
+
+sig_obj.types.AMTSSIGNATURBLOCK_EN_DEPRECATED=on
+
+sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.key.SIG_VALUE=Signature Value
+sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.key.SIG_SUBJECT=Signatory
+sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.key.SIG_DATE=Date/Time-UTC
+sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.key.SIG_ISSUER=Issuer-Certificate
+sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.key.SIG_NUMBER=Serial-No.
+sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.key.SIG_KZ=Method
+sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.key.SIG_ID=Parameter
+sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.key.SIG_META=Verification
+sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.key.SIG_NOTE=Note
+
+sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.value.SIG_SUBJECT=Official Signature DEMO
+
+sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.pos=f:80
+sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.adobeSignFieldValue=PDF-AS Signature
+sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.adobeSignReasonValue=Information about the verification can be found at http://www.signature-verification.gv.at
+sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.verifyURL=http://www.signature-verification.gv.at
+
+# WAI
+sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.sigLogoAltText=A standard signature logo is shown.
+
+sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.value.SIG_META=Signature verification at: http://www.signature-verification.gv.at
+sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.value.SIG_LABEL=./images/signatur-logo_en.png
+sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.value.SIG_NOTE=This document was signed with an official signature. According to \u00a7 20 E-Government-Act a printout of this document has the probative value of an official document.
+
+#---------------------- MAIN TABLE -------------------------
+sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.table.main.1=SIG_VALUE-cv
+sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.table.main.2=SIG_LABEL-i|TABLE-info
+sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.table.main.3=SIG_META-cv
+sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.table.main.4=SIG_NOTE-cv
+
+sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.table.main.ColsWidth=1 6
+sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.table.main.Style.bgcolor=255 255 255
+sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.table.main.Style.padding=4
+sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.table.main.Style.border=0.1
+sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.table.main.Style.halign=center
+sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.table.main.Style.valuehalign=left
+sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.table.main.Style.valign=middle
+sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.table.main.Style.imagevalign=middle
+sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.table.main.Style.font=HELVETICA,8,BOLD
+sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.table.main.Style.valuefont=COURIER,8,NORMAL
+
+#---------------------- INFO TABLE -------------------------
+sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.table.info.ColsWidth=1 5
+sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.table.info.1=SIG_SUBJECT-cv
+sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.table.info.2=SIG_DATE-cv
+sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.table.info.3=SIG_ISSUER-cv
+sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.table.info.4=SIG_NUMBER-cv
+sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.table.info.5=SIG_KZ-cv
+sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.table.info.6=SIG_ID-cv
diff --git a/pdf-as-lib/src/test/resources/at/knowcenter/wag/egov/egiz/cfg/subdir1/profile.BAIK.properties b/pdf-as-lib/src/test/resources/at/knowcenter/wag/egov/egiz/cfg/subdir1/profile.BAIK.properties
new file mode 100644
index 0000000..ce5de97
--- /dev/null
+++ b/pdf-as-lib/src/test/resources/at/knowcenter/wag/egov/egiz/cfg/subdir1/profile.BAIK.properties
@@ -0,0 +1 @@
+include=subdir2/*.properties
diff --git a/pdf-as-lib/src/test/resources/at/knowcenter/wag/egov/egiz/cfg/subdir1/subdir2/profile.BAIK_ARCHIV_SIGNATUR.properties b/pdf-as-lib/src/test/resources/at/knowcenter/wag/egov/egiz/cfg/subdir1/subdir2/profile.BAIK_ARCHIV_SIGNATUR.properties
new file mode 100644
index 0000000..4ed8bfd
--- /dev/null
+++ b/pdf-as-lib/src/test/resources/at/knowcenter/wag/egov/egiz/cfg/subdir1/subdir2/profile.BAIK_ARCHIV_SIGNATUR.properties
@@ -0,0 +1,71 @@
+###################################################################################################
+# PROFIL: BAIK Archivsignatur
+
+sig_obj.BAIK_ARCHIV_SIGNATUR.description=BAIK Archivsignatur
+
+sig_obj.types.BAIK_ARCHIV_SIGNATUR=on
+
+# enable/disable BAIK support for this profile
+sig_obj.BAIK_ARCHIV_SIGNATUR.key.SIG_BAIK_ENABLED=true
+sig_obj.BAIK_ARCHIV_SIGNATUR.key.SIG_PDFA1B_VALID=true
+
+sig_obj.BAIK_ARCHIV_SIGNATUR.key.SIG_VALUE=Signaturwert
+#sig_obj.BAIK_ARCHIV_SIGNATUR.key.SIG_NAME=SIGNATOR
+sig_obj.BAIK_ARCHIV_SIGNATUR.key.SIG_SIG_LABEL=Signator
+sig_obj.BAIK_ARCHIV_SIGNATUR.key.SIG_DATE=Signaturdatum
+sig_obj.BAIK_ARCHIV_SIGNATUR.key.SIG_ISSUER=Zertifizierungsdienst
+sig_obj.BAIK_ARCHIV_SIGNATUR.key.SIG_NUMBER=Seriennummer
+sig_obj.BAIK_ARCHIV_SIGNATUR.key.SIG_ALG=Algorithmus
+sig_obj.BAIK_ARCHIV_SIGNATUR.key.SIG_KZ=Methode
+#sig_obj.BAIK_ARCHIV_SIGNATUR.key.SIG_ID=Parameter
+sig_obj.BAIK_ARCHIV_SIGNATUR.key.SIG_META=Hinweis
+sig_obj.BAIK_ARCHIV_SIGNATUR.key.SIG_TITLE=ELEKTRONISCHE ARCHIVSIGNATUR
+
+sig_obj.BAIK_ARCHIV_SIGNATUR.pos=f:80
+sig_obj.BAIK_ARCHIV_SIGNATUR.adobeSignFieldValue=ELEKTRONISCHE ARCHIVSIGNATUR
+
+# WAI
+sig_obj.BAIK_ARCHIV_SIGNATUR.sigLogoAltText=Abgebildet ist eine Signaturbildmarke mit Bundesadler.
+
+sig_obj.BAIK_ARCHIV_SIGNATUR.value.SIG_META=Dokumentenformat: ${iui.pdfVersion}
+sig_obj.BAIK_ARCHIV_SIGNATUR.value.SIG_LABEL=./images/Baik_Archiv.gif
+sig_obj.BAIK_ARCHIV_SIGNATUR.value.SIG_TITLE=ELEKTRONISCHE ARCHIVSIGNATUR
+
+sig_obj.BAIK_ARCHIV_SIGNATUR.adobeSignFieldValue=Archivsignatur
+sig_obj.BAIK_ARCHIV_SIGNATUR.adobeSignText.binary=Archivsignatur der BAIK
+sig_obj.BAIK_ARCHIV_SIGNATUR.verifyURL=http://www.signaturpruefung.gv.at
+
+sig_obj.BAIK_ARCHIV_SIGNATUR.phlength.SIG_META=50
+
+sig_obj.BAIK_ARCHIV_SIGNATUR.value.SIG_SIG_LABEL=BAIK-Archiv\n\nUrkundenarchiv der Bundeskammer f\u00fcr Architekten und Ingenieurskonsulenten
+
+#---------------------- MAIN TABLE -------------------------
+sig_obj.BAIK_ARCHIV_SIGNATUR.table.main.1=SIG_TITLE-v
+sig_obj.BAIK_ARCHIV_SIGNATUR.table.main.2=SIG_VALUE-cv
+sig_obj.BAIK_ARCHIV_SIGNATUR.table.main.3=SIG_LABEL-i|TABLE-info
+sig_obj.BAIK_ARCHIV_SIGNATUR.table.main.4=SIG_META-cv
+
+sig_obj.BAIK_ARCHIV_SIGNATUR.table.main.ColsWidth=1 5
+sig_obj.BAIK_ARCHIV_SIGNATUR.table.main.Style.bgcolor=161 198 252
+sig_obj.BAIK_ARCHIV_SIGNATUR.table.main.Style.padding=4
+sig_obj.BAIK_ARCHIV_SIGNATUR.table.main.Style.border=0.1
+sig_obj.BAIK_ARCHIV_SIGNATUR.table.main.Style.halign=center
+sig_obj.BAIK_ARCHIV_SIGNATUR.table.main.Style.valuehalign=left
+sig_obj.BAIK_ARCHIV_SIGNATUR.table.main.Style.valign=middle
+sig_obj.BAIK_ARCHIV_SIGNATUR.table.main.Style.imagevalign=middle
+sig_obj.BAIK_ARCHIV_SIGNATUR.table.main.Style.font=TTF:DejaVuSansCondensed.ttf,8
+sig_obj.BAIK_ARCHIV_SIGNATUR.table.main.Style.valuefont=TTF:DejaVuSansCondensed.ttf,8
+
+#---------------------- INFO TABLE -------------------------
+sig_obj.BAIK_ARCHIV_SIGNATUR.table.info.ColsWidth=1 4
+sig_obj.BAIK_ARCHIV_SIGNATUR.table.info.Style.halign=left
+sig_obj.BAIK_ARCHIV_SIGNATUR.table.info.Style.valuehalign=left
+sig_obj.BAIK_ARCHIV_SIGNATUR.table.info.Style.valign=middle
+
+#sig_obj.BAIK_ARCHIV_SIGNATUR.table.info.1=SIG_NAME-cv
+sig_obj.BAIK_ARCHIV_SIGNATUR.table.info.1=SIG_SIG_LABEL-cv
+sig_obj.BAIK_ARCHIV_SIGNATUR.table.info.2=SIG_DATE-cv
+sig_obj.BAIK_ARCHIV_SIGNATUR.table.info.3=SIG_ISSUER-cv
+sig_obj.BAIK_ARCHIV_SIGNATUR.table.info.4=SIG_NUMBER-cv
+sig_obj.BAIK_ARCHIV_SIGNATUR.table.info.5=SIG_ALG-cv
+sig_obj.BAIK_ARCHIV_SIGNATUR.table.info.6=SIG_KZ-cv
diff --git a/pdf-as-lib/src/test/resources/at/knowcenter/wag/egov/egiz/cfg/subdir1/subdir2/profile.BAIK_URKUNDE_SIGNATUR.properties b/pdf-as-lib/src/test/resources/at/knowcenter/wag/egov/egiz/cfg/subdir1/subdir2/profile.BAIK_URKUNDE_SIGNATUR.properties
new file mode 100644
index 0000000..dd9e527
--- /dev/null
+++ b/pdf-as-lib/src/test/resources/at/knowcenter/wag/egov/egiz/cfg/subdir1/subdir2/profile.BAIK_URKUNDE_SIGNATUR.properties
@@ -0,0 +1,69 @@
+###################################################################################################
+# PROFIL: BAIK Beurkundungssignatur
+
+sig_obj.BAIK_URKUNDE_SIGNATUR.description=BAIK Beurkundungssignatur
+
+sig_obj.types.BAIK_URKUNDE_SIGNATUR=on
+
+# enable/disable BAIK support for this profile
+sig_obj.BAIK_URKUNDE_SIGNATUR.key.SIG_BAIK_ENABLED=true
+sig_obj.BAIK_URKUNDE_SIGNATUR.key.SIG_PDFA1B_VALID=true
+
+sig_obj.BAIK_URKUNDE_SIGNATUR.key.SIG_VALUE=Signaturwert
+#sig_obj.BAIK_URKUNDE_SIGNATUR.key.SIG_NAME=SIGNATOR
+sig_obj.BAIK_URKUNDE_SIGNATUR.key.SIG_SIG_LABEL=Signator
+sig_obj.BAIK_URKUNDE_SIGNATUR.key.SIG_DATE=Signaturdatum
+sig_obj.BAIK_URKUNDE_SIGNATUR.key.SIG_ISSUER=Zertifizierungsdienst
+sig_obj.BAIK_URKUNDE_SIGNATUR.key.SIG_NUMBER=Seriennummer
+sig_obj.BAIK_URKUNDE_SIGNATUR.key.SIG_ALG=Algorithmus
+sig_obj.BAIK_URKUNDE_SIGNATUR.key.SIG_KZ=Methode
+#sig_obj.BAIK_URKUNDE_SIGNATUR.key.SIG_ID=Parameter
+sig_obj.BAIK_URKUNDE_SIGNATUR.key.SIG_META=Hinweis:
+sig_obj.BAIK_URKUNDE_SIGNATUR.key.SIG_TITLE=ELEKTRONISCHE BEURKUNDUNGSSIGNATUR
+
+# WAI
+sig_obj.BAIK_URKUNDE_SIGNATUR.sigLogoAltText=Abgebildet ist die Signaturbildmarke eines staatlich befugten und beeideten Ziviltechnikers mit Bundesadler.
+
+sig_obj.BAIK_URKUNDE_SIGNATUR.pos=f:80
+sig_obj.BAIK_URKUNDE_SIGNATUR.adobeSignFieldValue=Urkundensignatur
+sig_obj.BAIK_URKUNDE_SIGNATUR.adobeSignText.binary=Urkundensignatur der BAIK
+sig_obj.BAIK_URKUNDE_SIGNATUR.verifyURL=http://www.signaturpruefung.gv.at
+
+sig_obj.BAIK_URKUNDE_SIGNATUR.value.SIG_META=Dokumentenformat: ${iui.pdfVersion}
+sig_obj.BAIK_URKUNDE_SIGNATUR.value.SIG_LABEL=./images/Baik_Urkunde.gif
+sig_obj.BAIK_URKUNDE_SIGNATUR.value.SIG_TITLE=ELEKTRONISCHE BEURKUNDUNGSSIGNATUR
+
+sig_obj.BAIK_URKUNDE_SIGNATUR.phlength.SIG_META=50
+sig_obj.BAIK_URKUNDE_SIGNATUR.phlength.SIG_SIG_LABEL=200
+
+sig_obj.BAIK_URKUNDE_SIGNATUR.value.SIG_SIG_LABEL=${subject.CN}${subject.O != null ? ("\n" + subject.O) : ""}${subject.L != null ? ("\nKanzleisitz: " + subject.L) : ""}
+
+#---------------------- MAIN TABLE -------------------------
+sig_obj.BAIK_URKUNDE_SIGNATUR.table.main.1=SIG_TITLE-v
+sig_obj.BAIK_URKUNDE_SIGNATUR.table.main.2=SIG_VALUE-cv
+sig_obj.BAIK_URKUNDE_SIGNATUR.table.main.3=SIG_LABEL-i|TABLE-info
+sig_obj.BAIK_URKUNDE_SIGNATUR.table.main.4=SIG_META-cv
+
+sig_obj.BAIK_URKUNDE_SIGNATUR.table.main.ColsWidth=1 5
+sig_obj.BAIK_URKUNDE_SIGNATUR.table.main.Style.bgcolor=248 254 150
+sig_obj.BAIK_URKUNDE_SIGNATUR.table.main.Style.padding=4
+sig_obj.BAIK_URKUNDE_SIGNATUR.table.main.Style.border=0.1
+sig_obj.BAIK_URKUNDE_SIGNATUR.table.main.Style.halign=center
+sig_obj.BAIK_URKUNDE_SIGNATUR.table.main.Style.valuehalign=left
+sig_obj.BAIK_URKUNDE_SIGNATUR.table.main.Style.valign=middle
+sig_obj.BAIK_URKUNDE_SIGNATUR.table.main.Style.imagevalign=middle
+sig_obj.BAIK_URKUNDE_SIGNATUR.table.main.Style.font=TTF:DejaVuSansCondensed.ttf,8
+sig_obj.BAIK_URKUNDE_SIGNATUR.table.main.Style.valuefont=TTF:DejaVuSansCondensed.ttf,8
+
+#---------------------- INFO TABLE -------------------------
+sig_obj.BAIK_URKUNDE_SIGNATUR.table.info.ColsWidth=1 4
+sig_obj.BAIK_URKUNDE_SIGNATUR.table.info.Style.halign=left
+sig_obj.BAIK_URKUNDE_SIGNATUR.table.info.Style.valuehalign=left
+
+#sig_obj.BAIK_URKUNDE_SIGNATUR.table.info.1=SIG_NAME-cv
+sig_obj.BAIK_URKUNDE_SIGNATUR.table.info.1=SIG_SIG_LABEL-cv
+sig_obj.BAIK_URKUNDE_SIGNATUR.table.info.2=SIG_DATE-cv
+sig_obj.BAIK_URKUNDE_SIGNATUR.table.info.3=SIG_ISSUER-cv
+sig_obj.BAIK_URKUNDE_SIGNATUR.table.info.4=SIG_NUMBER-cv
+sig_obj.BAIK_URKUNDE_SIGNATUR.table.info.5=SIG_ALG-cv
+sig_obj.BAIK_URKUNDE_SIGNATUR.table.info.6=SIG_KZ-cv
diff --git a/pdf-as-lib/src/test/resources/at/knowcenter/wag/egov/egiz/cfg/subdir1/subdir2/profile.MISC.properties b/pdf-as-lib/src/test/resources/at/knowcenter/wag/egov/egiz/cfg/subdir1/subdir2/profile.MISC.properties
new file mode 100644
index 0000000..9007eda
--- /dev/null
+++ b/pdf-as-lib/src/test/resources/at/knowcenter/wag/egov/egiz/cfg/subdir1/subdir2/profile.MISC.properties
@@ -0,0 +1 @@
+include=subdir3/*.properties
diff --git a/pdf-as-lib/src/test/resources/at/knowcenter/wag/egov/egiz/cfg/subdir1/subdir2/subdir3/profile.INVISIBLE.properties b/pdf-as-lib/src/test/resources/at/knowcenter/wag/egov/egiz/cfg/subdir1/subdir2/subdir3/profile.INVISIBLE.properties
new file mode 100644
index 0000000..ad2b6a5
--- /dev/null
+++ b/pdf-as-lib/src/test/resources/at/knowcenter/wag/egov/egiz/cfg/subdir1/subdir2/subdir3/profile.INVISIBLE.properties
@@ -0,0 +1,14 @@
+###################################################################################################
+# PROFIL: Unsichtbarer Signaturblock
+
+sig_obj.INVISIBLE.description=Unsichtbarer Signaturblock
+
+sig_obj.types.INVISIBLE=on
+
+sig_obj.INVISIBLE.adobeSignFieldValue=PDF-AS Signatur
+sig_obj.INVISIBLE.adobeSignReasonValue=Informationen zur Pr\u00fcfung finden Sie unter http://www.signaturpruefung.gv.at
+
+# Platzhaltersuche f\u00fcr dieses Profil deaktivieren
+sig_obj.INVISIBLE.enable_placeholder_search=false
+
+sig_obj.INVISIBLE.verifyURL=http://www.signaturpruefung.gv.at
diff --git a/pdf-as-lib/src/test/resources/at/knowcenter/wag/egov/egiz/cfg/subdir1/subdir2/subdir3/profile.VARIABLER_AMTSSIGNATURBLOCK_DE.properties b/pdf-as-lib/src/test/resources/at/knowcenter/wag/egov/egiz/cfg/subdir1/subdir2/subdir3/profile.VARIABLER_AMTSSIGNATURBLOCK_DE.properties
new file mode 100644
index 0000000..a47cb3e
--- /dev/null
+++ b/pdf-as-lib/src/test/resources/at/knowcenter/wag/egov/egiz/cfg/subdir1/subdir2/subdir3/profile.VARIABLER_AMTSSIGNATURBLOCK_DE.properties
@@ -0,0 +1,62 @@
+###################################################################################################
+# PROFIL: Zus\u00e4tzlicher Amtssignaturblock (Deutsch) mit neuem Layout
+# Unterzeichner Musteramt
+
+sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.description=Variabler Amtssignaturblock-Deutsch, neues Layout
+
+sig_obj.types.VARIABLER_AMTSSIGNATURBLOCK_DE=on
+
+sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.key.SIG_VALUE=Signaturwert
+sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.key.SIG_SUBJECT=Unterzeichner
+sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.key.SIG_ISSUER=Aussteller-Zertifikat
+sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.key.SIG_NUMBER=Serien-Nr.
+sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.key.SIG_KZ=Methode
+sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.key.SIG_ID=Parameter
+sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.key.SIG_META=Pr\u00fcfinformation
+sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.key.SIG_NOTE=Hinweis
+sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.key.SIG_DATE=Datum/Zeit-UTC
+
+sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.phlength.SIG_SUBJECT=200
+sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.phlength.SIG_ISSUER=130
+sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.phlength.SIG_NUMBER=30
+sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.phlength.SIG_ID=30
+sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.value.SIG_SUBJECT=F\u00fcr die Richtigkeit der Ausfertigung:\nMusteramt\nMusterstadt
+#sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.moa.sign.KeyIdentifier=MusteramtatrustKey
+
+sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.pos=f:80
+sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.adobeSignFieldValue=PDF-AS Signatur
+sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.adobeSignReasonValue=Informationen zur Pr\u00fcfung finden Sie unter http://www.signaturpruefung.gv.at
+sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.verifyURL=http://www.signaturpruefung.gv.at
+
+# WAI
+sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.sigLogoAltText=Abgebildet ist eine Standard-Signaturbildmarke.
+
+sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.value.SIG_META=Informationen zur Pr\u00fcfung der elektronischen Signatur finden Sie unter: http://www.signaturpruefung.gv.at\nInformationen zur Pr\u00fcfung des Ausdrucks finden Sie unter: http://musteramt.musterstadt.gv.at
+sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.value.SIG_LABEL=./images/signatur-logo_de.png
+sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.value.SIG_NOTE=Dieses Dokument wurde amtssigniert. Auch ein Ausdruck dieses Dokuments hat gem\u00e4\u00df \u00a7 20 E-Government-Gesetz die Beweiskraft einer \u00f6ffentlichen Urkunde.
+
+#---------------------- MAIN TABLE -------------------------
+sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.table.main.1=SIG_VALUE-cv
+sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.table.main.2=SIG_LABEL-i|TABLE-info
+sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.table.main.3=SIG_META-cv
+sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.table.main.4=SIG_NOTE-cv
+sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.table.main.5=SIG_DATE-cv
+
+sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.table.main.ColsWidth=1 6
+sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.table.main.Style.bgcolor=255 255 255
+sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.table.main.Style.padding=4
+sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.table.main.Style.border=0.1
+sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.table.main.Style.halign=center
+sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.table.main.Style.valuehalign=left
+sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.table.main.Style.valign=top
+sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.table.main.Style.imagevalign=middle
+sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.table.main.Style.font=HELVETICA,8,BOLD
+sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.table.main.Style.valuefont=COURIER,8,NORMAL
+
+#---------------------- INFO TABLE -------------------------
+sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.table.info.ColsWidth=1 4
+sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.table.info.1=SIG_SUBJECT-cv
+sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.table.info.2=SIG_ISSUER-cv
+sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.table.info.3=SIG_NUMBER-cv
+sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.table.info.4=SIG_KZ-cv
+sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.table.info.5=SIG_ID-cv
diff --git a/pdf-as-lib/src/test/resources/at/knowcenter/wag/egov/egiz/signaturelayout/cfg/config.properties b/pdf-as-lib/src/test/resources/at/knowcenter/wag/egov/egiz/signaturelayout/cfg/config.properties
new file mode 100644
index 0000000..8bf986b
--- /dev/null
+++ b/pdf-as-lib/src/test/resources/at/knowcenter/wag/egov/egiz/signaturelayout/cfg/config.properties
@@ -0,0 +1 @@
+# an empty configuration file in order to test internal default configuration
diff --git a/pdf-as-lib/src/test/resources/log4j.properties b/pdf-as-lib/src/test/resources/log4j.properties
new file mode 100644
index 0000000..1f3b017
--- /dev/null
+++ b/pdf-as-lib/src/test/resources/log4j.properties
@@ -0,0 +1,13 @@
+log4j.rootLogger = INFO, CONSOLE
+
+# DETAIL LEVELS
+#log4j.logger.at.gv.egiz.pdfas = DEBUG
+#log4j.logger.at.knowcenter = DEBUG
+log4j.logger.org.apache.commons.httpclient.HttpMethodBase = ERROR
+log4j.logger.at.knowcenter.wag.egov.egiz.cfg.SettingsReader = INFO
+
+# CONSOLE
+log4j.appender.CONSOLE = org.apache.log4j.ConsoleAppender
+log4j.appender.CONSOLE.layout = org.apache.log4j.PatternLayout
+log4j.appender.CONSOLE.layout.ConversionPattern = [%-5p@%d{dd.MM.yyyy HH:mm:ss}] %c:%M:%L - %m%n
+log4j.appender.CONSOLE.Target = System.out
diff --git a/pdf-as-release/pom.xml b/pdf-as-release/pom.xml
index 7892ba4..9f05354 100644
--- a/pdf-as-release/pom.xml
+++ b/pdf-as-release/pom.xml
@@ -5,7 +5,7 @@
<modelVersion>4.0.0</modelVersion>
<parent>
- <groupId>at.gv.egiz</groupId>
+ <groupId>eu.europa.ec.joinup.egovlabs.pdf-as</groupId>
<artifactId>pdf-as</artifactId>
<version>3.3-SNAPSHOT</version>
</parent>
@@ -47,18 +47,20 @@
<dependencies>
<dependency>
- <groupId>at.gv.egiz</groupId>
+ <groupId>eu.europa.ec.joinup.egovlabs.pdf-as</groupId>
<artifactId>pdf-as-lib</artifactId>
</dependency>
<dependency>
- <groupId>at.gv.egiz</groupId>
+ <groupId>eu.europa.ec.joinup.egovlabs.pdf-as</groupId>
<artifactId>pdf-as-web</artifactId>
+ <type>war</type>
</dependency>
<dependency>
- <groupId>at.gv.egiz</groupId>
+ <groupId>eu.europa.ec.joinup.egovlabs.pdf-as</groupId>
<artifactId>pdf-as-cli</artifactId>
+ <type>pom</type>
</dependency>
</dependencies>
diff --git a/pdf-as-release/src/main/assembly/release.xml b/pdf-as-release/src/main/assembly/release.xml
index afb2f82..62f39d0 100644
--- a/pdf-as-release/src/main/assembly/release.xml
+++ b/pdf-as-release/src/main/assembly/release.xml
@@ -5,6 +5,8 @@
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2 http://maven.apache.org/xsd/assembly-1.1.2.xsd">
+ <!-- Just assembles pdf-as library, pdf-as commandline und pdf-as webapp. -->
+
<id>release</id>
<formats>
@@ -14,32 +16,49 @@
<includeBaseDirectory>false</includeBaseDirectory>
<moduleSets>
+
+ <!-- Add pdf-as web application WAR. -->
<moduleSet>
<useAllReactorProjects>true</useAllReactorProjects>
<includes>
- <include>at.gv.egiz:pdf-as-web</include>
+ <include>eu.europa.ec.joinup.egovlabs.pdf-as:pdf-as-web</include>
</includes>
<binaries>
<includeDependencies>false</includeDependencies>
<unpack>false</unpack>
</binaries>
</moduleSet>
+
</moduleSets>
<fileSets>
-
+
+ <!-- Add pdf-as-cli release. -->
<fileSet>
<directory>../pdf-as-cli/target</directory>
<includes>
<include>*.zip</include>
+ <include>*.tar.gz</include>
</includes>
<outputDirectory />
</fileSet>
-
+
+ <!-- Add pdf-as-lib release. -->
<fileSet>
<directory>../pdf-as-lib/target</directory>
<includes>
<include>*.zip</include>
+ <include>*.tar.gz</include>
+ </includes>
+ <outputDirectory />
+ </fileSet>
+
+ <!-- Add pdf-as-web release. -->
+ <fileSet>
+ <directory>../pdf-as-web/target</directory>
+ <includes>
+ <include>*.zip</include>
+ <include>*.tar.gz</include>
</includes>
<outputDirectory />
</fileSet>
diff --git a/pdf-as-web/pom.xml b/pdf-as-web/pom.xml
index aa4fe57..5b9fbe0 100644
--- a/pdf-as-web/pom.xml
+++ b/pdf-as-web/pom.xml
@@ -1,12 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
- <groupId>at.gv.egiz</groupId>
+ <groupId>eu.europa.ec.joinup.egovlabs.pdf-as</groupId>
<artifactId>pdf-as</artifactId>
<version>3.3-SNAPSHOT</version>
</parent>
@@ -17,10 +16,100 @@
<name>PDF-AS Web</name>
<description>Webapplikation zur Amtssignatur fuer elektronische Aktenfuehrung</description>
+ <build>
+
+ <pluginManagement>
+
+ <plugins>
+
+ <!-- This plugin's configuration is used to store Eclipse m2e settings only.
+ It has no influence on the Maven build itself. -->
+ <plugin>
+ <groupId>org.eclipse.m2e</groupId>
+ <artifactId>lifecycle-mapping</artifactId>
+ <version>1.0.0</version>
+ <configuration>
+ <lifecycleMappingMetadata>
+ <pluginExecutions>
+ <pluginExecution>
+ <pluginExecutionFilter>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-dependency-plugin</artifactId>
+ <versionRange>[2.6,)</versionRange>
+ <goals>
+ <goal>unpack</goal>
+ </goals>
+ </pluginExecutionFilter>
+ <action>
+ <ignore></ignore>
+ </action>
+ </pluginExecution>
+ </pluginExecutions>
+ </lifecycleMappingMetadata>
+ </configuration>
+ </plugin>
+
+ </plugins>
+
+ </pluginManagement>
+
+ <plugins>
+
+ <plugin>
+ <artifactId>maven-dependency-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>unpack-tomcat</id>
+ <phase>process-sources</phase>
+ <goals>
+ <goal>unpack</goal>
+ </goals>
+ <configuration>
+ <artifactItems>
+ <!-- Download Apache Tomcat from Maven2 central repository. -->
+ <artifactItem>
+ <groupId>org.apache.tomcat</groupId>
+ <artifactId>tomcat</artifactId>
+ <version>${tomcat.version}</version>
+ <type>zip</type>
+ <overWrite>false</overWrite>
+ <outputDirectory>${project.build.directory}/tomcat</outputDirectory>
+ </artifactItem>
+ </artifactItems>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-assembly-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>make-assembly</id>
+ <phase>package</phase>
+ <goals>
+ <goal>single</goal>
+ </goals>
+ </execution>
+ </executions>
+ <configuration>
+ <descriptors>
+ <descriptor>src/main/assembly/tomcat/default.xml</descriptor>
+ </descriptors>
+ <appendAssemblyId>false</appendAssemblyId>
+ <finalName>apache-tomcat-${tomcat.version}-${project.artifactId}-${project.version}</finalName>
+ </configuration>
+ </plugin>
+
+ </plugins>
+
+ </build>
+
<dependencies>
<dependency>
- <groupId>at.gv.egiz</groupId>
+ <groupId>eu.europa.ec.joinup.egovlabs.pdf-as</groupId>
<artifactId>pdf-as-lib</artifactId>
</dependency>
diff --git a/pdf-as-web/src/main/assembly/tomcat/ROOT/index.html b/pdf-as-web/src/main/assembly/tomcat/ROOT/index.html
new file mode 100644
index 0000000..91980b2
--- /dev/null
+++ b/pdf-as-web/src/main/assembly/tomcat/ROOT/index.html
@@ -0,0 +1,14 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+ <meta http-equiv="refresh" content="0; URL=/pdf-as/" />
+ <title>Apache Tomcat ${tomcat.version} - PDF-AS ${project.version}</title>
+ </head>
+
+ <body>
+ <h1>Apache Tomcat ${tomcat.version} - PDF-AS ${project.version}</h1>
+ <p><a href="/pdf-as/">PDF-AS</a></p>
+ </body>
+
+</html> \ No newline at end of file
diff --git a/pdf-as-web/src/main/assembly/tomcat/configuration/default/Catalina/localhost/pdf-as.xml b/pdf-as-web/src/main/assembly/tomcat/configuration/default/Catalina/localhost/pdf-as.xml
new file mode 100644
index 0000000..6d79b26
--- /dev/null
+++ b/pdf-as-web/src/main/assembly/tomcat/configuration/default/Catalina/localhost/pdf-as.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Context path="/pdf-as" cookies="true" reloadable="false" useHttpOnly="true">
+
+ <Manager pathname="" />
+
+ <!-- Use system property "pdf-as.work-dir" or web.xml parameter "work-dir" instead. -->
+ <!--
+ <Parameter name="work-dir" value="${catalina.base}/conf/pdf-as" override="false"/>
+ -->
+
+ <!-- Enable BOTH environment variables in order to apply www.buergerkarte.at layout. -->
+ <!-- This overrides /WEB-INF/decorators.xml settings. -->
+ <!--
+ <Environment name="production_de" value="/sitemesh/buergerkarte_at.jsp?lang=de" type="java.lang.String" />
+ <Environment name="production_en" value="/sitemesh/buergerkarte_at.jsp?lang=en" type="java.lang.String" />
+ -->
+
+</Context>
diff --git a/pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/cfg/advancedconfig.properties b/pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/cfg/advancedconfig.properties
new file mode 100644
index 0000000..b378183
--- /dev/null
+++ b/pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/cfg/advancedconfig.properties
@@ -0,0 +1,273 @@
+######################################################################
+# Fortgeschrittene PDF-AS Konfiguration
+#
+# Hier koennen fortgeschrittene Einstellungen getaetigt werden.
+# Die hier angefuehrten Eigenschaften werden grundsaetzlich durch die
+# interne Standard-Konfiguration abgedeckt und sind deshalb hier
+# lediglich als Kommentare ausgefuehrt. Die Werte entsprechen jenen
+# der Standard-Konfiguration.
+# Diese Konfiguration muss in config.properties via include-
+# Instruktion eingebunden werden:
+# include.advancedconfig = advancedconfig.properties
+#####################################################################
+
+
+# Betrifft Signieren:
+# Stellt sicher, dass das verarbeitete Dokument mindestens PDF 1.4 entspricht.
+
+#strict_mode=false
+
+
+# Betrifft Signieren:
+# Wenn das Dokument nicht verarbeitet werden kann wird versucht es
+# zuerst zu korrigieren und dann das korrigierte Dokument zu signieren.
+
+#correct_document_if_necessary=true
+
+
+# Betrifft Verifizieren:
+# Wenn das Dokument nicht verarbeitet werden kann wird versucht es
+# zuerst zu korrigieren und dann das korrigierte Dokument zu verifizieren.
+# Dies kann nur fuer textuelle Signaturen erfolgreich sein.
+
+#correct_document_on_verify_if_necessary=true
+
+
+# Wenn ein Dokument korrigiert werden soll:
+# Gibt an mit welchem Corrector ein zu korrigierendes Dokument korrigiert wird:
+# internal - das Dokument wird mit dem "internen" iText Corrector korrigiert
+# external - das Dokument wird durch einen externen Kommandozeilenaufruf korrigiert.
+# Hinweis: ein externes Programm aufzurufen birgt gewisse Risiken in sich
+# und sollte daher moeglichst nicht verwendet werden.
+
+#corrector=internal
+
+
+# Kommandozeile fuer den externen Connector.
+# Die Variablen ##input_document## bzw. ##output_document## werden von PDF-AS
+# durch die absoluten Pfad- und Dateinamen des zu korrigierenden bzw. des
+# korrigierten Dokuments ersetzt.
+# Als Pfad-Separator sollte '/' verwendet werden.
+
+#external_corrector_commandline=C:/correct.exe "##input_document##" "##output_document##"
+
+
+# Timeout (ms) fuer die Ausfuehrung des externen Correctors.
+# Das Kommando wird abgebrochen, wenn das Timeout erreicht wird bevor
+# das Kommando abgearbeitet wurde.
+# Achtung: Es besteht allerdings keine Garantie, dass der Korrekturvorgang auch tatsaechlich
+# durch ein Timeout abgebrochen wird. Dies ist im Wesentlichen abhaengig von der Beschaffenheit
+# des Korrekturprogramms sowie vom verwendeten Betriebssystem.
+
+#external_corrector_timeout=15000
+
+
+# Aktiviert, oder deaktiviert grundsaetzlich das - potenziell zeit- und ressourcen-aufwaendige
+# Suchen nach Platzhalter-Bildern in PDF-Dokumenten
+# Festlegung fuer einzelnes Profil
+# sig_obj.PROFILE.enable_placeholder_search=[true|false]
+# Die Suche ist standardmaessig aus Sicherheitsgruenden deaktiviert (Defaultwert hier = false)
+# Es muss bewusst sein, dass ueber einen Platzhalter benutzerseitig bestimmte Profile zur Signatur
+# ausgewaehlt werden koennen!
+
+#enable_placeholder_search=false
+
+
+# Ueberpruefe Korrektheit des Dokuments
+# bei binary_only=true: Fehler falls textuelle Signatur
+# bei assume_only_signature_blocks=false: Fehler falls inkrementelle Updates nach Signatur
+# In beiden Faellen wird check_old_textual_sigs beruecksichtigt.
+
+#check_document=true
+
+
+# Falls der letzte inkrementelle Updateblock keine Signatur enthaelt wuerde sofern
+# check_document=true gesetzt ist eine Exception geworfen werden und die Pruefung
+# abgebrochen werden. Mit diesem Schalter ist es moeglich, diese Exception zu
+# unterdruecken, um die Auswertung extern vornehmen zu koennen (standard: false)
+
+#supress_exception_when_last_iublock_is_no_signature=false
+
+
+# VerificationFilterParameters
+
+#binary_only=false
+#assume_only_signature_blocks=false
+#check_old_textual_sigs=true
+
+
+
+##################
+# Signaturdienste
+
+
+## Lokale BKU
+
+#bku.available_for_web=true
+#bku.available_for_commandline=true
+#bku.sign.KeyboxIdentifier=SecureSignatureKeypair
+
+
+## Online BKU (MOCCA)
+
+#moc.available_for_web=true
+#moc.available_for_commandline=false
+#moc.sign.KeyboxIdentifier=SecureSignatureKeypair
+
+
+## Handy
+
+#mobile.sign.KeyboxIdentifier=SecureSignatureKeypair
+#mobiletest.sign.KeyboxIdentifier=SecureSignatureKeypair
+
+
+## MOA
+
+#moa.available_for_web=true
+#moa.available_for_commandline=true
+
+# MOA Detached Signieren aus Konsole moeglich - zurzeit moeglich nur mit BKU
+
+#moa.sign.console.detached.enabled=false
+
+
+
+#########################################################
+# Standardfeldlaengen der Felder fuer die Binaersignatur
+
+
+# Reservierte Anzahl Bytes fuer den Signaturparameter
+# z.B. etsi-moc-1.1:ecdsa-sha256@669ee461
+# etsi-bka-atrust-1.0:ecdsa-sha256:sha256:sha256:sha1
+
+#defaults.phlength.SIG_ID=70
+
+
+# Reservierte Anzahl an Bytes fuer den Signaturalgorithmus
+# (relevant fuer BAIK-Signaturen)
+# z.B. http://www.w3.org/2001/04/xmldsig-more#ecdsa-sha256
+
+#defaults.phlength.SIG_ALG=100
+
+
+# Reservierte Anzahl an Bytes fuer den Signatornamen, falls SIG_NAME anstelle von SIG_SUBJECT verwendet wird.
+
+#defaults.phlength.SIG_NAME=210
+
+
+# Binaersignatur: reservierter Platz fuer Zertifikat
+# profilweise: sig_obj.PROFILE.phlength.certificate=xyz
+
+#defaults.phlength.certificate=10000
+
+
+# Binaersignatur: reservierte Platz fuer Zeitstempel
+# profilweise: sig_obj.PROFILE.phlength.timestamp=xyz
+
+#defaults.phlength.timestamp=5000
+
+
+# Standardgroesse des Fensters innerhalb dessen Zeilenumbrueche gesetzt werden duerfe.
+# profilweise: sig_obj.PROFILE.phlength.line_break_tolerance=xyz
+
+#defaults.phlength.line_break_tolerance=10
+
+
+# Falls die Breite eines Signaturblocks definiert wird (ueber API, Commandline oder ueber das Profil),
+# die unterhalb eines sinnvollen Wertes liegt, dann wird im Log eine Warnung ausgegeben, da
+# Signaturbloecke unter Umstaenden nicht mehr sinnvoll dargestellt werden koennen.
+# Der Standard-Schwellwert fuer diese Warnungen (= 150) kann global oder profilweise festgelegt
+# werden (z.B. um die Warnung zu deaktivieren, kann der Wert auf 0 gesetzt werden).
+# sig_obj.PROFILE.signature_block_width_warning_threshold=xyz
+
+#default.signature_block_width_warning_threshold=150
+
+
+# PDF/A-1b Unterstuetzung fuer alle Profile einschalten
+
+#default.SIG_PDFA1B_VALID=false
+
+
+# BAIK-Signatur Unterstuetzung fuer alle Profile einschalten
+
+#default.SIG_BAIK_ENABLED=false
+
+
+
+#############################################
+# Signaturkennzeichnung (fuer Adobe Acrobat)
+
+
+# Standard Name fuer die Signaturkennzeichnung (binaer)
+
+#default.adobeSignText.binary=PDF-AS
+
+
+# Standard Name fuer die Signaturkennzeichnung (binaer)
+
+#default.adobeSignText.textual=PDF-AS
+
+
+# Standard-Name fuer die PDF-Signatur
+
+#default.adobeSignFieldValue=PDF-AS Signatur
+
+
+# Standardwert fuer "Reason"-Feld der jeweiligen Signatur
+
+#default.adobeSignReasonValue=Informationen zur Pr\u00FCfung finden Sie unter http://www.signaturpruefung.gv.at
+
+
+# Standard Prueflink fuer die Adobe Signaturkennzeichnung (nur relevant falls Adobe Plugin fuer Pruefung verwendet wird)
+
+#default.verifyURL=http://www.signaturpruefung.gv.at
+
+
+# Standard Alternativer Text fuer den Signaturblock (WAI) (globale Einstellung)
+
+#default.sigLogoAltText=Abgebildet ist eine Standard-Signaturbildmarke.
+
+
+
+########################################
+# Unterstuetzte Buergerkartenumgebungen
+# Da sich die Signaturen verschiedener Buergerkartenumgebungen unterscheiden, sind fuer die zum Zeitpunkt des Releases
+# bekannten Auspraegungen in PDF-AS entsprechende Templates hinterlegt. Welche Templates verwendet werden bzw. welche
+# Buergerkartenumgebung jeweils vorliegt wird ueber einen Identifier aus dem Response-Header "User-Agent" bzw. "Server"
+# (http://www.buergerkarte.at/konzept/securitylayer/spezifikation/aktuell/bindings/bindings.html#http.kodierung.response)
+# festgestellt.
+#
+# z.B.
+# citizen-card-environment/1.2 asignSecurityLayer/1.4.2
+# weist auf eine Signatur der lokalen A-Trust Buergerkartenumgebung (mit der Version 1.4.2) hin.
+#
+# Das Mapping dazu kann hier wie folgt gesetzt werden:
+# signaturelayout.pattern.XXX=^citizen-card-environment/1\\.2 asignSecurityLayer/((1\\.3\\.3)|(1\\.4\\.[1-2]))$
+# signaturelayout.implementation.XXX=at.knowcenter.wag.egov.egiz.sig.signaturelayout.atrust.ATrustSignatureLayoutHandler
+#
+# Dieses besteht jeweils aus zwei Eintraegen: Einem regulaerem Ausdruck, der den BKU-Identifier abbildet und der
+# Angabe einer Handler-Implementierung. ("XXX" im Konfigurationsschluessel sollte durch einen eindeutigen Bezeichner
+# wie z.B. "atrustbku" ersetzt werden.)
+
+
+
+#############################################
+# LDAP-Konfiguration
+# Fuer eine Signaturpruefung wird das verwendete Signaturzertifikat benoetigt.
+# Dieses steht bei binaeren Signaturen automatisch zu Verfuegung, textuelle Signaturen
+# beinhalten allerdings nur eine Referenz auf das betreffende Signaturzertifikat in Form
+# von Auststellernamen+Seriennummer.
+# Deshalb wird bei der Pruefung textueller Signaturen versucht, das erforderliche Zertifikat
+# von den Verzeichnisdiensten der jeweiligen Zertifizierungsdiensteanbieter (ZDA) zu holen.
+# Die interne PDF-AS Konfiguration enthaelt bereits eine Reihe Einstellung fuer die
+# Verzeichnisdienste der bekannten ZDAs.
+# Hier koennen weitere LDAP-Dienste registriert werden. Es wird dabei jeweils ein
+# Ausstellername auf einen LDAP-Dienst abgebildet.
+#
+# z.B.
+# ldap_mapping.NAME.issuer_name=CN=a-sign-Premium-Sig-01,OU=a-sign-Premium-Sig-01,O=A-Trust Ges. f. Sicherheitssysteme im elektr. Datenverkehr GmbH,C=AT
+# ldap_mapping.NAME.url=ldap://ldap.a-trust.at/ou=a-sign-Premium-Sig-01,o=A-Trust,c=at
+# ldap_mapping.NAME.serial_attr=eidCertificateSerialNumber
+#
+# NAME kann frei gewaehlt werden, sollte jedoch unverwechselbar und eindeutig sein.
+# z.B. im Falle des o.g. Beispiels: ldap_mapping.asign_prem_sig01.issuer_name=...
diff --git a/pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/cfg/config.properties b/pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/cfg/config.properties
new file mode 100644
index 0000000..3ed7ca1
--- /dev/null
+++ b/pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/cfg/config.properties
@@ -0,0 +1,156 @@
+######################################################################
+# PDF-AS Konfiguration
+#
+# Diese Datei enthaelt empfohlene Einstellungen fuer PDF-AS.
+#
+# Hinweis: Hier werden die wichtigsten Einstellungsmoeglichkeiten
+# angeboten. Eine fortgeschrittene Konfiguration ist ueber die Datei
+# advancedconfig.properties moeglich, die mit der Include-Anweisung:
+# include.advancedconfig = advancedconfig.properties eingebunden
+# eingebunden werden kann.
+######################################################################
+
+
+
+##################
+# Signaturdienste
+# Hier werden die verwendbaren Signaturdienste (Lokale BKU, Online BKU, Handy-Signatur, MOA)
+# angefuehrt.
+
+##
+# Lokal installierte Buergerkartensoftware
+# ohne SSL: http://127.0.0.1:3495/http-security-layer-request
+# mit SSL : https://127.0.0.1:3496/https-security-layer-request
+# Signatur
+bku.sign.url=http://127.0.0.1:3495/http-security-layer-request
+# Verifikation
+bku.verify.url=http://127.0.0.1:3495/http-security-layer-request
+
+##
+# Online BKU (MOCCA)
+# Signatur
+moc.sign.url=http://127.0.0.1:8080/bkuonline/http-security-layer-request
+
+##
+# Handy-Signatur
+# Signaturservice URL
+mobile.sign.url=https://www.handy-signatur.at/mobile/https-security-layer-request/default.aspx
+
+##
+# Handy Signatur (Test)
+# Signaturservice URL
+mobiletest.sign.url=https://test1.a-trust.at/https-security-layer-request/default.aspx
+
+##
+# MOA Signatur
+# Signaturservice URL
+moa.sign.url=http://localhost:8080/moa-spss/services/SignatureCreation
+# Identifier fuer den zu verwendenden serverseitig hinterlegten Signaturschluessel.
+# Siehe auch http://joinup.ec.europa.eu/site/moa-idspss/moa-spss-1.5.1/doc/handbook/config/config.html#konfigurationsparameter_ss
+moa.sign.KeyIdentifier=KG_allgemein
+
+##
+# MOA Verifikation
+# Verifikationsservice URL
+moa.verify.url=http://localhost:8080/moa-spss/services/SignatureVerification
+# Identifier des zu verwendenden Vertrauensprofils fuer die Signaturpruefung.
+# Siehe auch http://joinup.ec.europa.eu/site/moa-idspss/moa-spss-1.5.1/doc/handbook/config/config.html#konfigurationsparameter_sp_certificatevalidation_pathvalidation_trustprofile
+moa.verify.TrustProfileID=SecureSignature
+
+
+#########################################################
+# Standardfeldlaengen der Felder fuer die Binaersignatur
+# Bei Binaersignaturen werden Daten, die sich erst nach dem Ausloesen der Signatur ergeben, wie
+# z.B. Unterzeichnername, Signaturzeitpunkt etc., NACH Aufbringen der Signatur in das Dokument
+# eingefuegt. Hierfuer muss jedoch VOR der Signatur bereits der erforderliche Platz reserviert
+# werden. Dies erfolgt ueber die *phlength.SIG_* Parameter.
+# Hinweis: Je groesser der Wert eines im Signaturblock dargestellten Feldes gewaehlt wird, desto
+# groesser wird auch der Signaturblock. Ein zu kleiner Wert kann dazu fuehren, dass
+# einzelne Daten keinen Platz finden und der Signaturvorgang scheitert.
+
+# Reservierte Anzahl an Zeichen fuer den Signaturzeitpunkt (z.B. 2013-02-08T10:52:26+01:00)
+defaults.phlength.SIG_DATE=70
+
+# Reservierte Anzahl an Zeichen fuer die Seriennummer des Zertifikats.
+defaults.phlength.SIG_NUMBER=70
+
+# Reservierte Anzahl an Zeichen fuer den Aussteller-Namen
+defaults.phlength.SIG_ISSUER=150
+
+# Reservierte Anzahl an Zeichen fuer den Signaturwert
+defaults.phlength.SIG_VALUE=350
+
+# Reservierte Anzahl an Zeichen fuer den Unterzeichnernamen
+# Es moeglich, den Namen des Signators dynamisch aus Informationen des verwendeten Zertifikats
+# zusammenzusetzen. Konkret kann auf die einzelnen RDN Teile des Issuer DN und des Subject DN
+# des Signaturzertifikats wie im folgenden Beispiel illustriert zugegriffen werden:
+#
+# (1) sig_obj.PROFIL.value.SIG_SUBJECT= ${subject.CN}${subject.O != null ? ("\n" + subject.O) : ""}
+# (2) sig_obj.PROFIL.value.SIG_SUBJECT= ${subject.T \!\= null ? (subject.T + " ") \: ""}${subject.CN}
+#
+# Beispiel (1) gibt die Organisation des Unterzeichners an, Beispiel (2) Titel und Name.
+#
+# Die Notation ${..} ermoeglicht die dynamische Auswertung eines Ausdrucks. Verfuegbar sind "subject"
+# und "issuer" und die im Zertifikat-DN vorhandenen RDNs.
+#
+# Achtung:
+# Fuer die binaere Signatur muss die maximale Anzahl zu erwartender Zeichen in der globalen Einstellung
+# defaults.phlength.SIG_SUBJECT=...
+# bzw. profileweise via
+# sig_obj.PROFIL.phlength.SIG_SUBJECT=...
+# festgelegt werden.
+defaults.phlength.SIG_SUBJECT=128
+
+
+# Bietet die Moeglichkeit, eine fortgeschrittene Konfiguration einzubinden.
+include.advancedconfig = advancedconfig.properties
+
+
+#####################################################################################################
+# Unterstuetzte Signaturprofile
+# Hinweise zum Include-Mechanismus:
+# - Pfade sind relativ zu dieser Konfigurationsdatei zu setzen.
+# - Es koennen Wildcards verwendet werden.
+# z.B. include = profiles/*AMTSSIGNATURBLOCK*.properties
+# - Bei mehrfachen Include-Anweisungen ist darauf zu achten, dass die Include-Keys eindeutig sind.
+# Dazu sollte ein beliebiger Bezeichner an "include." angehaengt werden.
+# z.B. include.standard = profiles/SIGNATURBLOCK*.properties
+# include.amtssignatur = profiles/*AMTSSIGNATUR*.properties
+# - Include-Keys werden lexikografisch sortiert, bevor die Include-Anweisungen ausgefuehrt werden.
+# Dadurch kann eine Reihenfolge der Includes vorgegeben werden.
+#
+# Anm.: profiles/SIGNATURBLOCK_DE.properties enthaelt Erlaeuterungen in Hinblick auf die
+# Konfiguration einzelner Profile.
+
+# Standard-Profile
+include.01 = profiles/INVISIBLE.properties
+include.02 = profiles/SIGNATURBLOCK_DE.properties
+include.03 = profiles/SIGNATURBLOCK_DE_DEPRECATED.properties
+include.04 = profiles/SIGNATURBLOCK_DE_NOTE.properties
+include.05 = profiles/SIGNATURBLOCK_DE_PDFA.properties
+include.06 = profiles/SIGNATURBLOCK_DE_PDFA_NOTE.properties
+include.07 = profiles/SIGNATURBLOCK_EN.properties
+include.08 = profiles/SIGNATURBLOCK_EN_DEPRECATED.properties
+include.09 = profiles/SIGNATURBLOCK_EN_NOTE.properties
+include.10 = profiles/SIGNATURBLOCK_EN_PDFA.properties
+include.11 = profiles/SIGNATURBLOCK_EN_PDFA_NOTE.properties
+include.12 = profiles/SIGNATURBLOCK_MINIMAL_DE.properties
+include.13 = profiles/SIGNATURBLOCK_MINIMAL_EN.properties
+include.14 = profiles/SIGNATURBLOCK_SMALL_DE.properties
+include.15 = profiles/SIGNATURBLOCK_SMALL_DE_NOTE.properties
+include.16 = profiles/SIGNATURBLOCK_SMALL_EN.properties
+include.17 = profiles/SIGNATURBLOCK_SMALL_EN_NOTE.properties
+
+# Amtssignatur-Profile
+include.18 = profiles/AMTSSIGNATURBLOCK_DE.properties
+include.19 = profiles/AMTSSIGNATURBLOCK_DE_DEPRECATED.properties
+include.20 = profiles/AMTSSIGNATURBLOCK_EN.properties
+include.21 = profiles/AMTSSIGNATURBLOCK_EN_DEPRECATED.properties
+include.22 = profiles/VARIABLER_AMTSSIGNATURBLOCK_DE.properties
+
+# BAIK-Profile
+include.23 = profiles/BAIK_ARCHIV_SIGNATUR.properties
+include.24 = profiles/BAIK_URKUNDE_SIGNATUR.properties
+
+# Legt das Standard-Signaturprofil fest
+sig_obj.type.default=SIGNATURBLOCK_DE
diff --git a/pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/cfg/log4j.properties b/pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/cfg/log4j.properties
new file mode 100644
index 0000000..5fe51c0
--- /dev/null
+++ b/pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/cfg/log4j.properties
@@ -0,0 +1,33 @@
+log4j.rootLogger = WARN, CONSOLE, ROLLINGFILE
+
+# DETAIL LEVELS
+log4j.logger.at.gv.egiz.pdfas = INFO
+log4j.logger.at.knowcenter = INFO
+log4j.logger.org.pdfbox = INFO
+log4j.logger.at.knowcenter.wag.egov.egiz.ldap = DEBUG
+log4j.logger.org.apache.commons.httpclient.HttpMethodBase = ERROR
+# Statistical logger
+log4j.logger.statistic = INFO, STATISTIC
+
+# CONSOLE
+log4j.appender.CONSOLE = org.apache.log4j.ConsoleAppender
+log4j.appender.CONSOLE.layout = org.apache.log4j.PatternLayout
+log4j.appender.CONSOLE.layout.ConversionPattern = [%-5p@%d{dd.MM.yyyy HH:mm:ss}] %c:%M:%L - %m%n
+log4j.appender.CONSOLE.threshold = ERROR
+log4j.appender.CONSOLE.Target = System.out
+
+# ROLLINGFILE
+log4j.appender.ROLLINGFILE = org.apache.log4j.RollingFileAppender
+log4j.appender.ROLLINGFILE.File = ${catalina.base}/logs/pdf-as.log
+log4j.appender.ROLLINGFILE.MaxFileSize = 10240KB
+log4j.appender.ROLLINGFILE.MaxBackupIndex = 9
+log4j.appender.ROLLINGFILE.layout = org.apache.log4j.PatternLayout
+log4j.appender.ROLLINGFILE.layout.ConversionPattern = [%-5p@%d{dd.MM.yyyy HH:mm:ss}] %c:%M:%L - %m%n
+
+# STATISTIC
+log4j.appender.STATISTIC = org.apache.log4j.RollingFileAppender
+log4j.appender.STATISTIC.File = ${catalina.base}/logs/pdf-as-statistic.csv
+log4j.appender.STATISTIC.MaxFileSize = 10240KB
+log4j.appender.STATISTIC.MaxBackupIndex = 9
+log4j.appender.STATISTIC.layout = org.apache.log4j.PatternLayout
+log4j.appender.STATISTIC.layout.ConversionPattern = %d{dd.MM.yyyy HH:mm:ss};%m%n
diff --git a/pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/cfg/pdf-as-web.properties b/pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/cfg/pdf-as-web.properties
new file mode 100644
index 0000000..f61c8bb
--- /dev/null
+++ b/pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/cfg/pdf-as-web.properties
@@ -0,0 +1,12 @@
+# time frame the signing time may differ (in the upper and the lower direction) from the host time
+# in seconds
+# valid frame: current time - signing_time_tolerance ... current time + signing_time
+# no value or -1 means that the signing time is not checked
+signing_time_tolerance=900
+
+# this key overrides the dynamically built locrefcontent URL for the retrieval of the data to be signed
+# remove/disable this key to enable the old dynamic build process
+# Use this key to overcome SSL Problems with dataurl communication.
+# Note: Assure that this URL is accessible from the citizen card environment.
+#retrieve_signature_data_url_override=http://localhost:8080/pdf-as/RetrieveSignatureData
+
diff --git a/pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/cfg/profiles/AMTSSIGNATURBLOCK_DE.properties b/pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/cfg/profiles/AMTSSIGNATURBLOCK_DE.properties
new file mode 100644
index 0000000..de9f3e0
--- /dev/null
+++ b/pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/cfg/profiles/AMTSSIGNATURBLOCK_DE.properties
@@ -0,0 +1,56 @@
+###################################################################################################
+# PROFIL: Amtssignaturblock (Deutsch) mit neuem Layout
+
+sig_obj.AMTSSIGNATURBLOCK_DE.description=Amtssignaturblock-Deutsch, neues Layout
+
+sig_obj.types.AMTSSIGNATURBLOCK_DE=on
+
+sig_obj.AMTSSIGNATURBLOCK_DE.key.SIG_VALUE=Signaturwert
+sig_obj.AMTSSIGNATURBLOCK_DE.key.SIG_SUBJECT=Unterzeichner
+sig_obj.AMTSSIGNATURBLOCK_DE.key.SIG_ISSUER=Aussteller-Zertifikat
+sig_obj.AMTSSIGNATURBLOCK_DE.key.SIG_NUMBER=Serien-Nr.
+sig_obj.AMTSSIGNATURBLOCK_DE.key.SIG_KZ=Methode
+sig_obj.AMTSSIGNATURBLOCK_DE.key.SIG_ID=Parameter
+sig_obj.AMTSSIGNATURBLOCK_DE.key.SIG_META=Pr\u00fcfinformation
+sig_obj.AMTSSIGNATURBLOCK_DE.key.SIG_NOTE=Hinweis
+sig_obj.AMTSSIGNATURBLOCK_DE.key.SIG_DATE=Datum/Zeit-UTC
+
+sig_obj.AMTSSIGNATURBLOCK_DE.value.SIG_SUBJECT=DEMO Amtssignatur
+
+sig_obj.AMTSSIGNATURBLOCK_DE.pos=f:80
+sig_obj.AMTSSIGNATURBLOCK_DE.adobeSignFieldValue=PDF-AS Signatur
+sig_obj.AMTSSIGNATURBLOCK_DE.adobeSignReasonValue=Signaturpruefung unter http://www.signaturpruefung.gv.at
+sig_obj.AMTSSIGNATURBLOCK_DE.verifyURL=http://www.signaturpruefung.gv.at
+
+# WAI
+sig_obj.AMTSSIGNATURBLOCK_DE.sigLogoAltText=Abgebildet ist eine Standard-Signaturbildmarke.
+
+sig_obj.AMTSSIGNATURBLOCK_DE.value.SIG_META=Signaturpruefung unter: http://www.signaturpruefung.gv.at
+sig_obj.AMTSSIGNATURBLOCK_DE.value.SIG_LABEL=./images/signatur-logo_de.png
+sig_obj.AMTSSIGNATURBLOCK_DE.value.SIG_NOTE=Dieses Dokument wurde amtssigniert. Auch ein Ausdruck dieses Dokuments hat gem\u00e4\u00df \u00a7 20 E-Government-Gesetz die Beweiskraft einer \u00f6ffentlichen Urkunde.
+
+#---------------------- MAIN TABLE -------------------------
+sig_obj.AMTSSIGNATURBLOCK_DE.table.main.1=SIG_VALUE-cv
+sig_obj.AMTSSIGNATURBLOCK_DE.table.main.2=SIG_LABEL-i|TABLE-info
+sig_obj.AMTSSIGNATURBLOCK_DE.table.main.3=SIG_META-cv
+sig_obj.AMTSSIGNATURBLOCK_DE.table.main.4=SIG_NOTE-cv
+sig_obj.AMTSSIGNATURBLOCK_DE.table.main.5=SIG_DATE-cv
+
+sig_obj.AMTSSIGNATURBLOCK_DE.table.main.ColsWidth=1 6
+sig_obj.AMTSSIGNATURBLOCK_DE.table.main.Style.bgcolor=255 255 255
+sig_obj.AMTSSIGNATURBLOCK_DE.table.main.Style.padding=4
+sig_obj.AMTSSIGNATURBLOCK_DE.table.main.Style.border=0.1
+sig_obj.AMTSSIGNATURBLOCK_DE.table.main.Style.halign=center
+sig_obj.AMTSSIGNATURBLOCK_DE.table.main.Style.valuehalign=left
+sig_obj.AMTSSIGNATURBLOCK_DE.table.main.Style.valign=top
+sig_obj.AMTSSIGNATURBLOCK_DE.table.main.Style.imagevalign=middle
+sig_obj.AMTSSIGNATURBLOCK_DE.table.main.Style.font=HELVETICA,8,BOLD
+sig_obj.AMTSSIGNATURBLOCK_DE.table.main.Style.valuefont=COURIER,8,NORMAL
+
+#---------------------- INFO TABLE -------------------------
+sig_obj.AMTSSIGNATURBLOCK_DE.table.info.ColsWidth=1 4
+sig_obj.AMTSSIGNATURBLOCK_DE.table.info.1=SIG_SUBJECT-cv
+sig_obj.AMTSSIGNATURBLOCK_DE.table.info.2=SIG_ISSUER-cv
+sig_obj.AMTSSIGNATURBLOCK_DE.table.info.3=SIG_NUMBER-cv
+sig_obj.AMTSSIGNATURBLOCK_DE.table.info.4=SIG_KZ-cv
+sig_obj.AMTSSIGNATURBLOCK_DE.table.info.5=SIG_ID-cv
diff --git a/pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/cfg/profiles/AMTSSIGNATURBLOCK_DE_DEPRECATED.properties b/pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/cfg/profiles/AMTSSIGNATURBLOCK_DE_DEPRECATED.properties
new file mode 100644
index 0000000..1ffeca4
--- /dev/null
+++ b/pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/cfg/profiles/AMTSSIGNATURBLOCK_DE_DEPRECATED.properties
@@ -0,0 +1,56 @@
+###################################################################################################
+# PROFIL: Amtssignaturblock (Deutsch)
+
+sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.description=Amtssignaturblock-Deutsch
+
+sig_obj.types.AMTSSIGNATURBLOCK_DE_DEPRECATED=on
+
+sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.key.SIG_VALUE=Signaturwert
+sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.key.SIG_SUBJECT=Unterzeichner
+sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.key.SIG_DATE=Datum/Zeit-UTC
+sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.key.SIG_ISSUER=Aussteller-Zertifikat
+sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.key.SIG_NUMBER=Serien-Nr.
+sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.key.SIG_KZ=Methode
+sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.key.SIG_ID=Parameter
+sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.key.SIG_META=Pr\u00fcfinformation
+sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.key.SIG_NOTE=Hinweis
+
+sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.value.SIG_SUBJECT=DEMO Amtssignatur
+
+sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.pos=f:80
+sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.adobeSignFieldValue=PDF-AS Signatur
+sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.adobeSignReasonValue=Informationen zur Pr\u00fcfung finden Sie unter http://www.signaturpruefung.gv.at
+sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.verifyURL=http://www.signaturpruefung.gv.at
+
+# WAI
+sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.sigLogoAltText=Abgebildet ist eine Standard-Signaturbildmarke.
+
+sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.value.SIG_META=Signaturpruefung unter: http://www.signaturpruefung.gv.at
+sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.value.SIG_LABEL=./images/signatur-logo_de.png
+sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.value.SIG_NOTE=Dieses Dokument wurde amtssigniert. Auch ein Ausdruck dieses Dokuments hat gem\u00e4\u00df \u00a7 20 E-Government-Gesetz die Beweiskraft einer \u00f6ffentlichen Urkunde.
+
+#---------------------- MAIN TABLE -------------------------
+sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.table.main.1=SIG_VALUE-cv
+sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.table.main.2=SIG_LABEL-i|TABLE-info
+sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.table.main.3=SIG_META-cv
+sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.table.main.4=SIG_NOTE-cv
+
+sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.table.main.ColsWidth=1 6
+sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.table.main.Style.bgcolor=255 255 255
+sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.table.main.Style.padding=4
+sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.table.main.Style.border=0.1
+sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.table.main.Style.halign=center
+sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.table.main.Style.valuehalign=left
+sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.table.main.Style.valign=middle
+sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.table.main.Style.imagevalign=middle
+sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.table.main.Style.font=HELVETICA,8,BOLD
+sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.table.main.Style.valuefont=COURIER,8,NORMAL
+
+#---------------------- INFO TABLE -------------------------
+sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.table.info.ColsWidth=1 4
+sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.table.info.1=SIG_SUBJECT-cv
+sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.table.info.2=SIG_DATE-cv
+sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.table.info.3=SIG_ISSUER-cv
+sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.table.info.4=SIG_NUMBER-cv
+sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.table.info.5=SIG_KZ-cv
+sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.table.info.6=SIG_ID-cv
diff --git a/pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/cfg/profiles/AMTSSIGNATURBLOCK_EN.properties b/pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/cfg/profiles/AMTSSIGNATURBLOCK_EN.properties
new file mode 100644
index 0000000..b5b5004
--- /dev/null
+++ b/pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/cfg/profiles/AMTSSIGNATURBLOCK_EN.properties
@@ -0,0 +1,57 @@
+###################################################################################################
+# PROFIL: Amtssignaturblock (Englisch) mit neuem Layout
+
+sig_obj.AMTSSIGNATURBLOCK_EN.description=Amtssignaturblock-Englisch, neues Layout
+
+sig_obj.types.AMTSSIGNATURBLOCK_EN=on
+
+sig_obj.AMTSSIGNATURBLOCK_EN.key.SIG_VALUE=Signature Value
+sig_obj.AMTSSIGNATURBLOCK_EN.key.SIG_SUBJECT=Signatory
+sig_obj.AMTSSIGNATURBLOCK_EN.key.SIG_ISSUER=Issuer-Certificate
+sig_obj.AMTSSIGNATURBLOCK_EN.key.SIG_NUMBER=Serial-No.
+sig_obj.AMTSSIGNATURBLOCK_EN.key.SIG_KZ=Method
+sig_obj.AMTSSIGNATURBLOCK_EN.key.SIG_ID=Parameter
+sig_obj.AMTSSIGNATURBLOCK_EN.key.SIG_META=Verification
+sig_obj.AMTSSIGNATURBLOCK_EN.key.SIG_NOTE=Note
+sig_obj.AMTSSIGNATURBLOCK_EN.key.SIG_DATE=Date/Time-UTC
+
+sig_obj.AMTSSIGNATURBLOCK_EN.value.SIG_SUBJECT=Official Signature DEMO
+
+sig_obj.AMTSSIGNATURBLOCK_EN.pos=f:80
+sig_obj.AMTSSIGNATURBLOCK_EN.adobeSignFieldValue=PDF-AS Signature
+sig_obj.AMTSSIGNATURBLOCK_EN.adobeSignReasonValue=Signature verification at: http://www.signature-verification.gv.at
+sig_obj.AMTSSIGNATURBLOCK_EN.verifyURL=http://www.signature-verification.gv.at
+
+# WAI
+sig_obj.AMTSSIGNATURBLOCK_EN.sigLogoAltText=A standard signature logo is shown.
+
+sig_obj.AMTSSIGNATURBLOCK_EN.value.SIG_META=Signature verification at: http://www.signature-verification.gv.at
+sig_obj.AMTSSIGNATURBLOCK_EN.value.SIG_LABEL=./images/signatur-logo_en.png
+sig_obj.AMTSSIGNATURBLOCK_EN.value.SIG_NOTE=This document was signed with an official signature. According to \u00a7 20 E-Government-Act a printout of this document has the probative value of an official document.
+
+
+#---------------------- MAIN TABLE -------------------------
+sig_obj.AMTSSIGNATURBLOCK_EN.table.main.1=SIG_VALUE-cv
+sig_obj.AMTSSIGNATURBLOCK_EN.table.main.2=SIG_LABEL-i|TABLE-info
+sig_obj.AMTSSIGNATURBLOCK_EN.table.main.3=SIG_META-cv
+sig_obj.AMTSSIGNATURBLOCK_EN.table.main.4=SIG_NOTE-cv
+sig_obj.AMTSSIGNATURBLOCK_EN.table.main.5=SIG_DATE-cv
+
+sig_obj.AMTSSIGNATURBLOCK_EN.table.main.ColsWidth=1 6
+sig_obj.AMTSSIGNATURBLOCK_EN.table.main.Style.bgcolor=255 255 255
+sig_obj.AMTSSIGNATURBLOCK_EN.table.main.Style.padding=4
+sig_obj.AMTSSIGNATURBLOCK_EN.table.main.Style.border=0.1
+sig_obj.AMTSSIGNATURBLOCK_EN.table.main.Style.halign=center
+sig_obj.AMTSSIGNATURBLOCK_EN.table.main.Style.valuehalign=left
+sig_obj.AMTSSIGNATURBLOCK_EN.table.main.Style.valign=top
+sig_obj.AMTSSIGNATURBLOCK_EN.table.main.Style.imagevalign=middle
+sig_obj.AMTSSIGNATURBLOCK_EN.table.main.Style.font=HELVETICA,8,BOLD
+sig_obj.AMTSSIGNATURBLOCK_EN.table.main.Style.valuefont=COURIER,8,NORMAL
+
+#---------------------- INFO TABLE -------------------------
+sig_obj.AMTSSIGNATURBLOCK_EN.table.info.ColsWidth=1 5
+sig_obj.AMTSSIGNATURBLOCK_EN.table.info.1=SIG_SUBJECT-cv
+sig_obj.AMTSSIGNATURBLOCK_EN.table.info.2=SIG_ISSUER-cv
+sig_obj.AMTSSIGNATURBLOCK_EN.table.info.3=SIG_NUMBER-cv
+sig_obj.AMTSSIGNATURBLOCK_EN.table.info.4=SIG_KZ-cv
+sig_obj.AMTSSIGNATURBLOCK_EN.table.info.5=SIG_ID-cv
diff --git a/pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/cfg/profiles/AMTSSIGNATURBLOCK_EN_DEPRECATED.properties b/pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/cfg/profiles/AMTSSIGNATURBLOCK_EN_DEPRECATED.properties
new file mode 100644
index 0000000..0eab478
--- /dev/null
+++ b/pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/cfg/profiles/AMTSSIGNATURBLOCK_EN_DEPRECATED.properties
@@ -0,0 +1,56 @@
+###################################################################################################
+# PROFIL: Amtssignaturblock (Englisch)
+
+sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.description=Amtssignaturblock-Englisch
+
+sig_obj.types.AMTSSIGNATURBLOCK_EN_DEPRECATED=on
+
+sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.key.SIG_VALUE=Signature Value
+sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.key.SIG_SUBJECT=Signatory
+sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.key.SIG_DATE=Date/Time-UTC
+sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.key.SIG_ISSUER=Issuer-Certificate
+sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.key.SIG_NUMBER=Serial-No.
+sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.key.SIG_KZ=Method
+sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.key.SIG_ID=Parameter
+sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.key.SIG_META=Verification
+sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.key.SIG_NOTE=Note
+
+sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.value.SIG_SUBJECT=Official Signature DEMO
+
+sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.pos=f:80
+sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.adobeSignFieldValue=PDF-AS Signature
+sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.adobeSignReasonValue=Information about the verification can be found at http://www.signature-verification.gv.at
+sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.verifyURL=http://www.signature-verification.gv.at
+
+# WAI
+sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.sigLogoAltText=A standard signature logo is shown.
+
+sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.value.SIG_META=Signature verification at: http://www.signature-verification.gv.at
+sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.value.SIG_LABEL=./images/signatur-logo_en.png
+sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.value.SIG_NOTE=This document was signed with an official signature. According to \u00a7 20 E-Government-Act a printout of this document has the probative value of an official document.
+
+#---------------------- MAIN TABLE -------------------------
+sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.table.main.1=SIG_VALUE-cv
+sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.table.main.2=SIG_LABEL-i|TABLE-info
+sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.table.main.3=SIG_META-cv
+sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.table.main.4=SIG_NOTE-cv
+
+sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.table.main.ColsWidth=1 6
+sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.table.main.Style.bgcolor=255 255 255
+sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.table.main.Style.padding=4
+sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.table.main.Style.border=0.1
+sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.table.main.Style.halign=center
+sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.table.main.Style.valuehalign=left
+sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.table.main.Style.valign=middle
+sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.table.main.Style.imagevalign=middle
+sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.table.main.Style.font=HELVETICA,8,BOLD
+sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.table.main.Style.valuefont=COURIER,8,NORMAL
+
+#---------------------- INFO TABLE -------------------------
+sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.table.info.ColsWidth=1 5
+sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.table.info.1=SIG_SUBJECT-cv
+sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.table.info.2=SIG_DATE-cv
+sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.table.info.3=SIG_ISSUER-cv
+sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.table.info.4=SIG_NUMBER-cv
+sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.table.info.5=SIG_KZ-cv
+sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.table.info.6=SIG_ID-cv
diff --git a/pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/cfg/profiles/BAIK_ARCHIV_SIGNATUR.properties b/pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/cfg/profiles/BAIK_ARCHIV_SIGNATUR.properties
new file mode 100644
index 0000000..54298bc
--- /dev/null
+++ b/pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/cfg/profiles/BAIK_ARCHIV_SIGNATUR.properties
@@ -0,0 +1,69 @@
+###################################################################################################
+# PROFIL: BAIK Archivsignatur
+
+sig_obj.BAIK_ARCHIV_SIGNATUR.description=BAIK Archivsignatur
+
+sig_obj.types.BAIK_ARCHIV_SIGNATUR=on
+
+# enable/disable BAIK support for this profile
+sig_obj.BAIK_ARCHIV_SIGNATUR.key.SIG_BAIK_ENABLED=true
+sig_obj.BAIK_ARCHIV_SIGNATUR.key.SIG_PDFA1B_VALID=true
+
+sig_obj.BAIK_ARCHIV_SIGNATUR.key.SIG_VALUE=Signaturwert
+sig_obj.BAIK_ARCHIV_SIGNATUR.key.SIG_SIG_LABEL=Signator
+sig_obj.BAIK_ARCHIV_SIGNATUR.key.SIG_DATE=Signaturdatum
+sig_obj.BAIK_ARCHIV_SIGNATUR.key.SIG_ISSUER=Zertifizierungsdienst
+sig_obj.BAIK_ARCHIV_SIGNATUR.key.SIG_NUMBER=Seriennummer
+sig_obj.BAIK_ARCHIV_SIGNATUR.key.SIG_ALG=Algorithmus
+sig_obj.BAIK_ARCHIV_SIGNATUR.key.SIG_KZ=Methode
+#sig_obj.BAIK_ARCHIV_SIGNATUR.key.SIG_ID=Parameter
+sig_obj.BAIK_ARCHIV_SIGNATUR.key.SIG_META=Hinweis
+sig_obj.BAIK_ARCHIV_SIGNATUR.key.SIG_TITLE=ELEKTRONISCHE ARCHIVSIGNATUR
+
+sig_obj.BAIK_ARCHIV_SIGNATUR.pos=f:80
+sig_obj.BAIK_ARCHIV_SIGNATUR.adobeSignFieldValue=ELEKTRONISCHE ARCHIVSIGNATUR
+
+# WAI
+sig_obj.BAIK_ARCHIV_SIGNATUR.sigLogoAltText=Abgebildet ist eine Signaturbildmarke mit Bundesadler.
+
+sig_obj.BAIK_ARCHIV_SIGNATUR.value.SIG_META=Dokumentenformat: ${iui.pdfVersion}
+sig_obj.BAIK_ARCHIV_SIGNATUR.value.SIG_LABEL=./images/Baik_Archiv.gif
+sig_obj.BAIK_ARCHIV_SIGNATUR.value.SIG_TITLE=ELEKTRONISCHE ARCHIVSIGNATUR
+
+sig_obj.BAIK_ARCHIV_SIGNATUR.adobeSignFieldValue=Archivsignatur
+sig_obj.BAIK_ARCHIV_SIGNATUR.adobeSignText.binary=Archivsignatur der BAIK
+sig_obj.BAIK_ARCHIV_SIGNATUR.verifyURL=http://www.signaturpruefung.gv.at
+
+sig_obj.BAIK_ARCHIV_SIGNATUR.phlength.SIG_META=50
+
+sig_obj.BAIK_ARCHIV_SIGNATUR.value.SIG_SIG_LABEL=BAIK-Archiv\n\nUrkundenarchiv der Bundeskammer f\u00fcr Architekten und Ingenieurskonsulenten
+
+#---------------------- MAIN TABLE -------------------------
+sig_obj.BAIK_ARCHIV_SIGNATUR.table.main.1=SIG_TITLE-v
+sig_obj.BAIK_ARCHIV_SIGNATUR.table.main.2=SIG_VALUE-cv
+sig_obj.BAIK_ARCHIV_SIGNATUR.table.main.3=SIG_LABEL-i|TABLE-info
+sig_obj.BAIK_ARCHIV_SIGNATUR.table.main.4=SIG_META-cv
+
+sig_obj.BAIK_ARCHIV_SIGNATUR.table.main.ColsWidth=1 5
+sig_obj.BAIK_ARCHIV_SIGNATUR.table.main.Style.bgcolor=161 198 252
+sig_obj.BAIK_ARCHIV_SIGNATUR.table.main.Style.padding=4
+sig_obj.BAIK_ARCHIV_SIGNATUR.table.main.Style.border=0.1
+sig_obj.BAIK_ARCHIV_SIGNATUR.table.main.Style.halign=center
+sig_obj.BAIK_ARCHIV_SIGNATUR.table.main.Style.valuehalign=left
+sig_obj.BAIK_ARCHIV_SIGNATUR.table.main.Style.valign=middle
+sig_obj.BAIK_ARCHIV_SIGNATUR.table.main.Style.imagevalign=middle
+sig_obj.BAIK_ARCHIV_SIGNATUR.table.main.Style.font=TTF:DejaVuSansCondensed.ttf,8
+sig_obj.BAIK_ARCHIV_SIGNATUR.table.main.Style.valuefont=TTF:DejaVuSansCondensed.ttf,8
+
+#---------------------- INFO TABLE -------------------------
+sig_obj.BAIK_ARCHIV_SIGNATUR.table.info.ColsWidth=1 4
+sig_obj.BAIK_ARCHIV_SIGNATUR.table.info.Style.halign=left
+sig_obj.BAIK_ARCHIV_SIGNATUR.table.info.Style.valuehalign=left
+sig_obj.BAIK_ARCHIV_SIGNATUR.table.info.Style.valign=middle
+
+sig_obj.BAIK_ARCHIV_SIGNATUR.table.info.1=SIG_SIG_LABEL-cv
+sig_obj.BAIK_ARCHIV_SIGNATUR.table.info.2=SIG_DATE-cv
+sig_obj.BAIK_ARCHIV_SIGNATUR.table.info.3=SIG_ISSUER-cv
+sig_obj.BAIK_ARCHIV_SIGNATUR.table.info.4=SIG_NUMBER-cv
+sig_obj.BAIK_ARCHIV_SIGNATUR.table.info.5=SIG_ALG-cv
+sig_obj.BAIK_ARCHIV_SIGNATUR.table.info.6=SIG_KZ-cv
diff --git a/pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/cfg/profiles/BAIK_URKUNDE_SIGNATUR.properties b/pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/cfg/profiles/BAIK_URKUNDE_SIGNATUR.properties
new file mode 100644
index 0000000..52ce6b0
--- /dev/null
+++ b/pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/cfg/profiles/BAIK_URKUNDE_SIGNATUR.properties
@@ -0,0 +1,67 @@
+###################################################################################################
+# PROFIL: BAIK Beurkundungssignatur
+
+sig_obj.BAIK_URKUNDE_SIGNATUR.description=BAIK Beurkundungssignatur
+
+sig_obj.types.BAIK_URKUNDE_SIGNATUR=on
+
+# enable/disable BAIK support for this profile
+sig_obj.BAIK_URKUNDE_SIGNATUR.key.SIG_BAIK_ENABLED=true
+sig_obj.BAIK_URKUNDE_SIGNATUR.key.SIG_PDFA1B_VALID=true
+
+sig_obj.BAIK_URKUNDE_SIGNATUR.key.SIG_VALUE=Signaturwert
+sig_obj.BAIK_URKUNDE_SIGNATUR.key.SIG_SIG_LABEL=Signator
+sig_obj.BAIK_URKUNDE_SIGNATUR.key.SIG_DATE=Signaturdatum
+sig_obj.BAIK_URKUNDE_SIGNATUR.key.SIG_ISSUER=Zertifizierungsdienst
+sig_obj.BAIK_URKUNDE_SIGNATUR.key.SIG_NUMBER=Seriennummer
+sig_obj.BAIK_URKUNDE_SIGNATUR.key.SIG_ALG=Algorithmus
+sig_obj.BAIK_URKUNDE_SIGNATUR.key.SIG_KZ=Methode
+#sig_obj.BAIK_URKUNDE_SIGNATUR.key.SIG_ID=Parameter
+sig_obj.BAIK_URKUNDE_SIGNATUR.key.SIG_META=Hinweis:
+sig_obj.BAIK_URKUNDE_SIGNATUR.key.SIG_TITLE=ELEKTRONISCHE BEURKUNDUNGSSIGNATUR
+
+# WAI
+sig_obj.BAIK_URKUNDE_SIGNATUR.sigLogoAltText=Abgebildet ist die Signaturbildmarke eines staatlich befugten und beeideten Ziviltechnikers mit Bundesadler.
+
+sig_obj.BAIK_URKUNDE_SIGNATUR.pos=f:80
+sig_obj.BAIK_URKUNDE_SIGNATUR.adobeSignFieldValue=Urkundensignatur
+sig_obj.BAIK_URKUNDE_SIGNATUR.adobeSignText.binary=Urkundensignatur der BAIK
+sig_obj.BAIK_URKUNDE_SIGNATUR.verifyURL=http://www.signaturpruefung.gv.at
+
+sig_obj.BAIK_URKUNDE_SIGNATUR.value.SIG_META=Dokumentenformat: ${iui.pdfVersion}
+sig_obj.BAIK_URKUNDE_SIGNATUR.value.SIG_LABEL=./images/Baik_Urkunde.gif
+sig_obj.BAIK_URKUNDE_SIGNATUR.value.SIG_TITLE=ELEKTRONISCHE BEURKUNDUNGSSIGNATUR
+
+sig_obj.BAIK_URKUNDE_SIGNATUR.phlength.SIG_META=50
+sig_obj.BAIK_URKUNDE_SIGNATUR.phlength.SIG_SIG_LABEL=200
+
+sig_obj.BAIK_URKUNDE_SIGNATUR.value.SIG_SIG_LABEL=${subject.CN}${subject.O != null ? ("\n" + subject.O) : ""}${subject.L != null ? ("\nKanzleisitz: " + subject.L) : ""}
+
+#---------------------- MAIN TABLE -------------------------
+sig_obj.BAIK_URKUNDE_SIGNATUR.table.main.1=SIG_TITLE-v
+sig_obj.BAIK_URKUNDE_SIGNATUR.table.main.2=SIG_VALUE-cv
+sig_obj.BAIK_URKUNDE_SIGNATUR.table.main.3=SIG_LABEL-i|TABLE-info
+sig_obj.BAIK_URKUNDE_SIGNATUR.table.main.4=SIG_META-cv
+
+sig_obj.BAIK_URKUNDE_SIGNATUR.table.main.ColsWidth=1 5
+sig_obj.BAIK_URKUNDE_SIGNATUR.table.main.Style.bgcolor=248 254 150
+sig_obj.BAIK_URKUNDE_SIGNATUR.table.main.Style.padding=4
+sig_obj.BAIK_URKUNDE_SIGNATUR.table.main.Style.border=0.1
+sig_obj.BAIK_URKUNDE_SIGNATUR.table.main.Style.halign=center
+sig_obj.BAIK_URKUNDE_SIGNATUR.table.main.Style.valuehalign=left
+sig_obj.BAIK_URKUNDE_SIGNATUR.table.main.Style.valign=middle
+sig_obj.BAIK_URKUNDE_SIGNATUR.table.main.Style.imagevalign=middle
+sig_obj.BAIK_URKUNDE_SIGNATUR.table.main.Style.font=TTF:DejaVuSansCondensed.ttf,8
+sig_obj.BAIK_URKUNDE_SIGNATUR.table.main.Style.valuefont=TTF:DejaVuSansCondensed.ttf,8
+
+#---------------------- INFO TABLE -------------------------
+sig_obj.BAIK_URKUNDE_SIGNATUR.table.info.ColsWidth=1 4
+sig_obj.BAIK_URKUNDE_SIGNATUR.table.info.Style.halign=left
+sig_obj.BAIK_URKUNDE_SIGNATUR.table.info.Style.valuehalign=left
+
+sig_obj.BAIK_URKUNDE_SIGNATUR.table.info.1=SIG_SIG_LABEL-cv
+sig_obj.BAIK_URKUNDE_SIGNATUR.table.info.2=SIG_DATE-cv
+sig_obj.BAIK_URKUNDE_SIGNATUR.table.info.3=SIG_ISSUER-cv
+sig_obj.BAIK_URKUNDE_SIGNATUR.table.info.4=SIG_NUMBER-cv
+sig_obj.BAIK_URKUNDE_SIGNATUR.table.info.5=SIG_ALG-cv
+sig_obj.BAIK_URKUNDE_SIGNATUR.table.info.6=SIG_KZ-cv
diff --git a/pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/cfg/profiles/INVISIBLE.properties b/pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/cfg/profiles/INVISIBLE.properties
new file mode 100644
index 0000000..ad2b6a5
--- /dev/null
+++ b/pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/cfg/profiles/INVISIBLE.properties
@@ -0,0 +1,14 @@
+###################################################################################################
+# PROFIL: Unsichtbarer Signaturblock
+
+sig_obj.INVISIBLE.description=Unsichtbarer Signaturblock
+
+sig_obj.types.INVISIBLE=on
+
+sig_obj.INVISIBLE.adobeSignFieldValue=PDF-AS Signatur
+sig_obj.INVISIBLE.adobeSignReasonValue=Informationen zur Pr\u00fcfung finden Sie unter http://www.signaturpruefung.gv.at
+
+# Platzhaltersuche f\u00fcr dieses Profil deaktivieren
+sig_obj.INVISIBLE.enable_placeholder_search=false
+
+sig_obj.INVISIBLE.verifyURL=http://www.signaturpruefung.gv.at
diff --git a/pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/cfg/profiles/SIGNATURBLOCK_DE.properties b/pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/cfg/profiles/SIGNATURBLOCK_DE.properties
new file mode 100644
index 0000000..1c35d25
--- /dev/null
+++ b/pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/cfg/profiles/SIGNATURBLOCK_DE.properties
@@ -0,0 +1,155 @@
+sig_obj.type.default=SIGNATURBLOCK_DE
+
+
+###################################################################################################
+# PROFIL: Signaturblock (Deutsch) mit neuem Layout
+
+# Kurzbeschreibung
+sig_obj.SIGNATURBLOCK_DE.description=Standardsignatur Deutsch mit neuem Layout
+
+# Aktiviert ("on") bzw. deaktiviert ("off") dieses Profil.
+# "verify_only" beschraenkt das Profil auf Signaturpruefung, d.h. es kann nicht zum Erstellen von
+# Signaturen verwendet werden.
+# "sign_only" beschraenkt das Profil insofern, dass es nur noch zum Signieren, nicht aber
+# zum Pruefen verwendet werden kann.
+sig_obj.types.SIGNATURBLOCK_DE=on
+
+# Festlegung der einzelner Bezeichnungen im Signaturblock.
+sig_obj.SIGNATURBLOCK_DE.key.SIG_VALUE=Signaturwert
+sig_obj.SIGNATURBLOCK_DE.key.SIG_SUBJECT=Unterzeichner
+sig_obj.SIGNATURBLOCK_DE.key.SIG_ISSUER=Aussteller-Zertifikat
+sig_obj.SIGNATURBLOCK_DE.key.SIG_NUMBER=Serien-Nr.
+sig_obj.SIGNATURBLOCK_DE.key.SIG_KZ=Methode
+sig_obj.SIGNATURBLOCK_DE.key.SIG_ID=Parameter
+sig_obj.SIGNATURBLOCK_DE.key.SIG_META=Pr\u00fcfinformation
+sig_obj.SIGNATURBLOCK_DE.key.SIG_DATE=Datum/Zeit-UTC
+
+
+# Festlegung des Unterzeichnernamens.
+# Es moeglich, den Namen des Signators dynamisch aus Informationen des verwendeten Zertifikats
+# zusammenzusetzen. Konkret kann auf die einzelnen RDN Teile des Issuer DN und des Subject DN
+# des Signaturzertifikats wie im folgenden Beispiel illustriert zugegriffen werden:
+#
+# (1) sig_obj.PROFIL.value.SIG_SUBJECT= ${subject.CN}${subject.O != null ? ("\n" + subject.O) : ""}
+# (2) sig_obj.PROFIL.value.SIG_SUBJECT= ${subject.T \!\= null ? (subject.T + " ") \: ""}${subject.CN}
+#
+# Beispiel (1) gibt die Organisation des Unterzeichners an, Beispiel (2) Titel und Name.
+#
+# Die Notation ${..} ermoeglicht die dynamische Auswertung eines Ausdrucks. Verfuegbar sind "subject"
+# und "issuer" und die im Zertifikat-DN vorhandenen RDNs.
+#
+# Achtung:
+# Fuer die binaere Signatur muss die maximale Anzahl zu erwartender Zeichen in der globalen Einstellung
+# defaults.phlength.SIG_SUBJECT=...
+# bzw. profileweise via
+# sig_obj.PROFIL.phlength.SIG_SUBJECT=...
+# festgelegt werden.
+sig_obj.SIGNATURBLOCK_DE.value.SIG_SUBJECT=${subject.T != null ? (subject.T + " ") : ""}${subject.CN}
+
+
+## Profilspezifische Festlegung der Position des Signaturblocks
+#
+# sig_obj.PROFILE.pos=[p:["auto"|"new"|pagenumber];][x:["auto"|floatvalue];][y:["auto"|floatvalue];][w:["auto"|width_floatvalue];][f:footerheight_floatvalue]
+# z.B.
+# sig_obj.PROFILE.pos=p:1;x:40.0;y:800.0;w:400.0;f:80
+sig_obj.SIGNATURBLOCK_DE.pos=f:80
+
+# Name der Signatur.
+sig_obj.SIGNATURBLOCK_DE.adobeSignFieldValue=PDF-AS Signatur
+
+# Text, der im Adobe Reader unter "Reason" angezeigt wird.
+sig_obj.SIGNATURBLOCK_DE.adobeSignReasonValue=Signaturpruefung unter http://www.signaturpruefung.gv.at
+
+# URL fuer die Signaturpruefung durch das Adobe Acrobat Professional PDF-AS Plugin.
+sig_obj.SIGNATURBLOCK_DE.verifyURL=http://www.signaturpruefung.gv.at
+
+# WAI
+sig_obj.SIGNATURBLOCK_DE.sigLogoAltText=Abgebildet ist eine Standard-Signaturbildmarke.
+
+# Pruefhinweis im Signaturblock
+sig_obj.SIGNATURBLOCK_DE.value.SIG_META=Signaturpruefung unter: http://www.signaturpruefung.gv.at
+
+# Signaturlogo im Signaturblock
+sig_obj.SIGNATURBLOCK_DE.value.SIG_LABEL=./images/signatur-logo_de.png
+
+
+#---------------------- MAIN TABLE -------------------------
+sig_obj.SIGNATURBLOCK_DE.table.main.1=SIG_VALUE-cv
+sig_obj.SIGNATURBLOCK_DE.table.main.2=SIG_LABEL-i|TABLE-info
+sig_obj.SIGNATURBLOCK_DE.table.main.3=SIG_META-cv
+sig_obj.SIGNATURBLOCK_DE.table.main.4=SIG_DATE-cv
+
+
+sig_obj.SIGNATURBLOCK_DE.table.main.ColsWidth=1 6
+sig_obj.SIGNATURBLOCK_DE.table.main.Style.bgcolor=255 255 255
+sig_obj.SIGNATURBLOCK_DE.table.main.Style.padding=4
+sig_obj.SIGNATURBLOCK_DE.table.main.Style.border=0.1
+
+
+## Horizontale Ausrichtung der Eintraege im Signaturblock.
+#
+# sig_obj.PROFILE.table.TABLE_NAME.Style.halign=[left|center|right]
+# sig_obj.PROFILE.table.TABLE_NAME.Style.valuehalign=[left|center|right]
+# sig_obj.PROFILE.table.TABLE_NAME.Style.imagehalign=[left|center|right]
+sig_obj.SIGNATURBLOCK_DE.table.main.Style.halign=center
+
+
+## Vertikale Ausrichtung der Eintraege im Signaturblock.
+#
+# sig_obj.PROFILE.table.TABLE_NAME.Style.valign=[bottom|middle|top]
+# sig_obj.PROFILE.table.TABLE_NAME.Style.valuevalign=[bottom|middle|top]
+# sig_obj.PROFILE.table.TABLE_NAME.Style.imagevalign=[bottom|middle|top]
+sig_obj.SIGNATURBLOCK_DE.table.main.Style.valuehalign=left
+sig_obj.SIGNATURBLOCK_DE.table.main.Style.valign=top
+sig_obj.SIGNATURBLOCK_DE.table.main.Style.imagevalign=middle
+
+
+## Schriftart
+#
+# sig_obj.PROFIL.table.TABLE_NAME.Style.font=FACE,WEIGHT,STYLE
+# Setzt die Schriftart fuer die gesamte Tabelle TABLE_NAME.
+#
+# sig_obj.PROFIL.table.TABLE_NAME.Style.valuefont=FACE,WEIGHT,STYLE
+# Setzt die Schriftart ausschliesslich fuer die Werte-Zellen der Tabelle TABLE_NAME.
+#
+# FACE: HELVETICA | TIMES_ROMAN | COURIER
+# WEIGHT: float value
+# STYLE: NORMAL | BOLD | ITALIC | BOLDITALIC | UNDERLINE | STRIKETHRU
+#
+# z.B. sig_obj.SIGNATURBLOCK_DE.table.main.Style.valuefont=COURIER,8,NORMAL
+sig_obj.SIGNATURBLOCK_DE.table.main.Style.font=HELVETICA,8,BOLD
+sig_obj.SIGNATURBLOCK_DE.table.main.Style.valuefont=COURIER,8,NORMAL
+
+
+#---------------------- INFO TABLE -------------------------
+sig_obj.SIGNATURBLOCK_DE.table.info.ColsWidth=1 4
+sig_obj.SIGNATURBLOCK_DE.table.info.1=SIG_SUBJECT-cv
+sig_obj.SIGNATURBLOCK_DE.table.info.2=SIG_ISSUER-cv
+sig_obj.SIGNATURBLOCK_DE.table.info.3=SIG_NUMBER-cv
+sig_obj.SIGNATURBLOCK_DE.table.info.4=SIG_KZ-cv
+sig_obj.SIGNATURBLOCK_DE.table.info.5=SIG_ID-cv
+
+
+## Signaturkennzeichnung (fuer Adobe Acrobat)
+#
+# Ein-/Ausschalten der Signaturkennung:
+# sig_obj.PROFILE.adobeSignEnabled=true|false (default: true)
+#
+# Name fuer die Signaturkennzeichnung (binaer)
+# sig_obj.PROFILE.adobeSignText.binary=PDF-AS
+#
+# Name fuer die Signaturkennzeichnung (binaer)
+# sig_obj.PROFILE.adobeSignText.textual=PDF-AS
+#
+# Name fuer die PDF-Signatur
+# sig_obj.PROFILE.adobeSignFieldValue=PDF-AS Signatur
+#
+# "Reason"-Feld der jeweiligen Signatur
+# sig_obj.PROFILE.adobeSignReasonValue=Informationen zur Pr\u00FCfung finden Sie unter http://www.signaturpruefung.gv.at
+#
+# Prueflink fuer die Adobe Signaturkennzeichnung (nur relevant falls Adobe Plugin fuer Pruefung verwendet wird)
+# sig_obj.PROFILE.verifyURL=http://www.signaturpruefung.gv.at
+#
+# Alternativer Text fuer den Signaturblock (WAI) (globale Einstellung)
+# sig_obj.PROFILE.sigLogoAltText=Abgebildet ist eine Standard-Signaturbildmarke.
+
diff --git a/pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/cfg/profiles/SIGNATURBLOCK_DE_DEPRECATED.properties b/pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/cfg/profiles/SIGNATURBLOCK_DE_DEPRECATED.properties
new file mode 100644
index 0000000..d744d0b
--- /dev/null
+++ b/pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/cfg/profiles/SIGNATURBLOCK_DE_DEPRECATED.properties
@@ -0,0 +1,53 @@
+###################################################################################################
+# PROFIL: Signaturblock (Deutsch)
+
+sig_obj.SIGNATURBLOCK_DE_DEPRECATED.description=Standardsignatur Deutsch
+
+sig_obj.types.SIGNATURBLOCK_DE_DEPRECATED=on
+
+sig_obj.SIGNATURBLOCK_DE_DEPRECATED.key.SIG_VALUE=Signaturwert
+sig_obj.SIGNATURBLOCK_DE_DEPRECATED.key.SIG_SUBJECT=Unterzeichner
+sig_obj.SIGNATURBLOCK_DE_DEPRECATED.key.SIG_DATE=Datum/Zeit-UTC
+sig_obj.SIGNATURBLOCK_DE_DEPRECATED.key.SIG_ISSUER=Aussteller-Zertifikat
+sig_obj.SIGNATURBLOCK_DE_DEPRECATED.key.SIG_NUMBER=Serien-Nr.
+sig_obj.SIGNATURBLOCK_DE_DEPRECATED.key.SIG_KZ=Methode
+sig_obj.SIGNATURBLOCK_DE_DEPRECATED.key.SIG_ID=Parameter
+sig_obj.SIGNATURBLOCK_DE_DEPRECATED.key.SIG_META=Pr\u00fcfinformation
+
+sig_obj.SIGNATURBLOCK_DE_DEPRECATED.value.SIG_SUBJECT=${subject.T != null ? (subject.T + " ") : ""}${subject.CN}
+
+sig_obj.SIGNATURBLOCK_DE_DEPRECATED.pos=f:80
+sig_obj.SIGNATURBLOCK_DE_DEPRECATED.adobeSignFieldValue=PDF-AS Signatur
+sig_obj.SIGNATURBLOCK_DE_DEPRECATED.adobeSignReasonValue=Informationen zur Pr\u00fcfung finden Sie unter http://www.signaturpruefung.gv.at
+sig_obj.SIGNATURBLOCK_DE_DEPRECATED.verifyURL=http://www.signaturpruefung.gv.at
+
+# WAI
+sig_obj.SIGNATURBLOCK_DE_DEPRECATED.sigLogoAltText=Abgebildet ist eine Standard-Signaturbildmarke.
+
+sig_obj.SIGNATURBLOCK_DE_DEPRECATED.value.SIG_META=Signaturpruefung unter: http://www.signaturpruefung.gv.at
+sig_obj.SIGNATURBLOCK_DE_DEPRECATED.value.SIG_LABEL=./images/signatur-logo_de.png
+
+#---------------------- MAIN TABLE -------------------------
+sig_obj.SIGNATURBLOCK_DE_DEPRECATED.table.main.1=SIG_VALUE-cv
+sig_obj.SIGNATURBLOCK_DE_DEPRECATED.table.main.2=SIG_LABEL-i|TABLE-info
+sig_obj.SIGNATURBLOCK_DE_DEPRECATED.table.main.3=SIG_META-cv
+
+sig_obj.SIGNATURBLOCK_DE_DEPRECATED.table.main.ColsWidth=1 6
+sig_obj.SIGNATURBLOCK_DE_DEPRECATED.table.main.Style.bgcolor=255 255 255
+sig_obj.SIGNATURBLOCK_DE_DEPRECATED.table.main.Style.padding=4
+sig_obj.SIGNATURBLOCK_DE_DEPRECATED.table.main.Style.border=0.1
+sig_obj.SIGNATURBLOCK_DE_DEPRECATED.table.main.Style.halign=center
+sig_obj.SIGNATURBLOCK_DE_DEPRECATED.table.main.Style.valuehalign=left
+sig_obj.SIGNATURBLOCK_DE_DEPRECATED.table.main.Style.valign=middle
+sig_obj.SIGNATURBLOCK_DE_DEPRECATED.table.main.Style.imagevalign=middle
+sig_obj.SIGNATURBLOCK_DE_DEPRECATED.table.main.Style.font=HELVETICA,8,BOLD
+sig_obj.SIGNATURBLOCK_DE_DEPRECATED.table.main.Style.valuefont=COURIER,8,NORMAL
+
+#---------------------- INFO TABLE -------------------------
+sig_obj.SIGNATURBLOCK_DE_DEPRECATED.table.info.ColsWidth=1 4
+sig_obj.SIGNATURBLOCK_DE_DEPRECATED.table.info.1=SIG_SUBJECT-cv
+sig_obj.SIGNATURBLOCK_DE_DEPRECATED.table.info.2=SIG_DATE-cv
+sig_obj.SIGNATURBLOCK_DE_DEPRECATED.table.info.3=SIG_ISSUER-cv
+sig_obj.SIGNATURBLOCK_DE_DEPRECATED.table.info.4=SIG_NUMBER-cv
+sig_obj.SIGNATURBLOCK_DE_DEPRECATED.table.info.5=SIG_KZ-cv
+sig_obj.SIGNATURBLOCK_DE_DEPRECATED.table.info.6=SIG_ID-cv
diff --git a/pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/cfg/profiles/SIGNATURBLOCK_DE_NOTE.properties b/pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/cfg/profiles/SIGNATURBLOCK_DE_NOTE.properties
new file mode 100644
index 0000000..9843a41
--- /dev/null
+++ b/pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/cfg/profiles/SIGNATURBLOCK_DE_NOTE.properties
@@ -0,0 +1,60 @@
+###################################################################################################
+# PROFIL: Signaturblock (Deutsch) mit neuem Layout und Hinweistext
+
+sig_obj.SIGNATURBLOCK_DE_NOTE.description=Standardsignatur Deutsch mit neuem Layout
+
+sig_obj.types.SIGNATURBLOCK_DE_NOTE=on
+
+sig_obj.SIGNATURBLOCK_DE_NOTE.key.SIG_VALUE=Signaturwert
+sig_obj.SIGNATURBLOCK_DE_NOTE.key.SIG_SUBJECT=Unterzeichner
+sig_obj.SIGNATURBLOCK_DE_NOTE.key.SIG_ISSUER=Aussteller-Zertifikat
+sig_obj.SIGNATURBLOCK_DE_NOTE.key.SIG_NUMBER=Serien-Nr.
+sig_obj.SIGNATURBLOCK_DE_NOTE.key.SIG_KZ=Methode
+sig_obj.SIGNATURBLOCK_DE_NOTE.key.SIG_ID=Parameter
+sig_obj.SIGNATURBLOCK_DE_NOTE.key.SIG_META=Pr\u00fcfinformation
+sig_obj.SIGNATURBLOCK_DE_NOTE.key.SIG_NOTE=Hinweis
+sig_obj.SIGNATURBLOCK_DE_NOTE.key.SIG_DATE=Datum/Zeit-UTC
+
+
+
+sig_obj.SIGNATURBLOCK_DE_NOTE.value.SIG_SUBJECT=${subject.T != null ? (subject.T + " ") : ""}${subject.CN}
+
+sig_obj.SIGNATURBLOCK_DE_NOTE.pos=f:80
+sig_obj.SIGNATURBLOCK_DE_NOTE.adobeSignFieldValue=PDF-AS Signatur
+sig_obj.SIGNATURBLOCK_DE_NOTE.adobeSignReasonValue=Signaturpruefung unter http://www.signaturpruefung.gv.at
+sig_obj.SIGNATURBLOCK_DE_NOTE.verifyURL=http://www.signaturpruefung.gv.at
+
+# WAI
+sig_obj.SIGNATURBLOCK_DE_NOTE.sigLogoAltText=Abgebildet ist eine Standard-Signaturbildmarke.
+
+sig_obj.SIGNATURBLOCK_DE_NOTE.value.SIG_META=Signaturpruefung unter: http://www.signaturpruefung.gv.at
+sig_obj.SIGNATURBLOCK_DE_NOTE.value.SIG_LABEL=./images/signatur-logo_de.png
+sig_obj.SIGNATURBLOCK_DE_NOTE.value.SIG_NOTE=Dieses mit einer qualifizierten elektronischen Signatur versehene Dokument ist gem\u00e4\u00df \u00a7\u00A04 Abs.\u00A01 Signaturgesetz einem handschriftlich unterschriebenen Dokument grunds\u00e4tzlich rechtlich gleichgestellt.
+
+
+#---------------------- MAIN TABLE -------------------------
+sig_obj.SIGNATURBLOCK_DE_NOTE.table.main.1=SIG_VALUE-cv
+sig_obj.SIGNATURBLOCK_DE_NOTE.table.main.2=SIG_LABEL-i|TABLE-info
+sig_obj.SIGNATURBLOCK_DE_NOTE.table.main.3=SIG_META-cv
+sig_obj.SIGNATURBLOCK_DE_NOTE.table.main.4=SIG_NOTE-cv
+sig_obj.SIGNATURBLOCK_DE_NOTE.table.main.5=SIG_DATE-cv
+
+
+sig_obj.SIGNATURBLOCK_DE_NOTE.table.main.ColsWidth=1 6
+sig_obj.SIGNATURBLOCK_DE_NOTE.table.main.Style.bgcolor=255 255 255
+sig_obj.SIGNATURBLOCK_DE_NOTE.table.main.Style.padding=4
+sig_obj.SIGNATURBLOCK_DE_NOTE.table.main.Style.border=0.1
+sig_obj.SIGNATURBLOCK_DE_NOTE.table.main.Style.halign=center
+sig_obj.SIGNATURBLOCK_DE_NOTE.table.main.Style.valuehalign=left
+sig_obj.SIGNATURBLOCK_DE_NOTE.table.main.Style.valign=top
+sig_obj.SIGNATURBLOCK_DE_NOTE.table.main.Style.imagevalign=middle
+sig_obj.SIGNATURBLOCK_DE_NOTE.table.main.Style.font=HELVETICA,8,BOLD
+sig_obj.SIGNATURBLOCK_DE_NOTE.table.main.Style.valuefont=COURIER,8,NORMAL
+
+#---------------------- INFO TABLE -------------------------
+sig_obj.SIGNATURBLOCK_DE_NOTE.table.info.ColsWidth=1 4
+sig_obj.SIGNATURBLOCK_DE_NOTE.table.info.1=SIG_SUBJECT-cv
+sig_obj.SIGNATURBLOCK_DE_NOTE.table.info.2=SIG_ISSUER-cv
+sig_obj.SIGNATURBLOCK_DE_NOTE.table.info.3=SIG_NUMBER-cv
+sig_obj.SIGNATURBLOCK_DE_NOTE.table.info.4=SIG_KZ-cv
+sig_obj.SIGNATURBLOCK_DE_NOTE.table.info.5=SIG_ID-cv
diff --git a/pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/cfg/profiles/SIGNATURBLOCK_DE_PDFA.properties b/pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/cfg/profiles/SIGNATURBLOCK_DE_PDFA.properties
new file mode 100644
index 0000000..bf67fe5
--- /dev/null
+++ b/pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/cfg/profiles/SIGNATURBLOCK_DE_PDFA.properties
@@ -0,0 +1,57 @@
+###################################################################################################
+# PROFIL: Signaturblock (Deutsch), PDF/A-1b
+
+sig_obj.SIGNATURBLOCK_DE_PDFA.description=Standardsignatur Deutsch, PDF/A-1b
+
+sig_obj.types.SIGNATURBLOCK_DE_PDFA=on
+
+# enable/disable PDF/A1b support for this profile
+sig_obj.SIGNATURBLOCK_DE_PDFA.key.SIG_PDFA1B_VALID=true
+
+sig_obj.SIGNATURBLOCK_DE_PDFA.key.SIG_VALUE=Signaturwert
+sig_obj.SIGNATURBLOCK_DE_PDFA.key.SIG_SUBJECT=Unterzeichner
+sig_obj.SIGNATURBLOCK_DE_PDFA.key.SIG_ISSUER=Aussteller-Zertifikat
+sig_obj.SIGNATURBLOCK_DE_PDFA.key.SIG_NUMBER=Serien-Nr.
+sig_obj.SIGNATURBLOCK_DE_PDFA.key.SIG_KZ=Methode
+sig_obj.SIGNATURBLOCK_DE_PDFA.key.SIG_ID=Parameter
+sig_obj.SIGNATURBLOCK_DE_PDFA.key.SIG_META=Pr\u00fcfinformation
+sig_obj.SIGNATURBLOCK_DE_PDFA.key.SIG_DATE=Datum/Zeit-UTC
+
+
+sig_obj.SIGNATURBLOCK_DE_PDFA.value.SIG_SUBJECT=${subject.T != null ? (subject.T + " ") : ""}${subject.CN}
+
+sig_obj.SIGNATURBLOCK_DE_PDFA.pos=f:80
+sig_obj.SIGNATURBLOCK_DE_PDFA.adobeSignFieldValue=PDF-AS Signatur
+sig_obj.SIGNATURBLOCK_DE_PDFA.adobeSignReasonValue=Signaturpruefung unter: http://www.signaturpruefung.gv.at
+sig_obj.SIGNATURBLOCK_DE_PDFA.verifyURL=http://www.signaturpruefung.gv.at
+
+# WAI
+sig_obj.SIGNATURBLOCK_DE_PDFA.sigLogoAltText=Abgebildet ist eine Standard-Signaturbildmarke.
+
+sig_obj.SIGNATURBLOCK_DE_PDFA.value.SIG_META=Signaturpruefung unter: http://www.signaturpruefung.gv.at
+sig_obj.SIGNATURBLOCK_DE_PDFA.value.SIG_LABEL=./images/signatur-logo_de.png
+
+#---------------------- MAIN TABLE -------------------------
+sig_obj.SIGNATURBLOCK_DE_PDFA.table.main.1=SIG_VALUE-cv
+sig_obj.SIGNATURBLOCK_DE_PDFA.table.main.2=SIG_LABEL-i|TABLE-info
+sig_obj.SIGNATURBLOCK_DE_PDFA.table.main.3=SIG_META-cv
+sig_obj.SIGNATURBLOCK_DE_PDFA.table.main.4=SIG_DATE-cv
+
+sig_obj.SIGNATURBLOCK_DE_PDFA.table.main.ColsWidth=1 5.5
+sig_obj.SIGNATURBLOCK_DE_PDFA.table.main.Style.bgcolor=255 255 255
+sig_obj.SIGNATURBLOCK_DE_PDFA.table.main.Style.padding=4
+sig_obj.SIGNATURBLOCK_DE_PDFA.table.main.Style.border=0.1
+sig_obj.SIGNATURBLOCK_DE_PDFA.table.main.Style.halign=center
+sig_obj.SIGNATURBLOCK_DE_PDFA.table.main.Style.valuehalign=left
+sig_obj.SIGNATURBLOCK_DE_PDFA.table.main.Style.valign=top
+sig_obj.SIGNATURBLOCK_DE_PDFA.table.main.Style.imagevalign=middle
+sig_obj.SIGNATURBLOCK_DE_PDFA.table.main.Style.font=TTF:DejaVuSansCondensed-Bold.ttf,8
+sig_obj.SIGNATURBLOCK_DE_PDFA.table.main.Style.valuefont=TTF:DejaVuSansMono.ttf,8
+
+#---------------------- INFO TABLE -------------------------
+sig_obj.SIGNATURBLOCK_DE_PDFA.table.info.ColsWidth=1 3.5
+sig_obj.SIGNATURBLOCK_DE_PDFA.table.info.1=SIG_SUBJECT-cv
+sig_obj.SIGNATURBLOCK_DE_PDFA.table.info.2=SIG_ISSUER-cv
+sig_obj.SIGNATURBLOCK_DE_PDFA.table.info.3=SIG_NUMBER-cv
+sig_obj.SIGNATURBLOCK_DE_PDFA.table.info.4=SIG_KZ-cv
+sig_obj.SIGNATURBLOCK_DE_PDFA.table.info.5=SIG_ID-cv
diff --git a/pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/cfg/profiles/SIGNATURBLOCK_DE_PDFA_NOTE.properties b/pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/cfg/profiles/SIGNATURBLOCK_DE_PDFA_NOTE.properties
new file mode 100644
index 0000000..d204e09
--- /dev/null
+++ b/pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/cfg/profiles/SIGNATURBLOCK_DE_PDFA_NOTE.properties
@@ -0,0 +1,60 @@
+###################################################################################################
+# PROFIL: Signaturblock (Deutsch), PDF/A-1b und mit Hinweistext
+
+sig_obj.SIGNATURBLOCK_DE_PDFA_NOTE.description=Standardsignatur Deutsch, PDF/A-1b
+
+sig_obj.types.SIGNATURBLOCK_DE_PDFA_NOTE=on
+
+# enable/disable PDF/A1b support for this profile
+sig_obj.SIGNATURBLOCK_DE_PDFA_NOTE.key.SIG_PDFA1B_VALID=true
+
+sig_obj.SIGNATURBLOCK_DE_PDFA_NOTE.key.SIG_VALUE=Signaturwert
+sig_obj.SIGNATURBLOCK_DE_PDFA_NOTE.key.SIG_SUBJECT=Unterzeichner
+sig_obj.SIGNATURBLOCK_DE_PDFA_NOTE.key.SIG_ISSUER=Aussteller-Zertifikat
+sig_obj.SIGNATURBLOCK_DE_PDFA_NOTE.key.SIG_NUMBER=Serien-Nr.
+sig_obj.SIGNATURBLOCK_DE_PDFA_NOTE.key.SIG_KZ=Methode
+sig_obj.SIGNATURBLOCK_DE_PDFA_NOTE.key.SIG_ID=Parameter
+sig_obj.SIGNATURBLOCK_DE_PDFA_NOTE.key.SIG_META=Pr\u00fcfinformation
+sig_obj.SIGNATURBLOCK_DE_PDFA_NOTE.key.SIG_NOTE=Hinweis
+sig_obj.SIGNATURBLOCK_DE_PDFA_NOTE.key.SIG_DATE=Datum/Zeit-UTC
+
+
+sig_obj.SIGNATURBLOCK_DE_PDFA_NOTE.value.SIG_SUBJECT=${subject.T != null ? (subject.T + " ") : ""}${subject.CN}
+
+sig_obj.SIGNATURBLOCK_DE_PDFA_NOTE.pos=f:80
+sig_obj.SIGNATURBLOCK_DE_PDFA_NOTE.adobeSignFieldValue=PDF-AS Signatur
+sig_obj.SIGNATURBLOCK_DE_PDFA_NOTE.adobeSignReasonValue=Signaturpruefung unter: http://www.signaturpruefung.gv.at
+sig_obj.SIGNATURBLOCK_DE_PDFA_NOTE.verifyURL=http://www.signaturpruefung.gv.at
+
+# WAI
+sig_obj.SIGNATURBLOCK_DE_PDFA_NOTE.sigLogoAltText=Abgebildet ist eine Standard-Signaturbildmarke.
+
+sig_obj.SIGNATURBLOCK_DE_PDFA_NOTE.value.SIG_META=Signaturpruefung unter: http://www.signaturpruefung.gv.at
+sig_obj.SIGNATURBLOCK_DE_PDFA_NOTE.value.SIG_LABEL=./images/signatur-logo_de.png
+sig_obj.SIGNATURBLOCK_DE_PDFA_NOTE.value.SIG_NOTE=Dieses mit einer qualifizierten elektronischen Signatur versehene Dokument ist gem\u00e4\u00df \u00a7\u00A04 Abs.\u00A01 Signaturgesetz einem handschriftlich unterschriebenen Dokument grunds\u00e4tzlich rechtlich gleichgestellt.
+
+#---------------------- MAIN TABLE -------------------------
+sig_obj.SIGNATURBLOCK_DE_PDFA_NOTE.table.main.1=SIG_VALUE-cv
+sig_obj.SIGNATURBLOCK_DE_PDFA_NOTE.table.main.2=SIG_LABEL-i|TABLE-info
+sig_obj.SIGNATURBLOCK_DE_PDFA_NOTE.table.main.3=SIG_META-cv
+sig_obj.SIGNATURBLOCK_DE_PDFA_NOTE.table.main.4=SIG_NOTE-cv
+sig_obj.SIGNATURBLOCK_DE_PDFA_NOTE.table.main.5=SIG_DATE-cv
+
+sig_obj.SIGNATURBLOCK_DE_PDFA_NOTE.table.main.ColsWidth=1 5.5
+sig_obj.SIGNATURBLOCK_DE_PDFA_NOTE.table.main.Style.bgcolor=255 255 255
+sig_obj.SIGNATURBLOCK_DE_PDFA_NOTE.table.main.Style.padding=4
+sig_obj.SIGNATURBLOCK_DE_PDFA_NOTE.table.main.Style.border=0.1
+sig_obj.SIGNATURBLOCK_DE_PDFA_NOTE.table.main.Style.halign=center
+sig_obj.SIGNATURBLOCK_DE_PDFA_NOTE.table.main.Style.valuehalign=left
+sig_obj.SIGNATURBLOCK_DE_PDFA_NOTE.table.main.Style.valign=top
+sig_obj.SIGNATURBLOCK_DE_PDFA_NOTE.table.main.Style.imagevalign=middle
+sig_obj.SIGNATURBLOCK_DE_PDFA_NOTE.table.main.Style.font=TTF:DejaVuSansCondensed-Bold.ttf,8
+sig_obj.SIGNATURBLOCK_DE_PDFA_NOTE.table.main.Style.valuefont=TTF:DejaVuSansMono.ttf,8
+
+#---------------------- INFO TABLE -------------------------
+sig_obj.SIGNATURBLOCK_DE_PDFA_NOTE.table.info.ColsWidth=1 3.5
+sig_obj.SIGNATURBLOCK_DE_PDFA_NOTE.table.info.1=SIG_SUBJECT-cv
+sig_obj.SIGNATURBLOCK_DE_PDFA_NOTE.table.info.2=SIG_ISSUER-cv
+sig_obj.SIGNATURBLOCK_DE_PDFA_NOTE.table.info.3=SIG_NUMBER-cv
+sig_obj.SIGNATURBLOCK_DE_PDFA_NOTE.table.info.4=SIG_KZ-cv
+sig_obj.SIGNATURBLOCK_DE_PDFA_NOTE.table.info.5=SIG_ID-cv
diff --git a/pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/cfg/profiles/SIGNATURBLOCK_EN.properties b/pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/cfg/profiles/SIGNATURBLOCK_EN.properties
new file mode 100644
index 0000000..db68fb6
--- /dev/null
+++ b/pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/cfg/profiles/SIGNATURBLOCK_EN.properties
@@ -0,0 +1,54 @@
+###################################################################################################
+# PROFIL: Signaturblock (Englisch) mit neuem Layout
+
+sig_obj.SIGNATURBLOCK_EN.description=Standardsignatur Englisch mit neuem Layout
+
+sig_obj.types.SIGNATURBLOCK_EN=on
+
+sig_obj.SIGNATURBLOCK_EN.key.SIG_VALUE=Signature Value
+sig_obj.SIGNATURBLOCK_EN.key.SIG_SUBJECT=Signatory
+sig_obj.SIGNATURBLOCK_EN.key.SIG_ISSUER=Issuer-Certificate
+sig_obj.SIGNATURBLOCK_EN.key.SIG_NUMBER=Serial-No.
+sig_obj.SIGNATURBLOCK_EN.key.SIG_KZ=Method
+sig_obj.SIGNATURBLOCK_EN.key.SIG_ID=Parameter
+sig_obj.SIGNATURBLOCK_EN.key.SIG_META=Verification
+sig_obj.SIGNATURBLOCK_EN.key.SIG_DATE=Date/Time-UTC
+
+sig_obj.SIGNATURBLOCK_EN.value.SIG_SUBJECT=${subject.T != null ? (subject.T + " ") : ""}${subject.CN}
+
+sig_obj.SIGNATURBLOCK_EN.pos=f:80
+sig_obj.SIGNATURBLOCK_EN.adobeSignFieldValue=PDF-AS Signature
+sig_obj.SIGNATURBLOCK_EN.adobeSignReasonValue=Signature verification at http://www.signature-verification.gv.at
+sig_obj.SIGNATURBLOCK_EN.verifyURL=http://www.signature-verification.gv.at
+
+# WAI
+sig_obj.SIGNATURBLOCK_EN.sigLogoAltText=A standard signature logo is shown.
+
+sig_obj.SIGNATURBLOCK_EN.value.SIG_META=Signature verification at: http://www.signature-verification.gv.at
+sig_obj.SIGNATURBLOCK_EN.value.SIG_LABEL=./images/signatur-logo_en.png
+
+#---------------------- MAIN TABLE -------------------------
+sig_obj.SIGNATURBLOCK_EN.table.main.1=SIG_VALUE-cv
+sig_obj.SIGNATURBLOCK_EN.table.main.2=SIG_LABEL-i|TABLE-info
+sig_obj.SIGNATURBLOCK_EN.table.main.3=SIG_META-cv
+sig_obj.SIGNATURBLOCK_EN.table.main.4=SIG_DATE-cv
+
+
+sig_obj.SIGNATURBLOCK_EN.table.main.ColsWidth=1 6
+sig_obj.SIGNATURBLOCK_EN.table.main.Style.bgcolor=255 255 255
+sig_obj.SIGNATURBLOCK_EN.table.main.Style.padding=4
+sig_obj.SIGNATURBLOCK_EN.table.main.Style.border=0.1
+sig_obj.SIGNATURBLOCK_EN.table.main.Style.halign=center
+sig_obj.SIGNATURBLOCK_EN.table.main.Style.valuehalign=left
+sig_obj.SIGNATURBLOCK_EN.table.main.Style.valign=top
+sig_obj.SIGNATURBLOCK_EN.table.main.Style.imagevalign=middle
+sig_obj.SIGNATURBLOCK_EN.table.main.Style.font=HELVETICA,8,BOLD
+sig_obj.SIGNATURBLOCK_EN.table.main.Style.valuefont=COURIER,8,NORMAL
+
+#---------------------- INFO TABLE -------------------------
+sig_obj.SIGNATURBLOCK_EN.table.info.ColsWidth=1 5
+sig_obj.SIGNATURBLOCK_EN.table.info.1=SIG_SUBJECT-cv
+sig_obj.SIGNATURBLOCK_EN.table.info.2=SIG_ISSUER-cv
+sig_obj.SIGNATURBLOCK_EN.table.info.3=SIG_NUMBER-cv
+sig_obj.SIGNATURBLOCK_EN.table.info.4=SIG_KZ-cv
+sig_obj.SIGNATURBLOCK_EN.table.info.5=SIG_ID-cv
diff --git a/pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/cfg/profiles/SIGNATURBLOCK_EN_DEPRECATED.properties b/pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/cfg/profiles/SIGNATURBLOCK_EN_DEPRECATED.properties
new file mode 100644
index 0000000..e4d688c
--- /dev/null
+++ b/pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/cfg/profiles/SIGNATURBLOCK_EN_DEPRECATED.properties
@@ -0,0 +1,53 @@
+###################################################################################################
+# PROFIL: Signaturblock (Englisch)
+
+sig_obj.SIGNATURBLOCK_EN_DEPRECATED.description=Standardsignatur Englisch
+
+sig_obj.types.SIGNATURBLOCK_EN_DEPRECATED=on
+
+sig_obj.SIGNATURBLOCK_EN_DEPRECATED.key.SIG_VALUE=Signature Value
+sig_obj.SIGNATURBLOCK_EN_DEPRECATED.key.SIG_SUBJECT=Signatory
+sig_obj.SIGNATURBLOCK_EN_DEPRECATED.key.SIG_DATE=Date/Time-UTC
+sig_obj.SIGNATURBLOCK_EN_DEPRECATED.key.SIG_ISSUER=Issuer-Certificate
+sig_obj.SIGNATURBLOCK_EN_DEPRECATED.key.SIG_NUMBER=Serial-No.
+sig_obj.SIGNATURBLOCK_EN_DEPRECATED.key.SIG_KZ=Method
+sig_obj.SIGNATURBLOCK_EN_DEPRECATED.key.SIG_ID=Parameter
+sig_obj.SIGNATURBLOCK_EN_DEPRECATED.key.SIG_META=Verification
+
+sig_obj.SIGNATURBLOCK_EN_DEPRECATED.value.SIG_SUBJECT=${subject.T != null ? (subject.T + " ") : ""}${subject.CN}
+
+sig_obj.SIGNATURBLOCK_EN_DEPRECATED.pos=f:80
+sig_obj.SIGNATURBLOCK_EN_DEPRECATED.adobeSignFieldValue=PDF-AS Signature
+sig_obj.SIGNATURBLOCK_EN_DEPRECATED.adobeSignReasonValue=Information about the verification can be found at http://www.signature-verification.gv.at
+sig_obj.SIGNATURBLOCK_EN_DEPRECATED.verifyURL=http://www.signature-verification.gv.at
+
+# WAI
+sig_obj.SIGNATURBLOCK_EN_DEPRECATED.sigLogoAltText=A standard signature logo is shown.
+
+sig_obj.SIGNATURBLOCK_EN_DEPRECATED.value.SIG_META=Signature verification at: http://www.signature-verification.gv.at
+sig_obj.SIGNATURBLOCK_EN_DEPRECATED.value.SIG_LABEL=./images/signatur-logo_en.png
+
+#---------------------- MAIN TABLE -------------------------
+sig_obj.SIGNATURBLOCK_EN_DEPRECATED.table.main.1=SIG_VALUE-cv
+sig_obj.SIGNATURBLOCK_EN_DEPRECATED.table.main.2=SIG_LABEL-i|TABLE-info
+sig_obj.SIGNATURBLOCK_EN_DEPRECATED.table.main.3=SIG_META-cv
+
+sig_obj.SIGNATURBLOCK_EN_DEPRECATED.table.main.ColsWidth=1 6
+sig_obj.SIGNATURBLOCK_EN_DEPRECATED.table.main.Style.bgcolor=255 255 255
+sig_obj.SIGNATURBLOCK_EN_DEPRECATED.table.main.Style.padding=4
+sig_obj.SIGNATURBLOCK_EN_DEPRECATED.table.main.Style.border=0.1
+sig_obj.SIGNATURBLOCK_EN_DEPRECATED.table.main.Style.halign=center
+sig_obj.SIGNATURBLOCK_EN_DEPRECATED.table.main.Style.valuehalign=left
+sig_obj.SIGNATURBLOCK_EN_DEPRECATED.table.main.Style.valign=middle
+sig_obj.SIGNATURBLOCK_EN_DEPRECATED.table.main.Style.imagevalign=middle
+sig_obj.SIGNATURBLOCK_EN_DEPRECATED.table.main.Style.font=HELVETICA,8,BOLD
+sig_obj.SIGNATURBLOCK_EN_DEPRECATED.table.main.Style.valuefont=COURIER,8,NORMAL
+
+#---------------------- INFO TABLE -------------------------
+sig_obj.SIGNATURBLOCK_EN_DEPRECATED.table.info.ColsWidth=1 5
+sig_obj.SIGNATURBLOCK_EN_DEPRECATED.table.info.1=SIG_SUBJECT-cv
+sig_obj.SIGNATURBLOCK_EN_DEPRECATED.table.info.2=SIG_DATE-cv
+sig_obj.SIGNATURBLOCK_EN_DEPRECATED.table.info.3=SIG_ISSUER-cv
+sig_obj.SIGNATURBLOCK_EN_DEPRECATED.table.info.4=SIG_NUMBER-cv
+sig_obj.SIGNATURBLOCK_EN_DEPRECATED.table.info.5=SIG_KZ-cv
+sig_obj.SIGNATURBLOCK_EN_DEPRECATED.table.info.6=SIG_ID-cv
diff --git a/pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/cfg/profiles/SIGNATURBLOCK_EN_NOTE.properties b/pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/cfg/profiles/SIGNATURBLOCK_EN_NOTE.properties
new file mode 100644
index 0000000..cf5dd17
--- /dev/null
+++ b/pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/cfg/profiles/SIGNATURBLOCK_EN_NOTE.properties
@@ -0,0 +1,58 @@
+###################################################################################################
+# PROFIL: Signaturblock (Englisch) mit neuem Layout und Hinweistext
+
+sig_obj.SIGNATURBLOCK_EN_NOTE.description=Standardsignatur Englisch mit neuem Layout
+
+sig_obj.types.SIGNATURBLOCK_EN_NOTE=on
+
+sig_obj.SIGNATURBLOCK_EN_NOTE.key.SIG_VALUE=Signature Value
+sig_obj.SIGNATURBLOCK_EN_NOTE.key.SIG_SUBJECT=Signatory
+sig_obj.SIGNATURBLOCK_EN_NOTE.key.SIG_ISSUER=Issuer-Certificate
+sig_obj.SIGNATURBLOCK_EN_NOTE.key.SIG_NUMBER=Serial-No.
+sig_obj.SIGNATURBLOCK_EN_NOTE.key.SIG_KZ=Method
+sig_obj.SIGNATURBLOCK_EN_NOTE.key.SIG_ID=Parameter
+sig_obj.SIGNATURBLOCK_EN_NOTE.key.SIG_META=Verification
+sig_obj.SIGNATURBLOCK_EN_NOTE.key.SIG_NOTE=Note
+sig_obj.SIGNATURBLOCK_EN_NOTE.key.SIG_DATE=Date/Time-UTC
+
+sig_obj.SIGNATURBLOCK_EN_NOTE.value.SIG_SUBJECT=${subject.T != null ? (subject.T + " ") : ""}${subject.CN}
+
+sig_obj.SIGNATURBLOCK_EN_NOTE.pos=f:80
+sig_obj.SIGNATURBLOCK_EN_NOTE.adobeSignFieldValue=PDF-AS Signature
+sig_obj.SIGNATURBLOCK_EN_NOTE.adobeSignReasonValue=Signature verification at http://www.signature-verification.gv.at
+sig_obj.SIGNATURBLOCK_EN_NOTE.verifyURL=http://www.signature-verification.gv.at
+
+# WAI
+sig_obj.SIGNATURBLOCK_EN_NOTE.sigLogoAltText=A standard signature logo is shown.
+
+sig_obj.SIGNATURBLOCK_EN_NOTE.value.SIG_META=Signature verification at: http://www.signature-verification.gv.at
+sig_obj.SIGNATURBLOCK_EN_NOTE.value.SIG_LABEL=./images/signatur-logo_en.png
+sig_obj.SIGNATURBLOCK_EN_NOTE.value.SIG_NOTE=This document is signed with a qualified electronic signature. According to \u00a7\u00A04 art.\u00A01 of the Signature Act it in principle is legally equivalent to an handwritten signature.
+
+
+#---------------------- MAIN TABLE -------------------------
+sig_obj.SIGNATURBLOCK_EN_NOTE.table.main.1=SIG_VALUE-cv
+sig_obj.SIGNATURBLOCK_EN_NOTE.table.main.2=SIG_LABEL-i|TABLE-info
+sig_obj.SIGNATURBLOCK_EN_NOTE.table.main.3=SIG_META-cv
+sig_obj.SIGNATURBLOCK_EN_NOTE.table.main.4=SIG_NOTE-cv
+sig_obj.SIGNATURBLOCK_EN_NOTE.table.main.5=SIG_DATE-cv
+
+
+sig_obj.SIGNATURBLOCK_EN_NOTE.table.main.ColsWidth=1 6
+sig_obj.SIGNATURBLOCK_EN_NOTE.table.main.Style.bgcolor=255 255 255
+sig_obj.SIGNATURBLOCK_EN_NOTE.table.main.Style.padding=4
+sig_obj.SIGNATURBLOCK_EN_NOTE.table.main.Style.border=0.1
+sig_obj.SIGNATURBLOCK_EN_NOTE.table.main.Style.halign=center
+sig_obj.SIGNATURBLOCK_EN_NOTE.table.main.Style.valuehalign=left
+sig_obj.SIGNATURBLOCK_EN_NOTE.table.main.Style.valign=top
+sig_obj.SIGNATURBLOCK_EN_NOTE.table.main.Style.imagevalign=middle
+sig_obj.SIGNATURBLOCK_EN_NOTE.table.main.Style.font=HELVETICA,8,BOLD
+sig_obj.SIGNATURBLOCK_EN_NOTE.table.main.Style.valuefont=COURIER,8,NORMAL
+
+#---------------------- INFO TABLE -------------------------
+sig_obj.SIGNATURBLOCK_EN_NOTE.table.info.ColsWidth=1 5
+sig_obj.SIGNATURBLOCK_EN_NOTE.table.info.1=SIG_SUBJECT-cv
+sig_obj.SIGNATURBLOCK_EN_NOTE.table.info.2=SIG_ISSUER-cv
+sig_obj.SIGNATURBLOCK_EN_NOTE.table.info.3=SIG_NUMBER-cv
+sig_obj.SIGNATURBLOCK_EN_NOTE.table.info.4=SIG_KZ-cv
+sig_obj.SIGNATURBLOCK_EN_NOTE.table.info.5=SIG_ID-cv
diff --git a/pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/cfg/profiles/SIGNATURBLOCK_EN_PDFA.properties b/pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/cfg/profiles/SIGNATURBLOCK_EN_PDFA.properties
new file mode 100644
index 0000000..0541fdb
--- /dev/null
+++ b/pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/cfg/profiles/SIGNATURBLOCK_EN_PDFA.properties
@@ -0,0 +1,57 @@
+###################################################################################################
+# PROFIL: Signaturblock (Englisch), PDF/A-1b
+
+sig_obj.SIGNATURBLOCK_EN_PDFA.description=Standardsignatur Englisch, PDF/A-1b
+
+sig_obj.types.SIGNATURBLOCK_EN_PDFA=on
+
+# enable/disable PDF/A1b support for this profile
+sig_obj.SIGNATURBLOCK_EN_PDFA.key.SIG_PDFA1B_VALID=true
+
+sig_obj.SIGNATURBLOCK_EN_PDFA.key.SIG_VALUE=Signature Value
+sig_obj.SIGNATURBLOCK_EN_PDFA.key.SIG_SUBJECT=Signatory
+sig_obj.SIGNATURBLOCK_EN_PDFA.key.SIG_ISSUER=Issuer-Certificate
+sig_obj.SIGNATURBLOCK_EN_PDFA.key.SIG_NUMBER=Serial-No.
+sig_obj.SIGNATURBLOCK_EN_PDFA.key.SIG_KZ=Method
+sig_obj.SIGNATURBLOCK_EN_PDFA.key.SIG_ID=Parameter
+sig_obj.SIGNATURBLOCK_EN_PDFA.key.SIG_META=Verification
+sig_obj.SIGNATURBLOCK_EN_PDFA.key.SIG_DATE=Date/Time-UTC
+
+
+sig_obj.SIGNATURBLOCK_EN_PDFA.value.SIG_SUBJECT=${subject.T != null ? (subject.T + " ") : ""}${subject.CN}
+
+sig_obj.SIGNATURBLOCK_EN_PDFA.pos=f:80
+sig_obj.SIGNATURBLOCK_EN_PDFA.adobeSignFieldValue=PDF-AS Signature
+sig_obj.SIGNATURBLOCK_EN_PDFA.adobeSignReasonValue=Signature verification at http://www.signature-verification.gv.at
+sig_obj.SIGNATURBLOCK_EN_PDFA.verifyURL=http://www.signature-verification.gv.at
+
+# WAI
+sig_obj.SIGNATURBLOCK_EN_PDFA.sigLogoAltText=A standard signature logo is shown.
+
+sig_obj.SIGNATURBLOCK_EN_PDFA.value.SIG_META=Signature verification at: http://www.signature-verification.gv.at
+sig_obj.SIGNATURBLOCK_EN_PDFA.value.SIG_LABEL=./images/signatur-logo_en.png
+
+#---------------------- MAIN TABLE -------------------------
+sig_obj.SIGNATURBLOCK_EN_PDFA.table.main.1=SIG_VALUE-cv
+sig_obj.SIGNATURBLOCK_EN_PDFA.table.main.2=SIG_LABEL-i|TABLE-info
+sig_obj.SIGNATURBLOCK_EN_PDFA.table.main.3=SIG_META-cv
+sig_obj.SIGNATURBLOCK_EN_PDFA.table.main.4=SIG_DATE-cv
+
+sig_obj.SIGNATURBLOCK_EN_PDFA.table.main.ColsWidth=1 5.5
+sig_obj.SIGNATURBLOCK_EN_PDFA.table.main.Style.bgcolor=255 255 255
+sig_obj.SIGNATURBLOCK_EN_PDFA.table.main.Style.padding=4
+sig_obj.SIGNATURBLOCK_EN_PDFA.table.main.Style.border=0.1
+sig_obj.SIGNATURBLOCK_EN_PDFA.table.main.Style.halign=center
+sig_obj.SIGNATURBLOCK_EN_PDFA.table.main.Style.valuehalign=left
+sig_obj.SIGNATURBLOCK_EN_PDFA.table.main.Style.valign=top
+sig_obj.SIGNATURBLOCK_EN_PDFA.table.main.Style.imagevalign=middle
+sig_obj.SIGNATURBLOCK_EN_PDFA.table.main.Style.font=TTF:DejaVuSansCondensed-Bold.ttf,8
+sig_obj.SIGNATURBLOCK_EN_PDFA.table.main.Style.valuefont=TTF:DejaVuSansMono.ttf,8
+
+#---------------------- INFO TABLE -------------------------
+sig_obj.SIGNATURBLOCK_EN_PDFA.table.info.ColsWidth=1 4.5
+sig_obj.SIGNATURBLOCK_EN_PDFA.table.info.1=SIG_SUBJECT-cv
+sig_obj.SIGNATURBLOCK_EN_PDFA.table.info.2=SIG_ISSUER-cv
+sig_obj.SIGNATURBLOCK_EN_PDFA.table.info.3=SIG_NUMBER-cv
+sig_obj.SIGNATURBLOCK_EN_PDFA.table.info.4=SIG_KZ-cv
+sig_obj.SIGNATURBLOCK_EN_PDFA.table.info.5=SIG_ID-cv
diff --git a/pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/cfg/profiles/SIGNATURBLOCK_EN_PDFA_NOTE.properties b/pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/cfg/profiles/SIGNATURBLOCK_EN_PDFA_NOTE.properties
new file mode 100644
index 0000000..840fdf5
--- /dev/null
+++ b/pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/cfg/profiles/SIGNATURBLOCK_EN_PDFA_NOTE.properties
@@ -0,0 +1,60 @@
+###################################################################################################
+# PROFIL: Signaturblock (Englisch), PDF/A-1b und mit Hinweistext
+
+sig_obj.SIGNATURBLOCK_EN_PDFA_NOTE.description=Standardsignatur Englisch, PDF/A-1b
+
+sig_obj.types.SIGNATURBLOCK_EN_PDFA_NOTE=on
+
+# enable/disable PDF/A1b support for this profile
+sig_obj.SIGNATURBLOCK_EN_PDFA_NOTE.key.SIG_PDFA1B_VALID=true
+
+sig_obj.SIGNATURBLOCK_EN_PDFA_NOTE.key.SIG_VALUE=Signature Value
+sig_obj.SIGNATURBLOCK_EN_PDFA_NOTE.key.SIG_SUBJECT=Signatory
+sig_obj.SIGNATURBLOCK_EN_PDFA_NOTE.key.SIG_ISSUER=Issuer-Certificate
+sig_obj.SIGNATURBLOCK_EN_PDFA_NOTE.key.SIG_NUMBER=Serial-No.
+sig_obj.SIGNATURBLOCK_EN_PDFA_NOTE.key.SIG_KZ=Method
+sig_obj.SIGNATURBLOCK_EN_PDFA_NOTE.key.SIG_ID=Parameter
+sig_obj.SIGNATURBLOCK_EN_PDFA_NOTE.key.SIG_META=Verification
+sig_obj.SIGNATURBLOCK_EN_PDFA_NOTE.key.SIG_NOTE=Note
+sig_obj.SIGNATURBLOCK_EN_PDFA_NOTE.key.SIG_DATE=Date/Time-UTC
+
+
+sig_obj.SIGNATURBLOCK_EN_PDFA_NOTE.value.SIG_SUBJECT=${subject.T != null ? (subject.T + " ") : ""}${subject.CN}
+
+sig_obj.SIGNATURBLOCK_EN_PDFA_NOTE.pos=f:80
+sig_obj.SIGNATURBLOCK_EN_PDFA_NOTE.adobeSignFieldValue=PDF-AS Signature
+sig_obj.SIGNATURBLOCK_EN_PDFA_NOTE.adobeSignReasonValue=Signature verification at http://www.signature-verification.gv.at
+sig_obj.SIGNATURBLOCK_EN_PDFA_NOTE.verifyURL=http://www.signature-verification.gv.at
+
+# WAI
+sig_obj.SIGNATURBLOCK_EN_PDFA_NOTE.sigLogoAltText=A standard signature logo is shown.
+
+sig_obj.SIGNATURBLOCK_EN_PDFA_NOTE.value.SIG_META=Signature verification at: http://www.signature-verification.gv.at
+sig_obj.SIGNATURBLOCK_EN_PDFA_NOTE.value.SIG_LABEL=./images/signatur-logo_en.png
+sig_obj.SIGNATURBLOCK_EN_PDFA_NOTE.value.SIG_NOTE=This document is signed with a qualified electronic signature. According to \u00a7\u00A04 art.\u00A01 of the Signature Act it in principle is legally equivalent to an handwritten signature.
+
+#---------------------- MAIN TABLE -------------------------
+sig_obj.SIGNATURBLOCK_EN_PDFA_NOTE.table.main.1=SIG_VALUE-cv
+sig_obj.SIGNATURBLOCK_EN_PDFA_NOTE.table.main.2=SIG_LABEL-i|TABLE-info
+sig_obj.SIGNATURBLOCK_EN_PDFA_NOTE.table.main.3=SIG_META-cv
+sig_obj.SIGNATURBLOCK_EN_PDFA_NOTE.table.main.4=SIG_NOTE-cv
+sig_obj.SIGNATURBLOCK_EN_PDFA_NOTE.table.main.5=SIG_DATE-cv
+
+sig_obj.SIGNATURBLOCK_EN_PDFA_NOTE.table.main.ColsWidth=1 5.5
+sig_obj.SIGNATURBLOCK_EN_PDFA_NOTE.table.main.Style.bgcolor=255 255 255
+sig_obj.SIGNATURBLOCK_EN_PDFA_NOTE.table.main.Style.padding=4
+sig_obj.SIGNATURBLOCK_EN_PDFA_NOTE.table.main.Style.border=0.1
+sig_obj.SIGNATURBLOCK_EN_PDFA_NOTE.table.main.Style.halign=center
+sig_obj.SIGNATURBLOCK_EN_PDFA_NOTE.table.main.Style.valuehalign=left
+sig_obj.SIGNATURBLOCK_EN_PDFA_NOTE.table.main.Style.valign=top
+sig_obj.SIGNATURBLOCK_EN_PDFA_NOTE.table.main.Style.imagevalign=middle
+sig_obj.SIGNATURBLOCK_EN_PDFA_NOTE.table.main.Style.font=TTF:DejaVuSansCondensed-Bold.ttf,8
+sig_obj.SIGNATURBLOCK_EN_PDFA_NOTE.table.main.Style.valuefont=TTF:DejaVuSansMono.ttf,8
+
+#---------------------- INFO TABLE -------------------------
+sig_obj.SIGNATURBLOCK_EN_PDFA_NOTE.table.info.ColsWidth=1 4.5
+sig_obj.SIGNATURBLOCK_EN_PDFA_NOTE.table.info.1=SIG_SUBJECT-cv
+sig_obj.SIGNATURBLOCK_EN_PDFA_NOTE.table.info.2=SIG_ISSUER-cv
+sig_obj.SIGNATURBLOCK_EN_PDFA_NOTE.table.info.3=SIG_NUMBER-cv
+sig_obj.SIGNATURBLOCK_EN_PDFA_NOTE.table.info.4=SIG_KZ-cv
+sig_obj.SIGNATURBLOCK_EN_PDFA_NOTE.table.info.5=SIG_ID-cv
diff --git a/pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/cfg/profiles/SIGNATURBLOCK_MINIMAL_DE.properties b/pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/cfg/profiles/SIGNATURBLOCK_MINIMAL_DE.properties
new file mode 100644
index 0000000..6ed88e9
--- /dev/null
+++ b/pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/cfg/profiles/SIGNATURBLOCK_MINIMAL_DE.properties
@@ -0,0 +1,33 @@
+###################################################################################################
+# PROFIL: minimaler Signaturblock (Deutsch)
+
+sig_obj.types.SIGNATURBLOCK_MINIMAL_DE=on
+
+sig_obj.SIGNATURBLOCK_MINIMAL_DE.description=minimale Standardsignatur Deutsch
+sig_obj.SIGNATURBLOCK_MINIMAL_DE.key.SIG_META=Pr\u00fcfinformation
+
+sig_obj.SIGNATURBLOCK_MINIMAL_DE.pos=w:230.0;f:80
+sig_obj.SIGNATURBLOCK_MINIMAL_DE.adobeSignFieldValue=PDF-AS Signatur
+sig_obj.SIGNATURBLOCK_MINIMAL_DE.adobeSignReasonValue=Signaturpruefung unter http://www.signaturpruefung.gv.at
+sig_obj.SIGNATURBLOCK_MINIMAL_DE.verifyURL=http://www.signaturpruefung.gv.at
+
+sig_obj.SIGNATURBLOCK_MINIMAL_DE.value.SIG_META=Signaturpruefung unter: http://www.signaturpruefung.gv.at
+sig_obj.SIGNATURBLOCK_MINIMAL_DE.value.SIG_LABEL=./images/signatur-logo_de.png
+sig_obj.SIGNATURBLOCK_MINIMAL_DE.table.main.Style.imagescaletofit=65.0;65.0
+
+# WAI
+sig_obj.SIGNATURBLOCK_MINIMAL_DE.sigLogoAltText=Abgebildet ist eine Standard-Signaturbildmarke.
+
+#---------------------- MAIN TABLE -------------------------
+sig_obj.SIGNATURBLOCK_MINIMAL_DE.table.main.1=SIG_LABEL-i
+sig_obj.SIGNATURBLOCK_MINIMAL_DE.table.main.2=SIG_META-v
+
+sig_obj.SIGNATURBLOCK_MINIMAL_DE.table.main.ColsWidth=1
+sig_obj.SIGNATURBLOCK_MINIMAL_DE.table.main.Style.bgcolor=255 255 255
+sig_obj.SIGNATURBLOCK_MINIMAL_DE.table.main.Style.padding=4
+sig_obj.SIGNATURBLOCK_MINIMAL_DE.table.main.Style.border=0
+sig_obj.SIGNATURBLOCK_MINIMAL_DE.table.main.Style.halign=center
+sig_obj.SIGNATURBLOCK_MINIMAL_DE.table.main.Style.valuehalign=left
+sig_obj.SIGNATURBLOCK_MINIMAL_DE.table.main.Style.valign=middle
+sig_obj.SIGNATURBLOCK_MINIMAL_DE.table.main.Style.font=HELVETICA,9,NORMAL
+sig_obj.SIGNATURBLOCK_MINIMAL_DE.table.main.Style.valuefont=HELVETICA,9,NORMAL
diff --git a/pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/cfg/profiles/SIGNATURBLOCK_MINIMAL_EN.properties b/pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/cfg/profiles/SIGNATURBLOCK_MINIMAL_EN.properties
new file mode 100644
index 0000000..6a6374b
--- /dev/null
+++ b/pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/cfg/profiles/SIGNATURBLOCK_MINIMAL_EN.properties
@@ -0,0 +1,33 @@
+###################################################################################################
+# PROFIL: minimaler Signaturblock (Englisch)
+
+sig_obj.SIGNATURBLOCK_MINIMAL_EN.description=minimale Standardsignatur Englisch
+
+sig_obj.types.SIGNATURBLOCK_MINIMAL_EN=on
+
+sig_obj.SIGNATURBLOCK_MINIMAL_EN.key.SIG_META=Verification
+sig_obj.SIGNATURBLOCK_MINIMAL_EN.pos=w:230.0;f:80
+sig_obj.SIGNATURBLOCK_MINIMAL_EN.adobeSignFieldValue=PDF-AS Signature
+sig_obj.SIGNATURBLOCK_MINIMAL_EN.adobeSignReasonValue=Information about the verification can be found at http://www.signature-verification.gv.at
+sig_obj.SIGNATURBLOCK_MINIMAL_EN.verifyURL=http://www.signature-verification.gv.at
+
+sig_obj.SIGNATURBLOCK_MINIMAL_EN.value.SIG_META=Signature verification at: http://www.signature-verification.gv.at
+sig_obj.SIGNATURBLOCK_MINIMAL_EN.value.SIG_LABEL=./images/signatur-logo_en.png
+sig_obj.SIGNATURBLOCK_MINIMAL_EN.table.main.Style.imagescaletofit=65.0;65.0
+
+# WAI
+sig_obj.SIGNATURBLOCK_MINIMAL_EN.sigLogoAltText=A standard signature logo is shown.
+
+#---------------------- MAIN TABLE -------------------------
+sig_obj.SIGNATURBLOCK_MINIMAL_EN.table.main.1=SIG_LABEL-i
+sig_obj.SIGNATURBLOCK_MINIMAL_EN.table.main.2=SIG_META-v
+
+sig_obj.SIGNATURBLOCK_MINIMAL_EN.table.main.ColsWidth=1
+sig_obj.SIGNATURBLOCK_MINIMAL_EN.table.main.Style.bgcolor=255 255 255
+sig_obj.SIGNATURBLOCK_MINIMAL_EN.table.main.Style.padding=4
+sig_obj.SIGNATURBLOCK_MINIMAL_EN.table.main.Style.border=0
+sig_obj.SIGNATURBLOCK_MINIMAL_EN.table.main.Style.halign=center
+sig_obj.SIGNATURBLOCK_MINIMAL_EN.table.main.Style.valuehalign=left
+sig_obj.SIGNATURBLOCK_MINIMAL_EN.table.main.Style.valign=middle
+sig_obj.SIGNATURBLOCK_MINIMAL_EN.table.main.Style.font=HELVETICA,9,NORMAL
+sig_obj.SIGNATURBLOCK_MINIMAL_EN.table.main.Style.valuefont=HELVETICA,9,NORMAL
diff --git a/pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/cfg/profiles/SIGNATURBLOCK_SMALL_DE.properties b/pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/cfg/profiles/SIGNATURBLOCK_SMALL_DE.properties
new file mode 100644
index 0000000..78e7a8a
--- /dev/null
+++ b/pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/cfg/profiles/SIGNATURBLOCK_SMALL_DE.properties
@@ -0,0 +1,54 @@
+###################################################################################################
+# PROFIL: Signaturblock klein (Deutsch)
+
+sig_obj.SIGNATURBLOCK_SMALL_DE.description=Standardsignatur klein Deutsch
+
+sig_obj.types.SIGNATURBLOCK_SMALL_DE=on
+
+sig_obj.SIGNATURBLOCK_SMALL_DE.key.SIG_VALUE=Signaturwert
+sig_obj.SIGNATURBLOCK_SMALL_DE.key.SIG_SUBJECT=Unterzeichner
+sig_obj.SIGNATURBLOCK_SMALL_DE.key.SIG_ISSUER=Aussteller-Zertifikat
+sig_obj.SIGNATURBLOCK_SMALL_DE.key.SIG_NUMBER=Serien-Nr.
+sig_obj.SIGNATURBLOCK_SMALL_DE.key.SIG_KZ=Methode
+sig_obj.SIGNATURBLOCK_SMALL_DE.key.SIG_ID=Parameter
+sig_obj.SIGNATURBLOCK_SMALL_DE.key.SIG_META=Pr\u00fcfinformation
+sig_obj.SIGNATURBLOCK_SMALL_DE.key.SIG_DATE=Datum/Zeit-UTC
+
+
+sig_obj.SIGNATURBLOCK_SMALL_DE.value.SIG_SUBJECT=${subject.T != null ? (subject.T + " ") : ""}${subject.CN}
+
+sig_obj.SIGNATURBLOCK_SMALL_DE.pos=f:80;w:230
+sig_obj.SIGNATURBLOCK_SMALL_DE.adobeSignFieldValue=PDF-AS Signatur
+sig_obj.SIGNATURBLOCK_SMALL_DE.adobeSignReasonValue=Signaturpruefung unter http://www.signaturpruefung.gv.at
+sig_obj.SIGNATURBLOCK_SMALL_DE.verifyURL=http://www.signaturpruefung.gv.at
+
+# WAI
+sig_obj.SIGNATURBLOCK_SMALL_DE.sigLogoAltText=Abgebildet ist eine Standard-Signaturbildmarke.
+
+sig_obj.SIGNATURBLOCK_SMALL_DE.value.SIG_META=Signaturpruefung unter: http://www.signaturpruefung.gv.at
+sig_obj.SIGNATURBLOCK_SMALL_DE.value.SIG_LABEL=./images/signatur-logo_de.png
+
+#---------------------- MAIN TABLE -------------------------
+sig_obj.SIGNATURBLOCK_SMALL_DE.table.main.1=SIG_VALUE-cv
+sig_obj.SIGNATURBLOCK_SMALL_DE.table.main.2=SIG_LABEL-i|TABLE-info
+sig_obj.SIGNATURBLOCK_SMALL_DE.table.main.3=SIG_META-cv
+sig_obj.SIGNATURBLOCK_SMALL_DE.table.main.4=SIG_DATE-cv
+
+sig_obj.SIGNATURBLOCK_SMALL_DE.table.main.ColsWidth=1 4.5
+sig_obj.SIGNATURBLOCK_SMALL_DE.table.main.Style.bgcolor=255 255 255
+sig_obj.SIGNATURBLOCK_SMALL_DE.table.main.Style.padding=2
+sig_obj.SIGNATURBLOCK_SMALL_DE.table.main.Style.border=0.1
+sig_obj.SIGNATURBLOCK_SMALL_DE.table.main.Style.halign=center
+sig_obj.SIGNATURBLOCK_SMALL_DE.table.main.Style.valuehalign=left
+sig_obj.SIGNATURBLOCK_SMALL_DE.table.main.Style.valign=top
+sig_obj.SIGNATURBLOCK_SMALL_DE.table.main.Style.imagevalign=middle
+sig_obj.SIGNATURBLOCK_SMALL_DE.table.main.Style.font=HELVETICA,5,BOLD
+sig_obj.SIGNATURBLOCK_SMALL_DE.table.main.Style.valuefont=COURIER,5,NORMAL
+
+#---------------------- INFO TABLE -------------------------
+sig_obj.SIGNATURBLOCK_SMALL_DE.table.info.ColsWidth=1 2.7
+sig_obj.SIGNATURBLOCK_SMALL_DE.table.info.1=SIG_SUBJECT-cv
+sig_obj.SIGNATURBLOCK_SMALL_DE.table.info.2=SIG_ISSUER-cv
+sig_obj.SIGNATURBLOCK_SMALL_DE.table.info.3=SIG_NUMBER-cv
+sig_obj.SIGNATURBLOCK_SMALL_DE.table.info.4=SIG_KZ-cv
+sig_obj.SIGNATURBLOCK_SMALL_DE.table.info.5=SIG_ID-cv
diff --git a/pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/cfg/profiles/SIGNATURBLOCK_SMALL_DE_NOTE.properties b/pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/cfg/profiles/SIGNATURBLOCK_SMALL_DE_NOTE.properties
new file mode 100644
index 0000000..9373353
--- /dev/null
+++ b/pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/cfg/profiles/SIGNATURBLOCK_SMALL_DE_NOTE.properties
@@ -0,0 +1,57 @@
+###################################################################################################
+# PROFIL: Signaturblock klein (Deutsch) mit Hinweistext
+
+sig_obj.SIGNATURBLOCK_SMALL_DE_NOTE.description=Standardsignatur klein Deutsch
+
+sig_obj.types.SIGNATURBLOCK_SMALL_DE_NOTE=on
+
+sig_obj.SIGNATURBLOCK_SMALL_DE_NOTE.key.SIG_VALUE=Signaturwert
+sig_obj.SIGNATURBLOCK_SMALL_DE_NOTE.key.SIG_SUBJECT=Unterzeichner
+sig_obj.SIGNATURBLOCK_SMALL_DE_NOTE.key.SIG_ISSUER=Aussteller-Zertifikat
+sig_obj.SIGNATURBLOCK_SMALL_DE_NOTE.key.SIG_NUMBER=Serien-Nr.
+sig_obj.SIGNATURBLOCK_SMALL_DE_NOTE.key.SIG_KZ=Methode
+sig_obj.SIGNATURBLOCK_SMALL_DE_NOTE.key.SIG_ID=Parameter
+sig_obj.SIGNATURBLOCK_SMALL_DE_NOTE.key.SIG_META=Pr\u00fcfinformation
+sig_obj.SIGNATURBLOCK_SMALL_DE_NOTE.key.SIG_NOTE=Hinweis
+sig_obj.SIGNATURBLOCK_SMALL_DE_NOTE.key.SIG_DATE=Datum/Zeit-UTC
+
+
+sig_obj.SIGNATURBLOCK_SMALL_DE_NOTE.value.SIG_SUBJECT=${subject.T != null ? (subject.T + " ") : ""}${subject.CN}
+
+sig_obj.SIGNATURBLOCK_SMALL_DE_NOTE.pos=f:80;w:230
+sig_obj.SIGNATURBLOCK_SMALL_DE_NOTE.adobeSignFieldValue=PDF-AS Signatur
+sig_obj.SIGNATURBLOCK_SMALL_DE_NOTE.adobeSignReasonValue=Signaturpruefung unter http://www.signaturpruefung.gv.at
+sig_obj.SIGNATURBLOCK_SMALL_DE_NOTE.verifyURL=http://www.signaturpruefung.gv.at
+
+# WAI
+sig_obj.SIGNATURBLOCK_SMALL_DE_NOTE.sigLogoAltText=Abgebildet ist eine Standard-Signaturbildmarke.
+
+sig_obj.SIGNATURBLOCK_SMALL_DE_NOTE.value.SIG_META=Signaturpruefung unter: http://www.signaturpruefung.gv.at
+sig_obj.SIGNATURBLOCK_SMALL_DE_NOTE.value.SIG_LABEL=./images/signatur-logo_de.png
+sig_obj.SIGNATURBLOCK_SMALL_DE_NOTE.value.SIG_NOTE=Dieses mit einer qualifizierten elektronischen Signatur versehene Dokument ist gem\u00e4\u00df \u00a7\u00A04 Abs.\u00A01 Signaturgesetz einem handschriftlich unterschriebenen Dokument grunds\u00e4tzlich rechtlich gleichgestellt.
+
+#---------------------- MAIN TABLE -------------------------
+sig_obj.SIGNATURBLOCK_SMALL_DE_NOTE.table.main.1=SIG_VALUE-cv
+sig_obj.SIGNATURBLOCK_SMALL_DE_NOTE.table.main.2=SIG_LABEL-i|TABLE-info
+sig_obj.SIGNATURBLOCK_SMALL_DE_NOTE.table.main.3=SIG_META-cv
+sig_obj.SIGNATURBLOCK_SMALL_DE_NOTE.table.main.4=SIG_NOTE-cv
+sig_obj.SIGNATURBLOCK_SMALL_DE_NOTE.table.main.5=SIG_DATE-cv
+
+sig_obj.SIGNATURBLOCK_SMALL_DE_NOTE.table.main.ColsWidth=1 4.5
+sig_obj.SIGNATURBLOCK_SMALL_DE_NOTE.table.main.Style.bgcolor=255 255 255
+sig_obj.SIGNATURBLOCK_SMALL_DE_NOTE.table.main.Style.padding=2
+sig_obj.SIGNATURBLOCK_SMALL_DE_NOTE.table.main.Style.border=0.1
+sig_obj.SIGNATURBLOCK_SMALL_DE_NOTE.table.main.Style.halign=center
+sig_obj.SIGNATURBLOCK_SMALL_DE_NOTE.table.main.Style.valuehalign=left
+sig_obj.SIGNATURBLOCK_SMALL_DE_NOTE.table.main.Style.valign=top
+sig_obj.SIGNATURBLOCK_SMALL_DE_NOTE.table.main.Style.imagevalign=middle
+sig_obj.SIGNATURBLOCK_SMALL_DE_NOTE.table.main.Style.font=HELVETICA,5,BOLD
+sig_obj.SIGNATURBLOCK_SMALL_DE_NOTE.table.main.Style.valuefont=COURIER,5,NORMAL
+
+#---------------------- INFO TABLE -------------------------
+sig_obj.SIGNATURBLOCK_SMALL_DE_NOTE.table.info.ColsWidth=1 2.7
+sig_obj.SIGNATURBLOCK_SMALL_DE_NOTE.table.info.1=SIG_SUBJECT-cv
+sig_obj.SIGNATURBLOCK_SMALL_DE_NOTE.table.info.2=SIG_ISSUER-cv
+sig_obj.SIGNATURBLOCK_SMALL_DE_NOTE.table.info.3=SIG_NUMBER-cv
+sig_obj.SIGNATURBLOCK_SMALL_DE_NOTE.table.info.4=SIG_KZ-cv
+sig_obj.SIGNATURBLOCK_SMALL_DE_NOTE.table.info.5=SIG_ID-cv
diff --git a/pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/cfg/profiles/SIGNATURBLOCK_SMALL_EN.properties b/pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/cfg/profiles/SIGNATURBLOCK_SMALL_EN.properties
new file mode 100644
index 0000000..4dbfbed
--- /dev/null
+++ b/pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/cfg/profiles/SIGNATURBLOCK_SMALL_EN.properties
@@ -0,0 +1,54 @@
+###################################################################################################
+# PROFIL: Signaturblock Small (Englisch)
+
+sig_obj.SIGNATURBLOCK_SMALL_EN.description=Standardsignatur klein Englisch
+
+sig_obj.types.SIGNATURBLOCK_SMALL_EN=on
+
+sig_obj.SIGNATURBLOCK_SMALL_EN.key.SIG_VALUE=Signature Value
+sig_obj.SIGNATURBLOCK_SMALL_EN.key.SIG_SUBJECT=Signatory
+sig_obj.SIGNATURBLOCK_SMALL_EN.key.SIG_ISSUER=Issuer-Certificate
+sig_obj.SIGNATURBLOCK_SMALL_EN.key.SIG_NUMBER=Serial-No.
+sig_obj.SIGNATURBLOCK_SMALL_EN.key.SIG_KZ=Method
+sig_obj.SIGNATURBLOCK_SMALL_EN.key.SIG_ID=Parameter
+sig_obj.SIGNATURBLOCK_SMALL_EN.key.SIG_META=Verification
+sig_obj.SIGNATURBLOCK_SMALL_EN.key.SIG_DATE=Date/Time-UTC
+
+
+sig_obj.SIGNATURBLOCK_SMALL_EN.value.SIG_SUBJECT=${subject.T != null ? (subject.T + " ") : ""}${subject.CN}
+
+sig_obj.SIGNATURBLOCK_SMALL_EN.pos=f:80;w:260
+sig_obj.SIGNATURBLOCK_SMALL_EN.adobeSignFieldValue=PDF-AS Signature
+sig_obj.SIGNATURBLOCK_SMALL_EN.adobeSignReasonValue=Signature verification at: http://www.signature-verification.gv.at
+sig_obj.SIGNATURBLOCK_SMALL_EN.verifyURL=http://www.signature-verification.gv.at
+
+sig_obj.SIGNATURBLOCK_SMALL_EN.value.SIG_META=Signature verification at: http://www.signature-verification.gv.at
+sig_obj.SIGNATURBLOCK_SMALL_EN.value.SIG_LABEL=./images/signatur-logo_en.png
+
+# WAI
+sig_obj.SIGNATURBLOCK_SMALL_EN.sigLogoAltText=A standard signature logo is shown.
+
+#---------------------- MAIN TABLE -------------------------
+sig_obj.SIGNATURBLOCK_SMALL_EN.table.main.1=SIG_VALUE-cv
+sig_obj.SIGNATURBLOCK_SMALL_EN.table.main.2=SIG_LABEL-i|TABLE-info
+sig_obj.SIGNATURBLOCK_SMALL_EN.table.main.3=SIG_META-cv
+sig_obj.SIGNATURBLOCK_SMALL_EN.table.main.4=SIG_DATE-cv
+
+sig_obj.SIGNATURBLOCK_SMALL_EN.table.main.ColsWidth=1 4.5
+sig_obj.SIGNATURBLOCK_SMALL_EN.table.main.Style.bgcolor=255 255 255
+sig_obj.SIGNATURBLOCK_SMALL_EN.table.main.Style.padding=2
+sig_obj.SIGNATURBLOCK_SMALL_EN.table.main.Style.border=0.1
+sig_obj.SIGNATURBLOCK_SMALL_EN.table.main.Style.halign=center
+sig_obj.SIGNATURBLOCK_SMALL_EN.table.main.Style.valuehalign=left
+sig_obj.SIGNATURBLOCK_SMALL_EN.table.main.Style.valign=top
+sig_obj.SIGNATURBLOCK_SMALL_EN.table.main.Style.imagevalign=middle
+sig_obj.SIGNATURBLOCK_SMALL_EN.table.main.Style.font=HELVETICA,5,BOLD
+sig_obj.SIGNATURBLOCK_SMALL_EN.table.main.Style.valuefont=COURIER,5,NORMAL
+
+#---------------------- INFO TABLE -------------------------
+sig_obj.SIGNATURBLOCK_SMALL_EN.table.info.ColsWidth=1 3.2
+sig_obj.SIGNATURBLOCK_SMALL_EN.table.info.1=SIG_SUBJECT-cv
+sig_obj.SIGNATURBLOCK_SMALL_EN.table.info.2=SIG_ISSUER-cv
+sig_obj.SIGNATURBLOCK_SMALL_EN.table.info.3=SIG_NUMBER-cv
+sig_obj.SIGNATURBLOCK_SMALL_EN.table.info.4=SIG_KZ-cv
+sig_obj.SIGNATURBLOCK_SMALL_EN.table.info.5=SIG_ID-cv
diff --git a/pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/cfg/profiles/SIGNATURBLOCK_SMALL_EN_NOTE.properties b/pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/cfg/profiles/SIGNATURBLOCK_SMALL_EN_NOTE.properties
new file mode 100644
index 0000000..4824f4b
--- /dev/null
+++ b/pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/cfg/profiles/SIGNATURBLOCK_SMALL_EN_NOTE.properties
@@ -0,0 +1,57 @@
+###################################################################################################
+# PROFIL: Signaturblock Small (Englisch) mit Hinweistext
+
+sig_obj.SIGNATURBLOCK_SMALL_EN_NOTE.description=Standardsignatur klein Englisch
+
+sig_obj.types.SIGNATURBLOCK_SMALL_EN_NOTE=on
+
+sig_obj.SIGNATURBLOCK_SMALL_EN_NOTE.key.SIG_VALUE=Signature Value
+sig_obj.SIGNATURBLOCK_SMALL_EN_NOTE.key.SIG_SUBJECT=Signatory
+sig_obj.SIGNATURBLOCK_SMALL_EN_NOTE.key.SIG_ISSUER=Issuer-Certificate
+sig_obj.SIGNATURBLOCK_SMALL_EN_NOTE.key.SIG_NUMBER=Serial-No.
+sig_obj.SIGNATURBLOCK_SMALL_EN_NOTE.key.SIG_KZ=Method
+sig_obj.SIGNATURBLOCK_SMALL_EN_NOTE.key.SIG_ID=Parameter
+sig_obj.SIGNATURBLOCK_SMALL_EN_NOTE.key.SIG_META=Verification
+sig_obj.SIGNATURBLOCK_SMALL_EN_NOTE.key.SIG_NOTE=Note
+sig_obj.SIGNATURBLOCK_SMALL_EN_NOTE.key.SIG_DATE=Date/Time-UTC
+
+
+sig_obj.SIGNATURBLOCK_SMALL_EN_NOTE.value.SIG_SUBJECT=${subject.T != null ? (subject.T + " ") : ""}${subject.CN}
+
+sig_obj.SIGNATURBLOCK_SMALL_EN_NOTE.pos=f:80;w:260
+sig_obj.SIGNATURBLOCK_SMALL_EN_NOTE.adobeSignFieldValue=PDF-AS Signature
+sig_obj.SIGNATURBLOCK_SMALL_EN_NOTE.adobeSignReasonValue=Signature verification at: http://www.signature-verification.gv.at
+sig_obj.SIGNATURBLOCK_SMALL_EN_NOTE.verifyURL=http://www.signature-verification.gv.at
+
+sig_obj.SIGNATURBLOCK_SMALL_EN_NOTE.value.SIG_META=Signature verification at: http://www.signature-verification.gv.at
+sig_obj.SIGNATURBLOCK_SMALL_EN_NOTE.value.SIG_LABEL=./images/signatur-logo_en.png
+sig_obj.SIGNATURBLOCK_SMALL_EN_NOTE.value.SIG_NOTE=This document is signed with a qualified electronic signature. According to \u00a7\u00A04 art.\u00A01 of the Signature Act it in principle is legally equivalent to an handwritten signature.
+
+# WAI
+sig_obj.SIGNATURBLOCK_SMALL_EN_NOTE.sigLogoAltText=A standard signature logo is shown.
+
+#---------------------- MAIN TABLE -------------------------
+sig_obj.SIGNATURBLOCK_SMALL_EN_NOTE.table.main.1=SIG_VALUE-cv
+sig_obj.SIGNATURBLOCK_SMALL_EN_NOTE.table.main.2=SIG_LABEL-i|TABLE-info
+sig_obj.SIGNATURBLOCK_SMALL_EN_NOTE.table.main.3=SIG_META-cv
+sig_obj.SIGNATURBLOCK_SMALL_EN_NOTE.table.main.4=SIG_NOTE-cv
+sig_obj.SIGNATURBLOCK_SMALL_EN_NOTE.table.main.5=SIG_DATE-cv
+
+sig_obj.SIGNATURBLOCK_SMALL_EN_NOTE.table.main.ColsWidth=1 4.5
+sig_obj.SIGNATURBLOCK_SMALL_EN_NOTE.table.main.Style.bgcolor=255 255 255
+sig_obj.SIGNATURBLOCK_SMALL_EN_NOTE.table.main.Style.padding=2
+sig_obj.SIGNATURBLOCK_SMALL_EN_NOTE.table.main.Style.border=0.1
+sig_obj.SIGNATURBLOCK_SMALL_EN_NOTE.table.main.Style.halign=center
+sig_obj.SIGNATURBLOCK_SMALL_EN_NOTE.table.main.Style.valuehalign=left
+sig_obj.SIGNATURBLOCK_SMALL_EN_NOTE.table.main.Style.valign=top
+sig_obj.SIGNATURBLOCK_SMALL_EN_NOTE.table.main.Style.imagevalign=middle
+sig_obj.SIGNATURBLOCK_SMALL_EN_NOTE.table.main.Style.font=HELVETICA,5,BOLD
+sig_obj.SIGNATURBLOCK_SMALL_EN_NOTE.table.main.Style.valuefont=COURIER,5,NORMAL
+
+#---------------------- INFO TABLE -------------------------
+sig_obj.SIGNATURBLOCK_SMALL_EN_NOTE.table.info.ColsWidth=1 3.2
+sig_obj.SIGNATURBLOCK_SMALL_EN_NOTE.table.info.1=SIG_SUBJECT-cv
+sig_obj.SIGNATURBLOCK_SMALL_EN_NOTE.table.info.2=SIG_ISSUER-cv
+sig_obj.SIGNATURBLOCK_SMALL_EN_NOTE.table.info.3=SIG_NUMBER-cv
+sig_obj.SIGNATURBLOCK_SMALL_EN_NOTE.table.info.4=SIG_KZ-cv
+sig_obj.SIGNATURBLOCK_SMALL_EN_NOTE.table.info.5=SIG_ID-cv
diff --git a/pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/cfg/profiles/VARIABLER_AMTSSIGNATURBLOCK_DE.properties b/pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/cfg/profiles/VARIABLER_AMTSSIGNATURBLOCK_DE.properties
new file mode 100644
index 0000000..cf7d72e
--- /dev/null
+++ b/pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/cfg/profiles/VARIABLER_AMTSSIGNATURBLOCK_DE.properties
@@ -0,0 +1,62 @@
+###################################################################################################
+# PROFIL: Zusaetzlicher Amtssignaturblock (Deutsch) mit neuem Layout
+# Unterzeichner Musteramt
+
+sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.description=Variabler Amtssignaturblock-Deutsch, neues Layout
+
+sig_obj.types.VARIABLER_AMTSSIGNATURBLOCK_DE=on
+
+sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.key.SIG_VALUE=Signaturwert
+sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.key.SIG_SUBJECT=Unterzeichner
+sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.key.SIG_ISSUER=Aussteller-Zertifikat
+sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.key.SIG_NUMBER=Serien-Nr.
+sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.key.SIG_KZ=Methode
+sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.key.SIG_ID=Parameter
+sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.key.SIG_META=Pr\u00fcfinformation
+sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.key.SIG_NOTE=Hinweis
+sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.key.SIG_DATE=Datum/Zeit-UTC
+
+sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.phlength.SIG_SUBJECT=200
+sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.phlength.SIG_ISSUER=130
+sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.phlength.SIG_NUMBER=30
+sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.phlength.SIG_ID=30
+sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.value.SIG_SUBJECT=F\u00fcr die Richtigkeit der Ausfertigung:\nMusteramt\nMusterstadt
+#sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.moa.sign.KeyIdentifier=MusteramtatrustKey
+
+sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.pos=f:80
+sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.adobeSignFieldValue=PDF-AS Signatur
+sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.adobeSignReasonValue=Informationen zur Pr\u00fcfung finden Sie unter http://www.signaturpruefung.gv.at
+sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.verifyURL=http://www.signaturpruefung.gv.at
+
+# WAI
+sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.sigLogoAltText=Abgebildet ist eine Standard-Signaturbildmarke.
+
+sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.value.SIG_META=Informationen zur Pr\u00fcfung der elektronischen Signatur finden Sie unter: http://www.signaturpruefung.gv.at\nInformationen zur Pr\u00fcfung des Ausdrucks finden Sie unter: http://musteramt.musterstadt.gv.at
+sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.value.SIG_LABEL=./images/signatur-logo_de.png
+sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.value.SIG_NOTE=Dieses Dokument wurde amtssigniert. Auch ein Ausdruck dieses Dokuments hat gem\u00e4\u00df \u00a7 20 E-Government-Gesetz die Beweiskraft einer \u00f6ffentlichen Urkunde.
+
+#---------------------- MAIN TABLE -------------------------
+sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.table.main.1=SIG_VALUE-cv
+sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.table.main.2=SIG_LABEL-i|TABLE-info
+sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.table.main.3=SIG_META-cv
+sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.table.main.4=SIG_NOTE-cv
+sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.table.main.5=SIG_DATE-cv
+
+sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.table.main.ColsWidth=1 6
+sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.table.main.Style.bgcolor=255 255 255
+sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.table.main.Style.padding=4
+sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.table.main.Style.border=0.1
+sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.table.main.Style.halign=center
+sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.table.main.Style.valuehalign=left
+sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.table.main.Style.valign=top
+sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.table.main.Style.imagevalign=middle
+sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.table.main.Style.font=HELVETICA,8,BOLD
+sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.table.main.Style.valuefont=COURIER,8,NORMAL
+
+#---------------------- INFO TABLE -------------------------
+sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.table.info.ColsWidth=1 4
+sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.table.info.1=SIG_SUBJECT-cv
+sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.table.info.2=SIG_ISSUER-cv
+sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.table.info.3=SIG_NUMBER-cv
+sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.table.info.4=SIG_KZ-cv
+sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.table.info.5=SIG_ID-cv
diff --git a/pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/fonts/DejaVuSans-Bold.ttf b/pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/fonts/DejaVuSans-Bold.ttf
new file mode 100644
index 0000000..29da136
--- /dev/null
+++ b/pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/fonts/DejaVuSans-Bold.ttf
Binary files differ
diff --git a/pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/fonts/DejaVuSans-BoldOblique.ttf b/pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/fonts/DejaVuSans-BoldOblique.ttf
new file mode 100644
index 0000000..6f33950
--- /dev/null
+++ b/pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/fonts/DejaVuSans-BoldOblique.ttf
Binary files differ
diff --git a/pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/fonts/DejaVuSans-ExtraLight.ttf b/pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/fonts/DejaVuSans-ExtraLight.ttf
new file mode 100644
index 0000000..1dd8ada
--- /dev/null
+++ b/pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/fonts/DejaVuSans-ExtraLight.ttf
Binary files differ
diff --git a/pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/fonts/DejaVuSans-Oblique.ttf b/pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/fonts/DejaVuSans-Oblique.ttf
new file mode 100644
index 0000000..1de61c4
--- /dev/null
+++ b/pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/fonts/DejaVuSans-Oblique.ttf
Binary files differ
diff --git a/pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/fonts/DejaVuSans.ttf b/pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/fonts/DejaVuSans.ttf
new file mode 100644
index 0000000..e0699fe
--- /dev/null
+++ b/pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/fonts/DejaVuSans.ttf
Binary files differ
diff --git a/pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/fonts/DejaVuSansCondensed-Bold.ttf b/pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/fonts/DejaVuSansCondensed-Bold.ttf
new file mode 100644
index 0000000..2364a47
--- /dev/null
+++ b/pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/fonts/DejaVuSansCondensed-Bold.ttf
Binary files differ
diff --git a/pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/fonts/DejaVuSansCondensed-BoldOblique.ttf b/pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/fonts/DejaVuSansCondensed-BoldOblique.ttf
new file mode 100644
index 0000000..20574db
--- /dev/null
+++ b/pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/fonts/DejaVuSansCondensed-BoldOblique.ttf
Binary files differ
diff --git a/pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/fonts/DejaVuSansCondensed-Oblique.ttf b/pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/fonts/DejaVuSansCondensed-Oblique.ttf
new file mode 100644
index 0000000..801105b
--- /dev/null
+++ b/pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/fonts/DejaVuSansCondensed-Oblique.ttf
Binary files differ
diff --git a/pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/fonts/DejaVuSansCondensed.ttf b/pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/fonts/DejaVuSansCondensed.ttf
new file mode 100644
index 0000000..94a9b01
--- /dev/null
+++ b/pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/fonts/DejaVuSansCondensed.ttf
Binary files differ
diff --git a/pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/fonts/DejaVuSansMono-Bold.ttf b/pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/fonts/DejaVuSansMono-Bold.ttf
new file mode 100644
index 0000000..1b63cee
--- /dev/null
+++ b/pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/fonts/DejaVuSansMono-Bold.ttf
Binary files differ
diff --git a/pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/fonts/DejaVuSansMono-BoldOblique.ttf b/pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/fonts/DejaVuSansMono-BoldOblique.ttf
new file mode 100644
index 0000000..7ca996b
--- /dev/null
+++ b/pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/fonts/DejaVuSansMono-BoldOblique.ttf
Binary files differ
diff --git a/pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/fonts/DejaVuSansMono-Oblique.ttf b/pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/fonts/DejaVuSansMono-Oblique.ttf
new file mode 100644
index 0000000..6c9beec
--- /dev/null
+++ b/pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/fonts/DejaVuSansMono-Oblique.ttf
Binary files differ
diff --git a/pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/fonts/DejaVuSansMono.ttf b/pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/fonts/DejaVuSansMono.ttf
new file mode 100644
index 0000000..a96ac6f
--- /dev/null
+++ b/pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/fonts/DejaVuSansMono.ttf
Binary files differ
diff --git a/pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/fonts/DejaVuSerif-Bold.ttf b/pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/fonts/DejaVuSerif-Bold.ttf
new file mode 100644
index 0000000..674ad7a
--- /dev/null
+++ b/pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/fonts/DejaVuSerif-Bold.ttf
Binary files differ
diff --git a/pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/fonts/DejaVuSerif-BoldItalic.ttf b/pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/fonts/DejaVuSerif-BoldItalic.ttf
new file mode 100644
index 0000000..d5b0d83
--- /dev/null
+++ b/pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/fonts/DejaVuSerif-BoldItalic.ttf
Binary files differ
diff --git a/pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/fonts/DejaVuSerif-Italic.ttf b/pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/fonts/DejaVuSerif-Italic.ttf
new file mode 100644
index 0000000..067b9cb
--- /dev/null
+++ b/pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/fonts/DejaVuSerif-Italic.ttf
Binary files differ
diff --git a/pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/fonts/DejaVuSerif.ttf b/pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/fonts/DejaVuSerif.ttf
new file mode 100644
index 0000000..5cfc558
--- /dev/null
+++ b/pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/fonts/DejaVuSerif.ttf
Binary files differ
diff --git a/pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/fonts/DejaVuSerifCondensed-Bold.ttf b/pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/fonts/DejaVuSerifCondensed-Bold.ttf
new file mode 100644
index 0000000..322e73b
--- /dev/null
+++ b/pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/fonts/DejaVuSerifCondensed-Bold.ttf
Binary files differ
diff --git a/pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/fonts/DejaVuSerifCondensed-BoldItalic.ttf b/pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/fonts/DejaVuSerifCondensed-BoldItalic.ttf
new file mode 100644
index 0000000..ef106cb
--- /dev/null
+++ b/pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/fonts/DejaVuSerifCondensed-BoldItalic.ttf
Binary files differ
diff --git a/pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/fonts/DejaVuSerifCondensed-Italic.ttf b/pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/fonts/DejaVuSerifCondensed-Italic.ttf
new file mode 100644
index 0000000..23bff33
--- /dev/null
+++ b/pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/fonts/DejaVuSerifCondensed-Italic.ttf
Binary files differ
diff --git a/pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/fonts/DejaVuSerifCondensed.ttf b/pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/fonts/DejaVuSerifCondensed.ttf
new file mode 100644
index 0000000..aa15352
--- /dev/null
+++ b/pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/fonts/DejaVuSerifCondensed.ttf
Binary files differ
diff --git a/pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/images/Baik_Archiv.gif b/pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/images/Baik_Archiv.gif
new file mode 100644
index 0000000..3f2e6cf
--- /dev/null
+++ b/pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/images/Baik_Archiv.gif
Binary files differ
diff --git a/pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/images/Baik_Urkunde.gif b/pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/images/Baik_Urkunde.gif
new file mode 100644
index 0000000..502a0c4
--- /dev/null
+++ b/pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/images/Baik_Urkunde.gif
Binary files differ
diff --git a/pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/images/signatur-logo_de.png b/pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/images/signatur-logo_de.png
new file mode 100644
index 0000000..988c079
--- /dev/null
+++ b/pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/images/signatur-logo_de.png
Binary files differ
diff --git a/pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/images/signatur-logo_de_highest_resolution.png b/pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/images/signatur-logo_de_highest_resolution.png
new file mode 100644
index 0000000..c9a2da9
--- /dev/null
+++ b/pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/images/signatur-logo_de_highest_resolution.png
Binary files differ
diff --git a/pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/images/signatur-logo_en.png b/pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/images/signatur-logo_en.png
new file mode 100644
index 0000000..682d383
--- /dev/null
+++ b/pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/images/signatur-logo_en.png
Binary files differ
diff --git a/pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/images/signatur-logo_en_highest_resolution.png b/pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/images/signatur-logo_en_highest_resolution.png
new file mode 100644
index 0000000..59a0feb
--- /dev/null
+++ b/pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/images/signatur-logo_en_highest_resolution.png
Binary files differ
diff --git a/pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/licenses/adobe/AFM_License.html b/pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/licenses/adobe/AFM_License.html
new file mode 100644
index 0000000..d4d7e8a
--- /dev/null
+++ b/pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/licenses/adobe/AFM_License.html
@@ -0,0 +1 @@
+<html> <head> <meta http-equiv="content-type" content="text/html;charset=iso-8859-1"> <meta name="generator" content="Adobe GoLive 4"> <title>Core 14 AFM Files - ReadMe</title> </head> <body bgcolor="white"> <font color="white">or</font> <table border="0" cellpadding="0" cellspacing="2"> <tr> <td width="40"></td> <td width="300">This file and the 14 PostScript(R) AFM files it accompanies may be used, copied, and distributed for any purpose and without charge, with or without modification, provided that all copyright notices are retained; that the AFM files are not distributed without this file; that all modifications to this file or any of the AFM files are prominently noted in the modified file(s); and that this paragraph is not modified. Adobe Systems has no responsibility or obligation to support the use of the AFM files. <font color="white">Col</font></td> </tr> </table> </body> </html> \ No newline at end of file
diff --git a/pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/licenses/ant/LICENSE b/pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/licenses/ant/LICENSE
new file mode 100644
index 0000000..8b5861d
--- /dev/null
+++ b/pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/licenses/ant/LICENSE
@@ -0,0 +1,203 @@
+/*
+ * Apache License
+ * Version 2.0, January 2004
+ * http://www.apache.org/licenses/
+ *
+ * TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+ *
+ * 1. Definitions.
+ *
+ * "License" shall mean the terms and conditions for use, reproduction,
+ * and distribution as defined by Sections 1 through 9 of this document.
+ *
+ * "Licensor" shall mean the copyright owner or entity authorized by
+ * the copyright owner that is granting the License.
+ *
+ * "Legal Entity" shall mean the union of the acting entity and all
+ * other entities that control, are controlled by, or are under common
+ * control with that entity. For the purposes of this definition,
+ * "control" means (i) the power, direct or indirect, to cause the
+ * direction or management of such entity, whether by contract or
+ * otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ * outstanding shares, or (iii) beneficial ownership of such entity.
+ *
+ * "You" (or "Your") shall mean an individual or Legal Entity
+ * exercising permissions granted by this License.
+ *
+ * "Source" form shall mean the preferred form for making modifications,
+ * including but not limited to software source code, documentation
+ * source, and configuration files.
+ *
+ * "Object" form shall mean any form resulting from mechanical
+ * transformation or translation of a Source form, including but
+ * not limited to compiled object code, generated documentation,
+ * and conversions to other media types.
+ *
+ * "Work" shall mean the work of authorship, whether in Source or
+ * Object form, made available under the License, as indicated by a
+ * copyright notice that is included in or attached to the work
+ * (an example is provided in the Appendix below).
+ *
+ * "Derivative Works" shall mean any work, whether in Source or Object
+ * form, that is based on (or derived from) the Work and for which the
+ * editorial revisions, annotations, elaborations, or other modifications
+ * represent, as a whole, an original work of authorship. For the purposes
+ * of this License, Derivative Works shall not include works that remain
+ * separable from, or merely link (or bind by name) to the interfaces of,
+ * the Work and Derivative Works thereof.
+ *
+ * "Contribution" shall mean any work of authorship, including
+ * the original version of the Work and any modifications or additions
+ * to that Work or Derivative Works thereof, that is intentionally
+ * submitted to Licensor for inclusion in the Work by the copyright owner
+ * or by an individual or Legal Entity authorized to submit on behalf of
+ * the copyright owner. For the purposes of this definition, "submitted"
+ * means any form of electronic, verbal, or written communication sent
+ * to the Licensor or its representatives, including but not limited to
+ * communication on electronic mailing lists, source code control systems,
+ * and issue tracking systems that are managed by, or on behalf of, the
+ * Licensor for the purpose of discussing and improving the Work, but
+ * excluding communication that is conspicuously marked or otherwise
+ * designated in writing by the copyright owner as "Not a Contribution."
+ *
+ * "Contributor" shall mean Licensor and any individual or Legal Entity
+ * on behalf of whom a Contribution has been received by Licensor and
+ * subsequently incorporated within the Work.
+ *
+ * 2. Grant of Copyright License. Subject to the terms and conditions of
+ * this License, each Contributor hereby grants to You a perpetual,
+ * worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ * copyright license to reproduce, prepare Derivative Works of,
+ * publicly display, publicly perform, sublicense, and distribute the
+ * Work and such Derivative Works in Source or Object form.
+ *
+ * 3. Grant of Patent License. Subject to the terms and conditions of
+ * this License, each Contributor hereby grants to You a perpetual,
+ * worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ * (except as stated in this section) patent license to make, have made,
+ * use, offer to sell, sell, import, and otherwise transfer the Work,
+ * where such license applies only to those patent claims licensable
+ * by such Contributor that are necessarily infringed by their
+ * Contribution(s) alone or by combination of their Contribution(s)
+ * with the Work to which such Contribution(s) was submitted. If You
+ * institute patent litigation against any entity (including a
+ * cross-claim or counterclaim in a lawsuit) alleging that the Work
+ * or a Contribution incorporated within the Work constitutes direct
+ * or contributory patent infringement, then any patent licenses
+ * granted to You under this License for that Work shall terminate
+ * as of the date such litigation is filed.
+ *
+ * 4. Redistribution. You may reproduce and distribute copies of the
+ * Work or Derivative Works thereof in any medium, with or without
+ * modifications, and in Source or Object form, provided that You
+ * meet the following conditions:
+ *
+ * (a) You must give any other recipients of the Work or
+ * Derivative Works a copy of this License; and
+ *
+ * (b) You must cause any modified files to carry prominent notices
+ * stating that You changed the files; and
+ *
+ * (c) You must retain, in the Source form of any Derivative Works
+ * that You distribute, all copyright, patent, trademark, and
+ * attribution notices from the Source form of the Work,
+ * excluding those notices that do not pertain to any part of
+ * the Derivative Works; and
+ *
+ * (d) If the Work includes a "NOTICE" text file as part of its
+ * distribution, then any Derivative Works that You distribute must
+ * include a readable copy of the attribution notices contained
+ * within such NOTICE file, excluding those notices that do not
+ * pertain to any part of the Derivative Works, in at least one
+ * of the following places: within a NOTICE text file distributed
+ * as part of the Derivative Works; within the Source form or
+ * documentation, if provided along with the Derivative Works; or,
+ * within a display generated by the Derivative Works, if and
+ * wherever such third-party notices normally appear. The contents
+ * of the NOTICE file are for informational purposes only and
+ * do not modify the License. You may add Your own attribution
+ * notices within Derivative Works that You distribute, alongside
+ * or as an addendum to the NOTICE text from the Work, provided
+ * that such additional attribution notices cannot be construed
+ * as modifying the License.
+ *
+ * You may add Your own copyright statement to Your modifications and
+ * may provide additional or different license terms and conditions
+ * for use, reproduction, or distribution of Your modifications, or
+ * for any such Derivative Works as a whole, provided Your use,
+ * reproduction, and distribution of the Work otherwise complies with
+ * the conditions stated in this License.
+ *
+ * 5. Submission of Contributions. Unless You explicitly state otherwise,
+ * any Contribution intentionally submitted for inclusion in the Work
+ * by You to the Licensor shall be under the terms and conditions of
+ * this License, without any additional terms or conditions.
+ * Notwithstanding the above, nothing herein shall supersede or modify
+ * the terms of any separate license agreement you may have executed
+ * with Licensor regarding such Contributions.
+ *
+ * 6. Trademarks. This License does not grant permission to use the trade
+ * names, trademarks, service marks, or product names of the Licensor,
+ * except as required for reasonable and customary use in describing the
+ * origin of the Work and reproducing the content of the NOTICE file.
+ *
+ * 7. Disclaimer of Warranty. Unless required by applicable law or
+ * agreed to in writing, Licensor provides the Work (and each
+ * Contributor provides its Contributions) on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ * implied, including, without limitation, any warranties or conditions
+ * of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ * PARTICULAR PURPOSE. You are solely responsible for determining the
+ * appropriateness of using or redistributing the Work and assume any
+ * risks associated with Your exercise of permissions under this License.
+ *
+ * 8. Limitation of Liability. In no event and under no legal theory,
+ * whether in tort (including negligence), contract, or otherwise,
+ * unless required by applicable law (such as deliberate and grossly
+ * negligent acts) or agreed to in writing, shall any Contributor be
+ * liable to You for damages, including any direct, indirect, special,
+ * incidental, or consequential damages of any character arising as a
+ * result of this License or out of the use or inability to use the
+ * Work (including but not limited to damages for loss of goodwill,
+ * work stoppage, computer failure or malfunction, or any and all
+ * other commercial damages or losses), even if such Contributor
+ * has been advised of the possibility of such damages.
+ *
+ * 9. Accepting Warranty or Additional Liability. While redistributing
+ * the Work or Derivative Works thereof, You may choose to offer,
+ * and charge a fee for, acceptance of support, warranty, indemnity,
+ * or other liability obligations and/or rights consistent with this
+ * License. However, in accepting such obligations, You may act only
+ * on Your own behalf and on Your sole responsibility, not on behalf
+ * of any other Contributor, and only if You agree to indemnify,
+ * defend, and hold each Contributor harmless for any liability
+ * incurred by, or claims asserted against, such Contributor by reason
+ * of your accepting any such warranty or additional liability.
+ *
+ * END OF TERMS AND CONDITIONS
+ *
+ * APPENDIX: How to apply the Apache License to your work.
+ *
+ * To apply the Apache License to your work, attach the following
+ * boilerplate notice, with the fields enclosed by brackets "[]"
+ * replaced with your own identifying information. (Don't include
+ * the brackets!) The text should be enclosed in the appropriate
+ * comment syntax for the file format. We also recommend that a
+ * file or class name and description of purpose be included on the
+ * same "printed page" as the copyright notice for easier
+ * identification within third-party archives.
+ *
+ * Copyright [yyyy] [name of copyright owner]
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
diff --git a/pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/licenses/ant/LICENSE.dom b/pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/licenses/ant/LICENSE.dom
new file mode 100644
index 0000000..2959b70
--- /dev/null
+++ b/pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/licenses/ant/LICENSE.dom
@@ -0,0 +1,71 @@
+This license came from:
+http://www.w3.org/Consortium/Legal/copyright-software-19980720
+
+
+W3C® SOFTWARE NOTICE AND LICENSE
+Copyright © 1994-2001 World
+Wide Web Consortium, <a href="http://www.w3.org/">World
+Wide Web Consortium</a>, (<a href=
+"http://www.lcs.mit.edu/">Massachusetts Institute of
+Technology</a>, <a href="http://www.inria.fr/">Institut National de
+Recherche en Informatique et en Automatique</a>, <a href=
+"http://www.keio.ac.jp/">Keio University</a>). All Rights Reserved.
+http://www.w3.org/Consortium/Legal/
+
+This W3C work (including software, documents, or other related
+items) is being provided by the copyright holders under the
+following license. By obtaining, using and/or copying this work,
+you (the licensee) agree that you have read, understood, and will
+comply with the following terms and conditions:
+Permission to use, copy, modify, and distribute this software
+and its documentation, with or without modification,  for any
+purpose and without fee or royalty is hereby granted, provided that
+you include the following on ALL copies of the software and
+documentation or portions thereof, including modifications, that
+you make:
+
+The full text of this NOTICE in a location viewable to users of
+the redistributed or derivative work.
+
+Any pre-existing intellectual property disclaimers, notices, or
+terms and conditions. If none exist, a short notice of the
+following form (hypertext is preferred, text is permitted) should
+be used within the body of any redistributed or derivative code:
+"Copyright © [$date-of-software] World Wide Web Consortium, (Massachusetts Institute of
+Technology, Institut National de
+Recherche en Informatique et en Automatique, Keio University). All Rights Reserved.
+http://www.w3.org/Consortium/Legal/"
+
+Notice of any changes or modifications to the W3C files,
+including the date changes were made. (We recommend you provide
+URIs to the location from which the code is derived.)
+
+THIS SOFTWARE AND DOCUMENTATION IS PROVIDED "AS IS," AND
+COPYRIGHT HOLDERS MAKE NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO, WARRANTIES OF
+MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR PURPOSE OR THAT THE
+USE OF THE SOFTWARE OR DOCUMENTATION WILL NOT INFRINGE ANY THIRD
+PARTY PATENTS, COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS.
+COPYRIGHT HOLDERS WILL NOT BE LIABLE FOR ANY DIRECT, INDIRECT,
+SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF ANY USE OF THE
+SOFTWARE OR DOCUMENTATION.
+
+The name and trademarks of copyright holders may NOT be used in
+advertising or publicity pertaining to the software without
+specific, written prior permission. Title to copyright in this
+software and any associated documentation will at all times remain
+with copyright holders.
+____________________________________
+This formulation of W3C's notice and license became active on
+August 14 1998 so as to improve compatibility with GPL. This
+version ensures that W3C software licensing terms are no more
+restrictive than GPL and consequently W3C software may be
+distributed in GPL packages. See the older formulation for the
+policy prior to this date. Please see our Copyright FAQ for common
+questions about using materials from
+our site, including specific terms and conditions for packages like
+libwww, Amaya, and Jigsaw.
+Other questions about this notice can be
+directed to site-policy@w3.org.
+
+webmaster
diff --git a/pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/licenses/ant/LICENSE.sax b/pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/licenses/ant/LICENSE.sax
new file mode 100644
index 0000000..05bccc9
--- /dev/null
+++ b/pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/licenses/ant/LICENSE.sax
@@ -0,0 +1,20 @@
+This license came from: http://www.megginson.com/SAX/copying.html
+ However please note future versions of SAX may be covered
+ under http://saxproject.org/?selected=pd
+
+
+This page is now out of date -- see the new SAX site at
+http://www.saxproject.org/ for more up-to-date
+releases and other information. Please change your bookmarks.
+
+
+SAX2 is Free!
+
+I hereby abandon any property rights to SAX 2.0 (the Simple API for
+XML), and release all of the SAX 2.0 source code, compiled code, and
+documentation contained in this distribution into the Public Domain.
+SAX comes with NO WARRANTY or guarantee of fitness for any
+purpose.
+
+David Megginson, david@megginson.com
+2000-05-05 \ No newline at end of file
diff --git a/pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/licenses/ant/LICENSE.xerces b/pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/licenses/ant/LICENSE.xerces
new file mode 100644
index 0000000..28282b4
--- /dev/null
+++ b/pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/licenses/ant/LICENSE.xerces
@@ -0,0 +1,56 @@
+/*
+ * The Apache Software License, Version 1.1
+ *
+ *
+ * Copyright (c) 1999-2002 The Apache Software Foundation. All rights
+ * reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * 3. The end-user documentation included with the redistribution,
+ * if any, must include the following acknowledgment:
+ * "This product includes software developed by the
+ * Apache Software Foundation (http://www.apache.org/)."
+ * Alternately, this acknowledgment may appear in the software itself,
+ * if and wherever such third-party acknowledgments normally appear.
+ *
+ * 4. The names "Xerces" and "Apache Software Foundation" must
+ * not be used to endorse or promote products derived from this
+ * software without prior written permission. For written
+ * permission, please contact apache@apache.org.
+ *
+ * 5. Products derived from this software may not be called "Apache",
+ * nor may "Apache" appear in their name, without prior written
+ * permission of the Apache Software Foundation.
+ *
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
+ * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
+ * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ * ====================================================================
+ *
+ * This software consists of voluntary contributions made by many
+ * individuals on behalf of the Apache Software Foundation and was
+ * originally based on software copyright (c) 1999, International
+ * Business Machines, Inc., http://www.ibm.com. For more
+ * information on the Apache Software Foundation, please see
+ * <http://www.apache.org/>.
+ */
diff --git a/pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/licenses/apache/LICENSE b/pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/licenses/apache/LICENSE
new file mode 100644
index 0000000..75b5248
--- /dev/null
+++ b/pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/licenses/apache/LICENSE
@@ -0,0 +1,202 @@
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
diff --git a/pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/licenses/checkstyle/LICENSE b/pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/licenses/checkstyle/LICENSE
new file mode 100644
index 0000000..cbee875
--- /dev/null
+++ b/pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/licenses/checkstyle/LICENSE
@@ -0,0 +1,504 @@
+ GNU LESSER GENERAL PUBLIC LICENSE
+ Version 2.1, February 1999
+
+ Copyright (C) 1991, 1999 Free Software Foundation, Inc.
+ 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+[This is the first released version of the Lesser GPL. It also counts
+ as the successor of the GNU Library Public License, version 2, hence
+ the version number 2.1.]
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+Licenses are intended to guarantee your freedom to share and change
+free software--to make sure the software is free for all its users.
+
+ This license, the Lesser General Public License, applies to some
+specially designated software packages--typically libraries--of the
+Free Software Foundation and other authors who decide to use it. You
+can use it too, but we suggest you first think carefully about whether
+this license or the ordinary General Public License is the better
+strategy to use in any particular case, based on the explanations below.
+
+ When we speak of free software, we are referring to freedom of use,
+not price. Our General Public Licenses are designed to make sure that
+you have the freedom to distribute copies of free software (and charge
+for this service if you wish); that you receive source code or can get
+it if you want it; that you can change the software and use pieces of
+it in new free programs; and that you are informed that you can do
+these things.
+
+ To protect your rights, we need to make restrictions that forbid
+distributors to deny you these rights or to ask you to surrender these
+rights. These restrictions translate to certain responsibilities for
+you if you distribute copies of the library or if you modify it.
+
+ For example, if you distribute copies of the library, whether gratis
+or for a fee, you must give the recipients all the rights that we gave
+you. You must make sure that they, too, receive or can get the source
+code. If you link other code with the library, you must provide
+complete object files to the recipients, so that they can relink them
+with the library after making changes to the library and recompiling
+it. And you must show them these terms so they know their rights.
+
+ We protect your rights with a two-step method: (1) we copyright the
+library, and (2) we offer you this license, which gives you legal
+permission to copy, distribute and/or modify the library.
+
+ To protect each distributor, we want to make it very clear that
+there is no warranty for the free library. Also, if the library is
+modified by someone else and passed on, the recipients should know
+that what they have is not the original version, so that the original
+author's reputation will not be affected by problems that might be
+introduced by others.
+
+ Finally, software patents pose a constant threat to the existence of
+any free program. We wish to make sure that a company cannot
+effectively restrict the users of a free program by obtaining a
+restrictive license from a patent holder. Therefore, we insist that
+any patent license obtained for a version of the library must be
+consistent with the full freedom of use specified in this license.
+
+ Most GNU software, including some libraries, is covered by the
+ordinary GNU General Public License. This license, the GNU Lesser
+General Public License, applies to certain designated libraries, and
+is quite different from the ordinary General Public License. We use
+this license for certain libraries in order to permit linking those
+libraries into non-free programs.
+
+ When a program is linked with a library, whether statically or using
+a shared library, the combination of the two is legally speaking a
+combined work, a derivative of the original library. The ordinary
+General Public License therefore permits such linking only if the
+entire combination fits its criteria of freedom. The Lesser General
+Public License permits more lax criteria for linking other code with
+the library.
+
+ We call this license the "Lesser" General Public License because it
+does Less to protect the user's freedom than the ordinary General
+Public License. It also provides other free software developers Less
+of an advantage over competing non-free programs. These disadvantages
+are the reason we use the ordinary General Public License for many
+libraries. However, the Lesser license provides advantages in certain
+special circumstances.
+
+ For example, on rare occasions, there may be a special need to
+encourage the widest possible use of a certain library, so that it becomes
+a de-facto standard. To achieve this, non-free programs must be
+allowed to use the library. A more frequent case is that a free
+library does the same job as widely used non-free libraries. In this
+case, there is little to gain by limiting the free library to free
+software only, so we use the Lesser General Public License.
+
+ In other cases, permission to use a particular library in non-free
+programs enables a greater number of people to use a large body of
+free software. For example, permission to use the GNU C Library in
+non-free programs enables many more people to use the whole GNU
+operating system, as well as its variant, the GNU/Linux operating
+system.
+
+ Although the Lesser General Public License is Less protective of the
+users' freedom, it does ensure that the user of a program that is
+linked with the Library has the freedom and the wherewithal to run
+that program using a modified version of the Library.
+
+ The precise terms and conditions for copying, distribution and
+modification follow. Pay close attention to the difference between a
+"work based on the library" and a "work that uses the library". The
+former contains code derived from the library, whereas the latter must
+be combined with the library in order to run.
+
+ GNU LESSER GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License Agreement applies to any software library or other
+program which contains a notice placed by the copyright holder or
+other authorized party saying it may be distributed under the terms of
+this Lesser General Public License (also called "this License").
+Each licensee is addressed as "you".
+
+ A "library" means a collection of software functions and/or data
+prepared so as to be conveniently linked with application programs
+(which use some of those functions and data) to form executables.
+
+ The "Library", below, refers to any such software library or work
+which has been distributed under these terms. A "work based on the
+Library" means either the Library or any derivative work under
+copyright law: that is to say, a work containing the Library or a
+portion of it, either verbatim or with modifications and/or translated
+straightforwardly into another language. (Hereinafter, translation is
+included without limitation in the term "modification".)
+
+ "Source code" for a work means the preferred form of the work for
+making modifications to it. For a library, complete source code means
+all the source code for all modules it contains, plus any associated
+interface definition files, plus the scripts used to control compilation
+and installation of the library.
+
+ Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running a program using the Library is not restricted, and output from
+such a program is covered only if its contents constitute a work based
+on the Library (independent of the use of the Library in a tool for
+writing it). Whether that is true depends on what the Library does
+and what the program that uses the Library does.
+
+ 1. You may copy and distribute verbatim copies of the Library's
+complete source code as you receive it, in any medium, provided that
+you conspicuously and appropriately publish on each copy an
+appropriate copyright notice and disclaimer of warranty; keep intact
+all the notices that refer to this License and to the absence of any
+warranty; and distribute a copy of this License along with the
+Library.
+
+ You may charge a fee for the physical act of transferring a copy,
+and you may at your option offer warranty protection in exchange for a
+fee.
+
+ 2. You may modify your copy or copies of the Library or any portion
+of it, thus forming a work based on the Library, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) The modified work must itself be a software library.
+
+ b) You must cause the files modified to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ c) You must cause the whole of the work to be licensed at no
+ charge to all third parties under the terms of this License.
+
+ d) If a facility in the modified Library refers to a function or a
+ table of data to be supplied by an application program that uses
+ the facility, other than as an argument passed when the facility
+ is invoked, then you must make a good faith effort to ensure that,
+ in the event an application does not supply such function or
+ table, the facility still operates, and performs whatever part of
+ its purpose remains meaningful.
+
+ (For example, a function in a library to compute square roots has
+ a purpose that is entirely well-defined independent of the
+ application. Therefore, Subsection 2d requires that any
+ application-supplied function or table used by this function must
+ be optional: if the application does not supply it, the square
+ root function must still compute square roots.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Library,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Library, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote
+it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Library.
+
+In addition, mere aggregation of another work not based on the Library
+with the Library (or with a work based on the Library) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may opt to apply the terms of the ordinary GNU General Public
+License instead of this License to a given copy of the Library. To do
+this, you must alter all the notices that refer to this License, so
+that they refer to the ordinary GNU General Public License, version 2,
+instead of to this License. (If a newer version than version 2 of the
+ordinary GNU General Public License has appeared, then you can specify
+that version instead if you wish.) Do not make any other change in
+these notices.
+
+ Once this change is made in a given copy, it is irreversible for
+that copy, so the ordinary GNU General Public License applies to all
+subsequent copies and derivative works made from that copy.
+
+ This option is useful when you wish to copy part of the code of
+the Library into a program that is not a library.
+
+ 4. You may copy and distribute the Library (or a portion or
+derivative of it, under Section 2) in object code or executable form
+under the terms of Sections 1 and 2 above provided that you accompany
+it with the complete corresponding machine-readable source code, which
+must be distributed under the terms of Sections 1 and 2 above on a
+medium customarily used for software interchange.
+
+ If distribution of object code is made by offering access to copy
+from a designated place, then offering equivalent access to copy the
+source code from the same place satisfies the requirement to
+distribute the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 5. A program that contains no derivative of any portion of the
+Library, but is designed to work with the Library by being compiled or
+linked with it, is called a "work that uses the Library". Such a
+work, in isolation, is not a derivative work of the Library, and
+therefore falls outside the scope of this License.
+
+ However, linking a "work that uses the Library" with the Library
+creates an executable that is a derivative of the Library (because it
+contains portions of the Library), rather than a "work that uses the
+library". The executable is therefore covered by this License.
+Section 6 states terms for distribution of such executables.
+
+ When a "work that uses the Library" uses material from a header file
+that is part of the Library, the object code for the work may be a
+derivative work of the Library even though the source code is not.
+Whether this is true is especially significant if the work can be
+linked without the Library, or if the work is itself a library. The
+threshold for this to be true is not precisely defined by law.
+
+ If such an object file uses only numerical parameters, data
+structure layouts and accessors, and small macros and small inline
+functions (ten lines or less in length), then the use of the object
+file is unrestricted, regardless of whether it is legally a derivative
+work. (Executables containing this object code plus portions of the
+Library will still fall under Section 6.)
+
+ Otherwise, if the work is a derivative of the Library, you may
+distribute the object code for the work under the terms of Section 6.
+Any executables containing that work also fall under Section 6,
+whether or not they are linked directly with the Library itself.
+
+ 6. As an exception to the Sections above, you may also combine or
+link a "work that uses the Library" with the Library to produce a
+work containing portions of the Library, and distribute that work
+under terms of your choice, provided that the terms permit
+modification of the work for the customer's own use and reverse
+engineering for debugging such modifications.
+
+ You must give prominent notice with each copy of the work that the
+Library is used in it and that the Library and its use are covered by
+this License. You must supply a copy of this License. If the work
+during execution displays copyright notices, you must include the
+copyright notice for the Library among them, as well as a reference
+directing the user to the copy of this License. Also, you must do one
+of these things:
+
+ a) Accompany the work with the complete corresponding
+ machine-readable source code for the Library including whatever
+ changes were used in the work (which must be distributed under
+ Sections 1 and 2 above); and, if the work is an executable linked
+ with the Library, with the complete machine-readable "work that
+ uses the Library", as object code and/or source code, so that the
+ user can modify the Library and then relink to produce a modified
+ executable containing the modified Library. (It is understood
+ that the user who changes the contents of definitions files in the
+ Library will not necessarily be able to recompile the application
+ to use the modified definitions.)
+
+ b) Use a suitable shared library mechanism for linking with the
+ Library. A suitable mechanism is one that (1) uses at run time a
+ copy of the library already present on the user's computer system,
+ rather than copying library functions into the executable, and (2)
+ will operate properly with a modified version of the library, if
+ the user installs one, as long as the modified version is
+ interface-compatible with the version that the work was made with.
+
+ c) Accompany the work with a written offer, valid for at
+ least three years, to give the same user the materials
+ specified in Subsection 6a, above, for a charge no more
+ than the cost of performing this distribution.
+
+ d) If distribution of the work is made by offering access to copy
+ from a designated place, offer equivalent access to copy the above
+ specified materials from the same place.
+
+ e) Verify that the user has already received a copy of these
+ materials or that you have already sent this user a copy.
+
+ For an executable, the required form of the "work that uses the
+Library" must include any data and utility programs needed for
+reproducing the executable from it. However, as a special exception,
+the materials to be distributed need not include anything that is
+normally distributed (in either source or binary form) with the major
+components (compiler, kernel, and so on) of the operating system on
+which the executable runs, unless that component itself accompanies
+the executable.
+
+ It may happen that this requirement contradicts the license
+restrictions of other proprietary libraries that do not normally
+accompany the operating system. Such a contradiction means you cannot
+use both them and the Library together in an executable that you
+distribute.
+
+ 7. You may place library facilities that are a work based on the
+Library side-by-side in a single library together with other library
+facilities not covered by this License, and distribute such a combined
+library, provided that the separate distribution of the work based on
+the Library and of the other library facilities is otherwise
+permitted, and provided that you do these two things:
+
+ a) Accompany the combined library with a copy of the same work
+ based on the Library, uncombined with any other library
+ facilities. This must be distributed under the terms of the
+ Sections above.
+
+ b) Give prominent notice with the combined library of the fact
+ that part of it is a work based on the Library, and explaining
+ where to find the accompanying uncombined form of the same work.
+
+ 8. You may not copy, modify, sublicense, link with, or distribute
+the Library except as expressly provided under this License. Any
+attempt otherwise to copy, modify, sublicense, link with, or
+distribute the Library is void, and will automatically terminate your
+rights under this License. However, parties who have received copies,
+or rights, from you under this License will not have their licenses
+terminated so long as such parties remain in full compliance.
+
+ 9. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Library or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Library (or any work based on the
+Library), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Library or works based on it.
+
+ 10. Each time you redistribute the Library (or any work based on the
+Library), the recipient automatically receives a license from the
+original licensor to copy, distribute, link with or modify the Library
+subject to these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties with
+this License.
+
+ 11. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Library at all. For example, if a patent
+license would not permit royalty-free redistribution of the Library by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Library.
+
+If any portion of this section is held invalid or unenforceable under any
+particular circumstance, the balance of the section is intended to apply,
+and the section as a whole is intended to apply in other circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 12. If the distribution and/or use of the Library is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Library under this License may add
+an explicit geographical distribution limitation excluding those countries,
+so that distribution is permitted only in or among countries not thus
+excluded. In such case, this License incorporates the limitation as if
+written in the body of this License.
+
+ 13. The Free Software Foundation may publish revised and/or new
+versions of the Lesser General Public License from time to time.
+Such new versions will be similar in spirit to the present version,
+but may differ in detail to address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Library
+specifies a version number of this License which applies to it and
+"any later version", you have the option of following the terms and
+conditions either of that version or of any later version published by
+the Free Software Foundation. If the Library does not specify a
+license version number, you may choose any version ever published by
+the Free Software Foundation.
+
+ 14. If you wish to incorporate parts of the Library into other free
+programs whose distribution conditions are incompatible with these,
+write to the author to ask for permission. For software which is
+copyrighted by the Free Software Foundation, write to the Free
+Software Foundation; we sometimes make exceptions for this. Our
+decision will be guided by the two goals of preserving the free status
+of all derivatives of our free software and of promoting the sharing
+and reuse of software generally.
+
+ NO WARRANTY
+
+ 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
+WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
+EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
+OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
+KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
+LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
+THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+ 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
+WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
+AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
+FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
+CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
+LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
+RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
+FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
+SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Libraries
+
+ If you develop a new library, and you want it to be of the greatest
+possible use to the public, we recommend making it free software that
+everyone can redistribute and change. You can do so by permitting
+redistribution under these terms (or, alternatively, under the terms of the
+ordinary General Public License).
+
+ To apply these terms, attach the following notices to the library. It is
+safest to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least the
+"copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the library's name and a brief idea of what it does.>
+ Copyright (C) <year> <name of author>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+Also add information on how to contact you by electronic and paper mail.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the library, if
+necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the
+ library `Frob' (a library for tweaking knobs) written by James Random Hacker.
+
+ <signature of Ty Coon>, 1 April 1990
+ Ty Coon, President of Vice
+
+That's all there is to it!
+
+
diff --git a/pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/licenses/checkstyle/LICENSE.apache b/pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/licenses/checkstyle/LICENSE.apache
new file mode 100644
index 0000000..3c0a936
--- /dev/null
+++ b/pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/licenses/checkstyle/LICENSE.apache
@@ -0,0 +1,60 @@
+/*
+ * $Header: /filer/cvs-repository/pdf-as/command-line/licenses/checkstyle/LICENSE.apache,v 1.1 2006/06/14 10:05:39 wlackner Exp $
+ * $Revision: 1.1 $
+ * $Date: 2006/06/14 10:05:39 $
+ *
+ * ====================================================================
+ *
+ * The Apache Software License, Version 1.1
+ *
+ * Copyright (c) 1999 The Apache Software Foundation. All rights
+ * reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * 3. The end-user documentation included with the redistribution, if
+ * any, must include the following acknowlegement:
+ * "This product includes software developed by the
+ * Apache Software Foundation (http://www.apache.org/)."
+ * Alternately, this acknowlegement may appear in the software itself,
+ * if and wherever such third-party acknowlegements normally appear.
+ *
+ * 4. The names "The Jakarta Project", "Jakarta-Regexp", and "Apache Software
+ * Foundation" must not be used to endorse or promote products derived
+ * from this software without prior written permission. For written
+ * permission, please contact apache@apache.org.
+ *
+ * 5. Products derived from this software may not be called "Apache"
+ * nor may "Apache" appear in their names without prior written
+ * permission of the Apache Group.
+ *
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
+ * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
+ * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ * ====================================================================
+ *
+ * This software consists of voluntary contributions made by many
+ * individuals on behalf of the Apache Software Foundation. For more
+ * information on the Apache Software Foundation, please see
+ * <http://www.apache.org/>.
+ *
+ */
diff --git a/pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/licenses/dejavu-font/LICENSE b/pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/licenses/dejavu-font/LICENSE
new file mode 100644
index 0000000..254e2cc
--- /dev/null
+++ b/pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/licenses/dejavu-font/LICENSE
@@ -0,0 +1,99 @@
+Fonts are (c) Bitstream (see below). DejaVu changes are in public domain.
+Glyphs imported from Arev fonts are (c) Tavmjong Bah (see below)
+
+Bitstream Vera Fonts Copyright
+------------------------------
+
+Copyright (c) 2003 by Bitstream, Inc. All Rights Reserved. Bitstream Vera is
+a trademark of Bitstream, Inc.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of the fonts accompanying this license ("Fonts") and associated
+documentation files (the "Font Software"), to reproduce and distribute the
+Font Software, including without limitation the rights to use, copy, merge,
+publish, distribute, and/or sell copies of the Font Software, and to permit
+persons to whom the Font Software is furnished to do so, subject to the
+following conditions:
+
+The above copyright and trademark notices and this permission notice shall
+be included in all copies of one or more of the Font Software typefaces.
+
+The Font Software may be modified, altered, or added to, and in particular
+the designs of glyphs or characters in the Fonts may be modified and
+additional glyphs or characters may be added to the Fonts, only if the fonts
+are renamed to names not containing either the words "Bitstream" or the word
+"Vera".
+
+This License becomes null and void to the extent applicable to Fonts or Font
+Software that has been modified and is distributed under the "Bitstream
+Vera" names.
+
+The Font Software may be sold as part of a larger software package but no
+copy of one or more of the Font Software typefaces may be sold by itself.
+
+THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF COPYRIGHT, PATENT,
+TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL BITSTREAM OR THE GNOME
+FOUNDATION BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, INCLUDING
+ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES,
+WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF
+THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM OTHER DEALINGS IN THE
+FONT SOFTWARE.
+
+Except as contained in this notice, the names of Gnome, the Gnome
+Foundation, and Bitstream Inc., shall not be used in advertising or
+otherwise to promote the sale, use or other dealings in this Font Software
+without prior written authorization from the Gnome Foundation or Bitstream
+Inc., respectively. For further information, contact: fonts at gnome dot
+org.
+
+Arev Fonts Copyright
+------------------------------
+
+Copyright (c) 2006 by Tavmjong Bah. All Rights Reserved.
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of the fonts accompanying this license ("Fonts") and
+associated documentation files (the "Font Software"), to reproduce
+and distribute the modifications to the Bitstream Vera Font Software,
+including without limitation the rights to use, copy, merge, publish,
+distribute, and/or sell copies of the Font Software, and to permit
+persons to whom the Font Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright and trademark notices and this permission notice
+shall be included in all copies of one or more of the Font Software
+typefaces.
+
+The Font Software may be modified, altered, or added to, and in
+particular the designs of glyphs or characters in the Fonts may be
+modified and additional glyphs or characters may be added to the
+Fonts, only if the fonts are renamed to names not containing either
+the words "Tavmjong Bah" or the word "Arev".
+
+This License becomes null and void to the extent applicable to Fonts
+or Font Software that has been modified and is distributed under the
+"Tavmjong Bah Arev" names.
+
+The Font Software may be sold as part of a larger software package but
+no copy of one or more of the Font Software typefaces may be sold by
+itself.
+
+THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
+OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL
+TAVMJONG BAH BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
+DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
+OTHER DEALINGS IN THE FONT SOFTWARE.
+
+Except as contained in this notice, the name of Tavmjong Bah shall not
+be used in advertising or otherwise to promote the sale, use or other
+dealings in this Font Software without prior written authorization
+from Tavmjong Bah. For further information, contact: tavmjong @ free
+. fr.
+
+$Id: LICENSE 2133 2007-11-28 02:46:28Z lechimp $
diff --git a/pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/licenses/fonts/BitStream.txt b/pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/licenses/fonts/BitStream.txt
new file mode 100644
index 0000000..8e56be2
--- /dev/null
+++ b/pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/licenses/fonts/BitStream.txt
@@ -0,0 +1,17 @@
+Copyright (c) 2003 by Bitstream, Inc.
+All Rights Reserved.
+Bitstream Vera is a trademark of Bitstream, Inc.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of the fonts accompanying this license ("Fonts") and associated documentation files (the "Font Software"), to reproduce and distribute the Font Software, including without limitation the rights to use, copy, merge, publish, distribute, and/or sell copies of the Font Software, and to permit persons to whom the Font Software is furnished to do so, subject to the following conditions:
+
+The above copyright and trademark notices and this permission notice shall be included in all copies of one or more of the Font Software typefaces.
+
+The Font Software may be modified, altered, or added to, and in particular the designs of glyphs or characters in the Fonts may be modified and additional glyphs or characters may be added to the Fonts, only if the fonts are renamed to names not containing either the words "Bitstream" or the word "Vera".
+
+This License becomes null and void to the extent applicable to Fonts or Font Software that has been modified and is distributed under the "Bitstream Vera" names.
+
+The Font Software may be sold as part of a larger software package but no copy of one or more of the Font Software typefaces may be sold by itself.
+
+THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL BITSTREAM OR THE GNOME FOUNDATION BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM OTHER DEALINGS IN THE FONT SOFTWARE.
+
+Except as contained in this notice, the names of Gnome, the Gnome Foundation, and Bitstream Inc., shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Font Software without prior written authorization from the Gnome Foundation or Bitstream Inc., respectively. For further information, contact: fonts at gnome dot org.http://www.bitstream.com \ No newline at end of file
diff --git a/pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/licenses/ikvm/LICENSE b/pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/licenses/ikvm/LICENSE
new file mode 100644
index 0000000..2fbfb21
--- /dev/null
+++ b/pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/licenses/ikvm/LICENSE
@@ -0,0 +1,34 @@
+IMPORTANT NOTICE
+
+ Some files in this distribution are part of GNU Classpath and have a
+ different license. This applies in particular to:
+ - IKVM.GNU.Classpath.dll
+ - some of the *.java files (see each file header for license)
+
+ See http://www.gnu.org/software/classpath/ for information on the
+ GNU Classpath license.
+
+-----------------------------------------------------------------------------
+
+ Copyright (C) 2002, 2003, 2004 Jeroen Frijters
+
+ This software is provided 'as-is', without any express or implied
+ warranty. In no event will the authors be held liable for any damages
+ arising from the use of this software.
+
+ Permission is granted to anyone to use this software for any purpose,
+ including commercial applications, and to alter it and redistribute it
+ freely, subject to the following restrictions:
+
+ 1. The origin of this software must not be misrepresented; you must not
+ claim that you wrote the original software. If you use this software
+ in a product, an acknowledgment in the product documentation would be
+ appreciated but is not required.
+ 2. Altered source versions must be plainly marked as such, and must not be
+ misrepresented as being the original software.
+ 3. This notice may not be removed or altered from any source distribution.
+
+ Jeroen Frijters
+ jeroen@frijters.net
+
+-----------------------------------------------------------------------------
diff --git a/pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/licenses/junit/cpl-v10.html b/pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/licenses/junit/cpl-v10.html
new file mode 100644
index 0000000..1900994
--- /dev/null
+++ b/pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/licenses/junit/cpl-v10.html
@@ -0,0 +1,125 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
+<HTML>
+<HEAD>
+<TITLE>Common Public License - v 1.0</TITLE>
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+</HEAD>
+
+<BODY BGCOLOR="#FFFFFF" VLINK="#800000">
+
+
+<P ALIGN="CENTER"><B>Common Public License - v 1.0</B>
+<P><B></B><FONT SIZE="3"></FONT>
+<P><FONT SIZE="3"></FONT><FONT SIZE="2">THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS COMMON PUBLIC LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT.</FONT>
+<P><FONT SIZE="2"></FONT>
+<P><FONT SIZE="2"><B>1. DEFINITIONS</B></FONT>
+<P><FONT SIZE="2">"Contribution" means:</FONT>
+
+<UL><FONT SIZE="2">a) in the case of the initial Contributor, the initial code and documentation distributed under this Agreement, and<BR CLEAR="LEFT">
+b) in the case of each subsequent Contributor:</FONT></UL>
+
+
+<UL><FONT SIZE="2">i) changes to the Program, and</FONT></UL>
+
+
+<UL><FONT SIZE="2">ii) additions to the Program;</FONT></UL>
+
+
+<UL><FONT SIZE="2">where such changes and/or additions to the Program originate from and are distributed by that particular Contributor. </FONT><FONT SIZE="2">A Contribution 'originates' from a Contributor if it was added to the Program by such Contributor itself or anyone acting on such Contributor's behalf. </FONT><FONT SIZE="2">Contributions do not include additions to the Program which: (i) are separate modules of software distributed in conjunction with the Program under their own license agreement, and (ii) are not derivative works of the Program. </FONT></UL>
+
+<P><FONT SIZE="2"></FONT>
+<P><FONT SIZE="2">"Contributor" means any person or entity that distributes the Program.</FONT>
+<P><FONT SIZE="2"></FONT><FONT SIZE="2"></FONT>
+<P><FONT SIZE="2">"Licensed Patents " mean patent claims licensable by a Contributor which are necessarily infringed by the use or sale of its Contribution alone or when combined with the Program. </FONT>
+<P><FONT SIZE="2"></FONT><FONT SIZE="2"></FONT>
+<P><FONT SIZE="2"></FONT><FONT SIZE="2">"Program" means the Contributions distributed in accordance with this Agreement.</FONT>
+<P><FONT SIZE="2"></FONT>
+<P><FONT SIZE="2">"Recipient" means anyone who receives the Program under this Agreement, including all Contributors.</FONT>
+<P><FONT SIZE="2"><B></B></FONT>
+<P><FONT SIZE="2"><B>2. GRANT OF RIGHTS</B></FONT>
+
+<UL><FONT SIZE="2"></FONT><FONT SIZE="2">a) </FONT><FONT SIZE="2">Subject to the terms of this Agreement, each Contributor hereby grants</FONT><FONT SIZE="2"> Recipient a non-exclusive, worldwide, royalty-free copyright license to</FONT><FONT SIZE="2" COLOR="#FF0000"> </FONT><FONT SIZE="2">reproduce, prepare derivative works of, publicly display, publicly perform, distribute and sublicense the Contribution of such Contributor, if any, and such derivative works, in source code and object code form.</FONT></UL>
+
+
+<UL><FONT SIZE="2"></FONT></UL>
+
+
+<UL><FONT SIZE="2"></FONT><FONT SIZE="2">b) Subject to the terms of this Agreement, each Contributor hereby grants </FONT><FONT SIZE="2">Recipient a non-exclusive, worldwide,</FONT><FONT SIZE="2" COLOR="#008000"> </FONT><FONT SIZE="2">royalty-free patent license under Licensed Patents to make, use, sell, offer to sell, import and otherwise transfer the Contribution of such Contributor, if any, in source code and object code form. This patent license shall apply to the combination of the Contribution and the Program if, at the time the Contribution is added by the Contributor, such addition of the Contribution causes such combination to be covered by the Licensed Patents. The patent license shall not apply to any other combinations which include the Contribution. No hardware per se is licensed hereunder. </FONT></UL>
+
+
+<UL><FONT SIZE="2"></FONT></UL>
+
+
+<UL><FONT SIZE="2">c) Recipient understands that although each Contributor grants the licenses to its Contributions set forth herein, no assurances are provided by any Contributor that the Program does not infringe the patent or other intellectual property rights of any other entity. Each Contributor disclaims any liability to Recipient for claims brought by any other entity based on infringement of intellectual property rights or otherwise. As a condition to exercising the rights and licenses granted hereunder, each Recipient hereby assumes sole responsibility to secure any other intellectual property rights needed, if any. For example, if a third party patent license is required to allow Recipient to distribute the Program, it is Recipient's responsibility to acquire that license before distributing the Program.</FONT></UL>
+
+
+<UL><FONT SIZE="2"></FONT></UL>
+
+
+<UL><FONT SIZE="2">d) Each Contributor represents that to its knowledge it has sufficient copyright rights in its Contribution, if any, to grant the copyright license set forth in this Agreement. </FONT></UL>
+
+
+<UL><FONT SIZE="2"></FONT></UL>
+
+<P><FONT SIZE="2"><B>3. REQUIREMENTS</B></FONT>
+<P><FONT SIZE="2"><B></B>A Contributor may choose to distribute the Program in object code form under its own license agreement, provided that:</FONT>
+
+<UL><FONT SIZE="2">a) it complies with the terms and conditions of this Agreement; and</FONT></UL>
+
+
+<UL><FONT SIZE="2">b) its license agreement:</FONT></UL>
+
+
+<UL><FONT SIZE="2">i) effectively disclaims</FONT><FONT SIZE="2"> on behalf of all Contributors all warranties and conditions, express and implied, including warranties or conditions of title and non-infringement, and implied warranties or conditions of merchantability and fitness for a particular purpose; </FONT></UL>
+
+
+<UL><FONT SIZE="2">ii) effectively excludes on behalf of all Contributors all liability for damages, including direct, indirect, special, incidental and consequential damages, such as lost profits; </FONT></UL>
+
+
+<UL><FONT SIZE="2">iii)</FONT><FONT SIZE="2"> states that any provisions which differ from this Agreement are offered by that Contributor alone and not by any other party; and</FONT></UL>
+
+
+<UL><FONT SIZE="2">iv) states that source code for the Program is available from such Contributor, and informs licensees how to obtain it in a reasonable manner on or through a medium customarily used for software exchange.</FONT><FONT SIZE="2" COLOR="#0000FF"> </FONT><FONT SIZE="2" COLOR="#FF0000"></FONT></UL>
+
+
+<UL><FONT SIZE="2" COLOR="#FF0000"></FONT><FONT SIZE="2"></FONT></UL>
+
+<P><FONT SIZE="2">When the Program is made available in source code form:</FONT>
+
+<UL><FONT SIZE="2">a) it must be made available under this Agreement; and </FONT></UL>
+
+
+<UL><FONT SIZE="2">b) a copy of this Agreement must be included with each copy of the Program. </FONT></UL>
+
+<P><FONT SIZE="2"></FONT><FONT SIZE="2" COLOR="#0000FF"><STRIKE></STRIKE></FONT>
+<P><FONT SIZE="2" COLOR="#0000FF"><STRIKE></STRIKE></FONT><FONT SIZE="2">Contributors may not remove or alter any copyright notices contained within the Program. </FONT>
+<P><FONT SIZE="2"></FONT>
+<P><FONT SIZE="2">Each Contributor must identify itself as the originator of its Contribution, if any, in a manner that reasonably allows subsequent Recipients to identify the originator of the Contribution. </FONT>
+<P><FONT SIZE="2"></FONT>
+<P><FONT SIZE="2"><B>4. COMMERCIAL DISTRIBUTION</B></FONT>
+<P><FONT SIZE="2">Commercial distributors of software may accept certain responsibilities with respect to end users, business partners and the like. While this license is intended to facilitate the commercial use of the Program, the Contributor who includes the Program in a commercial product offering should do so in a manner which does not create potential liability for other Contributors. Therefore, if a Contributor includes the Program in a commercial product offering, such Contributor ("Commercial Contributor") hereby agrees to defend and indemnify every other Contributor ("Indemnified Contributor") against any losses, damages and costs (collectively "Losses") arising from claims, lawsuits and other legal actions brought by a third party against the Indemnified Contributor to the extent caused by the acts or omissions of such Commercial Contributor in connection with its distribution of the Program in a commercial product offering. The obligations in this section do not apply to any claims or Losses relating to any actual or alleged intellectual property infringement. In order to qualify, an Indemnified Contributor must: a) promptly notify the Commercial Contributor in writing of such claim, and b) allow the Commercial Contributor to control, and cooperate with the Commercial Contributor in, the defense and any related settlement negotiations. The Indemnified Contributor may participate in any such claim at its own expense.</FONT>
+<P><FONT SIZE="2"></FONT>
+<P><FONT SIZE="2">For example, a Contributor might include the Program in a commercial product offering, Product X. That Contributor is then a Commercial Contributor. If that Commercial Contributor then makes performance claims, or offers warranties related to Product X, those performance claims and warranties are such Commercial Contributor's responsibility alone. Under this section, the Commercial Contributor would have to defend claims against the other Contributors related to those performance claims and warranties, and if a court requires any other Contributor to pay any damages as a result, the Commercial Contributor must pay those damages.</FONT>
+<P><FONT SIZE="2"></FONT><FONT SIZE="2" COLOR="#0000FF"></FONT>
+<P><FONT SIZE="2" COLOR="#0000FF"></FONT><FONT SIZE="2"><B>5. NO WARRANTY</B></FONT>
+<P><FONT SIZE="2">EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is</FONT><FONT SIZE="2"> solely responsible for determining the appropriateness of using and distributing </FONT><FONT SIZE="2">the Program</FONT><FONT SIZE="2"> and assumes all risks associated with its exercise of rights under this Agreement</FONT><FONT SIZE="2">, including but not limited to the risks and costs of program errors, compliance with applicable laws, damage to or loss of data, </FONT><FONT SIZE="2">programs or equipment, and unavailability or interruption of operations</FONT><FONT SIZE="2">. </FONT><FONT SIZE="2"></FONT>
+<P><FONT SIZE="2"></FONT>
+<P><FONT SIZE="2"></FONT><FONT SIZE="2"><B>6. DISCLAIMER OF LIABILITY</B></FONT>
+<P><FONT SIZE="2"></FONT><FONT SIZE="2">EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES </FONT><FONT SIZE="2">(INCLUDING WITHOUT LIMITATION LOST PROFITS),</FONT><FONT SIZE="2"> HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.</FONT>
+<P><FONT SIZE="2"></FONT><FONT SIZE="2"></FONT>
+<P><FONT SIZE="2"><B>7. GENERAL</B></FONT>
+<P><FONT SIZE="2"></FONT><FONT SIZE="2">If any provision of this Agreement is invalid or unenforceable under applicable law, it shall not affect the validity or enforceability of the remainder of the terms of this Agreement, and without further action by the parties hereto, such provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable.</FONT>
+<P><FONT SIZE="2"></FONT>
+<P><FONT SIZE="2">If Recipient institutes patent litigation against a Contributor with respect to a patent applicable to software (including a cross-claim or counterclaim in a lawsuit), then any patent licenses granted by that Contributor to such Recipient under this Agreement shall terminate as of the date such litigation is filed. In addition, if Recipient institutes patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Program itself (excluding combinations of the Program with other software or hardware) infringes such Recipient's patent(s), then such Recipient's rights granted under Section 2(b) shall terminate as of the date such litigation is filed. </FONT><FONT SIZE="2"></FONT>
+<P><FONT SIZE="2"></FONT>
+<P><FONT SIZE="2">All Recipient's rights under this Agreement shall terminate if it fails to comply with any of the material terms or conditions of this Agreement and does not cure such failure in a reasonable period of time after becoming aware of such noncompliance. If all Recipient's rights under this Agreement terminate, Recipient agrees to cease use and distribution of the Program as soon as reasonably practicable. However, Recipient's obligations under this Agreement and any licenses granted by Recipient relating to the Program shall continue and survive. </FONT><FONT SIZE="2"></FONT>
+<P><FONT SIZE="2"></FONT>
+<P><FONT SIZE="2"></FONT><FONT SIZE="2">Everyone is permitted to copy and distribute copies of this Agreement, but in order to avoid inconsistency the Agreement is copyrighted and may only be modified in the following manner. The Agreement Steward reserves the right to </FONT><FONT SIZE="2">publish new versions (including revisions) of this Agreement from time to </FONT><FONT SIZE="2">time. No one other than the Agreement Steward has the right to modify this Agreement. IBM is the initial Agreement Steward. IBM may assign the responsibility to serve as the Agreement Steward to a suitable separate entity. </FONT><FONT SIZE="2">Each new version of the Agreement will be given a distinguishing version number. The Program (including Contributions) may always be distributed subject to the version of the Agreement under which it was received. In addition, after a new version of the Agreement is published, Contributor may elect to distribute the Program (including its Contributions) under the new </FONT><FONT SIZE="2">version. </FONT><FONT SIZE="2">Except as expressly stated in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to the intellectual property of any Contributor under this Agreement, whether expressly, </FONT><FONT SIZE="2">by implication, estoppel or otherwise</FONT><FONT SIZE="2">.</FONT><FONT SIZE="2"> All rights in the Program not expressly granted under this Agreement are reserved.</FONT>
+<P><FONT SIZE="2"></FONT>
+<P><FONT SIZE="2">This Agreement is governed by the laws of the State of New York and the intellectual property laws of the United States of America. No party to this Agreement will bring a legal action under this Agreement more than one year after the cause of action arose. Each party waives its rights to a jury trial in any resulting litigation.</FONT>
+<P><FONT SIZE="2"></FONT><FONT SIZE="2"></FONT>
+<P><FONT SIZE="2"></FONT>
+
+</BODY>
+
+</HTML> \ No newline at end of file
diff --git a/pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/licenses/log4j/LICENSE.txt b/pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/licenses/log4j/LICENSE.txt
new file mode 100644
index 0000000..030564f
--- /dev/null
+++ b/pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/licenses/log4j/LICENSE.txt
@@ -0,0 +1,48 @@
+/*
+ * ============================================================================
+ * The Apache Software License, Version 1.1
+ * ============================================================================
+ *
+ * Copyright (C) 1999 The Apache Software Foundation. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without modifica-
+ * tion, are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ *
+ * 3. The end-user documentation included with the redistribution, if any, must
+ * include the following acknowledgment: "This product includes software
+ * developed by the Apache Software Foundation (http://www.apache.org/)."
+ * Alternately, this acknowledgment may appear in the software itself, if
+ * and wherever such third-party acknowledgments normally appear.
+ *
+ * 4. The names "log4j" and "Apache Software Foundation" must not be used to
+ * endorse or promote products derived from this software without prior
+ * written permission. For written permission, please contact
+ * apache@apache.org.
+ *
+ * 5. Products derived from this software may not be called "Apache", nor may
+ * "Apache" appear in their name, without prior written permission of the
+ * Apache Software Foundation.
+ *
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
+ * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+ * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU-
+ * DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * on behalf of the Apache Software Foundation. For more information on the
+ * Apache Software Foundation, please see <http://www.apache.org/>.
+ *
+ */
diff --git a/pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/licenses/lucene/LICENSE.txt b/pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/licenses/lucene/LICENSE.txt
new file mode 100644
index 0000000..ad8d37e
--- /dev/null
+++ b/pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/licenses/lucene/LICENSE.txt
@@ -0,0 +1,15 @@
+/**
+ * Copyright 2004 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
diff --git a/pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/licenses/pdfbox/LICENSE b/pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/licenses/pdfbox/LICENSE
new file mode 100644
index 0000000..761bc80
--- /dev/null
+++ b/pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/licenses/pdfbox/LICENSE
@@ -0,0 +1,25 @@
+Copyright (c) 2003-2005, www.pdfbox.org
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation
+ and/or other materials provided with the distribution.
+3. Neither the name of pdfbox; nor the names of its
+ contributors may be used to endorse or promote products derived from this
+ software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY
+DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. \ No newline at end of file
diff --git a/pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/licenses/sun-jaicmm/JAI-LICENSE b/pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/licenses/sun-jaicmm/JAI-LICENSE
new file mode 100644
index 0000000..c56029e
--- /dev/null
+++ b/pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/licenses/sun-jaicmm/JAI-LICENSE
@@ -0,0 +1,283 @@
+Sun Microsystems, Inc.
+
+Binary Code License Agreement
+
+
+
+JAVA ADVANCED IMAGING API, VERSION 1.1.2
+
+
+
+READ THE TERMS OF THIS AGREEMENT AND ANY PROVIDED
+SUPPLEMENTAL LICENS E TERMS (COLLECTIVELY "AGREEMENT")
+CAREFULLY BEFORE OPENING THE SOFTW ARE MEDIA PACKAGE. BY
+OPENING THE SOFTWARE MEDIA PACKAGE, YOU AGRE E TO THE TERMS
+OF THIS AGREEMENT. IF YOU ARE ACCESSING THE SOFTWAR E
+ELECTRONICALLY, INDICATE YOUR ACCEPTANCE OF THESE TERMS BY
+SELECTIN G THE "ACCEPT" BUTTON AT THE END OF THIS
+AGREEMENT. IF YOU DO NOT AGREE TO ALL THESE TERMS,
+PROMPTLY RETURN THE UNUSED SOFTWARE TO YOUR
+ PLACE OF PURCHASE FOR A REFUND OR, IF THE SOFTWARE IS
+ ACCESSED ELECT RONICALLY, SELECT THE "DECLINE" BUTTON AT
+THE END OF THIS AGREEMENT.
+
+
+
+
+1. LICENSE TO USE. Sun grants you a non-exclusive and
+non-trans ferable license for the internal use only of the
+accompanying softwar e and documentation and any error
+corrections provided by Sun (collec tively "Software"), by
+the number of users and the class of computer hardware for
+which the corresponding fee has been paid.
+
+
+
+2. RESTRICTIONS. Software is confidential and
+copyrighted. Titl e to Software and all associated
+intellectual property rights is reta ined by Sun and/or its
+licensors. Except as specifically authorize d in any
+Supplemental License Terms, you may not make copies of
+Softw are, other than a single copy of Software for
+archival purposes. U nless enforcement is prohibited by
+applicable law, you may not modify , decompile, or reverse
+engineer Software. Licensee acknowledges t hat Software is
+not designed or intended for use in the design, const
+ruction, operation or maintenance of any nuclear facility.
+Sun Micros ystems, Inc. disclaims any express or implied
+warranty of fitness for
+ such uses. No right, title or interest in or to any
+ trademark, s ervice mark, logo or trade name of Sun or its
+licensors is granted un der this Agreement.
+
+
+
+3. LIMITED WARRANTY. Sun warrants to you that for a
+period of nin ety (90) days from the date of purchase, as
+evidenced by a copy of th e receipt, the media on which
+Software is furnished (if any) will be free of defects in
+materials and workmanship under normal use. Exc ept for
+the foregoing, Software is provided "AS IS". Your exclusiv
+e remedy and Sun's entire liability under this limited
+warranty will be at Sun's option to replace Software media
+or refund the fee paid f or Software.
+
+
+
+4. DISCLAIMER OF WARRANTY. UNLESS SPECIFIED IN THIS
+AGREEMENT, ALL EXPRESS OR IMPLIED CONDITIONS,
+REPRESENTATIONS AND WARRANTIES, IN CLUDING ANY IMPLIED
+WARRANTY OF MERCHANTABILITY, FITNESS FOR A PARTIC ULAR
+PURPOSE OR NON-INFRINGEMENT ARE DISCLAIMED, EXCEPT TO THE
+EXTENT
+ THAT THESE DISCLAIMERS ARE HELD TO BE LEGALLY INVALID.
+
+
+
+5. LIMITATION OF LIABILITY. TO THE EXTENT NOT PROHIBITED
+BY LAW , IN NO EVENT WILL SUN OR ITS LICENSORS BE LIABLE
+FOR ANY LOST REVENU E, PROFIT OR DATA, OR FOR SPECIAL,
+INDIRECT, CONSEQUENTIAL, INCIDENTA L OR PUNITIVE DAMAGES,
+HOWEVER CAUSED REGARDLESS OF THE THEORY OF LIA BILITY,
+ARISING OUT OF OR RELATED TO THE USE OF OR INABILITY TO USE
+S OFTWARE, EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY
+OF SUCH DAMA GES. In no event will Sun's liability to you,
+whether in contract,
+ tort (including negligence), or otherwise, exceed the
+ amount paid by you for Software under this Agreement. The
+ foregoing limitations will apply even if the above stated
+warranty fails of its essential p urpose.
+
+
+
+6. Termination. This Agreement is effective until
+terminated. You may terminate this Agreement at any time
+by destroying all co pies of Software. This Agreement will
+terminate immediately withou t notice from Sun if you fail
+to comply with any provision of this Ag reement. Upon
+Termination, you must destroy all copies of Software
+.
+
+
+
+7. Export Regulations. All Software and technical data
+delivered und er this Agreement are subject to US export
+control laws and may be su bject to export or import
+regulations in other countries. You agre e to comply
+strictly with all such laws and regulations and acknowled
+ge that you have the responsibility to obtain such licenses
+to export , re-export, or import as may be required after
+delivery to you.
+
+
+
+8. U.S. Government Restricted Rights. If Software is
+being acqu ired by or on behalf of the U.S. Government or
+by a U.S. Government p rime contractor or subcontractor (at
+any tier), then the Government's
+ rights in Software and accompanying documentation will be
+ only as se t forth in this Agreement; this is in
+accordance with 48 CFR 227.7201
+ through 227.7202-4 (for Department of Defense (DOD)
+ acquisitions) an d with 48 CFR 2.101 and 12.212 (for
+non-DOD acquisitions).
+
+
+
+9. Governing Law. Any action related to this Agreement
+will be governed by California law and controlling U.S.
+federal law. No ch oice of law rules of any jurisdiction
+will apply.
+
+
+
+10. Severability. If any provision of this Agreement is
+held to be un enforceable, this Agreement will remain in
+effect with the provision omitted, unless omission would
+frustrate the intent of the parties, i n which case this
+Agreement will immediately terminate.
+
+
+
+11. Integration. This Agreement is the entire agreement
+between yo u and Sun relating to its subject matter. It
+supersedes all prior or contemporaneous oral or written
+communications, proposals, represe ntations and warranties
+and prevails over any conflicting or addition al terms of
+any quote, order, acknowledgment, or other communication
+between the parties relating to its subject matter during
+the term of
+ this Agreement. No modification of this Agreement will be
+ binding , unless in writing and signed by an authorized
+representative of eac h party.
+
+
+
+
+
+ JAVA ADVANCED IMAGING, VERSION 1.1.2
+
+
+
+ SUPPLEMENTAL LICENSE TERMS
+
+
+
+These supplemental license terms ("Supplemental Terms") add
+to or mod ify the terms of the Binary Code License
+Agreement (collectively, the
+ "Agreement"). Capitalized terms not defined in these
+ Supplemental Te rms shall have the same meanings ascribed
+to them in the Agreement. T hese Supplemental Terms shall
+supersede any inconsistent or conflicti ng terms in the
+Agreement, or in any license contained within the Sof
+tware.
+
+
+
+1. Software Internal Use and Development License Grant.
+Subject to
+ the terms and conditions of this Agreement, including, but
+ not limit ed to Section 3 (Java Technology Restrictions)
+of these Supplemental Terms, Sun grants you a
+non-exclusive, non-transferable, limited lice nse to
+reproduce internally and use internally the binary form of
+the
+ Software, complete and unmodified, for the sole purpose of
+ designing , developing and testing your Java applets and
+applications ("Program s").
+
+
+
+2. License to Distribute Software. In addition to the
+license gran ted in Section 1 (Software Internal Use and
+Development License Grant ) of these Supplemental Terms,
+subject to the terms and conditions of
+ this Agreement, including but not limited to, Section 3
+ (Java Techno logy Restrictions) of these Supplemental
+Terms, Sun grants you a non- exclusive, non-transferable,
+limited license to reproduce and distrib ute the Software
+in binary code form only, provided that you (i) dist ribute
+the Software complete and unmodified and only bundled as
+part of your Programs, (ii) do not distribute additional
+software intended
+ to replace any component(s) of the Software, (iii) do not
+ remove or alter any proprietary legends or notices
+contained in the Software, ( iv) only distribute the
+Software subject to a license agreement that protects Sun's
+interests consistent with the terms contained in this
+Agreement, and (v) agree to defend and indemnify Sun and
+its licensor s from and against any damages, costs,
+liabilities, settlement amount s and/or expenses (including
+attorneys' fees) incurred in connection with any claim,
+lawsuit or action by any third party that arises or r
+esults from the use or distribution of any and all Programs
+and/or So ftware.
+
+
+
+3. Java Technology Restrictions. You may not modify the
+Java Platform
+ Interface ("JPI", identified as classes contained within
+ the "java" package or any subpackages of the "java"
+package), by creating additi onal classes within the JPI or
+otherwise causing the addition to or m odification of the
+classes in the JPI. In the event that you creat e an
+additional class and associated API(s) which (i) extends
+the fun ctionality of the Java platform, and (ii) is
+exposed to third party s oftware developers for the purpose
+of developing additional software which invokes such
+additional API, you must promptly publish broadly an
+accurate specification for such API for free use by all
+developers
+. You may not create, or authorize your licensees to create additi
+onal classes, interfaces, or subpackages that are in any
+way identifi ed as "java", "javax", "sun" or similar
+convention as specified by Su n in any naming convention
+designation.
+
+
+
+4. Java Runtime Availability. Refer to the appropriate
+version of t he Java Runtime Environment binary code
+license (currently located at
+ http://www.java.sun.com/jdk/index.html) for the
+ availability of runt ime code which may be distributed
+with Java applets and applications.
+
+
+
+5. Trademarks and Logos. You acknowledge and agree as
+between you and
+ Sun that Sun owns the SUN, SOLARIS, JAVA, JINI, FORTE, and
+ iPLANET t rademarks and all SUN, SOLARIS, JAVA, JINI,
+FORTE, and iPLANET-relate d trademarks, service marks,
+logos and other brand designations ("Sun
+ Marks"), and you agree to comply with the Sun Trademark
+ and Logo Usa ge Requirements currently located at
+http://www.sun.com/policies/trad emarks. Any use you make
+of the Sun Marks inures to Sun's benefit.
+
+
+
+
+6. Source Code. Software may contain source code that is
+provided sol ely for reference purposes pursuant to the
+terms of this Agreement. Source code may not be
+redistributed unless expressly provided fo r in this
+Agreement.
+
+
+
+7. Termination for Infringement. Either party may
+terminate this A greement immediately should any Software
+become, or in either party's
+ opinion be likely to become, the subject of a claim of
+ infringement of any intellectual property right.
+
+
+
+For inquiries please contact: Sun Microsystems, Inc., 4150
+Network Ci rcle, Santa Clara, California 95054, U.S.A
+
+(LFI#143342/Form ID#011801)
diff --git a/pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/licenses/sun-jaicmm/LICENSE b/pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/licenses/sun-jaicmm/LICENSE
new file mode 100644
index 0000000..b5873aa
--- /dev/null
+++ b/pdf-as-web/src/main/assembly/tomcat/configuration/default/pdf-as/licenses/sun-jaicmm/LICENSE
@@ -0,0 +1,186 @@
+License for sun JAI ICC color profiles. Downloaded from
+http://java.sun.com/products/java-media/jai/downloads/download-1_1_2.html
+
+
+ Java(TM) Advanced Imaging API
+ Version 1.0
+ Binary Code License
+
+This binary code license ("License") contains
+rights and restrictions associated with use of
+the accompanying Java(TM) Advanced Imaging API
+software and documentation ("Software"). Read the
+License carefully before using the Software. By
+using the Software you agree to the terms and
+conditions of this License.
+
+1. License to Distribute. Licensee is granted a
+ royalty-free right to reproduce and
+ distribute the Software provided that
+ Licensee:
+
+ (A) distributes the Software complete and
+ unmodified (except for the specific files
+ identified as optional in the Software
+ README file), only as part of, and for
+ the sole purpose of running, Licensee's
+ Java compatible applet or application
+ ("Program") into which the Software is
+ incorporated;
+
+ (B) does not distribute additional software
+ intended to replace any component(s) of
+ the Software;
+
+ (C) agrees to incorporate the most current
+ version of the Software that was
+ available 180 days prior to each
+ production release of the Program;
+
+ (D) does not remove or alter any proprietary
+ legends or notices contained in the
+ Software;
+
+ (E) includes the provisions of Sections 2, 3,
+ 5, 6, 8 and 9 in Licensee's license
+ agreement for the Program; and
+
+ (F) agrees to indemnify, hold harmless, and
+ defend Sun and its licensors from and
+ against any claims or lawsuits, including
+ attorneys' fees, that arise or result
+ from the use or distribution of the
+ Program.
+
+2. Java Platform Interface. Licensee may not
+ modify the Java Platform Interface ("JPI",
+ identified as classes contained within the
+ "java" package or any subpackages of the
+ "java" package), by creating additional
+ classes within the JPI or otherwise causing
+ the addition to or modification of the
+ classes in the JPI. In the event that
+ Licensee creates any Java-related API and
+ distributes such API to others for applet or
+ application development, Licensee must
+ promptly publish broadly, an accurate
+ specification for such API for free use by
+ all developers of Java-based software.
+
+3. Restrictions. Software is confidential
+ copyrighted information of Sun and title to
+ all copies is retained by Sun and/or its
+ licensors. Licensee shall not decompile,
+ disassemble, decrypt, extract, or otherwise
+ reverse engineer Software. Software may not
+ be leased, assigned, or sublicensed, in whole
+ or in part, except as specifically authorized
+ in Section 1. Software is not designed or
+ intended for use in online control of
+ aircraft, air traffic, aircraft navigation or
+ aircraft communications; or in the design,
+ construction, operation or maintenance of any
+ nuclear facility. Licensee warrants that it
+ will not use or redistribute the Software for
+ such purposes.
+
+4. Trademarks and Logos. This License does not
+ authorize Licensee to use any Sun name,
+ trademark or logo. Licensee acknowledges that
+ Sun owns the Java trademark and all
+ Java-related trademarks, logos and icons
+ including the Coffee Cup and Duke ("Java
+ Marks") and agrees to:
+
+ (A) comply with the Java Trademark Guidelines
+ at http://java.sun.com/trademarks.html;
+
+ (B) not do anything harmful to or
+ inconsistent
+ with Sun's rights in the Java Marks; and
+
+ (C) assist Sun in protecting those rights,
+ including assigning to Sun any rights
+ acquired by Licensee in any Java Mark.
+
+5. Disclaimer of Warranty. Software is provided
+ "AS IS," without a warranty of any kind. ALL
+ EXPRESS OR IMPLIED REPRESENTATIONS AND
+ WARRANTIES, INCLUDING ANY IMPLIED WARRANTY OF
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR
+ PURPOSE OR NON-INFRINGEMENT, ARE HEREBY
+ EXCLUDED.
+
+6. Limitation of Liability. SUN AND ITS
+LICENSORS
+ SHALL NOT BE LIABLE FOR ANY DAMAGES SUFFERED
+ BY LICENSEE OR ANY THIRD PARTY AS A RESULT OF
+ USING OR DISTRIBUTING SOFTWARE. IN NO EVENT
+ WILL SUN OR ITS LICENSORS BE LIABLE FOR ANY
+ LOST REVENUE, PROFIT OR DATA, OR FOR DIRECT,
+ INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL
+ OR PUNITIVE DAMAGES, HOWEVER CAUSED AND
+ REGARDLESS OF THE THEORY OF LIABILITY,
+ ARISING OUT OF THE USE OF OR INABILITY TO USE
+ SOFTWARE, EVEN IF SUN HAS BEEN ADVISED OF THE
+ POSSIBILITY OF SUCH DAMAGES.
+
+7. Termination. This license shall automatically
+ terminate 180 days after production release
+ of the next version of the Software by Sun.
+ Licensee may terminate this License at any
+ time by destroying all copies of Software.
+ This License will terminate immediately
+ without notice from Sun if Licensee fails to
+ comply with any provision of this License.
+ Upon such termination, Licensee must destroy
+ all copies of Software.
+
+8. Export Regulations. Software, including
+ technical data, is subject to U.S. export
+ control laws, including the U.S. Export
+ Administration Act and its associated
+ regulations, and may be subject to export or
+ import regulations in other countries.
+ Licensee agrees to comply strictly with all
+ such regulations and acknowledges that it has
+ the responsibility to obtain licenses to
+ export, re-export, or import Software.
+ Software may not be downloaded, or otherwise
+ exported or re-exported
+
+ (A) into, or to a national or resident of,
+ Cuba, Iraq, Iran, North Korea, Libya,
+ Sudan, Syria or any country to which the
+ U.S. has embargoed goods; or
+
+ (B) to anyone on the U.S. Treasury
+ Department's list of Specially Designated
+ Nations or the U.S. Commerce Department's
+ Table of Denial Orders.
+
+9. Restricted Rights. Use, duplication or
+ disclosure by the United States government is
+ subject to the restrictions as set forth in
+ the Rights in Technical Data and Computer
+ Software Clauses in DFARS 252.227-7013(c) (1)
+ (ii) and FAR 52.227-19(c) (2) as applicable.
+
+10. Governing Law. Any action related to this
+ License will be governed by California law
+ and controlling U.S. federal law. No choice
+ of law rules of any jurisdiction will apply.
+
+11. Severability. If any of the above provisions
+ are held to be in violation of applicable
+ law, void, or unenforceable in any
+ jurisdiction, then such provisions are
+ herewith waived or amended to the extent
+ necessary for the License to be otherwise
+ enforceable in such jurisdiction. However,
+ if in Sun's opinion deletion or amendment of
+ any provisions of the License by operation of
+ this paragraph unreasonably compromises the
+ rights or increase the liabilities of Sun or
+ its licensors, Sun reserves the right to
+ terminate the License.
diff --git a/pdf-as-web/src/main/assembly/tomcat/default.xml b/pdf-as-web/src/main/assembly/tomcat/default.xml
new file mode 100644
index 0000000..f8c3f03
--- /dev/null
+++ b/pdf-as-web/src/main/assembly/tomcat/default.xml
@@ -0,0 +1,116 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- http://maven.apache.org/plugins/maven-assembly-plugin/assembly.html -->
+<assembly
+ xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2 http://maven.apache.org/xsd/assembly-1.1.2.xsd">
+
+ <id>tomcat</id>
+
+ <formats>
+ <format>zip</format>
+ <!-- tar.gz format preserves permission flags (unix only) -->
+ <format>tar.gz</format>
+ </formats>
+
+ <baseDirectory>tomcat</baseDirectory>
+ <includeBaseDirectory>false</includeBaseDirectory>
+
+ <fileSets>
+
+ <!-- Assemble extracted tomcat, excluding pre-deployed applications like examples, manager... -->
+ <fileSet>
+ <directory>${project.build.directory}/tomcat</directory>
+ <excludes>
+ <exclude>apache-tomcat-${tomcat.version}/webapps/examples/**</exclude>
+ <exclude>apache-tomcat-${tomcat.version}/webapps/docs/**</exclude>
+ <exclude>apache-tomcat-${tomcat.version}/webapps/host-manager/**</exclude>
+ <exclude>apache-tomcat-${tomcat.version}/webapps/manager/**</exclude>
+ <exclude>apache-tomcat-${tomcat.version}/webapps/ROOT/*</exclude>
+ <!-- excluded because we neet to set permission flags later on (unix only)-->
+ <exclude>apache-tomcat-${tomcat.version}/bin/*.sh</exclude>
+ </excludes>
+ <outputDirectory />
+ </fileSet>
+
+ <!-- Copy unix tomcat bin scripts, setting a+xr and u+w (0x0755).-->
+ <fileSet>
+ <directory>${project.build.directory}/tomcat</directory>
+ <includes>
+ <include>apache-tomcat-${tomcat.version}/bin/*.sh</include>
+ </includes>
+ <fileMode>0755</fileMode>
+ <outputDirectory />
+ </fileSet>
+
+ <!-- Copy startup scripts (excluding Unix scripts). -->
+ <fileSet>
+ <directory>src/main/assembly/tomcat/scripts</directory>
+ <excludes>
+ <!-- ignored since permission flags are set later on (unix only) -->
+ <exclude>*.sh</exclude>
+ </excludes>
+ <filtered>true</filtered>
+ <outputDirectory>apache-tomcat-${tomcat.version}</outputDirectory>
+ </fileSet>
+
+ <!-- Copy startup unix scripts, setting a+xr and u+w (0x0755).-->
+ <fileSet>
+ <directory>src/main/assembly/tomcat/scripts</directory>
+ <includes>
+ <!-- ignored since permission flags are set later on (unix only) -->
+ <include>*.sh</include>
+ </includes>
+ <fileMode>0755</fileMode>
+ <filtered>true</filtered>
+ <outputDirectory>apache-tomcat-${tomcat.version}</outputDirectory>
+ </fileSet>
+
+ <!-- Copy csv log file template (containing header line).-->
+ <fileSet>
+ <directory>src/main/assembly/tomcat/logs</directory>
+ <includes>
+ <include>*.csv</include>
+ </includes>
+ <outputDirectory>apache-tomcat-${tomcat.version}/logs</outputDirectory>
+ </fileSet>
+
+ <!-- Copy root webapp (which just redirects to /pdf-as). -->
+ <fileSet>
+ <directory>src/main/assembly/tomcat/ROOT</directory>
+ <filtered>true</filtered>
+ <outputDirectory>apache-tomcat-${tomcat.version}/webapps/ROOT</outputDirectory>
+ </fileSet>
+
+ <!-- Deploy pdfas configuration. -->
+ <fileSet>
+ <directory>src/main/assembly/tomcat/configuration/default/pdf-as</directory>
+ <outputDirectory>apache-tomcat-${tomcat.version}/conf/pdf-as</outputDirectory>
+ </fileSet>
+
+ <!-- Deploy context information file. -->
+ <fileSet>
+ <directory>src/main/assembly/tomcat/configuration/default/Catalina/localhost</directory>
+ <outputDirectory>apache-tomcat-${tomcat.version}/conf/Catalina/localhost</outputDirectory>
+ </fileSet>
+
+ </fileSets>
+
+ <moduleSets>
+
+ <!-- Copy pdf-as.war to tomcat webapps. -->
+ <moduleSet>
+ <useAllReactorProjects>true</useAllReactorProjects>
+ <includes>
+ <include>eu.europa.ec.joinup.egovlabs.pdf-as:pdf-as-web:war</include>
+ </includes>
+ <binaries>
+ <unpack>false</unpack>
+ <outputDirectory>apache-tomcat-${tomcat.version}/webapps</outputDirectory>
+ <outputFileNameMapping>pdf-as.war</outputFileNameMapping>
+ </binaries>
+ </moduleSet>
+
+ </moduleSets>
+
+</assembly>
diff --git a/pdf-as-web/src/main/assembly/tomcat/logs/pdf-as-statistic.csv b/pdf-as-web/src/main/assembly/tomcat/logs/pdf-as-statistic.csv
new file mode 100644
index 0000000..ee73576
--- /dev/null
+++ b/pdf-as-web/src/main/assembly/tomcat/logs/pdf-as-statistic.csv
@@ -0,0 +1 @@
+Timestamp;Operation;Signaturemode;Device;ProfileId;Filesize;User Agent;Status;Exception Class;ErrorCode;External Errorcode;Duration
diff --git a/pdf-as-web/src/main/assembly/tomcat/scripts/catalina.env b/pdf-as-web/src/main/assembly/tomcat/scripts/catalina.env
new file mode 100644
index 0000000..3ee2300
--- /dev/null
+++ b/pdf-as-web/src/main/assembly/tomcat/scripts/catalina.env
@@ -0,0 +1,11 @@
+export CATALINA_HOME=`pwd`
+export CATALINA_BASE=`pwd`
+export CATALINA_OPTS="\
+ -Djava.io.tmpdir=$CATALINA_BASE/temp \
+ -Dpdf-as.work-dir=$CATALINA_BASE/conf/pdf-as \
+ -server \
+ -Xss1024K \
+ -Xms128M \
+ -Xmx512M \
+ -XX:MaxPermSize=256m \
+"
diff --git a/pdf-as-web/src/main/assembly/tomcat/scripts/setVariables.bat b/pdf-as-web/src/main/assembly/tomcat/scripts/setVariables.bat
new file mode 100644
index 0000000..ba61144
--- /dev/null
+++ b/pdf-as-web/src/main/assembly/tomcat/scripts/setVariables.bat
@@ -0,0 +1,62 @@
+@echo off
+
+set SERVICE_NAME=tomcatpdfas
+set SERVICE_DESCRIPTION=ports: shutdown=8005, http=8080
+set SERVICE_DISPLAY_NAME=Apache Tomcat ${tomcat.version} - PDF-AS ${project.version}
+set TITLE=%SERVICE_DISPLAY_NAME%
+
+rem Set Tomcat installation folder, otherwise automatic detection will be performed.
+set TOMCAT_DIR=%CD%
+
+rem Set Java installation folder, otherwise default JRE/JDK will be used.
+rem set JAVA_HOME=
+
+
+rem *** do not change settings beyond this point ***
+
+if exist %TOMCAT_DIR%\webapps\nul goto START
+goto FIND_TOMCAT_DIR
+
+:FIND_TOMCAT_DIR
+set TOMCAT_DIR=
+if exist webapps\nul set TOMCAT_DIR=%CD%
+if exist ..\webapps\nul set TOMCAT_DIR=%CD%\..
+if exist apache-tomcat-${tomcat.version}\webapps\nul set TOMCAT_DIR=%CD%\apache-tomcat-${tomcat.version}
+if "%TOMCAT_DIR%"=="" goto TOMCAT_DIR_NOT_FOUND
+goto START
+
+:TOMCAT_DIR_NOT_FOUND
+echo.
+echo Unable to find Tomcat installation folder.
+goto END
+
+:START
+set CATALINA_HOME=%TOMCAT_DIR%
+set CATALINA_BASE=%TOMCAT_DIR%
+set PDFAS_WORK_DIR=%CATALINA_BASE%\conf\pdf-as
+
+rem PARAMETERS
+set PDFAS_WORK_DIR_PARAM=-Dpdf-as.work-dir="%PDFAS_WORK_DIR%"
+
+rem MEMORY SETTINGS
+
+rem Thread stack size in KB
+set JVM_XSS=1024
+
+rem Initial memory pool size in MB
+set JVM_XMS=128
+
+rem Maximum memory pool size in MB
+set JVM_XMX=1024
+
+rem Maximum PermGenSize in M
+set JVM_MAXPERMSIZE=256
+
+rem COMMAND LINE OPTIONS
+set JAVA_OPTS=-server -Xss%JVM_XSS%k -Xms%JVM_XMS%m -Xmx%JVM_XMX%m -XX:MaxPermSize=%JVM_MAXPERMSIZE%m
+set CATALINA_OPTS=%PDFAS_WORK_DIR_PARAM%
+
+rem SERVICE OPTIONS
+set SERVICE_OPTS=%PDFAS_WORK_DIR_PARAM%;-XX:MaxPermSize=%JVM_MAXPERMSIZE%m
+
+:END
diff --git a/pdf-as-web/src/main/assembly/tomcat/scripts/startTomcat.bat b/pdf-as-web/src/main/assembly/tomcat/scripts/startTomcat.bat
new file mode 100644
index 0000000..8db7b39
--- /dev/null
+++ b/pdf-as-web/src/main/assembly/tomcat/scripts/startTomcat.bat
@@ -0,0 +1,5 @@
+@echo off
+call setVariables.bat
+echo.
+cd /d %CATALINA_HOME%
+bin\catalina.bat start
diff --git a/pdf-as-web/src/main/assembly/tomcat/scripts/startTomcat.sh b/pdf-as-web/src/main/assembly/tomcat/scripts/startTomcat.sh
new file mode 100644
index 0000000..caacfbc
--- /dev/null
+++ b/pdf-as-web/src/main/assembly/tomcat/scripts/startTomcat.sh
@@ -0,0 +1,7 @@
+#!/bin/sh
+#
+DEFAULT=`pwd`/catalina.env
+. $DEFAULT
+
+$CATALINA_HOME/bin/catalina.sh run
+
diff --git a/pdf-as-web/src/main/assembly/tomcat/scripts/stopTomcat.bat b/pdf-as-web/src/main/assembly/tomcat/scripts/stopTomcat.bat
new file mode 100644
index 0000000..9c59fb5
--- /dev/null
+++ b/pdf-as-web/src/main/assembly/tomcat/scripts/stopTomcat.bat
@@ -0,0 +1,5 @@
+@echo off
+call setVariables.bat
+echo.
+cd %CATALINA_HOME%
+bin\catalina.bat stop
diff --git a/pdf-as-web/src/main/assembly/tomcat/scripts/stopTomcat.sh b/pdf-as-web/src/main/assembly/tomcat/scripts/stopTomcat.sh
new file mode 100644
index 0000000..c5943eb
--- /dev/null
+++ b/pdf-as-web/src/main/assembly/tomcat/scripts/stopTomcat.sh
@@ -0,0 +1,7 @@
+#!/bin/sh
+#
+DEFAULT=`pwd`/catalina.env
+. $DEFAULT
+
+$CATALINA_HOME/bin/catalina.sh stop
+
diff --git a/pdf-as-web/src/main/java/at/gv/egiz/pdfas/web/helper/LocalRequestHelper.java b/pdf-as-web/src/main/java/at/gv/egiz/pdfas/web/helper/LocalRequestHelper.java
index 2edaba5..202dd40 100644
--- a/pdf-as-web/src/main/java/at/gv/egiz/pdfas/web/helper/LocalRequestHelper.java
+++ b/pdf-as-web/src/main/java/at/gv/egiz/pdfas/web/helper/LocalRequestHelper.java
@@ -52,12 +52,12 @@ import at.knowcenter.wag.egov.egiz.exceptions.SignatureException;
/**
* Contains commonly used helper functions for the local request procedure.
- *
+ *
* @author wprinz
*/
public abstract class LocalRequestHelper
{
-
+
/**
* The logger.
*/
@@ -80,7 +80,7 @@ public abstract class LocalRequestHelper
/**
* Sets up the local sign procedure.
- *
+ *
* @param response
* The HttpServletResponse the local request page is written to.
* @throws IOException
@@ -101,7 +101,7 @@ public abstract class LocalRequestHelper
si.outputAvailable = false;
URL data_URL = new URL(request.getScheme(), host, request.getServerPort(), WebUtils.addJSessionID(request.getContextPath() + "/DataURL", request));
-
+
String data_url = response.encodeURL(data_URL.toString());
logger.debug("data_url = " + data_url);
@@ -113,8 +113,8 @@ public abstract class LocalRequestHelper
/**
* Sets up the local verify procedure.
- * @param list
- *
+ * @param list
+ *
* @param response
* The HttpServletResponse the local request page is written to.
* @return Returns the JSP location where the calling servlet should dispatch
@@ -127,18 +127,18 @@ public abstract class LocalRequestHelper
* Forwarded exception.
* @throws ConnectorFactoryException
* Forwarded exception.
- * @throws SettingsException
- * @throws ConnectorException
+ * @throws SettingsException
+ * @throws ConnectorException
*/
public static String processLocalVerify(PdfAsInternal pdfAsInternal, VerifySessionInformation si, List signaturesToBeverified, HttpServletRequest request, HttpServletResponse response) throws SignatureException, NormalizeException,
IOException, ConnectorFactoryException, SettingsException, ConnectorException
{
si.currentLocalOperation = new CurrentLocalOperation();
si.currentLocalOperation.signaturesToBeverified = signaturesToBeverified; // SignatureInformation
-
+
si.currentLocalOperation.requests = new LocalRequest[signaturesToBeverified.size()];
si.currentLocalOperation.response_xmls = new String[si.currentLocalOperation.requests.length];
-
+
si.currentLocalOperation.current_operation = 0;
String host = request.getServerName();
@@ -169,12 +169,12 @@ public abstract class LocalRequestHelper
/**
* Formats the OK response from the web application back to the local BKU.
- *
+ *
* <p>
* As stated in the BKU tutorial, this response must be plain text "<ok/>".
* Otherwise BKU will assume a failure.
* </p>
- *
+ *
* @param response
* The HttpServletResponse to answer to.
* @throws IOException
@@ -191,7 +191,6 @@ public abstract class LocalRequestHelper
public static String makeStringHTMLReady(String input)
{
String output = input;
-
output = output.replaceAll("&", "&amp;");
output = output.replaceAll("\"", "&quot;");
output = output.replaceAll("<", "&lt;");
@@ -223,7 +222,7 @@ public abstract class LocalRequestHelper
return loc_server;
}
-
+
public static String getLocalContextAddress(HttpServletRequest request, HttpServletResponse response) {
String serverURL = getLocalServerAddress(request, response);
String context = request.getContextPath();
@@ -235,7 +234,7 @@ public abstract class LocalRequestHelper
/**
* Tells, if the given connector is local.
- *
+ *
* @param connector_identifier
* The connector.
* @return Returns true, if the given connector is local, false otherwise.
diff --git a/pdf-as-web/src/main/java/at/gv/egiz/pdfas/web/servlets/DataURLServlet.java b/pdf-as-web/src/main/java/at/gv/egiz/pdfas/web/servlets/DataURLServlet.java
index 1f3d7ed..8afae1f 100644
--- a/pdf-as-web/src/main/java/at/gv/egiz/pdfas/web/servlets/DataURLServlet.java
+++ b/pdf-as-web/src/main/java/at/gv/egiz/pdfas/web/servlets/DataURLServlet.java
@@ -28,7 +28,6 @@ import java.io.PrintWriter;
import java.io.UnsupportedEncodingException;
import java.net.URL;
import java.util.ArrayList;
-import java.util.Enumeration;
import java.util.Iterator;
import java.util.List;
@@ -52,12 +51,15 @@ import at.gv.egiz.pdfas.api.PdfAs;
import at.gv.egiz.pdfas.api.commons.Constants;
import at.gv.egiz.pdfas.api.commons.SignatureInformation;
import at.gv.egiz.pdfas.api.exceptions.PdfAsException;
-import at.gv.egiz.pdfas.exceptions.external.ExternalErrorException;
-import at.gv.egiz.pdfas.exceptions.web.SessionExpiredException;
import at.gv.egiz.pdfas.api.internal.LocalBKUParams;
import at.gv.egiz.pdfas.api.internal.PdfAsInternal;
import at.gv.egiz.pdfas.api.verify.VerifyResult;
import at.gv.egiz.pdfas.api.verify.VerifyResults;
+import at.gv.egiz.pdfas.exceptions.external.ExternalErrorException;
+import at.gv.egiz.pdfas.exceptions.web.SessionExpiredException;
+import at.gv.egiz.pdfas.framework.logging.StatisticData;
+import at.gv.egiz.pdfas.framework.logging.StatisticLogFactory;
+import at.gv.egiz.pdfas.framework.logging.StatisticLogger;
import at.gv.egiz.pdfas.web.LocalRequest;
import at.gv.egiz.pdfas.web.helper.ApiHelper;
import at.gv.egiz.pdfas.web.helper.LocalRequestHelper;
@@ -67,10 +69,8 @@ import at.gv.egiz.pdfas.web.helper.SigningTimeHelper;
import at.gv.egiz.pdfas.web.session.SessionAttributes;
import at.gv.egiz.pdfas.web.session.SignSessionInformation;
import at.gv.egiz.pdfas.web.session.VerifySessionInformation;
-import at.gv.egiz.pdfas.web.servlets.SignServlet;
import at.knowcenter.wag.egov.egiz.cfg.SettingsReader;
import at.knowcenter.wag.egov.egiz.exceptions.ConnectorException;
-import at.knowcenter.wag.egov.egiz.exceptions.SettingNotFoundException;
import at.knowcenter.wag.egov.egiz.exceptions.SignatureException;
/**
@@ -90,7 +90,7 @@ public class DataURLServlet extends HttpServlet {
private static Log log = LogFactory.getLog(DataURLServlet.class);
// stat Log
- private static Log statLog = LogFactory.getLog("statistic");
+ private static StatisticLogger statLog = StatisticLogFactory.getLog(Constants.STATISTIC_LOGGER_NAME);
protected void dispatch(HttpServletRequest request,
HttpServletResponse response, String resource)
@@ -145,7 +145,7 @@ public class DataURLServlet extends HttpServlet {
protected void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
log.debug("Data URL is accessed."); //$NON-NLS-1$
-
+
Object sessionObject = null;
try {
sessionObject = SessionHelper.getSession(request);
@@ -161,86 +161,37 @@ public class DataURLServlet extends HttpServlet {
VerifySessionInformation si = (VerifySessionInformation) sessionObject;
processVerify(request, response, si);
}
- } catch (ExternalErrorException f) {
-
- if (statLog.isInfoEnabled()) {
-
+ } catch (PdfAsException e) {
+ if (statLog.isEnabled()) {
String ua = request.getHeader("User-Agent");
-
long endTime = System.currentTimeMillis();
- // String toReport = "SIGN;" + si.mode + ";" + si.filename +
- // ";"+ fileSize + ";" +
-
- String toReport = null;
+ StatisticData statisticData = new StatisticData();
+ statisticData.setException(new SessionExpiredException("Session lost?"));
+ statisticData.setUserAgent(ua);
if (sessionObject != null) {
+ statisticData.setException(e);
if (sessionObject instanceof SignSessionInformation) {
SignSessionInformation si = (SignSessionInformation) sessionObject;
- toReport = "SIGN;" + si.mode + ";" + si.connector + ";"
- + si.pdfDataSource.getLength() + ";"
- + (endTime - si.startTime) + ";ERROR;" + ua;
+ statisticData.setOperation("SIGN").setSignatureMode(si.mode).setConnector(si.connector)
+ .setFileSize(si.pdfDataSource.getLength()).setDuration(endTime - si.startTime)
+ .setSignatureProfileId(si.type);
} else {
VerifySessionInformation si = (VerifySessionInformation) sessionObject;
- try {
- toReport = "VERIFY;"+ si.file_name + ";"+ 0 + ";" + (endTime - si.startTime) + ";" + VerifyServlet.debugVerifyResults(si.verifyResults) + ";ERROR;" + ua;
- } catch (SettingNotFoundException e1) {
- toReport = "VERIFY;"+ si.file_name + ";"+ 0 + ";" + (endTime - si.startTime) + ";ERROR-debug-verify" + ";ERROR;" + ua;
- }
+ statisticData.setOperation("VERIFY").setSignatureMode(si.mode).setConnector(si.connector)
+ .setFileSize(si.inputDataSource.getLength()).setDuration(endTime - si.startTime)
+ .setSignatureProfileId(si.type);
}
}
-
- if(toReport != null)
- {
- statLog.info(toReport);
- }
- else
- {
- statLog.info(";;;;;session-ERROR");
- }
+ statLog.log(statisticData);
}
- log.error(f.getMessage(), f);
- HttpSession session = request.getSession(true);
- session.setAttribute(SignServlet.ERROR_WITHIN_IFRAME, "false");
- log.debug("Attribute ERROR_WITHIN_IFRAME: "
- + session.getAttribute(SignServlet.ERROR_WITHIN_IFRAME));
- SignServlet.prepareDispatchToErrorPage(f, request);
- dispatch(request, response, "/jsp/error.jsp");
-
- } catch (PdfAsException e) {
-
- if (statLog.isInfoEnabled()) {
- long endTime = System.currentTimeMillis();
- // String toReport = "SIGN;" + si.mode + ";" + si.filename +
- // ";"+ fileSize + ";" +
-
- String toReport = null;
- if (sessionObject != null) {
- if (sessionObject instanceof SignSessionInformation) {
- SignSessionInformation si = (SignSessionInformation) sessionObject;
- toReport = "SIGN;" + si.mode + ";" + si.connector + ";"
- + si.pdfDataSource.getLength() + ";"
- + (endTime - si.startTime) + ";ERROR";
- } else {
- VerifySessionInformation si = (VerifySessionInformation) sessionObject;
- try {
- toReport = "VERIFY;"+ si.file_name + ";"+ 0 + ";" + (endTime - si.startTime) + ";" + VerifyServlet.debugVerifyResults(si.verifyResults) + ";ERROR";
- } catch (SettingNotFoundException e1) {
- toReport = "VERIFY;"+ si.file_name + ";"+ 0 + ";" + (endTime - si.startTime) + ";ERROR-debug-verify" + ";ERROR";
- }
- }
- }
+ log.error(e);
- if(toReport != null)
- {
- statLog.info(toReport);
- }
- else
- {
- statLog.info(";;;;;session-ERROR");
- }
+ if (e instanceof ExternalErrorException) {
+ HttpSession session = request.getSession(true);
+ session.setAttribute(SignServlet.ERROR_WITHIN_IFRAME, "false");
+ log.debug("Attribute ERROR_WITHIN_IFRAME: " + session.getAttribute(SignServlet.ERROR_WITHIN_IFRAME));
}
-
- log.error(e.getMessage(), e);
SignServlet.prepareDispatchToErrorPage(e, request);
dispatch(request, response, "/jsp/error.jsp");
}
@@ -404,16 +355,12 @@ public class DataURLServlet extends HttpServlet {
"Das detached XML kann nicht direkt durch die BKU geschliffen werden, weil diese es als Request interpretieren w\u00FCrde. Daher das XML als Text:");
response.getWriter().println(
new String(si.signedPdf, "UTF-8"));
- if (statLog.isInfoEnabled()) {
+ if (statLog.isEnabled()) {
long endTime = System.currentTimeMillis();
- // String toReport = "SIGN;" + si.mode + ";" +
- // si.filename + ";"+ fileSize + ";" +
- String toReport = "SIGN;" + si.mode + ";"
- + si.connector + ";"
- + si.pdfDataSource.getLength() + ";"
- + (endTime - si.startTime) + ";OK;" + userAgent;
-
- statLog.info(toReport);
+ StatisticData statisticData = new StatisticData("SIGN", si.connector,
+ si.pdfDataSource.getLength(), si.mode, endTime - si.startTime, userAgent);
+ statisticData.setSignatureProfileId(si.type);
+ statLog.log(statisticData);
}
} else {
// tzefferer: If PDF-AS has been called by an external
@@ -423,16 +370,12 @@ public class DataURLServlet extends HttpServlet {
if (si.exappinf != null) {
log.debug("Entering external application interface mode. Skipping redirection to download page.");
// afitzek
- if (statLog.isInfoEnabled()) {
+ if (statLog.isEnabled()) {
long endTime = System.currentTimeMillis();
- // String toReport = "SIGN;" + si.mode + ";" +
- // si.filename + ";"+ fileSize + ";" +
- String toReport = "SIGN;" + si.mode + ";"
- + si.connector + ";"
- + si.pdfDataSource.getLength() + ";"
- + (endTime - si.startTime) + ";OK;" + userAgent;
-
- statLog.info(toReport);
+ StatisticData statisticData = new StatisticData("SIGN EXTERNAL", si.connector,
+ si.pdfDataSource.getLength(), si.mode, endTime - si.startTime, userAgent);
+ statisticData.setSignatureProfileId(si.type);
+ statLog.log(statisticData);
}
SignServletHelper.returnSignResponse(si, request,
response);
@@ -463,17 +406,12 @@ public class DataURLServlet extends HttpServlet {
SessionAttributes.DOWNLOAD_URL_FOR_SIGNED_PDF_DOCUMENT,
downloadURL);
// afitzek
- if (statLog.isInfoEnabled()) {
+ if (statLog.isEnabled()) {
long endTime = System.currentTimeMillis();
- String timeDiff = "----";
- // String toReport = "SIGN;" + si.mode + ";" +
- // si.filename + ";"+ fileSize + ";" +
- String toReport = "SIGN;" + si.mode + ";"
- + si.connector + ";"
- + si.pdfDataSource.getLength() + ";"
- + (endTime - si.startTime) + ";OK;" + userAgent;
-
- statLog.info(toReport);
+ StatisticData statisticData = new StatisticData("SIGN", si.connector,
+ si.pdfDataSource.getLength(), si.mode, endTime - si.startTime, userAgent);
+ statisticData.setSignatureProfileId(si.type);
+ statLog.log(statisticData);
}
temporaryRedirect(
response.encodeRedirectURL(LocalRequestHelper
@@ -503,7 +441,7 @@ public class DataURLServlet extends HttpServlet {
log.trace("processVerify");
String userAgent = request.getHeader("user-agent");
-
+
String xml_response = request.getParameter("XMLResponse"); //$NON-NLS-1$
log.debug("xml_response = " + xml_response); //$NON-NLS-1$
@@ -555,21 +493,17 @@ public class DataURLServlet extends HttpServlet {
return resList;
}
};
- dispatchToResults(results, request, response, backToListURL);
- if (statLog.isInfoEnabled()) {
+ if (statLog.isEnabled()) {
long endTime = System.currentTimeMillis();
- // String toReport = "SIGN;" + si.mode + ";" + si.filename +
- // ";"+ fileSize + ";" +
- String toReport = null;
- try {
- toReport = "VERIFY;"+ si.file_name + ";"+ 0 + ";" + (endTime - si.startTime) + ";" + VerifyServlet.debugVerifyResults(si.verifyResults) + ";OK;" + userAgent;
- } catch (SettingNotFoundException e1) {
- toReport = "VERIFY;"+ si.file_name + ";"+ 0 + ";" + (endTime - si.startTime) + ";ERROR-debug-verify" + ";OK;" + userAgent;
- }
-
- statLog.info(toReport);
+ StatisticData statisticData = new StatisticData("VERIFY", si.connector, si.inputDataSource.getLength());
+ statisticData.setDuration(endTime - si.startTime);
+ statisticData.setUserAgent(request.getHeader("User-Agent"));
+ statLog.log(statisticData);
}
+
+ dispatchToResults(results, request, response, backToListURL);
+
}
}
}
diff --git a/pdf-as-web/src/main/java/at/gv/egiz/pdfas/web/servlets/SignServlet.java b/pdf-as-web/src/main/java/at/gv/egiz/pdfas/web/servlets/SignServlet.java
index d07b72e..cd2c38a 100644
--- a/pdf-as-web/src/main/java/at/gv/egiz/pdfas/web/servlets/SignServlet.java
+++ b/pdf-as-web/src/main/java/at/gv/egiz/pdfas/web/servlets/SignServlet.java
@@ -27,14 +27,12 @@
package at.gv.egiz.pdfas.web.servlets;
import java.io.BufferedInputStream;
-import java.io.BufferedReader;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import java.net.URL;
-import java.util.Enumeration;
import java.util.Iterator;
import java.util.List;
@@ -51,13 +49,12 @@ import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.apache.commons.io.IOUtils;
-import org.apache.commons.logging.LogFactory;
import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
import at.gv.egiz.pdfas.api.commons.Constants;
import at.gv.egiz.pdfas.api.exceptions.PdfAsException;
import at.gv.egiz.pdfas.api.io.DataSource;
-import at.gv.egiz.pdfas.api.io.TextBased;
import at.gv.egiz.pdfas.api.sign.pos.SignaturePositioning;
import at.gv.egiz.pdfas.exceptions.ErrorCode;
import at.gv.egiz.pdfas.exceptions.ErrorCodeHelper;
@@ -65,10 +62,8 @@ import at.gv.egiz.pdfas.exceptions.external.ExternalErrorException;
import at.gv.egiz.pdfas.web.ExternAppInformation;
import at.gv.egiz.pdfas.web.FormFields;
import at.gv.egiz.pdfas.web.helper.ApiHelper;
-import at.gv.egiz.pdfas.web.helper.SessionHelper;
import at.gv.egiz.pdfas.web.helper.SignServletHelper;
import at.gv.egiz.pdfas.web.helper.WebSettingsReader;
-import at.gv.egiz.pdfas.web.helper.WebUtils;
import at.gv.egiz.pdfas.web.io.ByteArrayPdfDataSource;
import at.gv.egiz.pdfas.web.itext.IText;
import at.gv.egiz.pdfas.web.session.SessionAttributes;
@@ -99,7 +94,6 @@ public class SignServlet extends HttpServlet
* The log.
*/
private static Log log = LogFactory.getLog(SignServlet.class);
- private static Log statLog = LogFactory.getLog("statistic");
@@ -153,10 +147,7 @@ public class SignServlet extends HttpServlet
// for performance measurement
- long startTime = 0;
- if (statLog.isInfoEnabled()) {
- startTime = System.currentTimeMillis();
- }
+ long startTime = System.currentTimeMillis();
// check if pdf-as has been called by external webapp
if (request.getParameter(FormFields.FIELD_PDF_URL) != null)
@@ -197,9 +188,9 @@ public class SignServlet extends HttpServlet
//end added
session = request.getSession(true);
-
+
session.setAttribute(SignServlet.SUBMITFORM_FILENAME_KEY, filename);
-
+
// added by tknall
if (sig_pos_y != null && sig_pos_p != null && sig_pos_x != null) {
if (sig_pos_w != null) {
@@ -227,7 +218,7 @@ public class SignServlet extends HttpServlet
}
- // fixed by tknall: if we already have parameters "&" must be used instead of "?"
+ // if we already have parameters "&" must be used instead of "?"
String paramSeparator = (pdf_url.indexOf("?") != -1) ? "&" : "?";
String query = pdf_url + "/" + filename + paramSeparator + FormFields.FIELD_PDF_ID + "=" + pdf_id;
//query = pdf_url;
@@ -345,7 +336,7 @@ public class SignServlet extends HttpServlet
// ud.pdfDataSource = PdfAS.applyStrictMode(ud.pdfDataSource);
session = request.getSession(true);
-
+
SignSessionInformation si = new SignSessionInformation(); // SessionTable.generateSessionInformationObject();
si.connector = ud.sig_app;
@@ -405,17 +396,6 @@ public class SignServlet extends HttpServlet
SignServletHelper.finishSign(si, request, response, getServletContext());
- // afitzek: moved to DataURL to provide status information OK - ERROR
- // for performance measurement
- if (statLog.isInfoEnabled()) {
- long endTime = System.currentTimeMillis();
-// String toReport = "SIGN;" + si.mode + ";" + si.filename + ";"+ fileSize + ";" +
- String toReport = "SIGN;" + si.mode + ";" + si.connector + ";" + si.pdfDataSource.getLength() + ";" + (endTime - startTime);
-
- //statLog.info(toReport);
- // afitzek: save old statistik into log file
- log.info(toReport);
- }
}
catch (PresentableException e)
{
diff --git a/pdf-as-web/src/main/java/at/gv/egiz/pdfas/web/servlets/VerifyPreviewServlet.java b/pdf-as-web/src/main/java/at/gv/egiz/pdfas/web/servlets/VerifyPreviewServlet.java
index 6e8ff64..83c8602 100644
--- a/pdf-as-web/src/main/java/at/gv/egiz/pdfas/web/servlets/VerifyPreviewServlet.java
+++ b/pdf-as-web/src/main/java/at/gv/egiz/pdfas/web/servlets/VerifyPreviewServlet.java
@@ -76,7 +76,7 @@ public class VerifyPreviewServlet extends HttpServlet
* SVUID.
*/
private static final long serialVersionUID = 6954343542890239109L;
-
+
public static String[] REQUIRED_SIG_KEYS = new String[] { "SIG_DATE",
"SIG_ISSUER", "SIG_VALUE", "SIG_NUMBER", "SIG_ID", "SIG_KZ" };
@@ -94,7 +94,7 @@ public class VerifyPreviewServlet extends HttpServlet
RequestDispatcher disp = getServletContext().getRequestDispatcher(resource);
disp.forward(request, response);
}
-
+
protected void dispatchToPreview(HttpServletRequest request, HttpServletResponse response, String signedText, int verify_which)throws ServletException, IOException
{
request.setAttribute(FormFields.FIELD_VERIFY_WHICH, new Integer(verify_which));
@@ -117,13 +117,13 @@ public class VerifyPreviewServlet extends HttpServlet
return backToListURL;
}
-
+
protected static String generateNamePrefix(int num)
{
return SIG_INPUT_PREFIX + num + "_";
}
- public static String renderRequiredKeysJavaScript(ServletContext sc,
+ public static String renderRequiredKeysJavaScript(ServletContext sc,
SignatureInformation signatureInfo, String name_prefix)
{
StringWriter sw = new StringWriter();
@@ -188,7 +188,6 @@ public class VerifyPreviewServlet extends HttpServlet
writer.println(" <td width=\"90%\">");
value = value.replaceAll("\\s", " ");
- // wuhu! replacing all \" with \"
value = value.replaceAll("\\\"", "\\\"");
String input_key = name_prefix + key;
@@ -214,7 +213,7 @@ public class VerifyPreviewServlet extends HttpServlet
// Problem: SignatureTypes.SIG_NAME is defined as Signer-RFC2253Name, but there is not certain
// key for friendly name (e.g. SIG_SUBJECT or SIG_FOO), therefore we do not know which key contains
// the friendly signer name
-
+
// workaround: include "SIG_SUBJECT" since it is usually used
String[] rkeys = { "SIG_NAME", "SIG_SUBJECT", "SIG_DATE", "SIG_ISSUER", "SIG_NUMBER"}; // SignatureTypes.REQUIRED_SIG_KEYS;
@@ -268,9 +267,9 @@ public class VerifyPreviewServlet extends HttpServlet
try
{
Object sessionObject = SessionHelper.getSession(request);
-
+
VerifySessionInformation si = (VerifySessionInformation)sessionObject;
-
+
int verify_which = -1;
boolean preview = false;
@@ -288,7 +287,7 @@ public class VerifyPreviewServlet extends HttpServlet
}
logger_.debug("verify_which = " + verify_which);
}
-
+
{
String preview_string = request.getParameter(FormFields.FIELD_PREVIEW);
if (preview_string.equals("true"))
@@ -305,7 +304,7 @@ public class VerifyPreviewServlet extends HttpServlet
{
throw new SignatureException(312, "The selected signature to be verified doesn't exist.");
}
-
+
SignatureInformation sigInfo = (SignatureInformation) si.analyzeResult.getSignatures().get(verify_which);
holders_to_verify = new ArrayList();
holders_to_verify.add(sigInfo);
@@ -345,7 +344,7 @@ public class VerifyPreviewServlet extends HttpServlet
{
String dispatch_to = LocalRequestHelper.processLocalVerify(pdfAsInternal, si, holders_to_verify, request, response);
dispatch(request, response, dispatch_to);
-
+
return;
}
@@ -375,12 +374,12 @@ protected void doPost(HttpServletRequest request, HttpServletResponse response)
try
{
Object sessionObject = SessionHelper.getSession(request);
-
+
PdfAsInternal pdfAsInternal = ApiHelper.getPdfAsInternalFromContext(getServletContext());
-
+
VerifySessionInformation si = (VerifySessionInformation)sessionObject;
-
-
+
+
String text_to_be_verified = null;
int verify_which = -1;
@@ -407,7 +406,7 @@ protected void doPost(HttpServletRequest request, HttpServletResponse response)
verify_which = Integer.parseInt(which_str);
continue;
}
-
+
if (item.getFieldName().equals("verify"))
{
if (item.getString("UTF-8").equals("true"))
@@ -425,7 +424,7 @@ protected void doPost(HttpServletRequest request, HttpServletResponse response)
}
si.analyzeResult = pdfAsInternal.analyzeFromRawText(text_to_be_verified, sigValues);
-
+
if (verify == false)
{
dispatchToDataOk(request, response);
diff --git a/pdf-as-web/src/main/java/at/gv/egiz/pdfas/web/servlets/VerifyServlet.java b/pdf-as-web/src/main/java/at/gv/egiz/pdfas/web/servlets/VerifyServlet.java
index aef7f19..af54ddb 100644
--- a/pdf-as-web/src/main/java/at/gv/egiz/pdfas/web/servlets/VerifyServlet.java
+++ b/pdf-as-web/src/main/java/at/gv/egiz/pdfas/web/servlets/VerifyServlet.java
@@ -165,13 +165,6 @@ public class VerifyServlet extends HttpServlet
dispatchToResults(verifyResults, request, response);
- // for performance measurement
- if (log.isInfoEnabled()) {
- long endTime = System.currentTimeMillis();
- String toReport = "VERIFY;"+ ud.file_name + ";"+ 0 + ";" + (endTime - startTime) + ";" + debugVerifyResults(verifyResults);
- log.info(toReport);
- }
-
}
}
diff --git a/pdf-as-web/src/main/webapp/META-INF/context.xml b/pdf-as-web/src/main/webapp/META-INF/context.xml
index a0de89e..6d79b26 100644
--- a/pdf-as-web/src/main/webapp/META-INF/context.xml
+++ b/pdf-as-web/src/main/webapp/META-INF/context.xml
@@ -1,9 +1,18 @@
<?xml version="1.0" encoding="UTF-8"?>
-<Context path="/pdf-as" cookies="true" reloadable="false">
+<Context path="/pdf-as" cookies="true" reloadable="false" useHttpOnly="true">
+
<Manager pathname="" />
<!-- Use system property "pdf-as.work-dir" or web.xml parameter "work-dir" instead. -->
<!--
<Parameter name="work-dir" value="${catalina.base}/conf/pdf-as" override="false"/>
-->
+
+ <!-- Enable BOTH environment variables in order to apply www.buergerkarte.at layout. -->
+ <!-- This overrides /WEB-INF/decorators.xml settings. -->
+ <!--
+ <Environment name="production_de" value="/sitemesh/buergerkarte_at.jsp?lang=de" type="java.lang.String" />
+ <Environment name="production_en" value="/sitemesh/buergerkarte_at.jsp?lang=en" type="java.lang.String" />
+ -->
+
</Context>
diff --git a/pdf-as-web/src/main/webapp/WEB-INF/decorators.xml b/pdf-as-web/src/main/webapp/WEB-INF/decorators.xml
index 6585f97..e1fff32 100644
--- a/pdf-as-web/src/main/webapp/WEB-INF/decorators.xml
+++ b/pdf-as-web/src/main/webapp/WEB-INF/decorators.xml
@@ -5,6 +5,11 @@
<pattern>*.pdf</pattern>
<pattern>/*.pdf</pattern>
</excludes>
- <decorator name="production_de" page="/sitemesh/standalone.jsp?lang=de"/>
- <decorator name="production_en" page="/sitemesh/standalone.jsp?lang=en"/>
+
+ <!-- Default layout if no other layout has been chosen. -->
+ <!-- In order to apply other layouts, modify the context element information
+ (${catalina.home}/conf/Catalina/localhost/pdf-as.xml) -->
+ <decorator name="production_de" page="/sitemesh/standalone.jsp?locale=de" />
+ <decorator name="production_en" page="/sitemesh/standalone.jsp?locale=en" />
+
</decorators> \ No newline at end of file
diff --git a/pdf-as-web/src/main/webapp/WEB-INF/sitemesh.xml b/pdf-as-web/src/main/webapp/WEB-INF/sitemesh.xml
index c6653cc..cda7eb3 100644
--- a/pdf-as-web/src/main/webapp/WEB-INF/sitemesh.xml
+++ b/pdf-as-web/src/main/webapp/WEB-INF/sitemesh.xml
@@ -1,30 +1,27 @@
<sitemesh>
+
<property name="decorators-file" value="/WEB-INF/decorators.xml"/>
<excludes file="${decorators-file}"/>
<page-parsers>
<parser content-type="text/html" class="com.opensymphony.module.sitemesh.parser.HTMLPageParser" />
</page-parsers>
+
<decorator-mappers>
+
<mapper class="com.opensymphony.module.sitemesh.mapper.PageDecoratorMapper">
<param name="property.1" value="meta.decorator" />
<param name="property.2" value="decorator" />
</mapper>
- <!--
- <mapper class="com.opensymphony.module.sitemesh.mapper.LanguageDecoratorMapper">
- <param name="match.en" value="en" />
- </mapper>
- -->
+
<mapper class="at.gv.egiz.pdfas.web.i18n.LanguageDecoratorMapper"/>
+
<mapper class="com.opensymphony.module.sitemesh.mapper.FrameSetDecoratorMapper"/>
- <mapper class="com.opensymphony.module.sitemesh.mapper.PrintableDecoratorMapper">
- <param name="decorator" value="printable" />
- <param name="parameter.name" value="printable" />
- <param name="parameter.value" value="true" />
- </mapper>
- <mapper class="com.opensymphony.module.sitemesh.mapper.FileDecoratorMapper"/>
- <mapper class="com.opensymphony.module.sitemesh.mapper.ConfigDecoratorMapper">
+
+ <mapper class="com.opensymphony.module.sitemesh.mapper.EnvEntryDecoratorMapper">
<param name="config" value="${decorators-file}" />
</mapper>
+
</decorator-mappers>
+
</sitemesh>
diff --git a/pdf-as-web/src/main/webapp/jsp/null_request_page.jsp b/pdf-as-web/src/main/webapp/jsp/null_request_page.jsp
index 58442d6..5e992df 100644
--- a/pdf-as-web/src/main/webapp/jsp/null_request_page.jsp
+++ b/pdf-as-web/src/main/webapp/jsp/null_request_page.jsp
@@ -36,12 +36,13 @@
isLocalBKU = Constants.SIGNATURE_DEVICE_BKU.equals(ssi.connector);
isMobileBKU = Constants.SIGNATURE_DEVICE_MOBILE.equals(ssi.connector);
isMobileTest = Constants.SIGNATURE_DEVICE_MOBILETEST.equals(ssi.connector);
- } else {
+ } else if (si instanceof VerifySessionInformation) {
VerifySessionInformation vsi = (VerifySessionInformation) si;
isExternalInvocation = vsi.exappinf != null;
isServerBKU = Constants.SIGNATURE_DEVICE_MOC.equals(vsi.connector);
- isLocalBKU = Constants.SIGNATURE_DEVICE_BKU.equals(ssi.connector);
- isMobileBKU = Constants.SIGNATURE_DEVICE_MOBILE.equals(ssi.connector);
+ isLocalBKU = Constants.SIGNATURE_DEVICE_BKU.equals(vsi.connector);
+ isMobileBKU = Constants.SIGNATURE_DEVICE_MOBILE.equals(vsi.connector);
+ isMobileTest = Constants.SIGNATURE_DEVICE_MOBILETEST.equals(vsi.connector);
}
boolean testMode = request.getContextPath().startsWith("/test-");
diff --git a/pdf-as-web/src/main/webapp/sitemesh/buergerkarte_at.jsp b/pdf-as-web/src/main/webapp/sitemesh/buergerkarte_at.jsp
new file mode 100644
index 0000000..4bb19ff
--- /dev/null
+++ b/pdf-as-web/src/main/webapp/sitemesh/buergerkarte_at.jsp
@@ -0,0 +1,227 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+
+<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
+<%@taglib prefix="page" uri="http://www.opensymphony.com/sitemesh/page" %>
+
+<%@ taglib uri="http://www.opensymphony.com/sitemesh/decorator" prefix="decorator" %>
+<%@ page import="at.gv.egiz.pdfas.web.helper.LocalRequestHelper" %>
+
+<%@ page import="java.net.URL" %>
+<%@ page import="java.net.URLConnection" %>
+<%@ page import="java.io.InputStream" %>
+<%@ page import="java.io.InputStreamReader" %>
+<%@ page import="java.io.BufferedReader" %>
+<%@ page import="net.htmlparser.jericho.Source" %>
+<%@ page import="net.htmlparser.jericho.Element" %>
+<%@ page import="net.htmlparser.jericho.Attributes" %>
+<%@ page import="net.htmlparser.jericho.Attribute" %>
+<%@ page import="java.util.List" %>
+<%@ page import="java.util.Iterator" %>
+<%@ page import="java.util.Locale" %>
+<%@ page import="at.gv.egiz.pdfas.web.i18n.LocaleParamFilter" %>
+<%@ page import="java.nio.charset.Charset" %>
+<%@ page import="at.gv.egiz.pdfas.web.session.SessionAttributes" %>
+
+
+<%@page import="java.nio.charset.Charset"%>
+
+ <html>
+ <head>
+
+ <script language="javascript" type="text/javascript">
+ //Submit the form when the change language button was hit
+ function submit() {
+ var file = document.submitform.source.options[0].selected;
+ if (file) {
+ document.changelanguage.source_mode.value='file';
+ }
+ else {
+ document.changelanguage.source_mode.value='text';
+ document.changelanguage.text.value=document.getElementById('freetext').value;
+ }
+ document.changelanguage.submit();
+ }
+ </script>
+
+ <%
+
+ String headerUrl="http://www.buergerkarte.at/header.php?lang=";
+ //String headerUrl="http://www.buergerkarte.at/header.php";
+ String serverUrl=LocalRequestHelper.getLocalServerAddress(request,response);
+ String baseUrl=LocalRequestHelper.getLocalContextAddress(request,response);
+
+ String requestLang = (String)session.getAttribute(SessionAttributes.LANGUAGE);
+
+ String language = "";
+
+ URL urlHeader = new URL(headerUrl);
+
+ if (requestLang!=null) {
+ if (requestLang.equals("de")) {
+ urlHeader = new URL(headerUrl+"de");
+ language="de";
+ }
+ else {
+ urlHeader = new URL(headerUrl+"en");
+ language="en";
+ }
+ }
+ else {
+ requestLang = request.getParameter("lang");
+ if (requestLang!=null) {
+ if (requestLang.equals("de")) {
+ urlHeader = new URL(headerUrl+"de");
+ language="de";
+ }
+ else {
+ urlHeader = new URL(headerUrl+"en");
+ language="en";
+ }
+ }
+ else {
+ urlHeader = new URL(headerUrl+"de");
+ language="de";
+ }
+ }
+
+ URLConnection ucHeader = urlHeader.openConnection();
+
+ InputStream isHeader = ucHeader.getInputStream();
+
+ //Read the header php files from the server
+ BufferedReader brHeader = new BufferedReader(new InputStreamReader(isHeader, Charset.forName("UTF-8")));
+
+ String phpLine="";
+ String phpHeader="";
+ while ((phpLine=brHeader.readLine())!=null) {
+ phpHeader += phpLine;
+ }
+
+ phpHeader = phpHeader.substring(phpHeader.indexOf("<body"), phpHeader.length());
+
+ Source source = new Source(phpHeader);
+ List list = source.getAllElements();
+ Iterator it = list.iterator();
+ while (it.hasNext()) {
+ Element element = (Element)it.next();
+
+ //Set the absolute path for each element with src or href
+ String attributeValueSrc = element.getAttributeValue("src");
+ String attributeValueHref = element.getAttributeValue("href");
+
+ if ((attributeValueSrc!=null) || (attributeValueHref!=null)) {
+
+ String attribute = "";
+
+ if ((attributeValueSrc!=null) && (attributeValueHref!=null)) {
+ phpHeader = phpHeader.replace(attributeValueSrc, serverUrl+attributeValueSrc);
+ phpHeader = phpHeader.replace(attributeValueHref, serverUrl+attributeValueHref);
+ }
+ else {
+ if (attributeValueSrc!=null) {
+ phpHeader = phpHeader.replace(attributeValueSrc, serverUrl+attributeValueSrc);
+ }
+ if (attributeValueHref!=null) {
+ phpHeader = phpHeader.replace(attributeValueHref, serverUrl+attributeValueHref);
+ }
+ }
+ }
+
+ }
+
+ //Insert sitemap
+ Element breadcrumbsDiv = source.getElementById("breadcrumbs");
+ if (breadcrumbsDiv!=null) {
+ String replaceString = "";
+ if (language.equals("de")) {
+ replaceString = "<div id=\"breadcrumbs\"><em>Sie sind hier:</em> <a href=\""+serverUrl+"index.de.php\"> Startseite </a> &gt; <a href=\""+serverUrl+"pdf-signatur.de.php\">PDF-Signatur</a> &gt; PDF-Signatur \n</div>";
+ }
+ else {
+ replaceString = "<div id=\"breadcrumbs\"><em>You are here:</em> <a href=\""+serverUrl+"index.en.php\"> Start page </a> &gt; <a href=\""+serverUrl+"pdf-signatur.en.php\">PDF-Signatures</a> &gt; PDF-Signature \n</div>";
+ }
+ phpHeader = phpHeader.replace(breadcrumbsDiv, replaceString);
+ }
+
+
+
+ //Insert a hidden language fake link, that is shown when the change of language is disabled
+ source = new Source(phpHeader);
+
+ Element element = source.getElementById("sprachlinkneu");
+
+ if (element!=null) {
+ String languagelink;
+ int positionToInsertLangLink = 0;
+ int positionToEndLangLink = 0;
+ positionToInsertLangLink=element.getBegin();
+ positionToEndLangLink=element.getEnd();
+ if (!language.equals("de")) {
+ languagelink = "<li id=\"sprachlinkneu\"><a href=\"#\" onclick=\"submit()\" hreflang=\"de\">Deutsch</a></li>";
+ }
+ else {
+ languagelink = "<li id=\"sprachlinkneu\"><a href=\"#\" onclick=\"submit()\" hreflang=\"en\">English</a></li>";
+ }
+ String firstPart = phpHeader.substring(0, positionToInsertLangLink);
+ String secondPart = phpHeader.substring(positionToEndLangLink, phpHeader.length());
+ phpHeader = firstPart+languagelink+secondPart;
+ }
+ else {
+ int positionToEnd=0;
+ list = source.getAllElements("li");
+ it = list.iterator();
+ int i=0;
+ while (it.hasNext()) {
+ element = (Element)it.next();
+ if (i==5) {
+ positionToEnd = element.getEnd();
+ }
+ i++;
+ }
+ String languagelink;
+ if (!language.equals("de")) {
+ languagelink = "<li id=\"sprachlinkneu\"><a href=\"#\" onclick=\"submit()\" hreflang=\"de\">Deutsch</a></li>";
+ }
+ else {
+ languagelink = "<li id=\"sprachlinkneu\"><a href=\"#\" onclick=\"submit()\" hreflang=\"en\">English</a></li>";
+ }
+ String firstPart = phpHeader.substring(0, positionToEnd);
+ String secondPart = phpHeader.substring(positionToEnd, phpHeader.length());
+ phpHeader = firstPart+languagelink+secondPart;
+ }
+
+
+
+
+ %>
+ <title>PDF Signature</title>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <%
+ if (language.equals("de")) { %>
+ <meta http-equiv="Content-Language" content="de" />
+ <% } else { %>
+ <meta http-equiv="Content-Language" content="en" />
+ <% } %>
+ <meta http-equiv="Content-Style-Type" content="text/css" />
+ <meta http-equiv="Content-Script-Type" content="text/javascript" />
+ <meta name="Description" content="B&uuml;rgerkarte" />
+ <meta name="Keywords" content="Citizen Card, Austrian Citizen Card, Citizen Card Austria" />
+ <decorator:head/>
+ <link rel="stylesheet" type="text/css" href="<%=baseUrl %>/css/pdfas-styles.css" />
+ <link rel="shortcut icon" href="<%=serverUrl %>dateien/favicon.ico" type="image/vnd.microsoft.icon" />
+ <link rel="stylesheet" href="<%=serverUrl %>style.css" type="text/css" />
+ </head>
+
+ <%= phpHeader %>
+ <!-- mitte -->
+ <div id="mitte">
+ <!-- inhalt -->
+ <div class="inhalt" id="inhalt">
+ <!-- pdfas-container -->
+ <div id="pdfas-container">
+ <decorator:body/>
+ </div><!-- pdfas-container -->
+ </div><!-- inhalt -->
+ </div><!-- mitte -->
+ </div>
+ </body>
+</html>
diff --git a/pdf-as-web/src/main/webapp/sitemesh/standalone.jsp b/pdf-as-web/src/main/webapp/sitemesh/standalone.jsp
index 4bb19ff..4116890 100644
--- a/pdf-as-web/src/main/webapp/sitemesh/standalone.jsp
+++ b/pdf-as-web/src/main/webapp/sitemesh/standalone.jsp
@@ -1,227 +1,27 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<?xml version="1.0" encoding="UTF-8" ?>
+<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="utf-8"%>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
-<%@taglib prefix="page" uri="http://www.opensymphony.com/sitemesh/page" %>
-
-<%@ taglib uri="http://www.opensymphony.com/sitemesh/decorator" prefix="decorator" %>
+<%@ taglib uri="http://www.opensymphony.com/sitemesh/decorator" prefix="decorator"%>
<%@ page import="at.gv.egiz.pdfas.web.helper.LocalRequestHelper" %>
-<%@ page import="java.net.URL" %>
-<%@ page import="java.net.URLConnection" %>
-<%@ page import="java.io.InputStream" %>
-<%@ page import="java.io.InputStreamReader" %>
-<%@ page import="java.io.BufferedReader" %>
-<%@ page import="net.htmlparser.jericho.Source" %>
-<%@ page import="net.htmlparser.jericho.Element" %>
-<%@ page import="net.htmlparser.jericho.Attributes" %>
-<%@ page import="net.htmlparser.jericho.Attribute" %>
-<%@ page import="java.util.List" %>
-<%@ page import="java.util.Iterator" %>
-<%@ page import="java.util.Locale" %>
-<%@ page import="at.gv.egiz.pdfas.web.i18n.LocaleParamFilter" %>
-<%@ page import="java.nio.charset.Charset" %>
-<%@ page import="at.gv.egiz.pdfas.web.session.SessionAttributes" %>
+<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%>
+<html>
-<%@page import="java.nio.charset.Charset"%>
-
- <html>
<head>
-
- <script language="javascript" type="text/javascript">
- //Submit the form when the change language button was hit
- function submit() {
- var file = document.submitform.source.options[0].selected;
- if (file) {
- document.changelanguage.source_mode.value='file';
- }
- else {
- document.changelanguage.source_mode.value='text';
- document.changelanguage.text.value=document.getElementById('freetext').value;
- }
- document.changelanguage.submit();
- }
- </script>
-
- <%
-
- String headerUrl="http://www.buergerkarte.at/header.php?lang=";
- //String headerUrl="http://www.buergerkarte.at/header.php";
- String serverUrl=LocalRequestHelper.getLocalServerAddress(request,response);
- String baseUrl=LocalRequestHelper.getLocalContextAddress(request,response);
-
- String requestLang = (String)session.getAttribute(SessionAttributes.LANGUAGE);
-
- String language = "";
-
- URL urlHeader = new URL(headerUrl);
-
- if (requestLang!=null) {
- if (requestLang.equals("de")) {
- urlHeader = new URL(headerUrl+"de");
- language="de";
- }
- else {
- urlHeader = new URL(headerUrl+"en");
- language="en";
- }
- }
- else {
- requestLang = request.getParameter("lang");
- if (requestLang!=null) {
- if (requestLang.equals("de")) {
- urlHeader = new URL(headerUrl+"de");
- language="de";
- }
- else {
- urlHeader = new URL(headerUrl+"en");
- language="en";
- }
- }
- else {
- urlHeader = new URL(headerUrl+"de");
- language="de";
- }
- }
-
- URLConnection ucHeader = urlHeader.openConnection();
-
- InputStream isHeader = ucHeader.getInputStream();
-
- //Read the header php files from the server
- BufferedReader brHeader = new BufferedReader(new InputStreamReader(isHeader, Charset.forName("UTF-8")));
-
- String phpLine="";
- String phpHeader="";
- while ((phpLine=brHeader.readLine())!=null) {
- phpHeader += phpLine;
- }
-
- phpHeader = phpHeader.substring(phpHeader.indexOf("<body"), phpHeader.length());
-
- Source source = new Source(phpHeader);
- List list = source.getAllElements();
- Iterator it = list.iterator();
- while (it.hasNext()) {
- Element element = (Element)it.next();
-
- //Set the absolute path for each element with src or href
- String attributeValueSrc = element.getAttributeValue("src");
- String attributeValueHref = element.getAttributeValue("href");
-
- if ((attributeValueSrc!=null) || (attributeValueHref!=null)) {
-
- String attribute = "";
-
- if ((attributeValueSrc!=null) && (attributeValueHref!=null)) {
- phpHeader = phpHeader.replace(attributeValueSrc, serverUrl+attributeValueSrc);
- phpHeader = phpHeader.replace(attributeValueHref, serverUrl+attributeValueHref);
- }
- else {
- if (attributeValueSrc!=null) {
- phpHeader = phpHeader.replace(attributeValueSrc, serverUrl+attributeValueSrc);
- }
- if (attributeValueHref!=null) {
- phpHeader = phpHeader.replace(attributeValueHref, serverUrl+attributeValueHref);
- }
- }
- }
-
- }
-
- //Insert sitemap
- Element breadcrumbsDiv = source.getElementById("breadcrumbs");
- if (breadcrumbsDiv!=null) {
- String replaceString = "";
- if (language.equals("de")) {
- replaceString = "<div id=\"breadcrumbs\"><em>Sie sind hier:</em> <a href=\""+serverUrl+"index.de.php\"> Startseite </a> &gt; <a href=\""+serverUrl+"pdf-signatur.de.php\">PDF-Signatur</a> &gt; PDF-Signatur \n</div>";
- }
- else {
- replaceString = "<div id=\"breadcrumbs\"><em>You are here:</em> <a href=\""+serverUrl+"index.en.php\"> Start page </a> &gt; <a href=\""+serverUrl+"pdf-signatur.en.php\">PDF-Signatures</a> &gt; PDF-Signature \n</div>";
- }
- phpHeader = phpHeader.replace(breadcrumbsDiv, replaceString);
- }
-
-
-
- //Insert a hidden language fake link, that is shown when the change of language is disabled
- source = new Source(phpHeader);
-
- Element element = source.getElementById("sprachlinkneu");
-
- if (element!=null) {
- String languagelink;
- int positionToInsertLangLink = 0;
- int positionToEndLangLink = 0;
- positionToInsertLangLink=element.getBegin();
- positionToEndLangLink=element.getEnd();
- if (!language.equals("de")) {
- languagelink = "<li id=\"sprachlinkneu\"><a href=\"#\" onclick=\"submit()\" hreflang=\"de\">Deutsch</a></li>";
- }
- else {
- languagelink = "<li id=\"sprachlinkneu\"><a href=\"#\" onclick=\"submit()\" hreflang=\"en\">English</a></li>";
- }
- String firstPart = phpHeader.substring(0, positionToInsertLangLink);
- String secondPart = phpHeader.substring(positionToEndLangLink, phpHeader.length());
- phpHeader = firstPart+languagelink+secondPart;
- }
- else {
- int positionToEnd=0;
- list = source.getAllElements("li");
- it = list.iterator();
- int i=0;
- while (it.hasNext()) {
- element = (Element)it.next();
- if (i==5) {
- positionToEnd = element.getEnd();
- }
- i++;
- }
- String languagelink;
- if (!language.equals("de")) {
- languagelink = "<li id=\"sprachlinkneu\"><a href=\"#\" onclick=\"submit()\" hreflang=\"de\">Deutsch</a></li>";
- }
- else {
- languagelink = "<li id=\"sprachlinkneu\"><a href=\"#\" onclick=\"submit()\" hreflang=\"en\">English</a></li>";
- }
- String firstPart = phpHeader.substring(0, positionToEnd);
- String secondPart = phpHeader.substring(positionToEnd, phpHeader.length());
- phpHeader = firstPart+languagelink+secondPart;
- }
-
-
-
-
- %>
- <title>PDF Signature</title>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <%
- if (language.equals("de")) { %>
- <meta http-equiv="Content-Language" content="de" />
- <% } else { %>
- <meta http-equiv="Content-Language" content="en" />
- <% } %>
- <meta http-equiv="Content-Style-Type" content="text/css" />
- <meta http-equiv="Content-Script-Type" content="text/javascript" />
- <meta name="Description" content="B&uuml;rgerkarte" />
- <meta name="Keywords" content="Citizen Card, Austrian Citizen Card, Citizen Card Austria" />
<decorator:head/>
- <link rel="stylesheet" type="text/css" href="<%=baseUrl %>/css/pdfas-styles.css" />
- <link rel="shortcut icon" href="<%=serverUrl %>dateien/favicon.ico" type="image/vnd.microsoft.icon" />
- <link rel="stylesheet" href="<%=serverUrl %>style.css" type="text/css" />
+ <!--
+ <link rel="stylesheet" type="text/css" href="<%=LocalRequestHelper.getLocalContextAddress(request, response)%>/css/pdfas-styles.css" />
+ -->
+ <title><fmt:message key="common.title" /></title>
+ <!--
+ <link rel="stylesheet" type="text/css" href="<%=LocalRequestHelper.getLocalContextAddress(request, response)%>/css/pdfas-standalone-styles.css" />
+ -->
</head>
-
- <%= phpHeader %>
- <!-- mitte -->
- <div id="mitte">
- <!-- inhalt -->
- <div class="inhalt" id="inhalt">
- <!-- pdfas-container -->
- <div id="pdfas-container">
- <decorator:body/>
- </div><!-- pdfas-container -->
- </div><!-- inhalt -->
- </div><!-- mitte -->
- </div>
+
+ <body>
+ <decorator:body/>
</body>
+
</html>
diff --git a/pom.xml b/pom.xml
index c591908..df3f188 100644
--- a/pom.xml
+++ b/pom.xml
@@ -3,7 +3,7 @@
<modelVersion>4.0.0</modelVersion>
- <groupId>at.gv.egiz</groupId>
+ <groupId>eu.europa.ec.joinup.egovlabs.pdf-as</groupId>
<artifactId>pdf-as</artifactId>
<version>3.3-SNAPSHOT</version>
@@ -13,15 +13,28 @@
<description>Amtssignatur fuer elektronische Aktenfuehrung</description>
<url>https://joinup.ec.europa.eu/software/pdf-as/description</url>
- <!--
<repositories>
<repository>
- <id>egovlabs</id>
- <name>egovlabs repository</name>
- <url>https://joinup.ec.europa.eu/nexus/content/repositories/egovlabs</url>
+ <id>joinup-snapshots</id>
+ <url>https://joinup.ec.europa.eu/nexus/content/repositories/snapshots/</url>
+ <releases>
+ <enabled>false</enabled>
+ </releases>
+ <snapshots>
+ <enabled>true</enabled>
+ </snapshots>
+ </repository>
+ <repository>
+ <id>joinup-releases</id>
+ <url>https://joinup.ec.europa.eu/nexus/content/repositories/releases/</url>
+ <releases>
+ <enabled>true</enabled>
+ </releases>
+ <snapshots>
+ <enabled>false</enabled>
+ </snapshots>
</repository>
</repositories>
- -->
<properties>
@@ -32,7 +45,13 @@
<!-- Java compiler -->
<java.compiler.source>1.5</java.compiler.source>
<java.compiler.target>1.5</java.compiler.target>
-
+
+ <!-- Apache Tomcat -->
+ <!-- Used for assembling of a tomcat instance with pdf-as. -->
+ <!-- Note: Apache Tomcat binary distribution is available in Maven2
+ central repository starting with version 7.0.35. -->
+ <tomcat.version>7.0.37</tomcat.version>
+
</properties>
<modules>
@@ -117,6 +136,7 @@
<version>2.13</version>
<configuration>
<showsuccess>true</showsuccess>
+ <argLine>-Xmx512m</argLine>
</configuration>
</plugin>
@@ -125,6 +145,11 @@
<version>2.3</version>
</plugin>
+ <plugin>
+ <artifactId>maven-dependency-plugin</artifactId>
+ <version>2.6</version>
+ </plugin>
+
</plugins>
</pluginManagement>
@@ -136,21 +161,23 @@
<dependencies>
<dependency>
- <groupId>at.gv.egiz</groupId>
+ <groupId>eu.europa.ec.joinup.egovlabs.pdf-as</groupId>
<artifactId>pdf-as-lib</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
- <groupId>at.gv.egiz</groupId>
+ <groupId>eu.europa.ec.joinup.egovlabs.pdf-as</groupId>
<artifactId>pdf-as-web</artifactId>
<version>${project.version}</version>
+ <type>war</type>
</dependency>
<dependency>
- <groupId>at.gv.egiz</groupId>
+ <groupId>eu.europa.ec.joinup.egovlabs.pdf-as</groupId>
<artifactId>pdf-as-cli</artifactId>
<version>${project.version}</version>
+ <type>pom</type>
</dependency>
<dependency>
@@ -172,7 +199,7 @@
</dependency>
<dependency>
- <groupId>lucene</groupId>
+ <groupId>eu.europa.ec.joinup.egovlabs.pdf-as.lucene</groupId>
<artifactId>lucene-demos</artifactId>
<version>1.4.3</version>
</dependency>
@@ -193,7 +220,7 @@
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
- <version>1.1</version>
+ <version>2.2</version>
</dependency>
<dependency>
@@ -203,19 +230,19 @@
</dependency>
<dependency>
- <groupId>axis</groupId>
+ <groupId>eu.europa.ec.joinup.egovlabs.pdf-as.axis</groupId>
<artifactId>axis-saaj</artifactId>
<version>1.0</version>
</dependency>
<dependency>
- <groupId>axis</groupId>
+ <groupId>eu.europa.ec.joinup.egovlabs.pdf-as.axis</groupId>
<artifactId>axis-wsdl4j</artifactId>
<version>1.0</version>
</dependency>
<dependency>
- <groupId>axis</groupId>
+ <groupId>eu.europa.ec.joinup.egovlabs.pdf-as.axis</groupId>
<artifactId>axis-jaxrpc</artifactId>
<version>1.0</version>
</dependency>
@@ -233,13 +260,13 @@
</dependency>
<dependency>
- <groupId>iaik</groupId>
+ <groupId>eu.europa.ec.joinup.egovlabs.pdf-as.iaik</groupId>
<artifactId>iaik_jce_eval_signed</artifactId>
<version>4.0</version>
</dependency>
<dependency>
- <groupId>iaik</groupId>
+ <groupId>eu.europa.ec.joinup.egovlabs.pdf-as.iaik</groupId>
<artifactId>iaik_ecc_eval_signed</artifactId>
<version>2.19</version>
</dependency>
@@ -247,26 +274,19 @@
<dependency>
<groupId>commons-lang</groupId>
<artifactId>commons-lang</artifactId>
- <version>2.3</version>
- </dependency>
-
- <!-- nur falls jdk < 1.5 verwendet wird -->
- <dependency>
- <groupId>xml-apis</groupId>
- <artifactId>xml-apis</artifactId>
- <version>1.3.02</version>
+ <version>2.6</version>
</dependency>
<!-- iText -->
<dependency>
- <groupId>com.lowagie</groupId>
+ <groupId>eu.europa.ec.joinup.egovlabs.pdf-as.com.lowagie</groupId>
<artifactId>itext-2.1.5-rev3628-pdfas</artifactId>
- <version>1.1</version>
+ <version>1.2</version>
</dependency>
<!-- pdfbox -->
<dependency>
- <groupId>pdfbox</groupId>
+ <groupId>eu.europa.ec.joinup.egovlabs.pdf-as.pdfbox</groupId>
<artifactId>pdfbox-0.7.2-pdfas</artifactId>
<version>1.1</version>
</dependency>
@@ -291,14 +311,14 @@
</dependency>
<dependency>
- <groupId>com.google.zxing</groupId>
+ <groupId>eu.europa.ec.joinup.egovlabs.pdf-as.com.google.zxing</groupId>
<artifactId>core</artifactId>
<version>1.6</version>
<classifier>jdk14</classifier>
</dependency>
<dependency>
- <groupId>com.google.zxing</groupId>
+ <groupId>eu.europa.ec.joinup.egovlabs.pdf-as.com.google.zxing</groupId>
<artifactId>javase</artifactId>
<version>1.6</version>
<classifier>jdk14</classifier>
diff --git a/test-files/blindtext.pdf b/test-files/blindtext.pdf
deleted file mode 100644
index d53d766..0000000
--- a/test-files/blindtext.pdf
+++ /dev/null
Binary files differ
diff --git a/test-files/blindtext_pdfa-1b-2005-rgb.pdf b/test-files/blindtext_pdfa-1b-2005-rgb.pdf
deleted file mode 100644
index a1cc9f5..0000000
--- a/test-files/blindtext_pdfa-1b-2005-rgb.pdf
+++ /dev/null
Binary files differ
diff --git a/work/cfg/advancedconfig.properties b/work/cfg/advancedconfig.properties
new file mode 100644
index 0000000..b378183
--- /dev/null
+++ b/work/cfg/advancedconfig.properties
@@ -0,0 +1,273 @@
+######################################################################
+# Fortgeschrittene PDF-AS Konfiguration
+#
+# Hier koennen fortgeschrittene Einstellungen getaetigt werden.
+# Die hier angefuehrten Eigenschaften werden grundsaetzlich durch die
+# interne Standard-Konfiguration abgedeckt und sind deshalb hier
+# lediglich als Kommentare ausgefuehrt. Die Werte entsprechen jenen
+# der Standard-Konfiguration.
+# Diese Konfiguration muss in config.properties via include-
+# Instruktion eingebunden werden:
+# include.advancedconfig = advancedconfig.properties
+#####################################################################
+
+
+# Betrifft Signieren:
+# Stellt sicher, dass das verarbeitete Dokument mindestens PDF 1.4 entspricht.
+
+#strict_mode=false
+
+
+# Betrifft Signieren:
+# Wenn das Dokument nicht verarbeitet werden kann wird versucht es
+# zuerst zu korrigieren und dann das korrigierte Dokument zu signieren.
+
+#correct_document_if_necessary=true
+
+
+# Betrifft Verifizieren:
+# Wenn das Dokument nicht verarbeitet werden kann wird versucht es
+# zuerst zu korrigieren und dann das korrigierte Dokument zu verifizieren.
+# Dies kann nur fuer textuelle Signaturen erfolgreich sein.
+
+#correct_document_on_verify_if_necessary=true
+
+
+# Wenn ein Dokument korrigiert werden soll:
+# Gibt an mit welchem Corrector ein zu korrigierendes Dokument korrigiert wird:
+# internal - das Dokument wird mit dem "internen" iText Corrector korrigiert
+# external - das Dokument wird durch einen externen Kommandozeilenaufruf korrigiert.
+# Hinweis: ein externes Programm aufzurufen birgt gewisse Risiken in sich
+# und sollte daher moeglichst nicht verwendet werden.
+
+#corrector=internal
+
+
+# Kommandozeile fuer den externen Connector.
+# Die Variablen ##input_document## bzw. ##output_document## werden von PDF-AS
+# durch die absoluten Pfad- und Dateinamen des zu korrigierenden bzw. des
+# korrigierten Dokuments ersetzt.
+# Als Pfad-Separator sollte '/' verwendet werden.
+
+#external_corrector_commandline=C:/correct.exe "##input_document##" "##output_document##"
+
+
+# Timeout (ms) fuer die Ausfuehrung des externen Correctors.
+# Das Kommando wird abgebrochen, wenn das Timeout erreicht wird bevor
+# das Kommando abgearbeitet wurde.
+# Achtung: Es besteht allerdings keine Garantie, dass der Korrekturvorgang auch tatsaechlich
+# durch ein Timeout abgebrochen wird. Dies ist im Wesentlichen abhaengig von der Beschaffenheit
+# des Korrekturprogramms sowie vom verwendeten Betriebssystem.
+
+#external_corrector_timeout=15000
+
+
+# Aktiviert, oder deaktiviert grundsaetzlich das - potenziell zeit- und ressourcen-aufwaendige
+# Suchen nach Platzhalter-Bildern in PDF-Dokumenten
+# Festlegung fuer einzelnes Profil
+# sig_obj.PROFILE.enable_placeholder_search=[true|false]
+# Die Suche ist standardmaessig aus Sicherheitsgruenden deaktiviert (Defaultwert hier = false)
+# Es muss bewusst sein, dass ueber einen Platzhalter benutzerseitig bestimmte Profile zur Signatur
+# ausgewaehlt werden koennen!
+
+#enable_placeholder_search=false
+
+
+# Ueberpruefe Korrektheit des Dokuments
+# bei binary_only=true: Fehler falls textuelle Signatur
+# bei assume_only_signature_blocks=false: Fehler falls inkrementelle Updates nach Signatur
+# In beiden Faellen wird check_old_textual_sigs beruecksichtigt.
+
+#check_document=true
+
+
+# Falls der letzte inkrementelle Updateblock keine Signatur enthaelt wuerde sofern
+# check_document=true gesetzt ist eine Exception geworfen werden und die Pruefung
+# abgebrochen werden. Mit diesem Schalter ist es moeglich, diese Exception zu
+# unterdruecken, um die Auswertung extern vornehmen zu koennen (standard: false)
+
+#supress_exception_when_last_iublock_is_no_signature=false
+
+
+# VerificationFilterParameters
+
+#binary_only=false
+#assume_only_signature_blocks=false
+#check_old_textual_sigs=true
+
+
+
+##################
+# Signaturdienste
+
+
+## Lokale BKU
+
+#bku.available_for_web=true
+#bku.available_for_commandline=true
+#bku.sign.KeyboxIdentifier=SecureSignatureKeypair
+
+
+## Online BKU (MOCCA)
+
+#moc.available_for_web=true
+#moc.available_for_commandline=false
+#moc.sign.KeyboxIdentifier=SecureSignatureKeypair
+
+
+## Handy
+
+#mobile.sign.KeyboxIdentifier=SecureSignatureKeypair
+#mobiletest.sign.KeyboxIdentifier=SecureSignatureKeypair
+
+
+## MOA
+
+#moa.available_for_web=true
+#moa.available_for_commandline=true
+
+# MOA Detached Signieren aus Konsole moeglich - zurzeit moeglich nur mit BKU
+
+#moa.sign.console.detached.enabled=false
+
+
+
+#########################################################
+# Standardfeldlaengen der Felder fuer die Binaersignatur
+
+
+# Reservierte Anzahl Bytes fuer den Signaturparameter
+# z.B. etsi-moc-1.1:ecdsa-sha256@669ee461
+# etsi-bka-atrust-1.0:ecdsa-sha256:sha256:sha256:sha1
+
+#defaults.phlength.SIG_ID=70
+
+
+# Reservierte Anzahl an Bytes fuer den Signaturalgorithmus
+# (relevant fuer BAIK-Signaturen)
+# z.B. http://www.w3.org/2001/04/xmldsig-more#ecdsa-sha256
+
+#defaults.phlength.SIG_ALG=100
+
+
+# Reservierte Anzahl an Bytes fuer den Signatornamen, falls SIG_NAME anstelle von SIG_SUBJECT verwendet wird.
+
+#defaults.phlength.SIG_NAME=210
+
+
+# Binaersignatur: reservierter Platz fuer Zertifikat
+# profilweise: sig_obj.PROFILE.phlength.certificate=xyz
+
+#defaults.phlength.certificate=10000
+
+
+# Binaersignatur: reservierte Platz fuer Zeitstempel
+# profilweise: sig_obj.PROFILE.phlength.timestamp=xyz
+
+#defaults.phlength.timestamp=5000
+
+
+# Standardgroesse des Fensters innerhalb dessen Zeilenumbrueche gesetzt werden duerfe.
+# profilweise: sig_obj.PROFILE.phlength.line_break_tolerance=xyz
+
+#defaults.phlength.line_break_tolerance=10
+
+
+# Falls die Breite eines Signaturblocks definiert wird (ueber API, Commandline oder ueber das Profil),
+# die unterhalb eines sinnvollen Wertes liegt, dann wird im Log eine Warnung ausgegeben, da
+# Signaturbloecke unter Umstaenden nicht mehr sinnvoll dargestellt werden koennen.
+# Der Standard-Schwellwert fuer diese Warnungen (= 150) kann global oder profilweise festgelegt
+# werden (z.B. um die Warnung zu deaktivieren, kann der Wert auf 0 gesetzt werden).
+# sig_obj.PROFILE.signature_block_width_warning_threshold=xyz
+
+#default.signature_block_width_warning_threshold=150
+
+
+# PDF/A-1b Unterstuetzung fuer alle Profile einschalten
+
+#default.SIG_PDFA1B_VALID=false
+
+
+# BAIK-Signatur Unterstuetzung fuer alle Profile einschalten
+
+#default.SIG_BAIK_ENABLED=false
+
+
+
+#############################################
+# Signaturkennzeichnung (fuer Adobe Acrobat)
+
+
+# Standard Name fuer die Signaturkennzeichnung (binaer)
+
+#default.adobeSignText.binary=PDF-AS
+
+
+# Standard Name fuer die Signaturkennzeichnung (binaer)
+
+#default.adobeSignText.textual=PDF-AS
+
+
+# Standard-Name fuer die PDF-Signatur
+
+#default.adobeSignFieldValue=PDF-AS Signatur
+
+
+# Standardwert fuer "Reason"-Feld der jeweiligen Signatur
+
+#default.adobeSignReasonValue=Informationen zur Pr\u00FCfung finden Sie unter http://www.signaturpruefung.gv.at
+
+
+# Standard Prueflink fuer die Adobe Signaturkennzeichnung (nur relevant falls Adobe Plugin fuer Pruefung verwendet wird)
+
+#default.verifyURL=http://www.signaturpruefung.gv.at
+
+
+# Standard Alternativer Text fuer den Signaturblock (WAI) (globale Einstellung)
+
+#default.sigLogoAltText=Abgebildet ist eine Standard-Signaturbildmarke.
+
+
+
+########################################
+# Unterstuetzte Buergerkartenumgebungen
+# Da sich die Signaturen verschiedener Buergerkartenumgebungen unterscheiden, sind fuer die zum Zeitpunkt des Releases
+# bekannten Auspraegungen in PDF-AS entsprechende Templates hinterlegt. Welche Templates verwendet werden bzw. welche
+# Buergerkartenumgebung jeweils vorliegt wird ueber einen Identifier aus dem Response-Header "User-Agent" bzw. "Server"
+# (http://www.buergerkarte.at/konzept/securitylayer/spezifikation/aktuell/bindings/bindings.html#http.kodierung.response)
+# festgestellt.
+#
+# z.B.
+# citizen-card-environment/1.2 asignSecurityLayer/1.4.2
+# weist auf eine Signatur der lokalen A-Trust Buergerkartenumgebung (mit der Version 1.4.2) hin.
+#
+# Das Mapping dazu kann hier wie folgt gesetzt werden:
+# signaturelayout.pattern.XXX=^citizen-card-environment/1\\.2 asignSecurityLayer/((1\\.3\\.3)|(1\\.4\\.[1-2]))$
+# signaturelayout.implementation.XXX=at.knowcenter.wag.egov.egiz.sig.signaturelayout.atrust.ATrustSignatureLayoutHandler
+#
+# Dieses besteht jeweils aus zwei Eintraegen: Einem regulaerem Ausdruck, der den BKU-Identifier abbildet und der
+# Angabe einer Handler-Implementierung. ("XXX" im Konfigurationsschluessel sollte durch einen eindeutigen Bezeichner
+# wie z.B. "atrustbku" ersetzt werden.)
+
+
+
+#############################################
+# LDAP-Konfiguration
+# Fuer eine Signaturpruefung wird das verwendete Signaturzertifikat benoetigt.
+# Dieses steht bei binaeren Signaturen automatisch zu Verfuegung, textuelle Signaturen
+# beinhalten allerdings nur eine Referenz auf das betreffende Signaturzertifikat in Form
+# von Auststellernamen+Seriennummer.
+# Deshalb wird bei der Pruefung textueller Signaturen versucht, das erforderliche Zertifikat
+# von den Verzeichnisdiensten der jeweiligen Zertifizierungsdiensteanbieter (ZDA) zu holen.
+# Die interne PDF-AS Konfiguration enthaelt bereits eine Reihe Einstellung fuer die
+# Verzeichnisdienste der bekannten ZDAs.
+# Hier koennen weitere LDAP-Dienste registriert werden. Es wird dabei jeweils ein
+# Ausstellername auf einen LDAP-Dienst abgebildet.
+#
+# z.B.
+# ldap_mapping.NAME.issuer_name=CN=a-sign-Premium-Sig-01,OU=a-sign-Premium-Sig-01,O=A-Trust Ges. f. Sicherheitssysteme im elektr. Datenverkehr GmbH,C=AT
+# ldap_mapping.NAME.url=ldap://ldap.a-trust.at/ou=a-sign-Premium-Sig-01,o=A-Trust,c=at
+# ldap_mapping.NAME.serial_attr=eidCertificateSerialNumber
+#
+# NAME kann frei gewaehlt werden, sollte jedoch unverwechselbar und eindeutig sein.
+# z.B. im Falle des o.g. Beispiels: ldap_mapping.asign_prem_sig01.issuer_name=...
diff --git a/work/cfg/config.properties b/work/cfg/config.properties
index 4294dd8..3ed7ca1 100644
--- a/work/cfg/config.properties
+++ b/work/cfg/config.properties
@@ -1,1633 +1,156 @@
-# PDF-AS Amtssignaturen Beispiel Konfigurationsdatei
+######################################################################
+# PDF-AS Konfiguration
#
-# Diese Konfigurationsdatei gilt als Referenzbeispiel einer
-# Konfigurationsdatei für die PDF-AS Applikation.
-##############################################################
+# Diese Datei enthaelt empfohlene Einstellungen fuer PDF-AS.
+#
+# Hinweis: Hier werden die wichtigsten Einstellungsmoeglichkeiten
+# angeboten. Eine fortgeschrittene Konfiguration ist ueber die Datei
+# advancedconfig.properties moeglich, die mit der Include-Anweisung:
+# include.advancedconfig = advancedconfig.properties eingebunden
+# eingebunden werden kann.
+######################################################################
-# Beim Signieren: Überprüfung ob Dokument PDF-Version 1.4 (oder weniger) hat
-strict_mode=false
-# Beim Signieren:
-# Wenn das Dokument nicht verarbeitet werden kann wird versucht es
-# zuerst zu korrigieren und dann das korrigierte Dokument zu signieren.
-correct_document_if_necessary=true
-
-# Beim Verifizieren:
-# Wenn das Dokument nicht verarbeitet werden kann wird versucht es
-# zuerst zu korrigieren und dann das korrigierte Dokument zu verifizieren.
-# Dies kann nur für textuelle Signaturen erfolgreich sein.
-correct_document_on_verify_if_necessary=true
-
-# Wenn ein Dokument korrigiert werden soll:
-# Gibt an mit welchem Corrector ein zu korrigierendes Dokument korrigiert wird:
-# internal - das Dokument wird mit dem "internen" iText Corrector korrigiert
-# external - das Dokument wird durch einen externen Kommandozeilenaufruf korrigiert.
-# Hinweis: ein externes Programm aufzurufen birgt gewisse Risiken in sich
-# und sollte daher möglichst nicht verwendet werden.
-corrector=internal
-
-# Kommandozeile für den externen Connector.
-# Die Variablen ##input_document## bzw. ##output_document## werden von PDF-AS
-# durch die absoluten Pfad- und Dateinamen des zu korrigierenden bzw. des
-# korrigierten Dokuments ersetzt.
-# Als Pfad-Separator sollte '/' verwendet werden.
-external_corrector_commandline=C:/correct.exe "##input_document##" "##output_document##"
-
-# Timeout (ms) für die Ausführung des externen Correctors.
-# Das Kommando wird abgebrochen, wenn das Timeout erreicht wird bevor
-# das Kommando abgearbeitet wurde.
-# Achtung: Es besteht allerdings keine Garantie, dass der Korrekturvorgang auch tatsächlich
-# durch ein Timeout abgebrochen wird. Dies ist im Wesentlichen abhängig von der Beschaffenheit
-# des Korrekturprogramms sowie vom verwendeten Betriebssystem.
-external_corrector_timeout=15000
-
-# Überprüfe Korrektheit des Dokuments
-# bei binary_only=true: Fehler falls textuelle Signatur
-# bei assume_only_signature_blocks=false: Fehler falls inkremetelle Updates nach Signatur
-# In beiden Fällen wird check_old_textual_sigs berücksichtigt.
-check_document=true
-
-# Falls der letzte inkrementelle Updateblock keine Signatur enthält würde sofern
-# check_document=true gesetzt ist eine Exception geworfen werden und die Prüfung
-# abgebrochen werden. Mit diesem Schalter ist es möglich, diese Exception zu
-# unterdrücken, um die Auswertung extern vornehmen zu können (standard: false)
-# supress_exception_when_last_iublock_is_no_signature=false
-
-# Aktiviert, oder deaktiviert grundsätzlich das - potenziell zeit- und ressourcen-aufwaendige
-# Suchen nach Platzhalter-Bildern in PDF-Dokumenten
-# Festlegung fuer einzelnes Profil
-# sig_obj.PROFILE.enable_placeholder_search=[true|false]
-# Die Suche ist standardmässig aus Sicherheitsgruenden deaktiviert (Defaultwert hier = false)
-# Es muss bewusst sein, dass über einen Platzhalter benutzerseitig bestimmte Profile zur Signatur
-# ausgewaehlt werden koennen!
-enable_placeholder_search=false
-
-# VerificationFilterParameters
-binary_only=false
-assume_only_signature_blocks=false
-check_old_textual_sigs=true
-
-# MOA Detached Signieren aus Konsole möglich - zurzeit möglich nur mit BKU
-moa.sign.console.detached.enabled=false
-
-
-#############################################
+##################
# Signaturdienste
-
-# lokale BKU
-bku.available_for_web=true
-bku.available_for_commandline=true
-
+# Hier werden die verwendbaren Signaturdienste (Lokale BKU, Online BKU, Handy-Signatur, MOA)
+# angefuehrt.
+
+##
+# Lokal installierte Buergerkartensoftware
+# ohne SSL: http://127.0.0.1:3495/http-security-layer-request
+# mit SSL : https://127.0.0.1:3496/https-security-layer-request
+# Signatur
bku.sign.url=http://127.0.0.1:3495/http-security-layer-request
-#bku.sign.url=https://127.0.0.1:3496/https-security-layer-request
-bku.sign.KeyboxIdentifier=SecureSignatureKeypair
-
-# BKU Verifikation
+# Verifikation
bku.verify.url=http://127.0.0.1:3495/http-security-layer-request
-#bku.verify.url=https://127.0.0.1:3496/https-security-layer-request
+##
# Online BKU (MOCCA)
-moc.available_for_web=true
-moc.available_for_commandline=false
-
-# MOCCA Signatur
+# Signatur
moc.sign.url=http://127.0.0.1:8080/bkuonline/http-security-layer-request
-moc.sign.KeyboxIdentifier=SecureSignatureKeypair
-# Handy Signatur
+##
+# Handy-Signatur
+# Signaturservice URL
mobile.sign.url=https://www.handy-signatur.at/mobile/https-security-layer-request/default.aspx
-moc.sign.KeyboxIdentifier=SecureSignatureKeypair
+##
# Handy Signatur (Test)
+# Signaturservice URL
mobiletest.sign.url=https://test1.a-trust.at/https-security-layer-request/default.aspx
-mobiletest.sign.KeyboxIdentifier=SecureSignatureKeypair
-
-# MOA
-moa.available_for_web=true
-moa.available_for_commandline=true
+##
# MOA Signatur
+# Signaturservice URL
moa.sign.url=http://localhost:8080/moa-spss/services/SignatureCreation
+# Identifier fuer den zu verwendenden serverseitig hinterlegten Signaturschluessel.
+# Siehe auch http://joinup.ec.europa.eu/site/moa-idspss/moa-spss-1.5.1/doc/handbook/config/config.html#konfigurationsparameter_ss
moa.sign.KeyIdentifier=KG_allgemein
+##
# MOA Verifikation
+# Verifikationsservice URL
moa.verify.url=http://localhost:8080/moa-spss/services/SignatureVerification
+# Identifier des zu verwendenden Vertrauensprofils fuer die Signaturpruefung.
+# Siehe auch http://joinup.ec.europa.eu/site/moa-idspss/moa-spss-1.5.1/doc/handbook/config/config.html#konfigurationsparameter_sp_certificatevalidation_pathvalidation_trustprofile
moa.verify.TrustProfileID=SecureSignature
-#############################################
-# aktivierte/deaktivierte Signaturprofile
-
-sig_obj.type.default=SIGNATURBLOCK_DE
-
-sig_obj.types.SIGNATURBLOCK_DE=on
-sig_obj.types.SIGNATURBLOCK_DE_NOTE=on
-sig_obj.types.SIGNATURBLOCK_EN=on
-sig_obj.types.SIGNATURBLOCK_EN_NOTE=on
-
-sig_obj.types.AMTSSIGNATURBLOCK_DE=on
-sig_obj.types.AMTSSIGNATURBLOCK_EN=on
-
-sig_obj.types.INVISIBLE=on
-
-sig_obj.types.BAIK_ARCHIV_SIGNATUR=on
-sig_obj.types.BAIK_URKUNDE_SIGNATUR=on
-
-sig_obj.types.SIGNATURBLOCK_DE_PDFA=on
-sig_obj.types.SIGNATURBLOCK_DE_PDFA_NOTE=on
-sig_obj.types.SIGNATURBLOCK_EN_PDFA=on
-sig_obj.types.SIGNATURBLOCK_EN_PDFA_NOTE=on
-
-sig_obj.types.SIGNATURBLOCK_MINIMAL_DE=on
-sig_obj.types.SIGNATURBLOCK_MINIMAL_EN=on
+#########################################################
+# Standardfeldlaengen der Felder fuer die Binaersignatur
+# Bei Binaersignaturen werden Daten, die sich erst nach dem Ausloesen der Signatur ergeben, wie
+# z.B. Unterzeichnername, Signaturzeitpunkt etc., NACH Aufbringen der Signatur in das Dokument
+# eingefuegt. Hierfuer muss jedoch VOR der Signatur bereits der erforderliche Platz reserviert
+# werden. Dies erfolgt ueber die *phlength.SIG_* Parameter.
+# Hinweis: Je groesser der Wert eines im Signaturblock dargestellten Feldes gewaehlt wird, desto
+# groesser wird auch der Signaturblock. Ein zu kleiner Wert kann dazu fuehren, dass
+# einzelne Daten keinen Platz finden und der Signaturvorgang scheitert.
-sig_obj.types.SIGNATURBLOCK_SMALL_DE=on
-sig_obj.types.SIGNATURBLOCK_SMALL_DE_NOTE=on
-sig_obj.types.SIGNATURBLOCK_SMALL_EN=on
-sig_obj.types.SIGNATURBLOCK_SMALL_EN_NOTE=on
-
-sig_obj.types.SIGNATURBLOCK_DE_DEPRECATED=on
-sig_obj.types.SIGNATURBLOCK_EN_DEPRECATED=on
-
-sig_obj.types.AMTSSIGNATURBLOCK_DE_DEPRECATED=on
-sig_obj.types.AMTSSIGNATURBLOCK_EN_DEPRECATED=on
-
-sig_obj.types.VARIABLER_AMTSSIGNATURBLOCK_DE=on
-
-
-#####################################################
-# Standardfeldlängen der Felder für die Binärsignatur
+# Reservierte Anzahl an Zeichen fuer den Signaturzeitpunkt (z.B. 2013-02-08T10:52:26+01:00)
defaults.phlength.SIG_DATE=70
-defaults.phlength.SIG_NUMBER=70
-defaults.phlength.SIG_ISSUER=150
-defaults.phlength.SIG_VALUE=180
-defaults.phlength.SIG_ID=70
-defaults.phlength.SIG_NAME=210
-defaults.phlength.SIG_ALG=100
-# Es möglich in die Werte (value) von eigens definierten Tabellenspalten dynamisch auf Teile des
-# verwendeten Zertifikats zuzugreifen. Konkret kann auf die einzelnen RDNs Teile des Issuer DN
-# und des Subject DN des Signaturzertifikats wie im folgenden Beispiel illustriert zugegriffen
-# werden:
-# sig_obj.PROFIL.value.SIG_SUBJECT= ${subject.CN}${subject.O != null ? ("\n" + subject.O) : ""}
-# Die Notation ${..} ermöglicht die dynamische Auswertung eines Ausdrucks. Verfügbar sind "subject"
-# und "issuer" und die im Zertifikat DN vorhandenen RDNs.
-# Achtung: Für die binäre Signatur funktioniert diese Ersetzung nur für Werte, die als Replacement
-# definiert wurden. Konkret bedeutet dies, dass ein phlength Platzhalter definiert sein muss.
-# Für das oben angeführte Beispiel ist daher die folgende Definition erforderlich um die Ersetzungen
-# für Binärsignaturen zu aktivieren:
-# sig_obj.PROFIL.phlength.SIG_SUBJECT=100
-# bzw. global defaults.phlength.SIG_SUBJECT=100
-defaults.phlength.SIG_SUBJECT=210
-# Binärsignatur: reservierter Platz für Zertifikat
-# profilweise: sig_obj.PROFILE.phlength.certificate=xyz
-defaults.phlength.certificate=10000
-
-# Binärsignatur: reservierte Platz für Zeitstempel
-# profilweise: sig_obj.PROFILE.phlength.timestamp=xyz
-defaults.phlength.timestamp=5000
-
-# Standardgröße des Fensters innerhalb dessen Zeilenumbrüche gesetzt werden dürfe.
-# profilweise: sig_obj.PROFILE.phlength.line_break_tolerance=xyz
-defaults.phlength.line_break_tolerance=10
-
-# Falls die Breite eines Signaturblocks definiert wird (über API, Commandline oder über das Profil),
-# die unterhalb eines sinnvollen Wertes liegt, dann wird im Log eine Warnung ausgegeben, da
-# Signaturblöcke unter Umständen nicht mehr sinnvoll dargestellt werden können.
-# Der Standard-Schwellwert für diese Warnungen (= 150) kann global oder profilweise festgelegt
-# werden (z.B. um die Warnung zu deaktivieren, kann der Wert auf 0 gesetzt werden).
-# default.signature_block_width_warning_threshold=xyz
-# sig_obj.PROFILE.signature_block_width_warning_threshold=xyz
-
-# PDF/A-1b Unterstützung für alle Profile einschalten
-default.SIG_PDFA1B_VALID=false
+# Reservierte Anzahl an Zeichen fuer die Seriennummer des Zertifikats.
+defaults.phlength.SIG_NUMBER=70
-# BAIK-Signatur Unterstützung für alle Profile einschalten
-default.SIG_BAIK_ENABLED=false
+# Reservierte Anzahl an Zeichen fuer den Aussteller-Namen
+defaults.phlength.SIG_ISSUER=150
+# Reservierte Anzahl an Zeichen fuer den Signaturwert
+defaults.phlength.SIG_VALUE=350
-###############################################
-# Signaturkennzeichnung (für Adobe Acrobat)
+# Reservierte Anzahl an Zeichen fuer den Unterzeichnernamen
+# Es moeglich, den Namen des Signators dynamisch aus Informationen des verwendeten Zertifikats
+# zusammenzusetzen. Konkret kann auf die einzelnen RDN Teile des Issuer DN und des Subject DN
+# des Signaturzertifikats wie im folgenden Beispiel illustriert zugegriffen werden:
#
-# Jede dieser globalen Einstellungen kann im jeweiligen Profil individuell gesetzt werden.
-# z.B. sig_obj.PROFILE.adobeSignText.binary=Mein Signator
-
-# Adobe Signaturkennzeichnung ein-/ausschalten
-default.adobeSignEnabled=true
-
-# Standard Name für die Signaturkennzeichnung (binär)
-default.adobeSignText.binary=PDF-AS
-
-# Standard Name für die Signaturkennzeichnung (binär)
-# Hier kann für textuelle Signaturen auch eine OGNL-Notation verwendet werden:
-# z.B. default.adobeSignText.textual=${sso.certSubjectDNPart("CN")}
-default.adobeSignText.textual=PDF-AS
-
-# Standard-Name für die PDF-Signatur
-default.adobeSignFieldValue=PDF-AS Signatur
-
-# Standardwert für "Reason"-Feld der jeweiligen Signatur
-default.adobeSignReasonValue=Informationen zur Prüfung finden Sie unter http://www.signaturpruefung.gv.at
-
-# Standard Prüflink für die Signaturkennzeichnis (nur relevant falls Adobe Plugin für Prüfung verwendet wird)
-default.verifyURL=http://www.signaturpruefung.gv.at
-
-# Standard Alternativer Text für den Signaturblock (WAI) (globale Einstellung)
-# profilweise: sig_obj.PROFILE.sigLogoAltText=VALUE
-default.sigLogoAltText=Abgebildet ist eine Standard-Signaturbildmarke.
-
-# Profilspezifische Festlegung der Position der Signaturmarke
-# sig_obj.PROFILE.pos=[p:["auto"|"new"|pagenumber];][x:["auto"|floatvalue];][y:["auto"|floatvalue];][w:["auto"|width_floatvalue];][f:footerheight_floatvalue]
-# sig_obj.PROFILE.pos=p:1;x:40.0;y:800.0;w:400.0;f:80
-
-# font definition: face,height,weight
-# default_font: HELVETICA,8,NORMAL
-# font_face: HELVETICA | TIMES_ROMAN | COURIER
-# font_height: float value
-# font_weight: NORMAL | BOLD | ITALIC | BOLDITALIC | UNDERLINE | STRIKETHRU
-
-# Horizontale Ausrichtung
-# sig_obj.PROFILE.table.TABLE_NAME.Style.halign=[left|center|right]
-# sig_obj.PROFILE.table.TABLE_NAME.Style.valuehalign=[left|center|right]
-# sig_obj.PROFILE.table.TABLE_NAME.Style.imagehalign=[left|center|right]
-
-# Vertikale Ausrichtung
-# sig_obj.PROFILE.table.TABLE_NAME.Style.valign=[bottom|middle|top]
-# sig_obj.PROFILE.table.TABLE_NAME.Style.valuevalign=[bottom|middle|top]
-# sig_obj.PROFILE.table.TABLE_NAME.Style.imagevalign=[bottom|middle|top]
-
-
-
-###################################################################################################
-# PROFIL: Signaturblock (Deutsch) mit neuem Layout
-
-sig_obj.SIGNATURBLOCK_DE.description=Standardsignatur Deutsch mit neuem Layout
-
-sig_obj.SIGNATURBLOCK_DE.key.SIG_VALUE=Signaturwert
-#sig_obj.SIGNATURBLOCK_DE.key.SIG_NAME=Unterzeichner
-sig_obj.SIGNATURBLOCK_DE.key.SIG_SUBJECT=Unterzeichner
-sig_obj.SIGNATURBLOCK_DE.key.SIG_ISSUER=Aussteller-Zertifikat
-sig_obj.SIGNATURBLOCK_DE.key.SIG_NUMBER=Serien-Nr.
-sig_obj.SIGNATURBLOCK_DE.key.SIG_KZ=Methode
-sig_obj.SIGNATURBLOCK_DE.key.SIG_ID=Parameter
-sig_obj.SIGNATURBLOCK_DE.key.SIG_META=Prüfinformation
-sig_obj.SIGNATURBLOCK_DE.key.SIG_DATE=Datum/Zeit-UTC
-
-
-
-sig_obj.SIGNATURBLOCK_DE.value.SIG_SUBJECT=${subject.T != null ? (subject.T + " ") : ""}${subject.CN}
-
-sig_obj.SIGNATURBLOCK_DE.pos=f:80
-sig_obj.SIGNATURBLOCK_DE.adobeSignFieldValue=PDF-AS Signatur
-sig_obj.SIGNATURBLOCK_DE.adobeSignReasonValue=Signaturpruefung unter http://www.signaturpruefung.gv.at
-sig_obj.SIGNATURBLOCK_DE.verifyURL=http://www.signaturpruefung.gv.at
-
-# WAI
-sig_obj.SIGNATURBLOCK_DE.sigLogoAltText=Abgebildet ist eine Standard-Signaturbildmarke.
-
-sig_obj.SIGNATURBLOCK_DE.value.SIG_META=Signaturpruefung unter: http://www.signaturpruefung.gv.at
-sig_obj.SIGNATURBLOCK_DE.value.SIG_LABEL=./images/signatur-logo_de.png
-
-
-#---------------------- MAIN TABLE -------------------------
-sig_obj.SIGNATURBLOCK_DE.table.main.1=SIG_VALUE-cv
-sig_obj.SIGNATURBLOCK_DE.table.main.2=SIG_LABEL-i|TABLE-info
-sig_obj.SIGNATURBLOCK_DE.table.main.3=SIG_META-cv
-sig_obj.SIGNATURBLOCK_DE.table.main.4=SIG_DATE-cv
-
-
-sig_obj.SIGNATURBLOCK_DE.table.main.ColsWidth=1 6
-sig_obj.SIGNATURBLOCK_DE.table.main.Style.bgcolor=255 255 255
-sig_obj.SIGNATURBLOCK_DE.table.main.Style.padding=4
-sig_obj.SIGNATURBLOCK_DE.table.main.Style.border=0.1
-sig_obj.SIGNATURBLOCK_DE.table.main.Style.halign=center
-sig_obj.SIGNATURBLOCK_DE.table.main.Style.valuehalign=left
-sig_obj.SIGNATURBLOCK_DE.table.main.Style.valign=top
-sig_obj.SIGNATURBLOCK_DE.table.main.Style.imagevalign=middle
-sig_obj.SIGNATURBLOCK_DE.table.main.Style.font=HELVETICA,8,BOLD
-sig_obj.SIGNATURBLOCK_DE.table.main.Style.valuefont=COURIER,8,NORMAL
-
-#---------------------- INFO TABLE -------------------------
-sig_obj.SIGNATURBLOCK_DE.table.info.ColsWidth=1 4
-#sig_obj.SIGNATURBLOCK_DE.table.info.1=SIG_NAME-cv
-sig_obj.SIGNATURBLOCK_DE.table.info.1=SIG_SUBJECT-cv
-sig_obj.SIGNATURBLOCK_DE.table.info.2=SIG_ISSUER-cv
-sig_obj.SIGNATURBLOCK_DE.table.info.3=SIG_NUMBER-cv
-sig_obj.SIGNATURBLOCK_DE.table.info.4=SIG_KZ-cv
-sig_obj.SIGNATURBLOCK_DE.table.info.5=SIG_ID-cv
-
-
-
-###################################################################################################
-# PROFIL: Signaturblock (Deutsch) mit neuem Layout und Hinweistext
-
-sig_obj.SIGNATURBLOCK_DE_NOTE.description=Standardsignatur Deutsch mit neuem Layout
-
-sig_obj.SIGNATURBLOCK_DE_NOTE.key.SIG_VALUE=Signaturwert
-#sig_obj.SIGNATURBLOCK_DE_NOTE.key.SIG_NAME=Unterzeichner
-sig_obj.SIGNATURBLOCK_DE_NOTE.key.SIG_SUBJECT=Unterzeichner
-sig_obj.SIGNATURBLOCK_DE_NOTE.key.SIG_ISSUER=Aussteller-Zertifikat
-sig_obj.SIGNATURBLOCK_DE_NOTE.key.SIG_NUMBER=Serien-Nr.
-sig_obj.SIGNATURBLOCK_DE_NOTE.key.SIG_KZ=Methode
-sig_obj.SIGNATURBLOCK_DE_NOTE.key.SIG_ID=Parameter
-sig_obj.SIGNATURBLOCK_DE_NOTE.key.SIG_META=Prüfinformation
-sig_obj.SIGNATURBLOCK_DE_NOTE.key.SIG_NOTE=Hinweis
-sig_obj.SIGNATURBLOCK_DE_NOTE.key.SIG_DATE=Datum/Zeit-UTC
-
-
-
-sig_obj.SIGNATURBLOCK_DE_NOTE.value.SIG_SUBJECT=${subject.T != null ? (subject.T + " ") : ""}${subject.CN}
-
-sig_obj.SIGNATURBLOCK_DE_NOTE.pos=f:80
-sig_obj.SIGNATURBLOCK_DE_NOTE.adobeSignFieldValue=PDF-AS Signatur
-sig_obj.SIGNATURBLOCK_DE_NOTE.adobeSignReasonValue=Signaturpruefung unter http://www.signaturpruefung.gv.at
-sig_obj.SIGNATURBLOCK_DE_NOTE.verifyURL=http://www.signaturpruefung.gv.at
-
-# WAI
-sig_obj.SIGNATURBLOCK_DE_NOTE.sigLogoAltText=Abgebildet ist eine Standard-Signaturbildmarke.
-
-sig_obj.SIGNATURBLOCK_DE_NOTE.value.SIG_META=Signaturpruefung unter: http://www.signaturpruefung.gv.at
-sig_obj.SIGNATURBLOCK_DE_NOTE.value.SIG_LABEL=./images/signatur-logo_de.png
-sig_obj.SIGNATURBLOCK_DE_NOTE.value.SIG_NOTE=Dieses mit einer qualifizierten elektronischen Signatur versehene Dokument ist gemäß §\u00A04 Abs.\u00A01 Signaturgesetz einem handschriftlich unterschriebenen Dokument grundsätzlich rechtlich gleichgestellt.
-
-
-#---------------------- MAIN TABLE -------------------------
-sig_obj.SIGNATURBLOCK_DE_NOTE.table.main.1=SIG_VALUE-cv
-sig_obj.SIGNATURBLOCK_DE_NOTE.table.main.2=SIG_LABEL-i|TABLE-info
-sig_obj.SIGNATURBLOCK_DE_NOTE.table.main.3=SIG_META-cv
-sig_obj.SIGNATURBLOCK_DE_NOTE.table.main.4=SIG_NOTE-cv
-sig_obj.SIGNATURBLOCK_DE_NOTE.table.main.5=SIG_DATE-cv
-
-
-sig_obj.SIGNATURBLOCK_DE_NOTE.table.main.ColsWidth=1 6
-sig_obj.SIGNATURBLOCK_DE_NOTE.table.main.Style.bgcolor=255 255 255
-sig_obj.SIGNATURBLOCK_DE_NOTE.table.main.Style.padding=4
-sig_obj.SIGNATURBLOCK_DE_NOTE.table.main.Style.border=0.1
-sig_obj.SIGNATURBLOCK_DE_NOTE.table.main.Style.halign=center
-sig_obj.SIGNATURBLOCK_DE_NOTE.table.main.Style.valuehalign=left
-sig_obj.SIGNATURBLOCK_DE_NOTE.table.main.Style.valign=top
-sig_obj.SIGNATURBLOCK_DE_NOTE.table.main.Style.imagevalign=middle
-sig_obj.SIGNATURBLOCK_DE_NOTE.table.main.Style.font=HELVETICA,8,BOLD
-sig_obj.SIGNATURBLOCK_DE_NOTE.table.main.Style.valuefont=COURIER,8,NORMAL
-
-#---------------------- INFO TABLE -------------------------
-sig_obj.SIGNATURBLOCK_DE_NOTE.table.info.ColsWidth=1 4
-#sig_obj.SIGNATURBLOCK_DE_NOTE.table.info.1=SIG_NAME-cv
-sig_obj.SIGNATURBLOCK_DE_NOTE.table.info.1=SIG_SUBJECT-cv
-sig_obj.SIGNATURBLOCK_DE_NOTE.table.info.2=SIG_ISSUER-cv
-sig_obj.SIGNATURBLOCK_DE_NOTE.table.info.3=SIG_NUMBER-cv
-sig_obj.SIGNATURBLOCK_DE_NOTE.table.info.4=SIG_KZ-cv
-sig_obj.SIGNATURBLOCK_DE_NOTE.table.info.5=SIG_ID-cv
-
-
-
-
-###################################################################################################
-# PROFIL: Signaturblock (Englisch) mit neuem Layout
-
-sig_obj.SIGNATURBLOCK_EN.description=Standardsignatur Englisch mit neuem Layout
-
-sig_obj.SIGNATURBLOCK_EN.key.SIG_VALUE=Signature Value
-#sig_obj.SIGNATURBLOCK_EN.key.SIG_NAME=Signatory
-sig_obj.SIGNATURBLOCK_EN.key.SIG_SUBJECT=Signatory
-sig_obj.SIGNATURBLOCK_EN.key.SIG_ISSUER=Issuer-Certificate
-sig_obj.SIGNATURBLOCK_EN.key.SIG_NUMBER=Serial-No.
-sig_obj.SIGNATURBLOCK_EN.key.SIG_KZ=Method
-sig_obj.SIGNATURBLOCK_EN.key.SIG_ID=Parameter
-sig_obj.SIGNATURBLOCK_EN.key.SIG_META=Verification
-sig_obj.SIGNATURBLOCK_EN.key.SIG_DATE=Date/Time-UTC
-
-sig_obj.SIGNATURBLOCK_EN.value.SIG_SUBJECT=${subject.T != null ? (subject.T + " ") : ""}${subject.CN}
-
-sig_obj.SIGNATURBLOCK_EN.pos=f:80
-sig_obj.SIGNATURBLOCK_EN.adobeSignFieldValue=PDF-AS Signature
-sig_obj.SIGNATURBLOCK_EN.adobeSignReasonValue=Signature verification at http://www.signature-verification.gv.at
-sig_obj.SIGNATURBLOCK_EN.verifyURL=http://www.signature-verification.gv.at
-
-# WAI
-sig_obj.SIGNATURBLOCK_EN.sigLogoAltText=A standard signature logo is shown.
-
-sig_obj.SIGNATURBLOCK_EN.value.SIG_META=Signature verification at: http://www.signature-verification.gv.at
-sig_obj.SIGNATURBLOCK_EN.value.SIG_LABEL=./images/signatur-logo_en.png
-
-#---------------------- MAIN TABLE -------------------------
-sig_obj.SIGNATURBLOCK_EN.table.main.1=SIG_VALUE-cv
-sig_obj.SIGNATURBLOCK_EN.table.main.2=SIG_LABEL-i|TABLE-info
-sig_obj.SIGNATURBLOCK_EN.table.main.3=SIG_META-cv
-sig_obj.SIGNATURBLOCK_EN.table.main.4=SIG_DATE-cv
-
-
-sig_obj.SIGNATURBLOCK_EN.table.main.ColsWidth=1 6
-sig_obj.SIGNATURBLOCK_EN.table.main.Style.bgcolor=255 255 255
-sig_obj.SIGNATURBLOCK_EN.table.main.Style.padding=4
-sig_obj.SIGNATURBLOCK_EN.table.main.Style.border=0.1
-sig_obj.SIGNATURBLOCK_EN.table.main.Style.halign=center
-sig_obj.SIGNATURBLOCK_EN.table.main.Style.valuehalign=left
-sig_obj.SIGNATURBLOCK_EN.table.main.Style.valign=top
-sig_obj.SIGNATURBLOCK_EN.table.main.Style.imagevalign=middle
-sig_obj.SIGNATURBLOCK_EN.table.main.Style.font=HELVETICA,8,BOLD
-sig_obj.SIGNATURBLOCK_EN.table.main.Style.valuefont=COURIER,8,NORMAL
-
-#---------------------- INFO TABLE -------------------------
-sig_obj.SIGNATURBLOCK_EN.table.info.ColsWidth=1 5
-#sig_obj.SIGNATURBLOCK_EN.table.info.1=SIG_NAME-cv
-sig_obj.SIGNATURBLOCK_EN.table.info.1=SIG_SUBJECT-cv
-sig_obj.SIGNATURBLOCK_EN.table.info.2=SIG_ISSUER-cv
-sig_obj.SIGNATURBLOCK_EN.table.info.3=SIG_NUMBER-cv
-sig_obj.SIGNATURBLOCK_EN.table.info.4=SIG_KZ-cv
-sig_obj.SIGNATURBLOCK_EN.table.info.5=SIG_ID-cv
-
-
-
-###################################################################################################
-# PROFIL: Signaturblock (Englisch) mit neuem Layout und Hinweistext
-
-sig_obj.SIGNATURBLOCK_EN_NOTE.description=Standardsignatur Englisch mit neuem Layout
-
-sig_obj.SIGNATURBLOCK_EN_NOTE.key.SIG_VALUE=Signature Value
-#sig_obj.SIGNATURBLOCK_EN_NOTE.key.SIG_NAME=Signatory
-sig_obj.SIGNATURBLOCK_EN_NOTE.key.SIG_SUBJECT=Signatory
-sig_obj.SIGNATURBLOCK_EN_NOTE.key.SIG_ISSUER=Issuer-Certificate
-sig_obj.SIGNATURBLOCK_EN_NOTE.key.SIG_NUMBER=Serial-No.
-sig_obj.SIGNATURBLOCK_EN_NOTE.key.SIG_KZ=Method
-sig_obj.SIGNATURBLOCK_EN_NOTE.key.SIG_ID=Parameter
-sig_obj.SIGNATURBLOCK_EN_NOTE.key.SIG_META=Verification
-sig_obj.SIGNATURBLOCK_EN_NOTE.key.SIG_NOTE=Note
-sig_obj.SIGNATURBLOCK_EN_NOTE.key.SIG_DATE=Date/Time-UTC
-
-sig_obj.SIGNATURBLOCK_EN_NOTE.value.SIG_SUBJECT=${subject.T != null ? (subject.T + " ") : ""}${subject.CN}
-
-sig_obj.SIGNATURBLOCK_EN_NOTE.pos=f:80
-sig_obj.SIGNATURBLOCK_EN_NOTE.adobeSignFieldValue=PDF-AS Signature
-sig_obj.SIGNATURBLOCK_EN_NOTE.adobeSignReasonValue=Signature verification at http://www.signature-verification.gv.at
-sig_obj.SIGNATURBLOCK_EN_NOTE.verifyURL=http://www.signature-verification.gv.at
-
-# WAI
-sig_obj.SIGNATURBLOCK_EN_NOTE.sigLogoAltText=A standard signature logo is shown.
-
-sig_obj.SIGNATURBLOCK_EN_NOTE.value.SIG_META=Signature verification at: http://www.signature-verification.gv.at
-sig_obj.SIGNATURBLOCK_EN_NOTE.value.SIG_LABEL=./images/signatur-logo_en.png
-sig_obj.SIGNATURBLOCK_EN_NOTE.value.SIG_NOTE=This document is signed with a qualified electronic signature. According to §\u00A04 art.\u00A01 of the Signature Act it in principle is legally equivalent to an handwritten signature.
-
-
-#---------------------- MAIN TABLE -------------------------
-sig_obj.SIGNATURBLOCK_EN_NOTE.table.main.1=SIG_VALUE-cv
-sig_obj.SIGNATURBLOCK_EN_NOTE.table.main.2=SIG_LABEL-i|TABLE-info
-sig_obj.SIGNATURBLOCK_EN_NOTE.table.main.3=SIG_META-cv
-sig_obj.SIGNATURBLOCK_EN_NOTE.table.main.4=SIG_NOTE-cv
-sig_obj.SIGNATURBLOCK_EN_NOTE.table.main.5=SIG_DATE-cv
-
-
-sig_obj.SIGNATURBLOCK_EN_NOTE.table.main.ColsWidth=1 6
-sig_obj.SIGNATURBLOCK_EN_NOTE.table.main.Style.bgcolor=255 255 255
-sig_obj.SIGNATURBLOCK_EN_NOTE.table.main.Style.padding=4
-sig_obj.SIGNATURBLOCK_EN_NOTE.table.main.Style.border=0.1
-sig_obj.SIGNATURBLOCK_EN_NOTE.table.main.Style.halign=center
-sig_obj.SIGNATURBLOCK_EN_NOTE.table.main.Style.valuehalign=left
-sig_obj.SIGNATURBLOCK_EN_NOTE.table.main.Style.valign=top
-sig_obj.SIGNATURBLOCK_EN_NOTE.table.main.Style.imagevalign=middle
-sig_obj.SIGNATURBLOCK_EN_NOTE.table.main.Style.font=HELVETICA,8,BOLD
-sig_obj.SIGNATURBLOCK_EN_NOTE.table.main.Style.valuefont=COURIER,8,NORMAL
-
-#---------------------- INFO TABLE -------------------------
-sig_obj.SIGNATURBLOCK_EN_NOTE.table.info.ColsWidth=1 5
-#sig_obj.SIGNATURBLOCK_EN_NOTE.table.info.1=SIG_NAME-cv
-sig_obj.SIGNATURBLOCK_EN_NOTE.table.info.1=SIG_SUBJECT-cv
-sig_obj.SIGNATURBLOCK_EN_NOTE.table.info.2=SIG_ISSUER-cv
-sig_obj.SIGNATURBLOCK_EN_NOTE.table.info.3=SIG_NUMBER-cv
-sig_obj.SIGNATURBLOCK_EN_NOTE.table.info.4=SIG_KZ-cv
-sig_obj.SIGNATURBLOCK_EN_NOTE.table.info.5=SIG_ID-cv
-
-
-
-
-
-###################################################################################################
-# PROFIL: Amtssignaturblock (Deutsch) mit neuem Layout
-
-sig_obj.AMTSSIGNATURBLOCK_DE.description=Amtssignaturblock-Deutsch, neues Layout
-
-sig_obj.AMTSSIGNATURBLOCK_DE.key.SIG_VALUE=Signaturwert
-sig_obj.AMTSSIGNATURBLOCK_DE.key.SIG_SUBJECT=Unterzeichner
-sig_obj.AMTSSIGNATURBLOCK_DE.key.SIG_ISSUER=Aussteller-Zertifikat
-sig_obj.AMTSSIGNATURBLOCK_DE.key.SIG_NUMBER=Serien-Nr.
-sig_obj.AMTSSIGNATURBLOCK_DE.key.SIG_KZ=Methode
-sig_obj.AMTSSIGNATURBLOCK_DE.key.SIG_ID=Parameter
-sig_obj.AMTSSIGNATURBLOCK_DE.key.SIG_META=Prüfinformation
-sig_obj.AMTSSIGNATURBLOCK_DE.key.SIG_NOTE=Hinweis
-sig_obj.AMTSSIGNATURBLOCK_DE.key.SIG_DATE=Datum/Zeit-UTC
-
-sig_obj.AMTSSIGNATURBLOCK_DE.value.SIG_SUBJECT=DEMO Amtssignatur
-
-sig_obj.AMTSSIGNATURBLOCK_DE.pos=f:80
-sig_obj.AMTSSIGNATURBLOCK_DE.adobeSignFieldValue=PDF-AS Signatur
-sig_obj.AMTSSIGNATURBLOCK_DE.adobeSignReasonValue=Signaturpruefung unter http://www.signaturpruefung.gv.at
-sig_obj.AMTSSIGNATURBLOCK_DE.verifyURL=http://www.signaturpruefung.gv.at
-
-# WAI
-sig_obj.AMTSSIGNATURBLOCK_DE.sigLogoAltText=Abgebildet ist eine Standard-Signaturbildmarke.
-
-sig_obj.AMTSSIGNATURBLOCK_DE.value.SIG_META=Signaturpruefung unter: http://www.signaturpruefung.gv.at
-sig_obj.AMTSSIGNATURBLOCK_DE.value.SIG_LABEL=./images/signatur-logo_de.png
-sig_obj.AMTSSIGNATURBLOCK_DE.value.SIG_NOTE=Dieses mit einer qualifizierten elektronischen Signatur versehene Dokument ist gemäß §\u00A04 Abs.\u00A01 Signaturgesetz einem handschriftlich unterschriebenen Dokument grundsätzlich rechtlich gleichgestellt.
-
-#---------------------- MAIN TABLE -------------------------
-sig_obj.AMTSSIGNATURBLOCK_DE.table.main.1=SIG_VALUE-cv
-sig_obj.AMTSSIGNATURBLOCK_DE.table.main.2=SIG_LABEL-i|TABLE-info
-sig_obj.AMTSSIGNATURBLOCK_DE.table.main.3=SIG_META-cv
-sig_obj.AMTSSIGNATURBLOCK_DE.table.main.4=SIG_NOTE-cv
-sig_obj.AMTSSIGNATURBLOCK_DE.table.main.5=SIG_DATE-cv
-
-sig_obj.AMTSSIGNATURBLOCK_DE.table.main.ColsWidth=1 6
-sig_obj.AMTSSIGNATURBLOCK_DE.table.main.Style.bgcolor=255 255 255
-sig_obj.AMTSSIGNATURBLOCK_DE.table.main.Style.padding=4
-sig_obj.AMTSSIGNATURBLOCK_DE.table.main.Style.border=0.1
-sig_obj.AMTSSIGNATURBLOCK_DE.table.main.Style.halign=center
-sig_obj.AMTSSIGNATURBLOCK_DE.table.main.Style.valuehalign=left
-sig_obj.AMTSSIGNATURBLOCK_DE.table.main.Style.valign=top
-sig_obj.AMTSSIGNATURBLOCK_DE.table.main.Style.imagevalign=middle
-sig_obj.AMTSSIGNATURBLOCK_DE.table.main.Style.font=HELVETICA,8,BOLD
-sig_obj.AMTSSIGNATURBLOCK_DE.table.main.Style.valuefont=COURIER,8,NORMAL
-
-#---------------------- INFO TABLE -------------------------
-sig_obj.AMTSSIGNATURBLOCK_DE.table.info.ColsWidth=1 4
-sig_obj.AMTSSIGNATURBLOCK_DE.table.info.1=SIG_SUBJECT-cv
-sig_obj.AMTSSIGNATURBLOCK_DE.table.info.2=SIG_ISSUER-cv
-sig_obj.AMTSSIGNATURBLOCK_DE.table.info.3=SIG_NUMBER-cv
-sig_obj.AMTSSIGNATURBLOCK_DE.table.info.4=SIG_KZ-cv
-sig_obj.AMTSSIGNATURBLOCK_DE.table.info.5=SIG_ID-cv
-
-
-
-###################################################################################################
-# PROFIL: Amtssignaturblock (Englisch) mit neuem Layout
-
-sig_obj.AMTSSIGNATURBLOCK_EN.description=Amtssignaturblock-Englisch, neues Layout
-
-sig_obj.AMTSSIGNATURBLOCK_EN.key.SIG_VALUE=Signature Value
-sig_obj.AMTSSIGNATURBLOCK_EN.key.SIG_SUBJECT=Signatory
-sig_obj.AMTSSIGNATURBLOCK_EN.key.SIG_ISSUER=Issuer-Certificate
-sig_obj.AMTSSIGNATURBLOCK_EN.key.SIG_NUMBER=Serial-No.
-sig_obj.AMTSSIGNATURBLOCK_EN.key.SIG_KZ=Method
-sig_obj.AMTSSIGNATURBLOCK_EN.key.SIG_ID=Parameter
-sig_obj.AMTSSIGNATURBLOCK_EN.key.SIG_META=Verification
-sig_obj.AMTSSIGNATURBLOCK_EN.key.SIG_NOTE=Note
-sig_obj.AMTSSIGNATURBLOCK_EN.key.SIG_DATE=Date/Time-UTC
-
-sig_obj.AMTSSIGNATURBLOCK_EN.value.SIG_SUBJECT=DEMO Amtssignatur
-
-sig_obj.AMTSSIGNATURBLOCK_EN.pos=f:80
-sig_obj.AMTSSIGNATURBLOCK_EN.adobeSignFieldValue=PDF-AS Signature
-sig_obj.AMTSSIGNATURBLOCK_EN.adobeSignReasonValue=Signature verification at: http://www.signature-verification.gv.at
-sig_obj.AMTSSIGNATURBLOCK_EN.verifyURL=http://www.signature-verification.gv.at
-
-# WAI
-sig_obj.AMTSSIGNATURBLOCK_EN.sigLogoAltText=A standard signature logo is shown.
-
-sig_obj.AMTSSIGNATURBLOCK_EN.value.SIG_META=Signature verification at: http://www.signature-verification.gv.at
-sig_obj.AMTSSIGNATURBLOCK_EN.value.SIG_LABEL=./images/signatur-logo_en.png
-sig_obj.AMTSSIGNATURBLOCK_EN.value.SIG_NOTE=This document is signed with a qualified electronic signature. According to §\u00A04 art.\u00A01 of the Signature Act it in principle is legally equivalent to an handwritten signature.
-
-
-#---------------------- MAIN TABLE -------------------------
-sig_obj.AMTSSIGNATURBLOCK_EN.table.main.1=SIG_VALUE-cv
-sig_obj.AMTSSIGNATURBLOCK_EN.table.main.2=SIG_LABEL-i|TABLE-info
-sig_obj.AMTSSIGNATURBLOCK_EN.table.main.3=SIG_META-cv
-sig_obj.AMTSSIGNATURBLOCK_EN.table.main.4=SIG_NOTE-cv
-sig_obj.AMTSSIGNATURBLOCK_EN.table.main.5=SIG_DATE-cv
-
-sig_obj.AMTSSIGNATURBLOCK_EN.table.main.ColsWidth=1 6
-sig_obj.AMTSSIGNATURBLOCK_EN.table.main.Style.bgcolor=255 255 255
-sig_obj.AMTSSIGNATURBLOCK_EN.table.main.Style.padding=4
-sig_obj.AMTSSIGNATURBLOCK_EN.table.main.Style.border=0.1
-sig_obj.AMTSSIGNATURBLOCK_EN.table.main.Style.halign=center
-sig_obj.AMTSSIGNATURBLOCK_EN.table.main.Style.valuehalign=left
-sig_obj.AMTSSIGNATURBLOCK_EN.table.main.Style.valign=top
-sig_obj.AMTSSIGNATURBLOCK_EN.table.main.Style.imagevalign=middle
-sig_obj.AMTSSIGNATURBLOCK_EN.table.main.Style.font=HELVETICA,8,BOLD
-sig_obj.AMTSSIGNATURBLOCK_EN.table.main.Style.valuefont=COURIER,8,NORMAL
-
-#---------------------- INFO TABLE -------------------------
-sig_obj.AMTSSIGNATURBLOCK_EN.table.info.ColsWidth=1 5
-sig_obj.AMTSSIGNATURBLOCK_EN.table.info.1=SIG_SUBJECT-cv
-sig_obj.AMTSSIGNATURBLOCK_EN.table.info.2=SIG_ISSUER-cv
-sig_obj.AMTSSIGNATURBLOCK_EN.table.info.3=SIG_NUMBER-cv
-sig_obj.AMTSSIGNATURBLOCK_EN.table.info.4=SIG_KZ-cv
-sig_obj.AMTSSIGNATURBLOCK_EN.table.info.5=SIG_ID-cv
-
-
-
-###################################################################################################
-# PROFIL: Unsichtbarer Signaturblock
-
-sig_obj.INVISIBLE.description=Unsichtbarer Signaturblock
-
-sig_obj.INVISIBLE.adobeSignFieldValue=PDF-AS Signatur
-sig_obj.INVISIBLE.adobeSignReasonValue=Informationen zur Prüfung finden Sie unter http://www.signaturpruefung.gv.at
-
-# Platzhaltersuche für dieses Profil deaktivieren
-sig_obj.INVISIBLE.enable_placeholder_search=false
-
-sig_obj.INVISIBLE.verifyURL=http://www.signaturpruefung.gv.at
-
-
-
-###################################################################################################
-# PROFIL: BAIK Archivsignatur
-
-sig_obj.BAIK_ARCHIV_SIGNATUR.description=BAIK Archivsignatur
-
-# enable/disable BAIK support for this profile
-sig_obj.BAIK_ARCHIV_SIGNATUR.key.SIG_BAIK_ENABLED=true
-sig_obj.BAIK_ARCHIV_SIGNATUR.key.SIG_PDFA1B_VALID=true
-
-sig_obj.BAIK_ARCHIV_SIGNATUR.key.SIG_VALUE=Signaturwert
-#sig_obj.BAIK_ARCHIV_SIGNATUR.key.SIG_NAME=SIGNATOR
-sig_obj.BAIK_ARCHIV_SIGNATUR.key.SIG_SIG_LABEL=Signator
-sig_obj.BAIK_ARCHIV_SIGNATUR.key.SIG_DATE=Signaturdatum
-sig_obj.BAIK_ARCHIV_SIGNATUR.key.SIG_ISSUER=Zertifizierungsdienst
-sig_obj.BAIK_ARCHIV_SIGNATUR.key.SIG_NUMBER=Seriennummer
-sig_obj.BAIK_ARCHIV_SIGNATUR.key.SIG_ALG=Algorithmus
-sig_obj.BAIK_ARCHIV_SIGNATUR.key.SIG_KZ=Methode
-#sig_obj.BAIK_ARCHIV_SIGNATUR.key.SIG_ID=Parameter
-sig_obj.BAIK_ARCHIV_SIGNATUR.key.SIG_META=Hinweis
-sig_obj.BAIK_ARCHIV_SIGNATUR.key.SIG_TITLE=ELEKTRONISCHE ARCHIVSIGNATUR
-
-sig_obj.BAIK_ARCHIV_SIGNATUR.pos=f:80
-sig_obj.BAIK_ARCHIV_SIGNATUR.adobeSignFieldValue=ELEKTRONISCHE ARCHIVSIGNATUR
-
-# WAI
-sig_obj.BAIK_ARCHIV_SIGNATUR.sigLogoAltText=Abgebildet ist eine Signaturbildmarke mit Bundesadler.
-
-sig_obj.BAIK_ARCHIV_SIGNATUR.value.SIG_META=Dokumentenformat: ${iui.pdfVersion}
-sig_obj.BAIK_ARCHIV_SIGNATUR.value.SIG_LABEL=./images/Baik_Archiv.gif
-sig_obj.BAIK_ARCHIV_SIGNATUR.value.SIG_TITLE=ELEKTRONISCHE ARCHIVSIGNATUR
-
-sig_obj.BAIK_ARCHIV_SIGNATUR.adobeSignFieldValue=Archivsignatur
-sig_obj.BAIK_ARCHIV_SIGNATUR.adobeSignText.binary=Archivsignatur der BAIK
-sig_obj.BAIK_ARCHIV_SIGNATUR.verifyURL=http://www.signaturpruefung.gv.at
-
-sig_obj.BAIK_ARCHIV_SIGNATUR.phlength.SIG_META=50
-
-sig_obj.BAIK_ARCHIV_SIGNATUR.value.SIG_SIG_LABEL=BAIK-Archiv\n\nUrkundenarchiv der Bundeskammer für Architekten und Ingenieurskonsulenten
-
-#---------------------- MAIN TABLE -------------------------
-sig_obj.BAIK_ARCHIV_SIGNATUR.table.main.1=SIG_TITLE-v
-sig_obj.BAIK_ARCHIV_SIGNATUR.table.main.2=SIG_VALUE-cv
-sig_obj.BAIK_ARCHIV_SIGNATUR.table.main.3=SIG_LABEL-i|TABLE-info
-sig_obj.BAIK_ARCHIV_SIGNATUR.table.main.4=SIG_META-cv
-
-sig_obj.BAIK_ARCHIV_SIGNATUR.table.main.ColsWidth=1 5
-sig_obj.BAIK_ARCHIV_SIGNATUR.table.main.Style.bgcolor=161 198 252
-sig_obj.BAIK_ARCHIV_SIGNATUR.table.main.Style.padding=4
-sig_obj.BAIK_ARCHIV_SIGNATUR.table.main.Style.border=0.1
-sig_obj.BAIK_ARCHIV_SIGNATUR.table.main.Style.halign=center
-sig_obj.BAIK_ARCHIV_SIGNATUR.table.main.Style.valuehalign=left
-sig_obj.BAIK_ARCHIV_SIGNATUR.table.main.Style.valign=middle
-sig_obj.BAIK_ARCHIV_SIGNATUR.table.main.Style.imagevalign=middle
-sig_obj.BAIK_ARCHIV_SIGNATUR.table.main.Style.font=TTF:DejaVuSansCondensed.ttf,8
-sig_obj.BAIK_ARCHIV_SIGNATUR.table.main.Style.valuefont=TTF:DejaVuSansCondensed.ttf,8
-
-#---------------------- INFO TABLE -------------------------
-sig_obj.BAIK_ARCHIV_SIGNATUR.table.info.ColsWidth=1 4
-sig_obj.BAIK_ARCHIV_SIGNATUR.table.info.Style.halign=left
-sig_obj.BAIK_ARCHIV_SIGNATUR.table.info.Style.valuehalign=left
-sig_obj.BAIK_ARCHIV_SIGNATUR.table.info.Style.valign=middle
-
-#sig_obj.BAIK_ARCHIV_SIGNATUR.table.info.1=SIG_NAME-cv
-sig_obj.BAIK_ARCHIV_SIGNATUR.table.info.1=SIG_SIG_LABEL-cv
-sig_obj.BAIK_ARCHIV_SIGNATUR.table.info.2=SIG_DATE-cv
-sig_obj.BAIK_ARCHIV_SIGNATUR.table.info.3=SIG_ISSUER-cv
-sig_obj.BAIK_ARCHIV_SIGNATUR.table.info.4=SIG_NUMBER-cv
-sig_obj.BAIK_ARCHIV_SIGNATUR.table.info.5=SIG_ALG-cv
-sig_obj.BAIK_ARCHIV_SIGNATUR.table.info.6=SIG_KZ-cv
-
-
-
-###################################################################################################
-# PROFIL: BAIK Beurkundungssignatur
-
-sig_obj.BAIK_URKUNDE_SIGNATUR.description=BAIK Beurkundungssignatur
-
-# enable/disable BAIK support for this profile
-sig_obj.BAIK_URKUNDE_SIGNATUR.key.SIG_BAIK_ENABLED=true
-sig_obj.BAIK_URKUNDE_SIGNATUR.key.SIG_PDFA1B_VALID=true
-
-sig_obj.BAIK_URKUNDE_SIGNATUR.key.SIG_VALUE=Signaturwert
-#sig_obj.BAIK_URKUNDE_SIGNATUR.key.SIG_NAME=SIGNATOR
-sig_obj.BAIK_URKUNDE_SIGNATUR.key.SIG_SIG_LABEL=Signator
-sig_obj.BAIK_URKUNDE_SIGNATUR.key.SIG_DATE=Signaturdatum
-sig_obj.BAIK_URKUNDE_SIGNATUR.key.SIG_ISSUER=Zertifizierungsdienst
-sig_obj.BAIK_URKUNDE_SIGNATUR.key.SIG_NUMBER=Seriennummer
-sig_obj.BAIK_URKUNDE_SIGNATUR.key.SIG_ALG=Algorithmus
-sig_obj.BAIK_URKUNDE_SIGNATUR.key.SIG_KZ=Methode
-#sig_obj.BAIK_URKUNDE_SIGNATUR.key.SIG_ID=Parameter
-sig_obj.BAIK_URKUNDE_SIGNATUR.key.SIG_META=Hinweis:
-sig_obj.BAIK_URKUNDE_SIGNATUR.key.SIG_TITLE=ELEKTRONISCHE BEURKUNDUNGSSIGNATUR
-
-# WAI
-sig_obj.BAIK_URKUNDE_SIGNATUR.sigLogoAltText=Abgebildet ist die Signaturbildmarke eines staatlich befugten und beeideten Ziviltechnikers mit Bundesadler.
-
-sig_obj.BAIK_URKUNDE_SIGNATUR.pos=f:80
-sig_obj.BAIK_URKUNDE_SIGNATUR.adobeSignFieldValue=Urkundensignatur
-sig_obj.BAIK_URKUNDE_SIGNATUR.adobeSignText.binary=Urkundensignatur der BAIK
-sig_obj.BAIK_URKUNDE_SIGNATUR.verifyURL=http://www.signaturpruefung.gv.at
-
-sig_obj.BAIK_URKUNDE_SIGNATUR.value.SIG_META=Dokumentenformat: ${iui.pdfVersion}
-sig_obj.BAIK_URKUNDE_SIGNATUR.value.SIG_LABEL=./images/Baik_Urkunde.gif
-sig_obj.BAIK_URKUNDE_SIGNATUR.value.SIG_TITLE=ELEKTRONISCHE BEURKUNDUNGSSIGNATUR
-
-sig_obj.BAIK_URKUNDE_SIGNATUR.phlength.SIG_META=50
-sig_obj.BAIK_URKUNDE_SIGNATUR.phlength.SIG_SIG_LABEL=200
-
-sig_obj.BAIK_URKUNDE_SIGNATUR.value.SIG_SIG_LABEL=${subject.CN}${subject.O != null ? ("\n" + subject.O) : ""}${subject.L != null ? ("\nKanzleisitz: " + subject.L) : ""}
-
-#---------------------- MAIN TABLE -------------------------
-sig_obj.BAIK_URKUNDE_SIGNATUR.table.main.1=SIG_TITLE-v
-sig_obj.BAIK_URKUNDE_SIGNATUR.table.main.2=SIG_VALUE-cv
-sig_obj.BAIK_URKUNDE_SIGNATUR.table.main.3=SIG_LABEL-i|TABLE-info
-sig_obj.BAIK_URKUNDE_SIGNATUR.table.main.4=SIG_META-cv
-
-sig_obj.BAIK_URKUNDE_SIGNATUR.table.main.ColsWidth=1 5
-sig_obj.BAIK_URKUNDE_SIGNATUR.table.main.Style.bgcolor=248 254 150
-sig_obj.BAIK_URKUNDE_SIGNATUR.table.main.Style.padding=4
-sig_obj.BAIK_URKUNDE_SIGNATUR.table.main.Style.border=0.1
-sig_obj.BAIK_URKUNDE_SIGNATUR.table.main.Style.halign=center
-sig_obj.BAIK_URKUNDE_SIGNATUR.table.main.Style.valuehalign=left
-sig_obj.BAIK_URKUNDE_SIGNATUR.table.main.Style.valign=middle
-sig_obj.BAIK_URKUNDE_SIGNATUR.table.main.Style.imagevalign=middle
-sig_obj.BAIK_URKUNDE_SIGNATUR.table.main.Style.font=TTF:DejaVuSansCondensed.ttf,8
-sig_obj.BAIK_URKUNDE_SIGNATUR.table.main.Style.valuefont=TTF:DejaVuSansCondensed.ttf,8
-
-#---------------------- INFO TABLE -------------------------
-sig_obj.BAIK_URKUNDE_SIGNATUR.table.info.ColsWidth=1 4
-sig_obj.BAIK_URKUNDE_SIGNATUR.table.info.Style.halign=left
-sig_obj.BAIK_URKUNDE_SIGNATUR.table.info.Style.valuehalign=left
-
-#sig_obj.BAIK_URKUNDE_SIGNATUR.table.info.1=SIG_NAME-cv
-sig_obj.BAIK_URKUNDE_SIGNATUR.table.info.1=SIG_SIG_LABEL-cv
-sig_obj.BAIK_URKUNDE_SIGNATUR.table.info.2=SIG_DATE-cv
-sig_obj.BAIK_URKUNDE_SIGNATUR.table.info.3=SIG_ISSUER-cv
-sig_obj.BAIK_URKUNDE_SIGNATUR.table.info.4=SIG_NUMBER-cv
-sig_obj.BAIK_URKUNDE_SIGNATUR.table.info.5=SIG_ALG-cv
-sig_obj.BAIK_URKUNDE_SIGNATUR.table.info.6=SIG_KZ-cv
-
-
-
-###################################################################################################
-# PROFIL: Signaturblock (Deutsch), PDF/A-1b
-
-sig_obj.SIGNATURBLOCK_DE_PDFA.description=Standardsignatur Deutsch, PDF/A-1b
-
-# enable/disable PDF/A1b support for this profile
-sig_obj.SIGNATURBLOCK_DE_PDFA.key.SIG_PDFA1B_VALID=true
-
-sig_obj.SIGNATURBLOCK_DE_PDFA.key.SIG_VALUE=Signaturwert
-#sig_obj.SIGNATURBLOCK_DE_PDFA.key.SIG_NAME=Unterzeichner
-sig_obj.SIGNATURBLOCK_DE_PDFA.key.SIG_SUBJECT=Unterzeichner
-sig_obj.SIGNATURBLOCK_DE_PDFA.key.SIG_ISSUER=Aussteller-Zertifikat
-sig_obj.SIGNATURBLOCK_DE_PDFA.key.SIG_NUMBER=Serien-Nr.
-sig_obj.SIGNATURBLOCK_DE_PDFA.key.SIG_KZ=Methode
-sig_obj.SIGNATURBLOCK_DE_PDFA.key.SIG_ID=Parameter
-sig_obj.SIGNATURBLOCK_DE_PDFA.key.SIG_META=Prüfinformation
-sig_obj.SIGNATURBLOCK_DE_PDFA.key.SIG_DATE=Datum/Zeit-UTC
-
-
-sig_obj.SIGNATURBLOCK_DE_PDFA.value.SIG_SUBJECT=${subject.T != null ? (subject.T + " ") : ""}${subject.CN}
-
-sig_obj.SIGNATURBLOCK_DE_PDFA.pos=f:80
-sig_obj.SIGNATURBLOCK_DE_PDFA.adobeSignFieldValue=PDF-AS Signatur
-sig_obj.SIGNATURBLOCK_DE_PDFA.adobeSignReasonValue=Signaturpruefung unter: http://www.signaturpruefung.gv.at
-sig_obj.SIGNATURBLOCK_DE_PDFA.verifyURL=http://www.signaturpruefung.gv.at
-
-# WAI
-sig_obj.SIGNATURBLOCK_DE_PDFA.sigLogoAltText=Abgebildet ist eine Standard-Signaturbildmarke.
-
-sig_obj.SIGNATURBLOCK_DE_PDFA.value.SIG_META=Signaturpruefung unter: http://www.signaturpruefung.gv.at
-sig_obj.SIGNATURBLOCK_DE_PDFA.value.SIG_LABEL=./images/signatur-logo_de.png
-
-#---------------------- MAIN TABLE -------------------------
-sig_obj.SIGNATURBLOCK_DE_PDFA.table.main.1=SIG_VALUE-cv
-sig_obj.SIGNATURBLOCK_DE_PDFA.table.main.2=SIG_LABEL-i|TABLE-info
-sig_obj.SIGNATURBLOCK_DE_PDFA.table.main.3=SIG_META-cv
-sig_obj.SIGNATURBLOCK_DE_PDFA.table.main.4=SIG_DATE-cv
-
-sig_obj.SIGNATURBLOCK_DE_PDFA.table.main.ColsWidth=1 5.5
-sig_obj.SIGNATURBLOCK_DE_PDFA.table.main.Style.bgcolor=255 255 255
-sig_obj.SIGNATURBLOCK_DE_PDFA.table.main.Style.padding=4
-sig_obj.SIGNATURBLOCK_DE_PDFA.table.main.Style.border=0.1
-sig_obj.SIGNATURBLOCK_DE_PDFA.table.main.Style.halign=center
-sig_obj.SIGNATURBLOCK_DE_PDFA.table.main.Style.valuehalign=left
-sig_obj.SIGNATURBLOCK_DE_PDFA.table.main.Style.valign=top
-sig_obj.SIGNATURBLOCK_DE_PDFA.table.main.Style.imagevalign=middle
-sig_obj.SIGNATURBLOCK_DE_PDFA.table.main.Style.font=TTF:DejaVuSansCondensed-Bold.ttf,8
-sig_obj.SIGNATURBLOCK_DE_PDFA.table.main.Style.valuefont=TTF:DejaVuSansMono.ttf,8
-
-#---------------------- INFO TABLE -------------------------
-sig_obj.SIGNATURBLOCK_DE_PDFA.table.info.ColsWidth=1 3.5
-#sig_obj.SIGNATURBLOCK_DE_PDFA.table.info.1=SIG_NAME-cv
-sig_obj.SIGNATURBLOCK_DE_PDFA.table.info.1=SIG_SUBJECT-cv
-sig_obj.SIGNATURBLOCK_DE_PDFA.table.info.2=SIG_ISSUER-cv
-sig_obj.SIGNATURBLOCK_DE_PDFA.table.info.3=SIG_NUMBER-cv
-sig_obj.SIGNATURBLOCK_DE_PDFA.table.info.4=SIG_KZ-cv
-sig_obj.SIGNATURBLOCK_DE_PDFA.table.info.5=SIG_ID-cv
-
-
-
-###################################################################################################
-# PROFIL: Signaturblock (Deutsch), PDF/A-1b und mit Hinweistext
-
-sig_obj.SIGNATURBLOCK_DE_PDFA_NOTE.description=Standardsignatur Deutsch, PDF/A-1b
-
-# enable/disable PDF/A1b support for this profile
-sig_obj.SIGNATURBLOCK_DE_PDFA_NOTE.key.SIG_PDFA1B_VALID=true
-
-sig_obj.SIGNATURBLOCK_DE_PDFA_NOTE.key.SIG_VALUE=Signaturwert
-#sig_obj.SIGNATURBLOCK_DE_PDFA_NOTE.key.SIG_NAME=Unterzeichner
-sig_obj.SIGNATURBLOCK_DE_PDFA_NOTE.key.SIG_SUBJECT=Unterzeichner
-sig_obj.SIGNATURBLOCK_DE_PDFA_NOTE.key.SIG_ISSUER=Aussteller-Zertifikat
-sig_obj.SIGNATURBLOCK_DE_PDFA_NOTE.key.SIG_NUMBER=Serien-Nr.
-sig_obj.SIGNATURBLOCK_DE_PDFA_NOTE.key.SIG_KZ=Methode
-sig_obj.SIGNATURBLOCK_DE_PDFA_NOTE.key.SIG_ID=Parameter
-sig_obj.SIGNATURBLOCK_DE_PDFA_NOTE.key.SIG_META=Prüfinformation
-sig_obj.SIGNATURBLOCK_DE_PDFA_NOTE.key.SIG_NOTE=Hinweis
-sig_obj.SIGNATURBLOCK_DE_PDFA_NOTE.key.SIG_DATE=Datum/Zeit-UTC
-
-
-sig_obj.SIGNATURBLOCK_DE_PDFA_NOTE.value.SIG_SUBJECT=${subject.T != null ? (subject.T + " ") : ""}${subject.CN}
-
-sig_obj.SIGNATURBLOCK_DE_PDFA_NOTE.pos=f:80
-sig_obj.SIGNATURBLOCK_DE_PDFA_NOTE.adobeSignFieldValue=PDF-AS Signatur
-sig_obj.SIGNATURBLOCK_DE_PDFA_NOTE.adobeSignReasonValue=Signaturpruefung unter: http://www.signaturpruefung.gv.at
-sig_obj.SIGNATURBLOCK_DE_PDFA_NOTE.verifyURL=http://www.signaturpruefung.gv.at
-
-# WAI
-sig_obj.SIGNATURBLOCK_DE_PDFA_NOTE.sigLogoAltText=Abgebildet ist eine Standard-Signaturbildmarke.
-
-sig_obj.SIGNATURBLOCK_DE_PDFA_NOTE.value.SIG_META=Signaturpruefung unter: http://www.signaturpruefung.gv.at
-sig_obj.SIGNATURBLOCK_DE_PDFA_NOTE.value.SIG_LABEL=./images/signatur-logo_de.png
-sig_obj.SIGNATURBLOCK_DE_PDFA_NOTE.value.SIG_NOTE=Dieses mit einer qualifizierten elektronischen Signatur versehene Dokument ist gemäß §\u00A04 Abs.\u00A01 Signaturgesetz einem handschriftlich unterschriebenen Dokument grundsätzlich rechtlich gleichgestellt.
-
-#---------------------- MAIN TABLE -------------------------
-sig_obj.SIGNATURBLOCK_DE_PDFA_NOTE.table.main.1=SIG_VALUE-cv
-sig_obj.SIGNATURBLOCK_DE_PDFA_NOTE.table.main.2=SIG_LABEL-i|TABLE-info
-sig_obj.SIGNATURBLOCK_DE_PDFA_NOTE.table.main.3=SIG_META-cv
-sig_obj.SIGNATURBLOCK_DE_PDFA_NOTE.table.main.4=SIG_NOTE-cv
-sig_obj.SIGNATURBLOCK_DE_PDFA_NOTE.table.main.5=SIG_DATE-cv
-
-sig_obj.SIGNATURBLOCK_DE_PDFA_NOTE.table.main.ColsWidth=1 5.5
-sig_obj.SIGNATURBLOCK_DE_PDFA_NOTE.table.main.Style.bgcolor=255 255 255
-sig_obj.SIGNATURBLOCK_DE_PDFA_NOTE.table.main.Style.padding=4
-sig_obj.SIGNATURBLOCK_DE_PDFA_NOTE.table.main.Style.border=0.1
-sig_obj.SIGNATURBLOCK_DE_PDFA_NOTE.table.main.Style.halign=center
-sig_obj.SIGNATURBLOCK_DE_PDFA_NOTE.table.main.Style.valuehalign=left
-sig_obj.SIGNATURBLOCK_DE_PDFA_NOTE.table.main.Style.valign=top
-sig_obj.SIGNATURBLOCK_DE_PDFA_NOTE.table.main.Style.imagevalign=middle
-sig_obj.SIGNATURBLOCK_DE_PDFA_NOTE.table.main.Style.font=TTF:DejaVuSansCondensed-Bold.ttf,8
-sig_obj.SIGNATURBLOCK_DE_PDFA_NOTE.table.main.Style.valuefont=TTF:DejaVuSansMono.ttf,8
-
-#---------------------- INFO TABLE -------------------------
-sig_obj.SIGNATURBLOCK_DE_PDFA_NOTE.table.info.ColsWidth=1 3.5
-#sig_obj.SIGNATURBLOCK_DE_PDFA_NOTE.table.info.1=SIG_NAME-cv
-sig_obj.SIGNATURBLOCK_DE_PDFA_NOTE.table.info.1=SIG_SUBJECT-cv
-sig_obj.SIGNATURBLOCK_DE_PDFA_NOTE.table.info.2=SIG_ISSUER-cv
-sig_obj.SIGNATURBLOCK_DE_PDFA_NOTE.table.info.3=SIG_NUMBER-cv
-sig_obj.SIGNATURBLOCK_DE_PDFA_NOTE.table.info.4=SIG_KZ-cv
-sig_obj.SIGNATURBLOCK_DE_PDFA_NOTE.table.info.5=SIG_ID-cv
-
-
-
-
-
-###################################################################################################
-# PROFIL: Signaturblock (Englisch), PDF/A-1b
-
-sig_obj.SIGNATURBLOCK_EN_PDFA.description=Standardsignatur Englisch, PDF/A-1b
-
-# enable/disable PDF/A1b support for this profile
-sig_obj.SIGNATURBLOCK_EN_PDFA.key.SIG_PDFA1B_VALID=true
-
-sig_obj.SIGNATURBLOCK_EN_PDFA.key.SIG_VALUE=Signature Value
-#sig_obj.SIGNATURBLOCK_EN_PDFA.key.SIG_NAME=Signatory
-sig_obj.SIGNATURBLOCK_EN_PDFA.key.SIG_SUBJECT=Signatory
-sig_obj.SIGNATURBLOCK_EN_PDFA.key.SIG_ISSUER=Issuer-Certificate
-sig_obj.SIGNATURBLOCK_EN_PDFA.key.SIG_NUMBER=Serial-No.
-sig_obj.SIGNATURBLOCK_EN_PDFA.key.SIG_KZ=Method
-sig_obj.SIGNATURBLOCK_EN_PDFA.key.SIG_ID=Parameter
-sig_obj.SIGNATURBLOCK_EN_PDFA.key.SIG_META=Verification
-sig_obj.SIGNATURBLOCK_EN_PDFA.key.SIG_DATE=Date/Time-UTC
-
-
-sig_obj.SIGNATURBLOCK_EN_PDFA.value.SIG_SUBJECT=${subject.T != null ? (subject.T + " ") : ""}${subject.CN}
-
-sig_obj.SIGNATURBLOCK_EN_PDFA.pos=f:80
-sig_obj.SIGNATURBLOCK_EN_PDFA.adobeSignFieldValue=PDF-AS Signature
-sig_obj.SIGNATURBLOCK_EN_PDFA.adobeSignReasonValue=Signature verification at http://www.signature-verification.gv.at
-sig_obj.SIGNATURBLOCK_EN_PDFA.verifyURL=http://www.signature-verification.gv.at
-
-# WAI
-sig_obj.SIGNATURBLOCK_EN_PDFA.sigLogoAltText=A standard signature logo is shown.
-
-sig_obj.SIGNATURBLOCK_EN_PDFA.value.SIG_META=Signature verification at: http://www.signature-verification.gv.at
-sig_obj.SIGNATURBLOCK_EN_PDFA.value.SIG_LABEL=./images/signatur-logo_en.png
-
-#---------------------- MAIN TABLE -------------------------
-sig_obj.SIGNATURBLOCK_EN_PDFA.table.main.1=SIG_VALUE-cv
-sig_obj.SIGNATURBLOCK_EN_PDFA.table.main.2=SIG_LABEL-i|TABLE-info
-sig_obj.SIGNATURBLOCK_EN_PDFA.table.main.3=SIG_META-cv
-sig_obj.SIGNATURBLOCK_EN_PDFA.table.main.4=SIG_DATE-cv
-
-sig_obj.SIGNATURBLOCK_EN_PDFA.table.main.ColsWidth=1 5.5
-sig_obj.SIGNATURBLOCK_EN_PDFA.table.main.Style.bgcolor=255 255 255
-sig_obj.SIGNATURBLOCK_EN_PDFA.table.main.Style.padding=4
-sig_obj.SIGNATURBLOCK_EN_PDFA.table.main.Style.border=0.1
-sig_obj.SIGNATURBLOCK_EN_PDFA.table.main.Style.halign=center
-sig_obj.SIGNATURBLOCK_EN_PDFA.table.main.Style.valuehalign=left
-sig_obj.SIGNATURBLOCK_EN_PDFA.table.main.Style.valign=top
-sig_obj.SIGNATURBLOCK_EN_PDFA.table.main.Style.imagevalign=middle
-sig_obj.SIGNATURBLOCK_EN_PDFA.table.main.Style.font=TTF:DejaVuSansCondensed-Bold.ttf,8
-sig_obj.SIGNATURBLOCK_EN_PDFA.table.main.Style.valuefont=TTF:DejaVuSansMono.ttf,8
-
-#---------------------- INFO TABLE -------------------------
-sig_obj.SIGNATURBLOCK_EN_PDFA.table.info.ColsWidth=1 4.5
-#sig_obj.SIGNATURBLOCK_EN_PDFA.table.info.1=SIG_NAME-cv
-sig_obj.SIGNATURBLOCK_EN_PDFA.table.info.1=SIG_SUBJECT-cv
-sig_obj.SIGNATURBLOCK_EN_PDFA.table.info.2=SIG_ISSUER-cv
-sig_obj.SIGNATURBLOCK_EN_PDFA.table.info.3=SIG_NUMBER-cv
-sig_obj.SIGNATURBLOCK_EN_PDFA.table.info.4=SIG_KZ-cv
-sig_obj.SIGNATURBLOCK_EN_PDFA.table.info.5=SIG_ID-cv
-
-
-
-###################################################################################################
-# PROFIL: Signaturblock (Englisch), PDF/A-1b und mit Hinweistext
-
-sig_obj.SIGNATURBLOCK_EN_PDFA_NOTE.description=Standardsignatur Englisch, PDF/A-1b
-
-# enable/disable PDF/A1b support for this profile
-sig_obj.SIGNATURBLOCK_EN_PDFA_NOTE.key.SIG_PDFA1B_VALID=true
-
-sig_obj.SIGNATURBLOCK_EN_PDFA_NOTE.key.SIG_VALUE=Signature Value
-#sig_obj.SIGNATURBLOCK_EN_PDFA_NOTE.key.SIG_NAME=Signatory
-sig_obj.SIGNATURBLOCK_EN_PDFA_NOTE.key.SIG_SUBJECT=Signatory
-sig_obj.SIGNATURBLOCK_EN_PDFA_NOTE.key.SIG_ISSUER=Issuer-Certificate
-sig_obj.SIGNATURBLOCK_EN_PDFA_NOTE.key.SIG_NUMBER=Serial-No.
-sig_obj.SIGNATURBLOCK_EN_PDFA_NOTE.key.SIG_KZ=Method
-sig_obj.SIGNATURBLOCK_EN_PDFA_NOTE.key.SIG_ID=Parameter
-sig_obj.SIGNATURBLOCK_EN_PDFA_NOTE.key.SIG_META=Verification
-sig_obj.SIGNATURBLOCK_EN_PDFA_NOTE.key.SIG_NOTE=Note
-sig_obj.SIGNATURBLOCK_EN_PDFA_NOTE.key.SIG_DATE=Date/Time-UTC
-
-
-sig_obj.SIGNATURBLOCK_EN_PDFA_NOTE.value.SIG_SUBJECT=${subject.T != null ? (subject.T + " ") : ""}${subject.CN}
-
-sig_obj.SIGNATURBLOCK_EN_PDFA_NOTE.pos=f:80
-sig_obj.SIGNATURBLOCK_EN_PDFA_NOTE.adobeSignFieldValue=PDF-AS Signature
-sig_obj.SIGNATURBLOCK_EN_PDFA_NOTE.adobeSignReasonValue=Signature verification at http://www.signature-verification.gv.at
-sig_obj.SIGNATURBLOCK_EN_PDFA_NOTE.verifyURL=http://www.signature-verification.gv.at
-
-# WAI
-sig_obj.SIGNATURBLOCK_EN_PDFA_NOTE.sigLogoAltText=A standard signature logo is shown.
-
-sig_obj.SIGNATURBLOCK_EN_PDFA_NOTE.value.SIG_META=Signature verification at: http://www.signature-verification.gv.at
-sig_obj.SIGNATURBLOCK_EN_PDFA_NOTE.value.SIG_LABEL=./images/signatur-logo_en.png
-sig_obj.SIGNATURBLOCK_EN_PDFA_NOTE.value.SIG_NOTE=This document is signed with a qualified electronic signature. According to §\u00A04 art.\u00A01 of the Signature Act it in principle is legally equivalent to an handwritten signature.
-
-#---------------------- MAIN TABLE -------------------------
-sig_obj.SIGNATURBLOCK_EN_PDFA_NOTE.table.main.1=SIG_VALUE-cv
-sig_obj.SIGNATURBLOCK_EN_PDFA_NOTE.table.main.2=SIG_LABEL-i|TABLE-info
-sig_obj.SIGNATURBLOCK_EN_PDFA_NOTE.table.main.3=SIG_META-cv
-sig_obj.SIGNATURBLOCK_EN_PDFA_NOTE.table.main.4=SIG_NOTE-cv
-sig_obj.SIGNATURBLOCK_EN_PDFA_NOTE.table.main.5=SIG_DATE-cv
-
-sig_obj.SIGNATURBLOCK_EN_PDFA_NOTE.table.main.ColsWidth=1 5.5
-sig_obj.SIGNATURBLOCK_EN_PDFA_NOTE.table.main.Style.bgcolor=255 255 255
-sig_obj.SIGNATURBLOCK_EN_PDFA_NOTE.table.main.Style.padding=4
-sig_obj.SIGNATURBLOCK_EN_PDFA_NOTE.table.main.Style.border=0.1
-sig_obj.SIGNATURBLOCK_EN_PDFA_NOTE.table.main.Style.halign=center
-sig_obj.SIGNATURBLOCK_EN_PDFA_NOTE.table.main.Style.valuehalign=left
-sig_obj.SIGNATURBLOCK_EN_PDFA_NOTE.table.main.Style.valign=top
-sig_obj.SIGNATURBLOCK_EN_PDFA_NOTE.table.main.Style.imagevalign=middle
-sig_obj.SIGNATURBLOCK_EN_PDFA_NOTE.table.main.Style.font=TTF:DejaVuSansCondensed-Bold.ttf,8
-sig_obj.SIGNATURBLOCK_EN_PDFA_NOTE.table.main.Style.valuefont=TTF:DejaVuSansMono.ttf,8
-
-#---------------------- INFO TABLE -------------------------
-sig_obj.SIGNATURBLOCK_EN_PDFA_NOTE.table.info.ColsWidth=1 4.5
-#sig_obj.SIGNATURBLOCK_EN_PDFA_NOTE.table.info.1=SIG_NAME-cv
-sig_obj.SIGNATURBLOCK_EN_PDFA_NOTE.table.info.1=SIG_SUBJECT-cv
-sig_obj.SIGNATURBLOCK_EN_PDFA_NOTE.table.info.2=SIG_ISSUER-cv
-sig_obj.SIGNATURBLOCK_EN_PDFA_NOTE.table.info.3=SIG_NUMBER-cv
-sig_obj.SIGNATURBLOCK_EN_PDFA_NOTE.table.info.4=SIG_KZ-cv
-sig_obj.SIGNATURBLOCK_EN_PDFA_NOTE.table.info.5=SIG_ID-cv
-
-
-
-
-###################################################################################################
-# PROFIL: minimaler Signaturblock (Deutsch)
-
-sig_obj.SIGNATURBLOCK_MINIMAL_DE.description=minimale Standardsignatur Deutsch
-sig_obj.SIGNATURBLOCK_MINIMAL_DE.key.SIG_META=Prüfinformation
-
-sig_obj.SIGNATURBLOCK_MINIMAL_DE.pos=w:230.0;f:80
-sig_obj.SIGNATURBLOCK_MINIMAL_DE.adobeSignFieldValue=PDF-AS Signatur
-sig_obj.SIGNATURBLOCK_MINIMAL_DE.adobeSignReasonValue=Signaturpruefung unter http://www.signaturpruefung.gv.at
-sig_obj.SIGNATURBLOCK_MINIMAL_DE.verifyURL=http://www.signaturpruefung.gv.at
-
-sig_obj.SIGNATURBLOCK_MINIMAL_DE.value.SIG_META=Signaturpruefung unter: http://www.signaturpruefung.gv.at
-sig_obj.SIGNATURBLOCK_MINIMAL_DE.value.SIG_LABEL=./images/signatur-logo_de.png
-sig_obj.SIGNATURBLOCK_MINIMAL_DE.table.main.Style.imagescaletofit=65.0;65.0
-
-# WAI
-sig_obj.SIGNATURBLOCK_MINIMAL_DE.sigLogoAltText=Abgebildet ist eine Standard-Signaturbildmarke.
-
-#---------------------- MAIN TABLE -------------------------
-sig_obj.SIGNATURBLOCK_MINIMAL_DE.table.main.1=SIG_LABEL-i
-sig_obj.SIGNATURBLOCK_MINIMAL_DE.table.main.2=SIG_META-v
-
-sig_obj.SIGNATURBLOCK_MINIMAL_DE.table.main.ColsWidth=1
-sig_obj.SIGNATURBLOCK_MINIMAL_DE.table.main.Style.bgcolor=255 255 255
-sig_obj.SIGNATURBLOCK_MINIMAL_DE.table.main.Style.padding=4
-sig_obj.SIGNATURBLOCK_MINIMAL_DE.table.main.Style.border=0
-sig_obj.SIGNATURBLOCK_MINIMAL_DE.table.main.Style.halign=center
-sig_obj.SIGNATURBLOCK_MINIMAL_DE.table.main.Style.valuehalign=left
-sig_obj.SIGNATURBLOCK_MINIMAL_DE.table.main.Style.valign=middle
-sig_obj.SIGNATURBLOCK_MINIMAL_DE.table.main.Style.font=HELVETICA,9,NORMAL
-sig_obj.SIGNATURBLOCK_MINIMAL_DE.table.main.Style.valuefont=HELVETICA,9,NORMAL
-
-###################################################################################################
-# PROFIL: minimaler Signaturblock (Englisch)
-
-sig_obj.SIGNATURBLOCK_MINIMAL_EN.description=minimale Standardsignatur Englisch
-sig_obj.SIGNATURBLOCK_MINIMAL_EN.key.SIG_META=Verification
-
-sig_obj.SIGNATURBLOCK_MINIMAL_EN.pos=w:230.0;f:80
-sig_obj.SIGNATURBLOCK_MINIMAL_EN.adobeSignFieldValue=PDF-AS Signature
-sig_obj.SIGNATURBLOCK_MINIMAL_EN.adobeSignReasonValue=Information about the verification can be found at http://www.signature-verification.gv.at
-sig_obj.SIGNATURBLOCK_MINIMAL_EN.verifyURL=http://www.signature-verification.gv.at
-
-sig_obj.SIGNATURBLOCK_MINIMAL_EN.value.SIG_META=Signature verification at: http://www.signature-verification.gv.at
-sig_obj.SIGNATURBLOCK_MINIMAL_EN.value.SIG_LABEL=./images/signatur-logo_en.png
-sig_obj.SIGNATURBLOCK_MINIMAL_EN.table.main.Style.imagescaletofit=65.0;65.0
-
-# WAI
-sig_obj.SIGNATURBLOCK_MINIMAL_EN.sigLogoAltText=A standard signature logo is shown.
-
-#---------------------- MAIN TABLE -------------------------
-sig_obj.SIGNATURBLOCK_MINIMAL_EN.table.main.1=SIG_LABEL-i
-sig_obj.SIGNATURBLOCK_MINIMAL_EN.table.main.2=SIG_META-v
-
-sig_obj.SIGNATURBLOCK_MINIMAL_EN.table.main.ColsWidth=1
-sig_obj.SIGNATURBLOCK_MINIMAL_EN.table.main.Style.bgcolor=255 255 255
-sig_obj.SIGNATURBLOCK_MINIMAL_EN.table.main.Style.padding=4
-sig_obj.SIGNATURBLOCK_MINIMAL_EN.table.main.Style.border=0
-sig_obj.SIGNATURBLOCK_MINIMAL_EN.table.main.Style.halign=center
-sig_obj.SIGNATURBLOCK_MINIMAL_EN.table.main.Style.valuehalign=left
-sig_obj.SIGNATURBLOCK_MINIMAL_EN.table.main.Style.valign=middle
-sig_obj.SIGNATURBLOCK_MINIMAL_EN.table.main.Style.font=HELVETICA,9,NORMAL
-sig_obj.SIGNATURBLOCK_MINIMAL_EN.table.main.Style.valuefont=HELVETICA,9,NORMAL
-
-
-
-###################################################################################################
-# PROFIL: Signaturblock klein (Deutsch)
-
-sig_obj.SIGNATURBLOCK_SMALL_DE.description=Standardsignatur klein Deutsch
-
-sig_obj.SIGNATURBLOCK_SMALL_DE.key.SIG_VALUE=Signaturwert
-#sig_obj.SIGNATURBLOCK_SMALL_DE.key.SIG_NAME=Unterzeichner
-sig_obj.SIGNATURBLOCK_SMALL_DE.key.SIG_SUBJECT=Unterzeichner
-sig_obj.SIGNATURBLOCK_SMALL_DE.key.SIG_ISSUER=Aussteller-Zertifikat
-sig_obj.SIGNATURBLOCK_SMALL_DE.key.SIG_NUMBER=Serien-Nr.
-sig_obj.SIGNATURBLOCK_SMALL_DE.key.SIG_KZ=Methode
-sig_obj.SIGNATURBLOCK_SMALL_DE.key.SIG_ID=Parameter
-sig_obj.SIGNATURBLOCK_SMALL_DE.key.SIG_META=Prüfinformation
-sig_obj.SIGNATURBLOCK_SMALL_DE.key.SIG_DATE=Datum/Zeit-UTC
-
-
-sig_obj.SIGNATURBLOCK_SMALL_DE.value.SIG_SUBJECT=${subject.T != null ? (subject.T + " ") : ""}${subject.CN}
-
-sig_obj.SIGNATURBLOCK_SMALL_DE.pos=f:80;w:230
-sig_obj.SIGNATURBLOCK_SMALL_DE.adobeSignFieldValue=PDF-AS Signatur
-sig_obj.SIGNATURBLOCK_SMALL_DE.adobeSignReasonValue=Signaturpruefung unter http://www.signaturpruefung.gv.at
-sig_obj.SIGNATURBLOCK_SMALL_DE.verifyURL=http://www.signaturpruefung.gv.at
-
-# WAI
-sig_obj.SIGNATURBLOCK_SMALL_DE.sigLogoAltText=Abgebildet ist eine Standard-Signaturbildmarke.
-
-sig_obj.SIGNATURBLOCK_SMALL_DE.value.SIG_META=Signaturpruefung unter: http://www.signaturpruefung.gv.at
-sig_obj.SIGNATURBLOCK_SMALL_DE.value.SIG_LABEL=./images/signatur-logo_de.png
-
-#---------------------- MAIN TABLE -------------------------
-sig_obj.SIGNATURBLOCK_SMALL_DE.table.main.1=SIG_VALUE-cv
-sig_obj.SIGNATURBLOCK_SMALL_DE.table.main.2=SIG_LABEL-i|TABLE-info
-sig_obj.SIGNATURBLOCK_SMALL_DE.table.main.3=SIG_META-cv
-sig_obj.SIGNATURBLOCK_SMALL_DE.table.main.4=SIG_DATE-cv
-
-sig_obj.SIGNATURBLOCK_SMALL_DE.table.main.ColsWidth=1 4.5
-sig_obj.SIGNATURBLOCK_SMALL_DE.table.main.Style.bgcolor=255 255 255
-sig_obj.SIGNATURBLOCK_SMALL_DE.table.main.Style.padding=2
-sig_obj.SIGNATURBLOCK_SMALL_DE.table.main.Style.border=0.1
-sig_obj.SIGNATURBLOCK_SMALL_DE.table.main.Style.halign=center
-sig_obj.SIGNATURBLOCK_SMALL_DE.table.main.Style.valuehalign=left
-sig_obj.SIGNATURBLOCK_SMALL_DE.table.main.Style.valign=top
-sig_obj.SIGNATURBLOCK_SMALL_DE.table.main.Style.imagevalign=middle
-sig_obj.SIGNATURBLOCK_SMALL_DE.table.main.Style.font=HELVETICA,5,BOLD
-sig_obj.SIGNATURBLOCK_SMALL_DE.table.main.Style.valuefont=COURIER,5,NORMAL
-
-#---------------------- INFO TABLE -------------------------
-sig_obj.SIGNATURBLOCK_SMALL_DE.table.info.ColsWidth=1 2.7
-#sig_obj.SIGNATURBLOCK_SMALL_DE.table.info.1=SIG_NAME-cv
-sig_obj.SIGNATURBLOCK_SMALL_DE.table.info.1=SIG_SUBJECT-cv
-sig_obj.SIGNATURBLOCK_SMALL_DE.table.info.2=SIG_ISSUER-cv
-sig_obj.SIGNATURBLOCK_SMALL_DE.table.info.3=SIG_NUMBER-cv
-sig_obj.SIGNATURBLOCK_SMALL_DE.table.info.4=SIG_KZ-cv
-sig_obj.SIGNATURBLOCK_SMALL_DE.table.info.5=SIG_ID-cv
-
-
-
-###################################################################################################
-# PROFIL: Signaturblock klein (Deutsch) mit Hinweistext
-
-sig_obj.SIGNATURBLOCK_SMALL_DE_NOTE.description=Standardsignatur klein Deutsch
-
-sig_obj.SIGNATURBLOCK_SMALL_DE_NOTE.key.SIG_VALUE=Signaturwert
-#sig_obj.SIGNATURBLOCK_SMALL_DE_NOTE.key.SIG_NAME=Unterzeichner
-sig_obj.SIGNATURBLOCK_SMALL_DE_NOTE.key.SIG_SUBJECT=Unterzeichner
-sig_obj.SIGNATURBLOCK_SMALL_DE_NOTE.key.SIG_ISSUER=Aussteller-Zertifikat
-sig_obj.SIGNATURBLOCK_SMALL_DE_NOTE.key.SIG_NUMBER=Serien-Nr.
-sig_obj.SIGNATURBLOCK_SMALL_DE_NOTE.key.SIG_KZ=Methode
-sig_obj.SIGNATURBLOCK_SMALL_DE_NOTE.key.SIG_ID=Parameter
-sig_obj.SIGNATURBLOCK_SMALL_DE_NOTE.key.SIG_META=Prüfinformation
-sig_obj.SIGNATURBLOCK_SMALL_DE_NOTE.key.SIG_NOTE=Hinweis
-sig_obj.SIGNATURBLOCK_SMALL_DE_NOTE.key.SIG_DATE=Datum/Zeit-UTC
-
-
-sig_obj.SIGNATURBLOCK_SMALL_DE_NOTE.value.SIG_SUBJECT=${subject.T != null ? (subject.T + " ") : ""}${subject.CN}
-
-sig_obj.SIGNATURBLOCK_SMALL_DE_NOTE.pos=f:80;w:230
-sig_obj.SIGNATURBLOCK_SMALL_DE_NOTE.adobeSignFieldValue=PDF-AS Signatur
-sig_obj.SIGNATURBLOCK_SMALL_DE_NOTE.adobeSignReasonValue=Signaturpruefung unter http://www.signaturpruefung.gv.at
-sig_obj.SIGNATURBLOCK_SMALL_DE_NOTE.verifyURL=http://www.signaturpruefung.gv.at
-
-# WAI
-sig_obj.SIGNATURBLOCK_SMALL_DE_NOTE.sigLogoAltText=Abgebildet ist eine Standard-Signaturbildmarke.
-
-sig_obj.SIGNATURBLOCK_SMALL_DE_NOTE.value.SIG_META=Signaturpruefung unter: http://www.signaturpruefung.gv.at
-sig_obj.SIGNATURBLOCK_SMALL_DE_NOTE.value.SIG_LABEL=./images/signatur-logo_de.png
-sig_obj.SIGNATURBLOCK_SMALL_DE_NOTE.value.SIG_NOTE=Dieses mit einer qualifizierten elektronischen Signatur versehene Dokument ist gemäß §\u00A04 Abs.\u00A01 Signaturgesetz einem handschriftlich unterschriebenen Dokument grundsätzlich rechtlich gleichgestellt.
-
-#---------------------- MAIN TABLE -------------------------
-sig_obj.SIGNATURBLOCK_SMALL_DE_NOTE.table.main.1=SIG_VALUE-cv
-sig_obj.SIGNATURBLOCK_SMALL_DE_NOTE.table.main.2=SIG_LABEL-i|TABLE-info
-sig_obj.SIGNATURBLOCK_SMALL_DE_NOTE.table.main.3=SIG_META-cv
-sig_obj.SIGNATURBLOCK_SMALL_DE_NOTE.table.main.4=SIG_NOTE-cv
-sig_obj.SIGNATURBLOCK_SMALL_DE_NOTE.table.main.5=SIG_DATE-cv
-
-sig_obj.SIGNATURBLOCK_SMALL_DE_NOTE.table.main.ColsWidth=1 4.5
-sig_obj.SIGNATURBLOCK_SMALL_DE_NOTE.table.main.Style.bgcolor=255 255 255
-sig_obj.SIGNATURBLOCK_SMALL_DE_NOTE.table.main.Style.padding=2
-sig_obj.SIGNATURBLOCK_SMALL_DE_NOTE.table.main.Style.border=0.1
-sig_obj.SIGNATURBLOCK_SMALL_DE_NOTE.table.main.Style.halign=center
-sig_obj.SIGNATURBLOCK_SMALL_DE_NOTE.table.main.Style.valuehalign=left
-sig_obj.SIGNATURBLOCK_SMALL_DE_NOTE.table.main.Style.valign=top
-sig_obj.SIGNATURBLOCK_SMALL_DE_NOTE.table.main.Style.imagevalign=middle
-sig_obj.SIGNATURBLOCK_SMALL_DE_NOTE.table.main.Style.font=HELVETICA,5,BOLD
-sig_obj.SIGNATURBLOCK_SMALL_DE_NOTE.table.main.Style.valuefont=COURIER,5,NORMAL
-
-#---------------------- INFO TABLE -------------------------
-sig_obj.SIGNATURBLOCK_SMALL_DE_NOTE.table.info.ColsWidth=1 2.7
-#sig_obj.SIGNATURBLOCK_SMALL_DE_NOTE.table.info.1=SIG_NAME-cv
-sig_obj.SIGNATURBLOCK_SMALL_DE_NOTE.table.info.1=SIG_SUBJECT-cv
-sig_obj.SIGNATURBLOCK_SMALL_DE_NOTE.table.info.2=SIG_ISSUER-cv
-sig_obj.SIGNATURBLOCK_SMALL_DE_NOTE.table.info.3=SIG_NUMBER-cv
-sig_obj.SIGNATURBLOCK_SMALL_DE_NOTE.table.info.4=SIG_KZ-cv
-sig_obj.SIGNATURBLOCK_SMALL_DE_NOTE.table.info.5=SIG_ID-cv
-
-
-
-
-
-
-###################################################################################################
-# PROFIL: Signaturblock Small (Englisch)
-
-sig_obj.SIGNATURBLOCK_SMALL_EN.description=Standardsignatur klein Englisch
-
-sig_obj.SIGNATURBLOCK_SMALL_EN.key.SIG_VALUE=Signature Value
-#sig_obj.SIGNATURBLOCK_SMALL_EN.key.SIG_NAME=Signatory
-sig_obj.SIGNATURBLOCK_SMALL_EN.key.SIG_SUBJECT=Signatory
-sig_obj.SIGNATURBLOCK_SMALL_EN.key.SIG_ISSUER=Issuer-Certificate
-sig_obj.SIGNATURBLOCK_SMALL_EN.key.SIG_NUMBER=Serial-No.
-sig_obj.SIGNATURBLOCK_SMALL_EN.key.SIG_KZ=Method
-sig_obj.SIGNATURBLOCK_SMALL_EN.key.SIG_ID=Parameter
-sig_obj.SIGNATURBLOCK_SMALL_EN.key.SIG_META=Verification
-sig_obj.SIGNATURBLOCK_SMALL_EN.key.SIG_DATE=Date/Time-UTC
-
-
-sig_obj.SIGNATURBLOCK_SMALL_EN.value.SIG_SUBJECT=${subject.T != null ? (subject.T + " ") : ""}${subject.CN}
-
-sig_obj.SIGNATURBLOCK_SMALL_EN.pos=f:80;w:260
-sig_obj.SIGNATURBLOCK_SMALL_EN.adobeSignFieldValue=PDF-AS Signature
-sig_obj.SIGNATURBLOCK_SMALL_EN.adobeSignReasonValue=Signature verification at: http://www.signature-verification.gv.at
-sig_obj.SIGNATURBLOCK_SMALL_EN.verifyURL=http://www.signature-verification.gv.at
-
-sig_obj.SIGNATURBLOCK_SMALL_EN.value.SIG_META=Signature verification at: http://www.signature-verification.gv.at
-sig_obj.SIGNATURBLOCK_SMALL_EN.value.SIG_LABEL=./images/signatur-logo_en.png
-
-# WAI
-sig_obj.SIGNATURBLOCK_SMALL_EN.sigLogoAltText=A standard signature logo is shown.
-
-#---------------------- MAIN TABLE -------------------------
-sig_obj.SIGNATURBLOCK_SMALL_EN.table.main.1=SIG_VALUE-cv
-sig_obj.SIGNATURBLOCK_SMALL_EN.table.main.2=SIG_LABEL-i|TABLE-info
-sig_obj.SIGNATURBLOCK_SMALL_EN.table.main.3=SIG_META-cv
-sig_obj.SIGNATURBLOCK_SMALL_EN.table.main.4=SIG_DATE-cv
-
-sig_obj.SIGNATURBLOCK_SMALL_EN.table.main.ColsWidth=1 4.5
-sig_obj.SIGNATURBLOCK_SMALL_EN.table.main.Style.bgcolor=255 255 255
-sig_obj.SIGNATURBLOCK_SMALL_EN.table.main.Style.padding=2
-sig_obj.SIGNATURBLOCK_SMALL_EN.table.main.Style.border=0.1
-sig_obj.SIGNATURBLOCK_SMALL_EN.table.main.Style.halign=center
-sig_obj.SIGNATURBLOCK_SMALL_EN.table.main.Style.valuehalign=left
-sig_obj.SIGNATURBLOCK_SMALL_EN.table.main.Style.valign=top
-sig_obj.SIGNATURBLOCK_SMALL_EN.table.main.Style.imagevalign=middle
-sig_obj.SIGNATURBLOCK_SMALL_EN.table.main.Style.font=HELVETICA,5,BOLD
-sig_obj.SIGNATURBLOCK_SMALL_EN.table.main.Style.valuefont=COURIER,5,NORMAL
-
-#---------------------- INFO TABLE -------------------------
-sig_obj.SIGNATURBLOCK_SMALL_EN.table.info.ColsWidth=1 3.2
-#sig_obj.SIGNATURBLOCK_SMALL_EN.table.info.1=SIG_NAME-cv
-sig_obj.SIGNATURBLOCK_SMALL_EN.table.info.1=SIG_SUBJECT-cv
-sig_obj.SIGNATURBLOCK_SMALL_EN.table.info.2=SIG_ISSUER-cv
-sig_obj.SIGNATURBLOCK_SMALL_EN.table.info.3=SIG_NUMBER-cv
-sig_obj.SIGNATURBLOCK_SMALL_EN.table.info.4=SIG_KZ-cv
-sig_obj.SIGNATURBLOCK_SMALL_EN.table.info.5=SIG_ID-cv
-
-
-
-###################################################################################################
-# PROFIL: Signaturblock Small (Englisch) mit Hinweistext
-
-sig_obj.SIGNATURBLOCK_SMALL_EN_NOTE.description=Standardsignatur klein Englisch
-
-sig_obj.SIGNATURBLOCK_SMALL_EN_NOTE.key.SIG_VALUE=Signature Value
-#sig_obj.SIGNATURBLOCK_SMALL_EN_NOTE.key.SIG_NAME=Signatory
-sig_obj.SIGNATURBLOCK_SMALL_EN_NOTE.key.SIG_SUBJECT=Signatory
-sig_obj.SIGNATURBLOCK_SMALL_EN_NOTE.key.SIG_ISSUER=Issuer-Certificate
-sig_obj.SIGNATURBLOCK_SMALL_EN_NOTE.key.SIG_NUMBER=Serial-No.
-sig_obj.SIGNATURBLOCK_SMALL_EN_NOTE.key.SIG_KZ=Method
-sig_obj.SIGNATURBLOCK_SMALL_EN_NOTE.key.SIG_ID=Parameter
-sig_obj.SIGNATURBLOCK_SMALL_EN_NOTE.key.SIG_META=Verification
-sig_obj.SIGNATURBLOCK_SMALL_EN_NOTE.key.SIG_NOTE=Note
-sig_obj.SIGNATURBLOCK_SMALL_EN_NOTE.key.SIG_DATE=Date/Time-UTC
-
-
-sig_obj.SIGNATURBLOCK_SMALL_EN_NOTE.value.SIG_SUBJECT=${subject.T != null ? (subject.T + " ") : ""}${subject.CN}
-
-sig_obj.SIGNATURBLOCK_SMALL_EN_NOTE.pos=f:80;w:260
-sig_obj.SIGNATURBLOCK_SMALL_EN_NOTE.adobeSignFieldValue=PDF-AS Signature
-sig_obj.SIGNATURBLOCK_SMALL_EN_NOTE.adobeSignReasonValue=Signature verification at: http://www.signature-verification.gv.at
-sig_obj.SIGNATURBLOCK_SMALL_EN_NOTE.verifyURL=http://www.signature-verification.gv.at
-
-sig_obj.SIGNATURBLOCK_SMALL_EN_NOTE.value.SIG_META=Signature verification at: http://www.signature-verification.gv.at
-sig_obj.SIGNATURBLOCK_SMALL_EN_NOTE.value.SIG_LABEL=./images/signatur-logo_en.png
-sig_obj.SIGNATURBLOCK_SMALL_EN_NOTE.value.SIG_NOTE=This document is signed with a qualified electronic signature. According to §\u00A04 art.\u00A01 of the Signature Act it in principle is legally equivalent to an handwritten signature.
-
-# WAI
-sig_obj.SIGNATURBLOCK_SMALL_EN_NOTE.sigLogoAltText=A standard signature logo is shown.
-
-#---------------------- MAIN TABLE -------------------------
-sig_obj.SIGNATURBLOCK_SMALL_EN_NOTE.table.main.1=SIG_VALUE-cv
-sig_obj.SIGNATURBLOCK_SMALL_EN_NOTE.table.main.2=SIG_LABEL-i|TABLE-info
-sig_obj.SIGNATURBLOCK_SMALL_EN_NOTE.table.main.3=SIG_META-cv
-sig_obj.SIGNATURBLOCK_SMALL_EN_NOTE.table.main.4=SIG_NOTE-cv
-sig_obj.SIGNATURBLOCK_SMALL_EN_NOTE.table.main.5=SIG_DATE-cv
-
-sig_obj.SIGNATURBLOCK_SMALL_EN_NOTE.table.main.ColsWidth=1 4.5
-sig_obj.SIGNATURBLOCK_SMALL_EN_NOTE.table.main.Style.bgcolor=255 255 255
-sig_obj.SIGNATURBLOCK_SMALL_EN_NOTE.table.main.Style.padding=2
-sig_obj.SIGNATURBLOCK_SMALL_EN_NOTE.table.main.Style.border=0.1
-sig_obj.SIGNATURBLOCK_SMALL_EN_NOTE.table.main.Style.halign=center
-sig_obj.SIGNATURBLOCK_SMALL_EN_NOTE.table.main.Style.valuehalign=left
-sig_obj.SIGNATURBLOCK_SMALL_EN_NOTE.table.main.Style.valign=top
-sig_obj.SIGNATURBLOCK_SMALL_EN_NOTE.table.main.Style.imagevalign=middle
-sig_obj.SIGNATURBLOCK_SMALL_EN_NOTE.table.main.Style.font=HELVETICA,5,BOLD
-sig_obj.SIGNATURBLOCK_SMALL_EN_NOTE.table.main.Style.valuefont=COURIER,5,NORMAL
-
-#---------------------- INFO TABLE -------------------------
-sig_obj.SIGNATURBLOCK_SMALL_EN_NOTE.table.info.ColsWidth=1 3.2
-#sig_obj.SIGNATURBLOCK_SMALL_EN_NOTE.table.info.1=SIG_NAME-cv
-sig_obj.SIGNATURBLOCK_SMALL_EN_NOTE.table.info.1=SIG_SUBJECT-cv
-sig_obj.SIGNATURBLOCK_SMALL_EN_NOTE.table.info.2=SIG_ISSUER-cv
-sig_obj.SIGNATURBLOCK_SMALL_EN_NOTE.table.info.3=SIG_NUMBER-cv
-sig_obj.SIGNATURBLOCK_SMALL_EN_NOTE.table.info.4=SIG_KZ-cv
-sig_obj.SIGNATURBLOCK_SMALL_EN_NOTE.table.info.5=SIG_ID-cv
-
-
-
-
-
-
-###################################################################################################
-# PROFIL: Signaturblock (Deutsch)
-
-sig_obj.SIGNATURBLOCK_DE_DEPRECATED.description=Standardsignatur Deutsch
-
-sig_obj.SIGNATURBLOCK_DE_DEPRECATED.key.SIG_VALUE=Signaturwert
-#sig_obj.SIGNATURBLOCK_DE_DEPRECATED.key.SIG_NAME=Unterzeichner
-sig_obj.SIGNATURBLOCK_DE_DEPRECATED.key.SIG_SUBJECT=Unterzeichner
-sig_obj.SIGNATURBLOCK_DE_DEPRECATED.key.SIG_DATE=Datum/Zeit-UTC
-sig_obj.SIGNATURBLOCK_DE_DEPRECATED.key.SIG_ISSUER=Aussteller-Zertifikat
-sig_obj.SIGNATURBLOCK_DE_DEPRECATED.key.SIG_NUMBER=Serien-Nr.
-sig_obj.SIGNATURBLOCK_DE_DEPRECATED.key.SIG_KZ=Methode
-sig_obj.SIGNATURBLOCK_DE_DEPRECATED.key.SIG_ID=Parameter
-sig_obj.SIGNATURBLOCK_DE_DEPRECATED.key.SIG_META=Prüfinformation
-
-sig_obj.SIGNATURBLOCK_DE_DEPRECATED.value.SIG_SUBJECT=${subject.T != null ? (subject.T + " ") : ""}${subject.CN}
-
-sig_obj.SIGNATURBLOCK_DE_DEPRECATED.pos=f:80
-sig_obj.SIGNATURBLOCK_DE_DEPRECATED.adobeSignFieldValue=PDF-AS Signatur
-sig_obj.SIGNATURBLOCK_DE_DEPRECATED.adobeSignReasonValue=Informationen zur Prüfung finden Sie unter http://www.signaturpruefung.gv.at
-sig_obj.SIGNATURBLOCK_DE_DEPRECATED.verifyURL=http://www.signaturpruefung.gv.at
-
-# WAI
-sig_obj.SIGNATURBLOCK_DE_DEPRECATED.sigLogoAltText=Abgebildet ist eine Standard-Signaturbildmarke.
-
-sig_obj.SIGNATURBLOCK_DE_DEPRECATED.value.SIG_META=Signaturpruefung unter: http://www.signaturpruefung.gv.at
-sig_obj.SIGNATURBLOCK_DE_DEPRECATED.value.SIG_LABEL=./images/signatur-logo_de.png
-
-#---------------------- MAIN TABLE -------------------------
-sig_obj.SIGNATURBLOCK_DE_DEPRECATED.table.main.1=SIG_VALUE-cv
-sig_obj.SIGNATURBLOCK_DE_DEPRECATED.table.main.2=SIG_LABEL-i|TABLE-info
-sig_obj.SIGNATURBLOCK_DE_DEPRECATED.table.main.3=SIG_META-cv
-
-sig_obj.SIGNATURBLOCK_DE_DEPRECATED.table.main.ColsWidth=1 6
-sig_obj.SIGNATURBLOCK_DE_DEPRECATED.table.main.Style.bgcolor=255 255 255
-sig_obj.SIGNATURBLOCK_DE_DEPRECATED.table.main.Style.padding=4
-sig_obj.SIGNATURBLOCK_DE_DEPRECATED.table.main.Style.border=0.1
-sig_obj.SIGNATURBLOCK_DE_DEPRECATED.table.main.Style.halign=center
-sig_obj.SIGNATURBLOCK_DE_DEPRECATED.table.main.Style.valuehalign=left
-sig_obj.SIGNATURBLOCK_DE_DEPRECATED.table.main.Style.valign=middle
-sig_obj.SIGNATURBLOCK_DE_DEPRECATED.table.main.Style.imagevalign=middle
-sig_obj.SIGNATURBLOCK_DE_DEPRECATED.table.main.Style.font=HELVETICA,8,BOLD
-sig_obj.SIGNATURBLOCK_DE_DEPRECATED.table.main.Style.valuefont=COURIER,8,NORMAL
-
-#---------------------- INFO TABLE -------------------------
-sig_obj.SIGNATURBLOCK_DE_DEPRECATED.table.info.ColsWidth=1 4
-#sig_obj.SIGNATURBLOCK_DE_DEPRECATED.table.info.1=SIG_NAME-cv
-sig_obj.SIGNATURBLOCK_DE_DEPRECATED.table.info.1=SIG_SUBJECT-cv
-sig_obj.SIGNATURBLOCK_DE_DEPRECATED.table.info.2=SIG_DATE-cv
-sig_obj.SIGNATURBLOCK_DE_DEPRECATED.table.info.3=SIG_ISSUER-cv
-sig_obj.SIGNATURBLOCK_DE_DEPRECATED.table.info.4=SIG_NUMBER-cv
-sig_obj.SIGNATURBLOCK_DE_DEPRECATED.table.info.5=SIG_KZ-cv
-sig_obj.SIGNATURBLOCK_DE_DEPRECATED.table.info.6=SIG_ID-cv
-
-
-
-###################################################################################################
-# PROFIL: Signaturblock (Englisch)
-
-sig_obj.SIGNATURBLOCK_EN_DEPRECATED.description=Standardsignatur Englisch
-
-sig_obj.SIGNATURBLOCK_EN_DEPRECATED.key.SIG_VALUE=Signature Value
-#sig_obj.SIGNATURBLOCK_EN_DEPRECATED.key.SIG_NAME=Signatory
-sig_obj.SIGNATURBLOCK_EN_DEPRECATED.key.SIG_SUBJECT=Signatory
-sig_obj.SIGNATURBLOCK_EN_DEPRECATED.key.SIG_DATE=Date/Time-UTC
-sig_obj.SIGNATURBLOCK_EN_DEPRECATED.key.SIG_ISSUER=Issuer-Certificate
-sig_obj.SIGNATURBLOCK_EN_DEPRECATED.key.SIG_NUMBER=Serial-No.
-sig_obj.SIGNATURBLOCK_EN_DEPRECATED.key.SIG_KZ=Method
-sig_obj.SIGNATURBLOCK_EN_DEPRECATED.key.SIG_ID=Parameter
-sig_obj.SIGNATURBLOCK_EN_DEPRECATED.key.SIG_META=Verification
-
-sig_obj.SIGNATURBLOCK_EN_DEPRECATED.value.SIG_SUBJECT=${subject.T != null ? (subject.T + " ") : ""}${subject.CN}
-
-sig_obj.SIGNATURBLOCK_EN_DEPRECATED.pos=f:80
-sig_obj.SIGNATURBLOCK_EN_DEPRECATED.adobeSignFieldValue=PDF-AS Signature
-sig_obj.SIGNATURBLOCK_EN_DEPRECATED.adobeSignReasonValue=Information about the verification can be found at http://www.signature-verification.gv.at
-sig_obj.SIGNATURBLOCK_EN_DEPRECATED.verifyURL=http://www.signature-verification.gv.at
-
-# WAI
-sig_obj.SIGNATURBLOCK_EN_DEPRECATED.sigLogoAltText=A standard signature logo is shown.
-
-sig_obj.SIGNATURBLOCK_EN_DEPRECATED.value.SIG_META=Signature verification at: http://www.signature-verification.gv.at
-sig_obj.SIGNATURBLOCK_EN_DEPRECATED.value.SIG_LABEL=./images/signatur-logo_en.png
-
-#---------------------- MAIN TABLE -------------------------
-sig_obj.SIGNATURBLOCK_EN_DEPRECATED.table.main.1=SIG_VALUE-cv
-sig_obj.SIGNATURBLOCK_EN_DEPRECATED.table.main.2=SIG_LABEL-i|TABLE-info
-sig_obj.SIGNATURBLOCK_EN_DEPRECATED.table.main.3=SIG_META-cv
-
-sig_obj.SIGNATURBLOCK_EN_DEPRECATED.table.main.ColsWidth=1 6
-sig_obj.SIGNATURBLOCK_EN_DEPRECATED.table.main.Style.bgcolor=255 255 255
-sig_obj.SIGNATURBLOCK_EN_DEPRECATED.table.main.Style.padding=4
-sig_obj.SIGNATURBLOCK_EN_DEPRECATED.table.main.Style.border=0.1
-sig_obj.SIGNATURBLOCK_EN_DEPRECATED.table.main.Style.halign=center
-sig_obj.SIGNATURBLOCK_EN_DEPRECATED.table.main.Style.valuehalign=left
-sig_obj.SIGNATURBLOCK_EN_DEPRECATED.table.main.Style.valign=middle
-sig_obj.SIGNATURBLOCK_EN_DEPRECATED.table.main.Style.imagevalign=middle
-sig_obj.SIGNATURBLOCK_EN_DEPRECATED.table.main.Style.font=HELVETICA,8,BOLD
-sig_obj.SIGNATURBLOCK_EN_DEPRECATED.table.main.Style.valuefont=COURIER,8,NORMAL
-
-#---------------------- INFO TABLE -------------------------
-sig_obj.SIGNATURBLOCK_EN_DEPRECATED.table.info.ColsWidth=1 5
-#sig_obj.SIGNATURBLOCK_EN_DEPRECATED.table.info.1=SIG_NAME-cv
-sig_obj.SIGNATURBLOCK_EN_DEPRECATED.table.info.1=SIG_SUBJECT-cv
-sig_obj.SIGNATURBLOCK_EN_DEPRECATED.table.info.2=SIG_DATE-cv
-sig_obj.SIGNATURBLOCK_EN_DEPRECATED.table.info.3=SIG_ISSUER-cv
-sig_obj.SIGNATURBLOCK_EN_DEPRECATED.table.info.4=SIG_NUMBER-cv
-sig_obj.SIGNATURBLOCK_EN_DEPRECATED.table.info.5=SIG_KZ-cv
-sig_obj.SIGNATURBLOCK_EN_DEPRECATED.table.info.6=SIG_ID-cv
-
-
-
-###################################################################################################
-# PROFIL: Amtssignaturblock (Deutsch)
-
-sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.description=Amtssignaturblock-Deutsch
-
-sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.key.SIG_VALUE=Signaturwert
-sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.key.SIG_SUBJECT=Unterzeichner
-sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.key.SIG_DATE=Datum/Zeit-UTC
-sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.key.SIG_ISSUER=Aussteller-Zertifikat
-sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.key.SIG_NUMBER=Serien-Nr.
-sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.key.SIG_KZ=Methode
-sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.key.SIG_ID=Parameter
-sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.key.SIG_META=Prüfinformation
-sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.key.SIG_NOTE=Hinweis
-
-sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.value.SIG_SUBJECT=DEMO Amtssignatur
-
-sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.pos=f:80
-sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.adobeSignFieldValue=PDF-AS Signatur
-sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.adobeSignReasonValue=Informationen zur Prüfung finden Sie unter http://www.signaturpruefung.gv.at
-sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.verifyURL=http://www.signaturpruefung.gv.at
-
-# WAI
-sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.sigLogoAltText=Abgebildet ist eine Standard-Signaturbildmarke.
-
-sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.value.SIG_META=Signaturpruefung unter: http://www.signaturpruefung.gv.at
-sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.value.SIG_LABEL=./images/signatur-logo_de.png
-sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.value.SIG_NOTE=Dieses Dokument wurde amtssigniert. Auch ein Ausdruck dieses Dokuments hat gemäß § 20 E-Government-Gesetz die Beweiskraft einer öffentlichen Urkunde.
-
-#---------------------- MAIN TABLE -------------------------
-sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.table.main.1=SIG_VALUE-cv
-sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.table.main.2=SIG_LABEL-i|TABLE-info
-sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.table.main.3=SIG_META-cv
-sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.table.main.4=SIG_NOTE-cv
-
-sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.table.main.ColsWidth=1 6
-sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.table.main.Style.bgcolor=255 255 255
-sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.table.main.Style.padding=4
-sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.table.main.Style.border=0.1
-sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.table.main.Style.halign=center
-sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.table.main.Style.valuehalign=left
-sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.table.main.Style.valign=middle
-sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.table.main.Style.imagevalign=middle
-sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.table.main.Style.font=HELVETICA,8,BOLD
-sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.table.main.Style.valuefont=COURIER,8,NORMAL
-
-#---------------------- INFO TABLE -------------------------
-sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.table.info.ColsWidth=1 4
-sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.table.info.1=SIG_SUBJECT-cv
-sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.table.info.2=SIG_DATE-cv
-sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.table.info.3=SIG_ISSUER-cv
-sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.table.info.4=SIG_NUMBER-cv
-sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.table.info.5=SIG_KZ-cv
-sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.table.info.6=SIG_ID-cv
-
-
-
-###################################################################################################
-# PROFIL: Amtssignaturblock (Englisch)
-
-sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.description=Amtssignaturblock-Englisch
-
-sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.key.SIG_VALUE=Signature Value
-sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.key.SIG_SUBJECT=Signatory
-sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.key.SIG_DATE=Date/Time-UTC
-sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.key.SIG_ISSUER=Issuer-Certificate
-sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.key.SIG_NUMBER=Serial-No.
-sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.key.SIG_KZ=Method
-sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.key.SIG_ID=Parameter
-sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.key.SIG_META=Verification
-sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.key.SIG_NOTE=Note
-
-sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.value.SIG_SUBJECT=Official Signature DEMO
-
-sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.pos=f:80
-sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.adobeSignFieldValue=PDF-AS Signature
-sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.adobeSignReasonValue=Information about the verification can be found at http://www.signature-verification.gv.at
-sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.verifyURL=http://www.signature-verification.gv.at
-
-# WAI
-sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.sigLogoAltText=A standard signature logo is shown.
-
-sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.value.SIG_META=Signature verification at: http://www.signature-verification.gv.at
-sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.value.SIG_LABEL=./images/signatur-logo_en.png
-sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.value.SIG_NOTE=This document was signed with an official signature. According to § 20 E-Government-Act a printout of this document has the probative value of an official document.
-
-#---------------------- MAIN TABLE -------------------------
-sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.table.main.1=SIG_VALUE-cv
-sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.table.main.2=SIG_LABEL-i|TABLE-info
-sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.table.main.3=SIG_META-cv
-sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.table.main.4=SIG_NOTE-cv
-
-sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.table.main.ColsWidth=1 6
-sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.table.main.Style.bgcolor=255 255 255
-sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.table.main.Style.padding=4
-sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.table.main.Style.border=0.1
-sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.table.main.Style.halign=center
-sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.table.main.Style.valuehalign=left
-sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.table.main.Style.valign=middle
-sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.table.main.Style.imagevalign=middle
-sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.table.main.Style.font=HELVETICA,8,BOLD
-sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.table.main.Style.valuefont=COURIER,8,NORMAL
-
-#---------------------- INFO TABLE -------------------------
-sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.table.info.ColsWidth=1 5
-sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.table.info.1=SIG_SUBJECT-cv
-sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.table.info.2=SIG_DATE-cv
-sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.table.info.3=SIG_ISSUER-cv
-sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.table.info.4=SIG_NUMBER-cv
-sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.table.info.5=SIG_KZ-cv
-sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.table.info.6=SIG_ID-cv
-
-
-###################################################################################################
-# PROFIL: Zusätzlicher Amtssignaturblock (Deutsch) mit neuem Layout
-# Unterzeichner Musteramt
-
-sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.description=Variabler Amtssignaturblock-Deutsch, neues Layout
-
-sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.key.SIG_VALUE=Signaturwert
-sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.key.SIG_SUBJECT=Unterzeichner
-sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.key.SIG_ISSUER=Aussteller-Zertifikat
-sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.key.SIG_NUMBER=Serien-Nr.
-sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.key.SIG_KZ=Methode
-sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.key.SIG_ID=Parameter
-sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.key.SIG_META=Prüfinformation
-sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.key.SIG_NOTE=Hinweis
-sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.key.SIG_DATE=Datum/Zeit-UTC
-
-sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.phlength.SIG_SUBJECT=200
-sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.phlength.SIG_ISSUER=130
-sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.phlength.SIG_NUMBER=30
-sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.phlength.SIG_ID=30
-sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.value.SIG_SUBJECT=Für die Richtigkeit der Ausfertigung:\nMusteramt\nMusterstadt
-sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.moa.sign.KeyIdentifier=MusteramtatrustKey
-
-sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.pos=f:80
-sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.adobeSignFieldValue=PDF-AS Signatur
-sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.adobeSignReasonValue=Informationen zur Prüfung finden Sie unter http://www.signaturpruefung.gv.at
-sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.verifyURL=http://www.signaturpruefung.gv.at
-
-# WAI
-sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.sigLogoAltText=Abgebildet ist eine Standard-Signaturbildmarke.
-
-sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.value.SIG_META=Informationen zur Prüfung der elektronischen Signatur finden Sie unter: http://www.signaturpruefung.gv.at\nInformationen zur Prüfung des Ausdrucks finden Sie unter: https://moa.tugraz.at
-sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.value.SIG_LABEL=./images/signatur-logo_de.png
-sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.value.SIG_NOTE=Dieses Dokument wurde amtssigniert. Auch ein Ausdruck dieses Dokuments hat gemäß § 20 E-Government-Gesetz die Beweiskraft einer öffentlichen Urkunde.
-
-#---------------------- MAIN TABLE -------------------------
-sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.table.main.1=SIG_VALUE-cv
-sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.table.main.2=SIG_LABEL-i|TABLE-info
-sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.table.main.3=SIG_META-cv
-sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.table.main.4=SIG_NOTE-cv
-sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.table.main.5=SIG_DATE-cv
-
-sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.table.main.ColsWidth=1 6
-sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.table.main.Style.bgcolor=255 255 255
-sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.table.main.Style.padding=4
-sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.table.main.Style.border=0.1
-sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.table.main.Style.halign=center
-sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.table.main.Style.valuehalign=left
-sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.table.main.Style.valign=top
-sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.table.main.Style.imagevalign=middle
-sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.table.main.Style.font=HELVETICA,8,BOLD
-sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.table.main.Style.valuefont=COURIER,8,NORMAL
-
-#---------------------- INFO TABLE -------------------------
-sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.table.info.ColsWidth=1 4
-sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.table.info.1=SIG_SUBJECT-cv
-sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.table.info.2=SIG_ISSUER-cv
-sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.table.info.3=SIG_NUMBER-cv
-sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.table.info.4=SIG_KZ-cv
-sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.table.info.5=SIG_ID-cv
-
-#####################################################
-
-
-#############################################
-# start additional LDAP-Mappings
-# note: ldap_mapping.xxx.serial_attr may be omitted if value is "eidCertificateSerialNumber"
-
-# A-Trust Sample
-#ldap_mapping.asign_prem_sig01.issuer_name=CN=a-sign-Premium-Sig-01,OU=a-sign-Premium-Sig-01,O=A-Trust Ges. f. Sicherheitssysteme im elektr. Datenverkehr GmbH,C=AT
-#ldap_mapping.asign_prem_sig01.url=ldap://ldap.a-trust.at/ou=a-sign-Premium-Sig-01,o=A-Trust,c=at
-#ldap_mapping.asign_prem_sig01.serial_attr=eidCertificateSerialNumber
-
-# end LDAP-Mappings
-#############################################
-
+# (1) sig_obj.PROFIL.value.SIG_SUBJECT= ${subject.CN}${subject.O != null ? ("\n" + subject.O) : ""}
+# (2) sig_obj.PROFIL.value.SIG_SUBJECT= ${subject.T \!\= null ? (subject.T + " ") \: ""}${subject.CN}
+#
+# Beispiel (1) gibt die Organisation des Unterzeichners an, Beispiel (2) Titel und Name.
+#
+# Die Notation ${..} ermoeglicht die dynamische Auswertung eines Ausdrucks. Verfuegbar sind "subject"
+# und "issuer" und die im Zertifikat-DN vorhandenen RDNs.
+#
+# Achtung:
+# Fuer die binaere Signatur muss die maximale Anzahl zu erwartender Zeichen in der globalen Einstellung
+# defaults.phlength.SIG_SUBJECT=...
+# bzw. profileweise via
+# sig_obj.PROFIL.phlength.SIG_SUBJECT=...
+# festgelegt werden.
+defaults.phlength.SIG_SUBJECT=128
+
+
+# Bietet die Moeglichkeit, eine fortgeschrittene Konfiguration einzubinden.
+include.advancedconfig = advancedconfig.properties
+
+
+#####################################################################################################
+# Unterstuetzte Signaturprofile
+# Hinweise zum Include-Mechanismus:
+# - Pfade sind relativ zu dieser Konfigurationsdatei zu setzen.
+# - Es koennen Wildcards verwendet werden.
+# z.B. include = profiles/*AMTSSIGNATURBLOCK*.properties
+# - Bei mehrfachen Include-Anweisungen ist darauf zu achten, dass die Include-Keys eindeutig sind.
+# Dazu sollte ein beliebiger Bezeichner an "include." angehaengt werden.
+# z.B. include.standard = profiles/SIGNATURBLOCK*.properties
+# include.amtssignatur = profiles/*AMTSSIGNATUR*.properties
+# - Include-Keys werden lexikografisch sortiert, bevor die Include-Anweisungen ausgefuehrt werden.
+# Dadurch kann eine Reihenfolge der Includes vorgegeben werden.
+#
+# Anm.: profiles/SIGNATURBLOCK_DE.properties enthaelt Erlaeuterungen in Hinblick auf die
+# Konfiguration einzelner Profile.
+
+# Standard-Profile
+include.01 = profiles/INVISIBLE.properties
+include.02 = profiles/SIGNATURBLOCK_DE.properties
+include.03 = profiles/SIGNATURBLOCK_DE_DEPRECATED.properties
+include.04 = profiles/SIGNATURBLOCK_DE_NOTE.properties
+include.05 = profiles/SIGNATURBLOCK_DE_PDFA.properties
+include.06 = profiles/SIGNATURBLOCK_DE_PDFA_NOTE.properties
+include.07 = profiles/SIGNATURBLOCK_EN.properties
+include.08 = profiles/SIGNATURBLOCK_EN_DEPRECATED.properties
+include.09 = profiles/SIGNATURBLOCK_EN_NOTE.properties
+include.10 = profiles/SIGNATURBLOCK_EN_PDFA.properties
+include.11 = profiles/SIGNATURBLOCK_EN_PDFA_NOTE.properties
+include.12 = profiles/SIGNATURBLOCK_MINIMAL_DE.properties
+include.13 = profiles/SIGNATURBLOCK_MINIMAL_EN.properties
+include.14 = profiles/SIGNATURBLOCK_SMALL_DE.properties
+include.15 = profiles/SIGNATURBLOCK_SMALL_DE_NOTE.properties
+include.16 = profiles/SIGNATURBLOCK_SMALL_EN.properties
+include.17 = profiles/SIGNATURBLOCK_SMALL_EN_NOTE.properties
+
+# Amtssignatur-Profile
+include.18 = profiles/AMTSSIGNATURBLOCK_DE.properties
+include.19 = profiles/AMTSSIGNATURBLOCK_DE_DEPRECATED.properties
+include.20 = profiles/AMTSSIGNATURBLOCK_EN.properties
+include.21 = profiles/AMTSSIGNATURBLOCK_EN_DEPRECATED.properties
+include.22 = profiles/VARIABLER_AMTSSIGNATURBLOCK_DE.properties
+
+# BAIK-Profile
+include.23 = profiles/BAIK_ARCHIV_SIGNATUR.properties
+include.24 = profiles/BAIK_URKUNDE_SIGNATUR.properties
+
+# Legt das Standard-Signaturprofil fest
+sig_obj.type.default=SIGNATURBLOCK_DE
diff --git a/work/cfg/log4j.properties b/work/cfg/log4j.properties
index f4e00e6..0c34a04 100644
--- a/work/cfg/log4j.properties
+++ b/work/cfg/log4j.properties
@@ -3,8 +3,10 @@ log4j.rootLogger = WARN, CONSOLE, ROLLINGFILE
# DETAIL LEVELS
log4j.logger.at.gv.egiz.pdfas = INFO
log4j.logger.at.knowcenter = INFO
-log4j.logger.at.gv.egiz.pdfas.performance = DEBUG
+log4j.logger.org.pdfbox = INFO
log4j.logger.org.apache.commons.httpclient.HttpMethodBase = ERROR
+# Statistical logger
+#log4j.logger.statistic = INFO, STATISTIC
# CONSOLE
log4j.appender.CONSOLE = org.apache.log4j.ConsoleAppender
@@ -20,3 +22,11 @@ log4j.appender.ROLLINGFILE.MaxFileSize = 10240KB
log4j.appender.ROLLINGFILE.MaxBackupIndex = 1
log4j.appender.ROLLINGFILE.layout = org.apache.log4j.PatternLayout
log4j.appender.ROLLINGFILE.layout.ConversionPattern = [%-5p@%d{dd.MM.yyyy HH:mm:ss}] %c:%M:%L - %m%n
+
+# STATISTIC
+log4j.appender.STATISTIC = org.apache.log4j.RollingFileAppender
+log4j.appender.STATISTIC.File = ${pdf-as.work-dir}/logs/pdf-as-statistic.csv
+log4j.appender.STATISTIC.MaxFileSize = 10240KB
+log4j.appender.STATISTIC.MaxBackupIndex = 9
+log4j.appender.STATISTIC.layout = org.apache.log4j.PatternLayout
+log4j.appender.STATISTIC.layout.ConversionPattern = %d{dd.MM.yyyy HH:mm:ss};%m%n
diff --git a/work/cfg/profiles/AMTSSIGNATURBLOCK_DE.properties b/work/cfg/profiles/AMTSSIGNATURBLOCK_DE.properties
new file mode 100644
index 0000000..de9f3e0
--- /dev/null
+++ b/work/cfg/profiles/AMTSSIGNATURBLOCK_DE.properties
@@ -0,0 +1,56 @@
+###################################################################################################
+# PROFIL: Amtssignaturblock (Deutsch) mit neuem Layout
+
+sig_obj.AMTSSIGNATURBLOCK_DE.description=Amtssignaturblock-Deutsch, neues Layout
+
+sig_obj.types.AMTSSIGNATURBLOCK_DE=on
+
+sig_obj.AMTSSIGNATURBLOCK_DE.key.SIG_VALUE=Signaturwert
+sig_obj.AMTSSIGNATURBLOCK_DE.key.SIG_SUBJECT=Unterzeichner
+sig_obj.AMTSSIGNATURBLOCK_DE.key.SIG_ISSUER=Aussteller-Zertifikat
+sig_obj.AMTSSIGNATURBLOCK_DE.key.SIG_NUMBER=Serien-Nr.
+sig_obj.AMTSSIGNATURBLOCK_DE.key.SIG_KZ=Methode
+sig_obj.AMTSSIGNATURBLOCK_DE.key.SIG_ID=Parameter
+sig_obj.AMTSSIGNATURBLOCK_DE.key.SIG_META=Pr\u00fcfinformation
+sig_obj.AMTSSIGNATURBLOCK_DE.key.SIG_NOTE=Hinweis
+sig_obj.AMTSSIGNATURBLOCK_DE.key.SIG_DATE=Datum/Zeit-UTC
+
+sig_obj.AMTSSIGNATURBLOCK_DE.value.SIG_SUBJECT=DEMO Amtssignatur
+
+sig_obj.AMTSSIGNATURBLOCK_DE.pos=f:80
+sig_obj.AMTSSIGNATURBLOCK_DE.adobeSignFieldValue=PDF-AS Signatur
+sig_obj.AMTSSIGNATURBLOCK_DE.adobeSignReasonValue=Signaturpruefung unter http://www.signaturpruefung.gv.at
+sig_obj.AMTSSIGNATURBLOCK_DE.verifyURL=http://www.signaturpruefung.gv.at
+
+# WAI
+sig_obj.AMTSSIGNATURBLOCK_DE.sigLogoAltText=Abgebildet ist eine Standard-Signaturbildmarke.
+
+sig_obj.AMTSSIGNATURBLOCK_DE.value.SIG_META=Signaturpruefung unter: http://www.signaturpruefung.gv.at
+sig_obj.AMTSSIGNATURBLOCK_DE.value.SIG_LABEL=./images/signatur-logo_de.png
+sig_obj.AMTSSIGNATURBLOCK_DE.value.SIG_NOTE=Dieses Dokument wurde amtssigniert. Auch ein Ausdruck dieses Dokuments hat gem\u00e4\u00df \u00a7 20 E-Government-Gesetz die Beweiskraft einer \u00f6ffentlichen Urkunde.
+
+#---------------------- MAIN TABLE -------------------------
+sig_obj.AMTSSIGNATURBLOCK_DE.table.main.1=SIG_VALUE-cv
+sig_obj.AMTSSIGNATURBLOCK_DE.table.main.2=SIG_LABEL-i|TABLE-info
+sig_obj.AMTSSIGNATURBLOCK_DE.table.main.3=SIG_META-cv
+sig_obj.AMTSSIGNATURBLOCK_DE.table.main.4=SIG_NOTE-cv
+sig_obj.AMTSSIGNATURBLOCK_DE.table.main.5=SIG_DATE-cv
+
+sig_obj.AMTSSIGNATURBLOCK_DE.table.main.ColsWidth=1 6
+sig_obj.AMTSSIGNATURBLOCK_DE.table.main.Style.bgcolor=255 255 255
+sig_obj.AMTSSIGNATURBLOCK_DE.table.main.Style.padding=4
+sig_obj.AMTSSIGNATURBLOCK_DE.table.main.Style.border=0.1
+sig_obj.AMTSSIGNATURBLOCK_DE.table.main.Style.halign=center
+sig_obj.AMTSSIGNATURBLOCK_DE.table.main.Style.valuehalign=left
+sig_obj.AMTSSIGNATURBLOCK_DE.table.main.Style.valign=top
+sig_obj.AMTSSIGNATURBLOCK_DE.table.main.Style.imagevalign=middle
+sig_obj.AMTSSIGNATURBLOCK_DE.table.main.Style.font=HELVETICA,8,BOLD
+sig_obj.AMTSSIGNATURBLOCK_DE.table.main.Style.valuefont=COURIER,8,NORMAL
+
+#---------------------- INFO TABLE -------------------------
+sig_obj.AMTSSIGNATURBLOCK_DE.table.info.ColsWidth=1 4
+sig_obj.AMTSSIGNATURBLOCK_DE.table.info.1=SIG_SUBJECT-cv
+sig_obj.AMTSSIGNATURBLOCK_DE.table.info.2=SIG_ISSUER-cv
+sig_obj.AMTSSIGNATURBLOCK_DE.table.info.3=SIG_NUMBER-cv
+sig_obj.AMTSSIGNATURBLOCK_DE.table.info.4=SIG_KZ-cv
+sig_obj.AMTSSIGNATURBLOCK_DE.table.info.5=SIG_ID-cv
diff --git a/work/cfg/profiles/AMTSSIGNATURBLOCK_DE_DEPRECATED.properties b/work/cfg/profiles/AMTSSIGNATURBLOCK_DE_DEPRECATED.properties
new file mode 100644
index 0000000..1cf0b65
--- /dev/null
+++ b/work/cfg/profiles/AMTSSIGNATURBLOCK_DE_DEPRECATED.properties
@@ -0,0 +1,58 @@
+###################################################################################################
+# PROFIL: Amtssignaturblock (Deutsch)
+
+sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.description=Amtssignaturblock-Deutsch
+
+# Das Profil gilt als veraltet ("deprecated"). Deshalb wird es nur noch fuer Signaturpruefung
+# zugelassen ("verify_only"); fuer Signaturen kann es nicht mehr verwendet werden.
+sig_obj.types.AMTSSIGNATURBLOCK_DE_DEPRECATED=verify_only
+
+sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.key.SIG_VALUE=Signaturwert
+sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.key.SIG_SUBJECT=Unterzeichner
+sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.key.SIG_DATE=Datum/Zeit-UTC
+sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.key.SIG_ISSUER=Aussteller-Zertifikat
+sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.key.SIG_NUMBER=Serien-Nr.
+sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.key.SIG_KZ=Methode
+sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.key.SIG_ID=Parameter
+sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.key.SIG_META=Pr\u00fcfinformation
+sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.key.SIG_NOTE=Hinweis
+
+sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.value.SIG_SUBJECT=DEMO Amtssignatur
+
+sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.pos=f:80
+sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.adobeSignFieldValue=PDF-AS Signatur
+sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.adobeSignReasonValue=Informationen zur Pr\u00fcfung finden Sie unter http://www.signaturpruefung.gv.at
+sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.verifyURL=http://www.signaturpruefung.gv.at
+
+# WAI
+sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.sigLogoAltText=Abgebildet ist eine Standard-Signaturbildmarke.
+
+sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.value.SIG_META=Signaturpruefung unter: http://www.signaturpruefung.gv.at
+sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.value.SIG_LABEL=./images/signatur-logo_de.png
+sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.value.SIG_NOTE=Dieses Dokument wurde amtssigniert. Auch ein Ausdruck dieses Dokuments hat gem\u00e4\u00df \u00a7 20 E-Government-Gesetz die Beweiskraft einer \u00f6ffentlichen Urkunde.
+
+#---------------------- MAIN TABLE -------------------------
+sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.table.main.1=SIG_VALUE-cv
+sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.table.main.2=SIG_LABEL-i|TABLE-info
+sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.table.main.3=SIG_META-cv
+sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.table.main.4=SIG_NOTE-cv
+
+sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.table.main.ColsWidth=1 6
+sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.table.main.Style.bgcolor=255 255 255
+sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.table.main.Style.padding=4
+sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.table.main.Style.border=0.1
+sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.table.main.Style.halign=center
+sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.table.main.Style.valuehalign=left
+sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.table.main.Style.valign=middle
+sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.table.main.Style.imagevalign=middle
+sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.table.main.Style.font=HELVETICA,8,BOLD
+sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.table.main.Style.valuefont=COURIER,8,NORMAL
+
+#---------------------- INFO TABLE -------------------------
+sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.table.info.ColsWidth=1 4
+sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.table.info.1=SIG_SUBJECT-cv
+sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.table.info.2=SIG_DATE-cv
+sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.table.info.3=SIG_ISSUER-cv
+sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.table.info.4=SIG_NUMBER-cv
+sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.table.info.5=SIG_KZ-cv
+sig_obj.AMTSSIGNATURBLOCK_DE_DEPRECATED.table.info.6=SIG_ID-cv
diff --git a/work/cfg/profiles/AMTSSIGNATURBLOCK_EN.properties b/work/cfg/profiles/AMTSSIGNATURBLOCK_EN.properties
new file mode 100644
index 0000000..b5b5004
--- /dev/null
+++ b/work/cfg/profiles/AMTSSIGNATURBLOCK_EN.properties
@@ -0,0 +1,57 @@
+###################################################################################################
+# PROFIL: Amtssignaturblock (Englisch) mit neuem Layout
+
+sig_obj.AMTSSIGNATURBLOCK_EN.description=Amtssignaturblock-Englisch, neues Layout
+
+sig_obj.types.AMTSSIGNATURBLOCK_EN=on
+
+sig_obj.AMTSSIGNATURBLOCK_EN.key.SIG_VALUE=Signature Value
+sig_obj.AMTSSIGNATURBLOCK_EN.key.SIG_SUBJECT=Signatory
+sig_obj.AMTSSIGNATURBLOCK_EN.key.SIG_ISSUER=Issuer-Certificate
+sig_obj.AMTSSIGNATURBLOCK_EN.key.SIG_NUMBER=Serial-No.
+sig_obj.AMTSSIGNATURBLOCK_EN.key.SIG_KZ=Method
+sig_obj.AMTSSIGNATURBLOCK_EN.key.SIG_ID=Parameter
+sig_obj.AMTSSIGNATURBLOCK_EN.key.SIG_META=Verification
+sig_obj.AMTSSIGNATURBLOCK_EN.key.SIG_NOTE=Note
+sig_obj.AMTSSIGNATURBLOCK_EN.key.SIG_DATE=Date/Time-UTC
+
+sig_obj.AMTSSIGNATURBLOCK_EN.value.SIG_SUBJECT=Official Signature DEMO
+
+sig_obj.AMTSSIGNATURBLOCK_EN.pos=f:80
+sig_obj.AMTSSIGNATURBLOCK_EN.adobeSignFieldValue=PDF-AS Signature
+sig_obj.AMTSSIGNATURBLOCK_EN.adobeSignReasonValue=Signature verification at: http://www.signature-verification.gv.at
+sig_obj.AMTSSIGNATURBLOCK_EN.verifyURL=http://www.signature-verification.gv.at
+
+# WAI
+sig_obj.AMTSSIGNATURBLOCK_EN.sigLogoAltText=A standard signature logo is shown.
+
+sig_obj.AMTSSIGNATURBLOCK_EN.value.SIG_META=Signature verification at: http://www.signature-verification.gv.at
+sig_obj.AMTSSIGNATURBLOCK_EN.value.SIG_LABEL=./images/signatur-logo_en.png
+sig_obj.AMTSSIGNATURBLOCK_EN.value.SIG_NOTE=This document was signed with an official signature. According to \u00a7 20 E-Government-Act a printout of this document has the probative value of an official document.
+
+
+#---------------------- MAIN TABLE -------------------------
+sig_obj.AMTSSIGNATURBLOCK_EN.table.main.1=SIG_VALUE-cv
+sig_obj.AMTSSIGNATURBLOCK_EN.table.main.2=SIG_LABEL-i|TABLE-info
+sig_obj.AMTSSIGNATURBLOCK_EN.table.main.3=SIG_META-cv
+sig_obj.AMTSSIGNATURBLOCK_EN.table.main.4=SIG_NOTE-cv
+sig_obj.AMTSSIGNATURBLOCK_EN.table.main.5=SIG_DATE-cv
+
+sig_obj.AMTSSIGNATURBLOCK_EN.table.main.ColsWidth=1 6
+sig_obj.AMTSSIGNATURBLOCK_EN.table.main.Style.bgcolor=255 255 255
+sig_obj.AMTSSIGNATURBLOCK_EN.table.main.Style.padding=4
+sig_obj.AMTSSIGNATURBLOCK_EN.table.main.Style.border=0.1
+sig_obj.AMTSSIGNATURBLOCK_EN.table.main.Style.halign=center
+sig_obj.AMTSSIGNATURBLOCK_EN.table.main.Style.valuehalign=left
+sig_obj.AMTSSIGNATURBLOCK_EN.table.main.Style.valign=top
+sig_obj.AMTSSIGNATURBLOCK_EN.table.main.Style.imagevalign=middle
+sig_obj.AMTSSIGNATURBLOCK_EN.table.main.Style.font=HELVETICA,8,BOLD
+sig_obj.AMTSSIGNATURBLOCK_EN.table.main.Style.valuefont=COURIER,8,NORMAL
+
+#---------------------- INFO TABLE -------------------------
+sig_obj.AMTSSIGNATURBLOCK_EN.table.info.ColsWidth=1 5
+sig_obj.AMTSSIGNATURBLOCK_EN.table.info.1=SIG_SUBJECT-cv
+sig_obj.AMTSSIGNATURBLOCK_EN.table.info.2=SIG_ISSUER-cv
+sig_obj.AMTSSIGNATURBLOCK_EN.table.info.3=SIG_NUMBER-cv
+sig_obj.AMTSSIGNATURBLOCK_EN.table.info.4=SIG_KZ-cv
+sig_obj.AMTSSIGNATURBLOCK_EN.table.info.5=SIG_ID-cv
diff --git a/work/cfg/profiles/AMTSSIGNATURBLOCK_EN_DEPRECATED.properties b/work/cfg/profiles/AMTSSIGNATURBLOCK_EN_DEPRECATED.properties
new file mode 100644
index 0000000..800254b
--- /dev/null
+++ b/work/cfg/profiles/AMTSSIGNATURBLOCK_EN_DEPRECATED.properties
@@ -0,0 +1,58 @@
+###################################################################################################
+# PROFIL: Amtssignaturblock (Englisch)
+
+sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.description=Amtssignaturblock-Englisch
+
+# Das Profil gilt als veraltet ("deprecated"). Deshalb wird es nur noch fuer Signaturpruefung
+# zugelassen ("verify_only"); fuer Signaturen kann es nicht mehr verwendet werden.
+sig_obj.types.AMTSSIGNATURBLOCK_EN_DEPRECATED=verify_only
+
+sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.key.SIG_VALUE=Signature Value
+sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.key.SIG_SUBJECT=Signatory
+sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.key.SIG_DATE=Date/Time-UTC
+sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.key.SIG_ISSUER=Issuer-Certificate
+sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.key.SIG_NUMBER=Serial-No.
+sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.key.SIG_KZ=Method
+sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.key.SIG_ID=Parameter
+sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.key.SIG_META=Verification
+sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.key.SIG_NOTE=Note
+
+sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.value.SIG_SUBJECT=Official Signature DEMO
+
+sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.pos=f:80
+sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.adobeSignFieldValue=PDF-AS Signature
+sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.adobeSignReasonValue=Information about the verification can be found at http://www.signature-verification.gv.at
+sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.verifyURL=http://www.signature-verification.gv.at
+
+# WAI
+sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.sigLogoAltText=A standard signature logo is shown.
+
+sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.value.SIG_META=Signature verification at: http://www.signature-verification.gv.at
+sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.value.SIG_LABEL=./images/signatur-logo_en.png
+sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.value.SIG_NOTE=This document was signed with an official signature. According to \u00a7 20 E-Government-Act a printout of this document has the probative value of an official document.
+
+#---------------------- MAIN TABLE -------------------------
+sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.table.main.1=SIG_VALUE-cv
+sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.table.main.2=SIG_LABEL-i|TABLE-info
+sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.table.main.3=SIG_META-cv
+sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.table.main.4=SIG_NOTE-cv
+
+sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.table.main.ColsWidth=1 6
+sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.table.main.Style.bgcolor=255 255 255
+sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.table.main.Style.padding=4
+sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.table.main.Style.border=0.1
+sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.table.main.Style.halign=center
+sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.table.main.Style.valuehalign=left
+sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.table.main.Style.valign=middle
+sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.table.main.Style.imagevalign=middle
+sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.table.main.Style.font=HELVETICA,8,BOLD
+sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.table.main.Style.valuefont=COURIER,8,NORMAL
+
+#---------------------- INFO TABLE -------------------------
+sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.table.info.ColsWidth=1 5
+sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.table.info.1=SIG_SUBJECT-cv
+sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.table.info.2=SIG_DATE-cv
+sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.table.info.3=SIG_ISSUER-cv
+sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.table.info.4=SIG_NUMBER-cv
+sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.table.info.5=SIG_KZ-cv
+sig_obj.AMTSSIGNATURBLOCK_EN_DEPRECATED.table.info.6=SIG_ID-cv
diff --git a/work/cfg/profiles/BAIK_ARCHIV_SIGNATUR.properties b/work/cfg/profiles/BAIK_ARCHIV_SIGNATUR.properties
new file mode 100644
index 0000000..54298bc
--- /dev/null
+++ b/work/cfg/profiles/BAIK_ARCHIV_SIGNATUR.properties
@@ -0,0 +1,69 @@
+###################################################################################################
+# PROFIL: BAIK Archivsignatur
+
+sig_obj.BAIK_ARCHIV_SIGNATUR.description=BAIK Archivsignatur
+
+sig_obj.types.BAIK_ARCHIV_SIGNATUR=on
+
+# enable/disable BAIK support for this profile
+sig_obj.BAIK_ARCHIV_SIGNATUR.key.SIG_BAIK_ENABLED=true
+sig_obj.BAIK_ARCHIV_SIGNATUR.key.SIG_PDFA1B_VALID=true
+
+sig_obj.BAIK_ARCHIV_SIGNATUR.key.SIG_VALUE=Signaturwert
+sig_obj.BAIK_ARCHIV_SIGNATUR.key.SIG_SIG_LABEL=Signator
+sig_obj.BAIK_ARCHIV_SIGNATUR.key.SIG_DATE=Signaturdatum
+sig_obj.BAIK_ARCHIV_SIGNATUR.key.SIG_ISSUER=Zertifizierungsdienst
+sig_obj.BAIK_ARCHIV_SIGNATUR.key.SIG_NUMBER=Seriennummer
+sig_obj.BAIK_ARCHIV_SIGNATUR.key.SIG_ALG=Algorithmus
+sig_obj.BAIK_ARCHIV_SIGNATUR.key.SIG_KZ=Methode
+#sig_obj.BAIK_ARCHIV_SIGNATUR.key.SIG_ID=Parameter
+sig_obj.BAIK_ARCHIV_SIGNATUR.key.SIG_META=Hinweis
+sig_obj.BAIK_ARCHIV_SIGNATUR.key.SIG_TITLE=ELEKTRONISCHE ARCHIVSIGNATUR
+
+sig_obj.BAIK_ARCHIV_SIGNATUR.pos=f:80
+sig_obj.BAIK_ARCHIV_SIGNATUR.adobeSignFieldValue=ELEKTRONISCHE ARCHIVSIGNATUR
+
+# WAI
+sig_obj.BAIK_ARCHIV_SIGNATUR.sigLogoAltText=Abgebildet ist eine Signaturbildmarke mit Bundesadler.
+
+sig_obj.BAIK_ARCHIV_SIGNATUR.value.SIG_META=Dokumentenformat: ${iui.pdfVersion}
+sig_obj.BAIK_ARCHIV_SIGNATUR.value.SIG_LABEL=./images/Baik_Archiv.gif
+sig_obj.BAIK_ARCHIV_SIGNATUR.value.SIG_TITLE=ELEKTRONISCHE ARCHIVSIGNATUR
+
+sig_obj.BAIK_ARCHIV_SIGNATUR.adobeSignFieldValue=Archivsignatur
+sig_obj.BAIK_ARCHIV_SIGNATUR.adobeSignText.binary=Archivsignatur der BAIK
+sig_obj.BAIK_ARCHIV_SIGNATUR.verifyURL=http://www.signaturpruefung.gv.at
+
+sig_obj.BAIK_ARCHIV_SIGNATUR.phlength.SIG_META=50
+
+sig_obj.BAIK_ARCHIV_SIGNATUR.value.SIG_SIG_LABEL=BAIK-Archiv\n\nUrkundenarchiv der Bundeskammer f\u00fcr Architekten und Ingenieurskonsulenten
+
+#---------------------- MAIN TABLE -------------------------
+sig_obj.BAIK_ARCHIV_SIGNATUR.table.main.1=SIG_TITLE-v
+sig_obj.BAIK_ARCHIV_SIGNATUR.table.main.2=SIG_VALUE-cv
+sig_obj.BAIK_ARCHIV_SIGNATUR.table.main.3=SIG_LABEL-i|TABLE-info
+sig_obj.BAIK_ARCHIV_SIGNATUR.table.main.4=SIG_META-cv
+
+sig_obj.BAIK_ARCHIV_SIGNATUR.table.main.ColsWidth=1 5
+sig_obj.BAIK_ARCHIV_SIGNATUR.table.main.Style.bgcolor=161 198 252
+sig_obj.BAIK_ARCHIV_SIGNATUR.table.main.Style.padding=4
+sig_obj.BAIK_ARCHIV_SIGNATUR.table.main.Style.border=0.1
+sig_obj.BAIK_ARCHIV_SIGNATUR.table.main.Style.halign=center
+sig_obj.BAIK_ARCHIV_SIGNATUR.table.main.Style.valuehalign=left
+sig_obj.BAIK_ARCHIV_SIGNATUR.table.main.Style.valign=middle
+sig_obj.BAIK_ARCHIV_SIGNATUR.table.main.Style.imagevalign=middle
+sig_obj.BAIK_ARCHIV_SIGNATUR.table.main.Style.font=TTF:DejaVuSansCondensed.ttf,8
+sig_obj.BAIK_ARCHIV_SIGNATUR.table.main.Style.valuefont=TTF:DejaVuSansCondensed.ttf,8
+
+#---------------------- INFO TABLE -------------------------
+sig_obj.BAIK_ARCHIV_SIGNATUR.table.info.ColsWidth=1 4
+sig_obj.BAIK_ARCHIV_SIGNATUR.table.info.Style.halign=left
+sig_obj.BAIK_ARCHIV_SIGNATUR.table.info.Style.valuehalign=left
+sig_obj.BAIK_ARCHIV_SIGNATUR.table.info.Style.valign=middle
+
+sig_obj.BAIK_ARCHIV_SIGNATUR.table.info.1=SIG_SIG_LABEL-cv
+sig_obj.BAIK_ARCHIV_SIGNATUR.table.info.2=SIG_DATE-cv
+sig_obj.BAIK_ARCHIV_SIGNATUR.table.info.3=SIG_ISSUER-cv
+sig_obj.BAIK_ARCHIV_SIGNATUR.table.info.4=SIG_NUMBER-cv
+sig_obj.BAIK_ARCHIV_SIGNATUR.table.info.5=SIG_ALG-cv
+sig_obj.BAIK_ARCHIV_SIGNATUR.table.info.6=SIG_KZ-cv
diff --git a/work/cfg/profiles/BAIK_URKUNDE_SIGNATUR.properties b/work/cfg/profiles/BAIK_URKUNDE_SIGNATUR.properties
new file mode 100644
index 0000000..52ce6b0
--- /dev/null
+++ b/work/cfg/profiles/BAIK_URKUNDE_SIGNATUR.properties
@@ -0,0 +1,67 @@
+###################################################################################################
+# PROFIL: BAIK Beurkundungssignatur
+
+sig_obj.BAIK_URKUNDE_SIGNATUR.description=BAIK Beurkundungssignatur
+
+sig_obj.types.BAIK_URKUNDE_SIGNATUR=on
+
+# enable/disable BAIK support for this profile
+sig_obj.BAIK_URKUNDE_SIGNATUR.key.SIG_BAIK_ENABLED=true
+sig_obj.BAIK_URKUNDE_SIGNATUR.key.SIG_PDFA1B_VALID=true
+
+sig_obj.BAIK_URKUNDE_SIGNATUR.key.SIG_VALUE=Signaturwert
+sig_obj.BAIK_URKUNDE_SIGNATUR.key.SIG_SIG_LABEL=Signator
+sig_obj.BAIK_URKUNDE_SIGNATUR.key.SIG_DATE=Signaturdatum
+sig_obj.BAIK_URKUNDE_SIGNATUR.key.SIG_ISSUER=Zertifizierungsdienst
+sig_obj.BAIK_URKUNDE_SIGNATUR.key.SIG_NUMBER=Seriennummer
+sig_obj.BAIK_URKUNDE_SIGNATUR.key.SIG_ALG=Algorithmus
+sig_obj.BAIK_URKUNDE_SIGNATUR.key.SIG_KZ=Methode
+#sig_obj.BAIK_URKUNDE_SIGNATUR.key.SIG_ID=Parameter
+sig_obj.BAIK_URKUNDE_SIGNATUR.key.SIG_META=Hinweis:
+sig_obj.BAIK_URKUNDE_SIGNATUR.key.SIG_TITLE=ELEKTRONISCHE BEURKUNDUNGSSIGNATUR
+
+# WAI
+sig_obj.BAIK_URKUNDE_SIGNATUR.sigLogoAltText=Abgebildet ist die Signaturbildmarke eines staatlich befugten und beeideten Ziviltechnikers mit Bundesadler.
+
+sig_obj.BAIK_URKUNDE_SIGNATUR.pos=f:80
+sig_obj.BAIK_URKUNDE_SIGNATUR.adobeSignFieldValue=Urkundensignatur
+sig_obj.BAIK_URKUNDE_SIGNATUR.adobeSignText.binary=Urkundensignatur der BAIK
+sig_obj.BAIK_URKUNDE_SIGNATUR.verifyURL=http://www.signaturpruefung.gv.at
+
+sig_obj.BAIK_URKUNDE_SIGNATUR.value.SIG_META=Dokumentenformat: ${iui.pdfVersion}
+sig_obj.BAIK_URKUNDE_SIGNATUR.value.SIG_LABEL=./images/Baik_Urkunde.gif
+sig_obj.BAIK_URKUNDE_SIGNATUR.value.SIG_TITLE=ELEKTRONISCHE BEURKUNDUNGSSIGNATUR
+
+sig_obj.BAIK_URKUNDE_SIGNATUR.phlength.SIG_META=50
+sig_obj.BAIK_URKUNDE_SIGNATUR.phlength.SIG_SIG_LABEL=200
+
+sig_obj.BAIK_URKUNDE_SIGNATUR.value.SIG_SIG_LABEL=${subject.CN}${subject.O != null ? ("\n" + subject.O) : ""}${subject.L != null ? ("\nKanzleisitz: " + subject.L) : ""}
+
+#---------------------- MAIN TABLE -------------------------
+sig_obj.BAIK_URKUNDE_SIGNATUR.table.main.1=SIG_TITLE-v
+sig_obj.BAIK_URKUNDE_SIGNATUR.table.main.2=SIG_VALUE-cv
+sig_obj.BAIK_URKUNDE_SIGNATUR.table.main.3=SIG_LABEL-i|TABLE-info
+sig_obj.BAIK_URKUNDE_SIGNATUR.table.main.4=SIG_META-cv
+
+sig_obj.BAIK_URKUNDE_SIGNATUR.table.main.ColsWidth=1 5
+sig_obj.BAIK_URKUNDE_SIGNATUR.table.main.Style.bgcolor=248 254 150
+sig_obj.BAIK_URKUNDE_SIGNATUR.table.main.Style.padding=4
+sig_obj.BAIK_URKUNDE_SIGNATUR.table.main.Style.border=0.1
+sig_obj.BAIK_URKUNDE_SIGNATUR.table.main.Style.halign=center
+sig_obj.BAIK_URKUNDE_SIGNATUR.table.main.Style.valuehalign=left
+sig_obj.BAIK_URKUNDE_SIGNATUR.table.main.Style.valign=middle
+sig_obj.BAIK_URKUNDE_SIGNATUR.table.main.Style.imagevalign=middle
+sig_obj.BAIK_URKUNDE_SIGNATUR.table.main.Style.font=TTF:DejaVuSansCondensed.ttf,8
+sig_obj.BAIK_URKUNDE_SIGNATUR.table.main.Style.valuefont=TTF:DejaVuSansCondensed.ttf,8
+
+#---------------------- INFO TABLE -------------------------
+sig_obj.BAIK_URKUNDE_SIGNATUR.table.info.ColsWidth=1 4
+sig_obj.BAIK_URKUNDE_SIGNATUR.table.info.Style.halign=left
+sig_obj.BAIK_URKUNDE_SIGNATUR.table.info.Style.valuehalign=left
+
+sig_obj.BAIK_URKUNDE_SIGNATUR.table.info.1=SIG_SIG_LABEL-cv
+sig_obj.BAIK_URKUNDE_SIGNATUR.table.info.2=SIG_DATE-cv
+sig_obj.BAIK_URKUNDE_SIGNATUR.table.info.3=SIG_ISSUER-cv
+sig_obj.BAIK_URKUNDE_SIGNATUR.table.info.4=SIG_NUMBER-cv
+sig_obj.BAIK_URKUNDE_SIGNATUR.table.info.5=SIG_ALG-cv
+sig_obj.BAIK_URKUNDE_SIGNATUR.table.info.6=SIG_KZ-cv
diff --git a/work/cfg/profiles/INVISIBLE.properties b/work/cfg/profiles/INVISIBLE.properties
new file mode 100644
index 0000000..ad2b6a5
--- /dev/null
+++ b/work/cfg/profiles/INVISIBLE.properties
@@ -0,0 +1,14 @@
+###################################################################################################
+# PROFIL: Unsichtbarer Signaturblock
+
+sig_obj.INVISIBLE.description=Unsichtbarer Signaturblock
+
+sig_obj.types.INVISIBLE=on
+
+sig_obj.INVISIBLE.adobeSignFieldValue=PDF-AS Signatur
+sig_obj.INVISIBLE.adobeSignReasonValue=Informationen zur Pr\u00fcfung finden Sie unter http://www.signaturpruefung.gv.at
+
+# Platzhaltersuche f\u00fcr dieses Profil deaktivieren
+sig_obj.INVISIBLE.enable_placeholder_search=false
+
+sig_obj.INVISIBLE.verifyURL=http://www.signaturpruefung.gv.at
diff --git a/work/cfg/profiles/SIGNATURBLOCK_DE.properties b/work/cfg/profiles/SIGNATURBLOCK_DE.properties
new file mode 100644
index 0000000..1c35d25
--- /dev/null
+++ b/work/cfg/profiles/SIGNATURBLOCK_DE.properties
@@ -0,0 +1,155 @@
+sig_obj.type.default=SIGNATURBLOCK_DE
+
+
+###################################################################################################
+# PROFIL: Signaturblock (Deutsch) mit neuem Layout
+
+# Kurzbeschreibung
+sig_obj.SIGNATURBLOCK_DE.description=Standardsignatur Deutsch mit neuem Layout
+
+# Aktiviert ("on") bzw. deaktiviert ("off") dieses Profil.
+# "verify_only" beschraenkt das Profil auf Signaturpruefung, d.h. es kann nicht zum Erstellen von
+# Signaturen verwendet werden.
+# "sign_only" beschraenkt das Profil insofern, dass es nur noch zum Signieren, nicht aber
+# zum Pruefen verwendet werden kann.
+sig_obj.types.SIGNATURBLOCK_DE=on
+
+# Festlegung der einzelner Bezeichnungen im Signaturblock.
+sig_obj.SIGNATURBLOCK_DE.key.SIG_VALUE=Signaturwert
+sig_obj.SIGNATURBLOCK_DE.key.SIG_SUBJECT=Unterzeichner
+sig_obj.SIGNATURBLOCK_DE.key.SIG_ISSUER=Aussteller-Zertifikat
+sig_obj.SIGNATURBLOCK_DE.key.SIG_NUMBER=Serien-Nr.
+sig_obj.SIGNATURBLOCK_DE.key.SIG_KZ=Methode
+sig_obj.SIGNATURBLOCK_DE.key.SIG_ID=Parameter
+sig_obj.SIGNATURBLOCK_DE.key.SIG_META=Pr\u00fcfinformation
+sig_obj.SIGNATURBLOCK_DE.key.SIG_DATE=Datum/Zeit-UTC
+
+
+# Festlegung des Unterzeichnernamens.
+# Es moeglich, den Namen des Signators dynamisch aus Informationen des verwendeten Zertifikats
+# zusammenzusetzen. Konkret kann auf die einzelnen RDN Teile des Issuer DN und des Subject DN
+# des Signaturzertifikats wie im folgenden Beispiel illustriert zugegriffen werden:
+#
+# (1) sig_obj.PROFIL.value.SIG_SUBJECT= ${subject.CN}${subject.O != null ? ("\n" + subject.O) : ""}
+# (2) sig_obj.PROFIL.value.SIG_SUBJECT= ${subject.T \!\= null ? (subject.T + " ") \: ""}${subject.CN}
+#
+# Beispiel (1) gibt die Organisation des Unterzeichners an, Beispiel (2) Titel und Name.
+#
+# Die Notation ${..} ermoeglicht die dynamische Auswertung eines Ausdrucks. Verfuegbar sind "subject"
+# und "issuer" und die im Zertifikat-DN vorhandenen RDNs.
+#
+# Achtung:
+# Fuer die binaere Signatur muss die maximale Anzahl zu erwartender Zeichen in der globalen Einstellung
+# defaults.phlength.SIG_SUBJECT=...
+# bzw. profileweise via
+# sig_obj.PROFIL.phlength.SIG_SUBJECT=...
+# festgelegt werden.
+sig_obj.SIGNATURBLOCK_DE.value.SIG_SUBJECT=${subject.T != null ? (subject.T + " ") : ""}${subject.CN}
+
+
+## Profilspezifische Festlegung der Position des Signaturblocks
+#
+# sig_obj.PROFILE.pos=[p:["auto"|"new"|pagenumber];][x:["auto"|floatvalue];][y:["auto"|floatvalue];][w:["auto"|width_floatvalue];][f:footerheight_floatvalue]
+# z.B.
+# sig_obj.PROFILE.pos=p:1;x:40.0;y:800.0;w:400.0;f:80
+sig_obj.SIGNATURBLOCK_DE.pos=f:80
+
+# Name der Signatur.
+sig_obj.SIGNATURBLOCK_DE.adobeSignFieldValue=PDF-AS Signatur
+
+# Text, der im Adobe Reader unter "Reason" angezeigt wird.
+sig_obj.SIGNATURBLOCK_DE.adobeSignReasonValue=Signaturpruefung unter http://www.signaturpruefung.gv.at
+
+# URL fuer die Signaturpruefung durch das Adobe Acrobat Professional PDF-AS Plugin.
+sig_obj.SIGNATURBLOCK_DE.verifyURL=http://www.signaturpruefung.gv.at
+
+# WAI
+sig_obj.SIGNATURBLOCK_DE.sigLogoAltText=Abgebildet ist eine Standard-Signaturbildmarke.
+
+# Pruefhinweis im Signaturblock
+sig_obj.SIGNATURBLOCK_DE.value.SIG_META=Signaturpruefung unter: http://www.signaturpruefung.gv.at
+
+# Signaturlogo im Signaturblock
+sig_obj.SIGNATURBLOCK_DE.value.SIG_LABEL=./images/signatur-logo_de.png
+
+
+#---------------------- MAIN TABLE -------------------------
+sig_obj.SIGNATURBLOCK_DE.table.main.1=SIG_VALUE-cv
+sig_obj.SIGNATURBLOCK_DE.table.main.2=SIG_LABEL-i|TABLE-info
+sig_obj.SIGNATURBLOCK_DE.table.main.3=SIG_META-cv
+sig_obj.SIGNATURBLOCK_DE.table.main.4=SIG_DATE-cv
+
+
+sig_obj.SIGNATURBLOCK_DE.table.main.ColsWidth=1 6
+sig_obj.SIGNATURBLOCK_DE.table.main.Style.bgcolor=255 255 255
+sig_obj.SIGNATURBLOCK_DE.table.main.Style.padding=4
+sig_obj.SIGNATURBLOCK_DE.table.main.Style.border=0.1
+
+
+## Horizontale Ausrichtung der Eintraege im Signaturblock.
+#
+# sig_obj.PROFILE.table.TABLE_NAME.Style.halign=[left|center|right]
+# sig_obj.PROFILE.table.TABLE_NAME.Style.valuehalign=[left|center|right]
+# sig_obj.PROFILE.table.TABLE_NAME.Style.imagehalign=[left|center|right]
+sig_obj.SIGNATURBLOCK_DE.table.main.Style.halign=center
+
+
+## Vertikale Ausrichtung der Eintraege im Signaturblock.
+#
+# sig_obj.PROFILE.table.TABLE_NAME.Style.valign=[bottom|middle|top]
+# sig_obj.PROFILE.table.TABLE_NAME.Style.valuevalign=[bottom|middle|top]
+# sig_obj.PROFILE.table.TABLE_NAME.Style.imagevalign=[bottom|middle|top]
+sig_obj.SIGNATURBLOCK_DE.table.main.Style.valuehalign=left
+sig_obj.SIGNATURBLOCK_DE.table.main.Style.valign=top
+sig_obj.SIGNATURBLOCK_DE.table.main.Style.imagevalign=middle
+
+
+## Schriftart
+#
+# sig_obj.PROFIL.table.TABLE_NAME.Style.font=FACE,WEIGHT,STYLE
+# Setzt die Schriftart fuer die gesamte Tabelle TABLE_NAME.
+#
+# sig_obj.PROFIL.table.TABLE_NAME.Style.valuefont=FACE,WEIGHT,STYLE
+# Setzt die Schriftart ausschliesslich fuer die Werte-Zellen der Tabelle TABLE_NAME.
+#
+# FACE: HELVETICA | TIMES_ROMAN | COURIER
+# WEIGHT: float value
+# STYLE: NORMAL | BOLD | ITALIC | BOLDITALIC | UNDERLINE | STRIKETHRU
+#
+# z.B. sig_obj.SIGNATURBLOCK_DE.table.main.Style.valuefont=COURIER,8,NORMAL
+sig_obj.SIGNATURBLOCK_DE.table.main.Style.font=HELVETICA,8,BOLD
+sig_obj.SIGNATURBLOCK_DE.table.main.Style.valuefont=COURIER,8,NORMAL
+
+
+#---------------------- INFO TABLE -------------------------
+sig_obj.SIGNATURBLOCK_DE.table.info.ColsWidth=1 4
+sig_obj.SIGNATURBLOCK_DE.table.info.1=SIG_SUBJECT-cv
+sig_obj.SIGNATURBLOCK_DE.table.info.2=SIG_ISSUER-cv
+sig_obj.SIGNATURBLOCK_DE.table.info.3=SIG_NUMBER-cv
+sig_obj.SIGNATURBLOCK_DE.table.info.4=SIG_KZ-cv
+sig_obj.SIGNATURBLOCK_DE.table.info.5=SIG_ID-cv
+
+
+## Signaturkennzeichnung (fuer Adobe Acrobat)
+#
+# Ein-/Ausschalten der Signaturkennung:
+# sig_obj.PROFILE.adobeSignEnabled=true|false (default: true)
+#
+# Name fuer die Signaturkennzeichnung (binaer)
+# sig_obj.PROFILE.adobeSignText.binary=PDF-AS
+#
+# Name fuer die Signaturkennzeichnung (binaer)
+# sig_obj.PROFILE.adobeSignText.textual=PDF-AS
+#
+# Name fuer die PDF-Signatur
+# sig_obj.PROFILE.adobeSignFieldValue=PDF-AS Signatur
+#
+# "Reason"-Feld der jeweiligen Signatur
+# sig_obj.PROFILE.adobeSignReasonValue=Informationen zur Pr\u00FCfung finden Sie unter http://www.signaturpruefung.gv.at
+#
+# Prueflink fuer die Adobe Signaturkennzeichnung (nur relevant falls Adobe Plugin fuer Pruefung verwendet wird)
+# sig_obj.PROFILE.verifyURL=http://www.signaturpruefung.gv.at
+#
+# Alternativer Text fuer den Signaturblock (WAI) (globale Einstellung)
+# sig_obj.PROFILE.sigLogoAltText=Abgebildet ist eine Standard-Signaturbildmarke.
+
diff --git a/work/cfg/profiles/SIGNATURBLOCK_DE_DEPRECATED.properties b/work/cfg/profiles/SIGNATURBLOCK_DE_DEPRECATED.properties
new file mode 100644
index 0000000..9091c61
--- /dev/null
+++ b/work/cfg/profiles/SIGNATURBLOCK_DE_DEPRECATED.properties
@@ -0,0 +1,55 @@
+###################################################################################################
+# PROFIL: Signaturblock (Deutsch)
+
+sig_obj.SIGNATURBLOCK_DE_DEPRECATED.description=Standardsignatur Deutsch
+
+# Das Profil gilt als veraltet ("deprecated"). Deshalb wird es nur noch fuer Signaturpruefung
+# zugelassen ("verify_only"); fuer Signaturen kann es nicht mehr verwendet werden.
+sig_obj.types.SIGNATURBLOCK_DE_DEPRECATED=verify_only
+
+sig_obj.SIGNATURBLOCK_DE_DEPRECATED.key.SIG_VALUE=Signaturwert
+sig_obj.SIGNATURBLOCK_DE_DEPRECATED.key.SIG_SUBJECT=Unterzeichner
+sig_obj.SIGNATURBLOCK_DE_DEPRECATED.key.SIG_DATE=Datum/Zeit-UTC
+sig_obj.SIGNATURBLOCK_DE_DEPRECATED.key.SIG_ISSUER=Aussteller-Zertifikat
+sig_obj.SIGNATURBLOCK_DE_DEPRECATED.key.SIG_NUMBER=Serien-Nr.
+sig_obj.SIGNATURBLOCK_DE_DEPRECATED.key.SIG_KZ=Methode
+sig_obj.SIGNATURBLOCK_DE_DEPRECATED.key.SIG_ID=Parameter
+sig_obj.SIGNATURBLOCK_DE_DEPRECATED.key.SIG_META=Pr\u00fcfinformation
+
+sig_obj.SIGNATURBLOCK_DE_DEPRECATED.value.SIG_SUBJECT=${subject.T != null ? (subject.T + " ") : ""}${subject.CN}
+
+sig_obj.SIGNATURBLOCK_DE_DEPRECATED.pos=f:80
+sig_obj.SIGNATURBLOCK_DE_DEPRECATED.adobeSignFieldValue=PDF-AS Signatur
+sig_obj.SIGNATURBLOCK_DE_DEPRECATED.adobeSignReasonValue=Informationen zur Pr\u00fcfung finden Sie unter http://www.signaturpruefung.gv.at
+sig_obj.SIGNATURBLOCK_DE_DEPRECATED.verifyURL=http://www.signaturpruefung.gv.at
+
+# WAI
+sig_obj.SIGNATURBLOCK_DE_DEPRECATED.sigLogoAltText=Abgebildet ist eine Standard-Signaturbildmarke.
+
+sig_obj.SIGNATURBLOCK_DE_DEPRECATED.value.SIG_META=Signaturpruefung unter: http://www.signaturpruefung.gv.at
+sig_obj.SIGNATURBLOCK_DE_DEPRECATED.value.SIG_LABEL=./images/signatur-logo_de.png
+
+#---------------------- MAIN TABLE -------------------------
+sig_obj.SIGNATURBLOCK_DE_DEPRECATED.table.main.1=SIG_VALUE-cv
+sig_obj.SIGNATURBLOCK_DE_DEPRECATED.table.main.2=SIG_LABEL-i|TABLE-info
+sig_obj.SIGNATURBLOCK_DE_DEPRECATED.table.main.3=SIG_META-cv
+
+sig_obj.SIGNATURBLOCK_DE_DEPRECATED.table.main.ColsWidth=1 6
+sig_obj.SIGNATURBLOCK_DE_DEPRECATED.table.main.Style.bgcolor=255 255 255
+sig_obj.SIGNATURBLOCK_DE_DEPRECATED.table.main.Style.padding=4
+sig_obj.SIGNATURBLOCK_DE_DEPRECATED.table.main.Style.border=0.1
+sig_obj.SIGNATURBLOCK_DE_DEPRECATED.table.main.Style.halign=center
+sig_obj.SIGNATURBLOCK_DE_DEPRECATED.table.main.Style.valuehalign=left
+sig_obj.SIGNATURBLOCK_DE_DEPRECATED.table.main.Style.valign=middle
+sig_obj.SIGNATURBLOCK_DE_DEPRECATED.table.main.Style.imagevalign=middle
+sig_obj.SIGNATURBLOCK_DE_DEPRECATED.table.main.Style.font=HELVETICA,8,BOLD
+sig_obj.SIGNATURBLOCK_DE_DEPRECATED.table.main.Style.valuefont=COURIER,8,NORMAL
+
+#---------------------- INFO TABLE -------------------------
+sig_obj.SIGNATURBLOCK_DE_DEPRECATED.table.info.ColsWidth=1 4
+sig_obj.SIGNATURBLOCK_DE_DEPRECATED.table.info.1=SIG_SUBJECT-cv
+sig_obj.SIGNATURBLOCK_DE_DEPRECATED.table.info.2=SIG_DATE-cv
+sig_obj.SIGNATURBLOCK_DE_DEPRECATED.table.info.3=SIG_ISSUER-cv
+sig_obj.SIGNATURBLOCK_DE_DEPRECATED.table.info.4=SIG_NUMBER-cv
+sig_obj.SIGNATURBLOCK_DE_DEPRECATED.table.info.5=SIG_KZ-cv
+sig_obj.SIGNATURBLOCK_DE_DEPRECATED.table.info.6=SIG_ID-cv
diff --git a/work/cfg/profiles/SIGNATURBLOCK_DE_NOTE.properties b/work/cfg/profiles/SIGNATURBLOCK_DE_NOTE.properties
new file mode 100644
index 0000000..9843a41
--- /dev/null
+++ b/work/cfg/profiles/SIGNATURBLOCK_DE_NOTE.properties
@@ -0,0 +1,60 @@
+###################################################################################################
+# PROFIL: Signaturblock (Deutsch) mit neuem Layout und Hinweistext
+
+sig_obj.SIGNATURBLOCK_DE_NOTE.description=Standardsignatur Deutsch mit neuem Layout
+
+sig_obj.types.SIGNATURBLOCK_DE_NOTE=on
+
+sig_obj.SIGNATURBLOCK_DE_NOTE.key.SIG_VALUE=Signaturwert
+sig_obj.SIGNATURBLOCK_DE_NOTE.key.SIG_SUBJECT=Unterzeichner
+sig_obj.SIGNATURBLOCK_DE_NOTE.key.SIG_ISSUER=Aussteller-Zertifikat
+sig_obj.SIGNATURBLOCK_DE_NOTE.key.SIG_NUMBER=Serien-Nr.
+sig_obj.SIGNATURBLOCK_DE_NOTE.key.SIG_KZ=Methode
+sig_obj.SIGNATURBLOCK_DE_NOTE.key.SIG_ID=Parameter
+sig_obj.SIGNATURBLOCK_DE_NOTE.key.SIG_META=Pr\u00fcfinformation
+sig_obj.SIGNATURBLOCK_DE_NOTE.key.SIG_NOTE=Hinweis
+sig_obj.SIGNATURBLOCK_DE_NOTE.key.SIG_DATE=Datum/Zeit-UTC
+
+
+
+sig_obj.SIGNATURBLOCK_DE_NOTE.value.SIG_SUBJECT=${subject.T != null ? (subject.T + " ") : ""}${subject.CN}
+
+sig_obj.SIGNATURBLOCK_DE_NOTE.pos=f:80
+sig_obj.SIGNATURBLOCK_DE_NOTE.adobeSignFieldValue=PDF-AS Signatur
+sig_obj.SIGNATURBLOCK_DE_NOTE.adobeSignReasonValue=Signaturpruefung unter http://www.signaturpruefung.gv.at
+sig_obj.SIGNATURBLOCK_DE_NOTE.verifyURL=http://www.signaturpruefung.gv.at
+
+# WAI
+sig_obj.SIGNATURBLOCK_DE_NOTE.sigLogoAltText=Abgebildet ist eine Standard-Signaturbildmarke.
+
+sig_obj.SIGNATURBLOCK_DE_NOTE.value.SIG_META=Signaturpruefung unter: http://www.signaturpruefung.gv.at
+sig_obj.SIGNATURBLOCK_DE_NOTE.value.SIG_LABEL=./images/signatur-logo_de.png
+sig_obj.SIGNATURBLOCK_DE_NOTE.value.SIG_NOTE=Dieses mit einer qualifizierten elektronischen Signatur versehene Dokument ist gem\u00e4\u00df \u00a7\u00A04 Abs.\u00A01 Signaturgesetz einem handschriftlich unterschriebenen Dokument grunds\u00e4tzlich rechtlich gleichgestellt.
+
+
+#---------------------- MAIN TABLE -------------------------
+sig_obj.SIGNATURBLOCK_DE_NOTE.table.main.1=SIG_VALUE-cv
+sig_obj.SIGNATURBLOCK_DE_NOTE.table.main.2=SIG_LABEL-i|TABLE-info
+sig_obj.SIGNATURBLOCK_DE_NOTE.table.main.3=SIG_META-cv
+sig_obj.SIGNATURBLOCK_DE_NOTE.table.main.4=SIG_NOTE-cv
+sig_obj.SIGNATURBLOCK_DE_NOTE.table.main.5=SIG_DATE-cv
+
+
+sig_obj.SIGNATURBLOCK_DE_NOTE.table.main.ColsWidth=1 6
+sig_obj.SIGNATURBLOCK_DE_NOTE.table.main.Style.bgcolor=255 255 255
+sig_obj.SIGNATURBLOCK_DE_NOTE.table.main.Style.padding=4
+sig_obj.SIGNATURBLOCK_DE_NOTE.table.main.Style.border=0.1
+sig_obj.SIGNATURBLOCK_DE_NOTE.table.main.Style.halign=center
+sig_obj.SIGNATURBLOCK_DE_NOTE.table.main.Style.valuehalign=left
+sig_obj.SIGNATURBLOCK_DE_NOTE.table.main.Style.valign=top
+sig_obj.SIGNATURBLOCK_DE_NOTE.table.main.Style.imagevalign=middle
+sig_obj.SIGNATURBLOCK_DE_NOTE.table.main.Style.font=HELVETICA,8,BOLD
+sig_obj.SIGNATURBLOCK_DE_NOTE.table.main.Style.valuefont=COURIER,8,NORMAL
+
+#---------------------- INFO TABLE -------------------------
+sig_obj.SIGNATURBLOCK_DE_NOTE.table.info.ColsWidth=1 4
+sig_obj.SIGNATURBLOCK_DE_NOTE.table.info.1=SIG_SUBJECT-cv
+sig_obj.SIGNATURBLOCK_DE_NOTE.table.info.2=SIG_ISSUER-cv
+sig_obj.SIGNATURBLOCK_DE_NOTE.table.info.3=SIG_NUMBER-cv
+sig_obj.SIGNATURBLOCK_DE_NOTE.table.info.4=SIG_KZ-cv
+sig_obj.SIGNATURBLOCK_DE_NOTE.table.info.5=SIG_ID-cv
diff --git a/work/cfg/profiles/SIGNATURBLOCK_DE_PDFA.properties b/work/cfg/profiles/SIGNATURBLOCK_DE_PDFA.properties
new file mode 100644
index 0000000..bf67fe5
--- /dev/null
+++ b/work/cfg/profiles/SIGNATURBLOCK_DE_PDFA.properties
@@ -0,0 +1,57 @@
+###################################################################################################
+# PROFIL: Signaturblock (Deutsch), PDF/A-1b
+
+sig_obj.SIGNATURBLOCK_DE_PDFA.description=Standardsignatur Deutsch, PDF/A-1b
+
+sig_obj.types.SIGNATURBLOCK_DE_PDFA=on
+
+# enable/disable PDF/A1b support for this profile
+sig_obj.SIGNATURBLOCK_DE_PDFA.key.SIG_PDFA1B_VALID=true
+
+sig_obj.SIGNATURBLOCK_DE_PDFA.key.SIG_VALUE=Signaturwert
+sig_obj.SIGNATURBLOCK_DE_PDFA.key.SIG_SUBJECT=Unterzeichner
+sig_obj.SIGNATURBLOCK_DE_PDFA.key.SIG_ISSUER=Aussteller-Zertifikat
+sig_obj.SIGNATURBLOCK_DE_PDFA.key.SIG_NUMBER=Serien-Nr.
+sig_obj.SIGNATURBLOCK_DE_PDFA.key.SIG_KZ=Methode
+sig_obj.SIGNATURBLOCK_DE_PDFA.key.SIG_ID=Parameter
+sig_obj.SIGNATURBLOCK_DE_PDFA.key.SIG_META=Pr\u00fcfinformation
+sig_obj.SIGNATURBLOCK_DE_PDFA.key.SIG_DATE=Datum/Zeit-UTC
+
+
+sig_obj.SIGNATURBLOCK_DE_PDFA.value.SIG_SUBJECT=${subject.T != null ? (subject.T + " ") : ""}${subject.CN}
+
+sig_obj.SIGNATURBLOCK_DE_PDFA.pos=f:80
+sig_obj.SIGNATURBLOCK_DE_PDFA.adobeSignFieldValue=PDF-AS Signatur
+sig_obj.SIGNATURBLOCK_DE_PDFA.adobeSignReasonValue=Signaturpruefung unter: http://www.signaturpruefung.gv.at
+sig_obj.SIGNATURBLOCK_DE_PDFA.verifyURL=http://www.signaturpruefung.gv.at
+
+# WAI
+sig_obj.SIGNATURBLOCK_DE_PDFA.sigLogoAltText=Abgebildet ist eine Standard-Signaturbildmarke.
+
+sig_obj.SIGNATURBLOCK_DE_PDFA.value.SIG_META=Signaturpruefung unter: http://www.signaturpruefung.gv.at
+sig_obj.SIGNATURBLOCK_DE_PDFA.value.SIG_LABEL=./images/signatur-logo_de.png
+
+#---------------------- MAIN TABLE -------------------------
+sig_obj.SIGNATURBLOCK_DE_PDFA.table.main.1=SIG_VALUE-cv
+sig_obj.SIGNATURBLOCK_DE_PDFA.table.main.2=SIG_LABEL-i|TABLE-info
+sig_obj.SIGNATURBLOCK_DE_PDFA.table.main.3=SIG_META-cv
+sig_obj.SIGNATURBLOCK_DE_PDFA.table.main.4=SIG_DATE-cv
+
+sig_obj.SIGNATURBLOCK_DE_PDFA.table.main.ColsWidth=1 5.5
+sig_obj.SIGNATURBLOCK_DE_PDFA.table.main.Style.bgcolor=255 255 255
+sig_obj.SIGNATURBLOCK_DE_PDFA.table.main.Style.padding=4
+sig_obj.SIGNATURBLOCK_DE_PDFA.table.main.Style.border=0.1
+sig_obj.SIGNATURBLOCK_DE_PDFA.table.main.Style.halign=center
+sig_obj.SIGNATURBLOCK_DE_PDFA.table.main.Style.valuehalign=left
+sig_obj.SIGNATURBLOCK_DE_PDFA.table.main.Style.valign=top
+sig_obj.SIGNATURBLOCK_DE_PDFA.table.main.Style.imagevalign=middle
+sig_obj.SIGNATURBLOCK_DE_PDFA.table.main.Style.font=TTF:DejaVuSansCondensed-Bold.ttf,8
+sig_obj.SIGNATURBLOCK_DE_PDFA.table.main.Style.valuefont=TTF:DejaVuSansMono.ttf,8
+
+#---------------------- INFO TABLE -------------------------
+sig_obj.SIGNATURBLOCK_DE_PDFA.table.info.ColsWidth=1 3.5
+sig_obj.SIGNATURBLOCK_DE_PDFA.table.info.1=SIG_SUBJECT-cv
+sig_obj.SIGNATURBLOCK_DE_PDFA.table.info.2=SIG_ISSUER-cv
+sig_obj.SIGNATURBLOCK_DE_PDFA.table.info.3=SIG_NUMBER-cv
+sig_obj.SIGNATURBLOCK_DE_PDFA.table.info.4=SIG_KZ-cv
+sig_obj.SIGNATURBLOCK_DE_PDFA.table.info.5=SIG_ID-cv
diff --git a/work/cfg/profiles/SIGNATURBLOCK_DE_PDFA_NOTE.properties b/work/cfg/profiles/SIGNATURBLOCK_DE_PDFA_NOTE.properties
new file mode 100644
index 0000000..d204e09
--- /dev/null
+++ b/work/cfg/profiles/SIGNATURBLOCK_DE_PDFA_NOTE.properties
@@ -0,0 +1,60 @@
+###################################################################################################
+# PROFIL: Signaturblock (Deutsch), PDF/A-1b und mit Hinweistext
+
+sig_obj.SIGNATURBLOCK_DE_PDFA_NOTE.description=Standardsignatur Deutsch, PDF/A-1b
+
+sig_obj.types.SIGNATURBLOCK_DE_PDFA_NOTE=on
+
+# enable/disable PDF/A1b support for this profile
+sig_obj.SIGNATURBLOCK_DE_PDFA_NOTE.key.SIG_PDFA1B_VALID=true
+
+sig_obj.SIGNATURBLOCK_DE_PDFA_NOTE.key.SIG_VALUE=Signaturwert
+sig_obj.SIGNATURBLOCK_DE_PDFA_NOTE.key.SIG_SUBJECT=Unterzeichner
+sig_obj.SIGNATURBLOCK_DE_PDFA_NOTE.key.SIG_ISSUER=Aussteller-Zertifikat
+sig_obj.SIGNATURBLOCK_DE_PDFA_NOTE.key.SIG_NUMBER=Serien-Nr.
+sig_obj.SIGNATURBLOCK_DE_PDFA_NOTE.key.SIG_KZ=Methode
+sig_obj.SIGNATURBLOCK_DE_PDFA_NOTE.key.SIG_ID=Parameter
+sig_obj.SIGNATURBLOCK_DE_PDFA_NOTE.key.SIG_META=Pr\u00fcfinformation
+sig_obj.SIGNATURBLOCK_DE_PDFA_NOTE.key.SIG_NOTE=Hinweis
+sig_obj.SIGNATURBLOCK_DE_PDFA_NOTE.key.SIG_DATE=Datum/Zeit-UTC
+
+
+sig_obj.SIGNATURBLOCK_DE_PDFA_NOTE.value.SIG_SUBJECT=${subject.T != null ? (subject.T + " ") : ""}${subject.CN}
+
+sig_obj.SIGNATURBLOCK_DE_PDFA_NOTE.pos=f:80
+sig_obj.SIGNATURBLOCK_DE_PDFA_NOTE.adobeSignFieldValue=PDF-AS Signatur
+sig_obj.SIGNATURBLOCK_DE_PDFA_NOTE.adobeSignReasonValue=Signaturpruefung unter: http://www.signaturpruefung.gv.at
+sig_obj.SIGNATURBLOCK_DE_PDFA_NOTE.verifyURL=http://www.signaturpruefung.gv.at
+
+# WAI
+sig_obj.SIGNATURBLOCK_DE_PDFA_NOTE.sigLogoAltText=Abgebildet ist eine Standard-Signaturbildmarke.
+
+sig_obj.SIGNATURBLOCK_DE_PDFA_NOTE.value.SIG_META=Signaturpruefung unter: http://www.signaturpruefung.gv.at
+sig_obj.SIGNATURBLOCK_DE_PDFA_NOTE.value.SIG_LABEL=./images/signatur-logo_de.png
+sig_obj.SIGNATURBLOCK_DE_PDFA_NOTE.value.SIG_NOTE=Dieses mit einer qualifizierten elektronischen Signatur versehene Dokument ist gem\u00e4\u00df \u00a7\u00A04 Abs.\u00A01 Signaturgesetz einem handschriftlich unterschriebenen Dokument grunds\u00e4tzlich rechtlich gleichgestellt.
+
+#---------------------- MAIN TABLE -------------------------
+sig_obj.SIGNATURBLOCK_DE_PDFA_NOTE.table.main.1=SIG_VALUE-cv
+sig_obj.SIGNATURBLOCK_DE_PDFA_NOTE.table.main.2=SIG_LABEL-i|TABLE-info
+sig_obj.SIGNATURBLOCK_DE_PDFA_NOTE.table.main.3=SIG_META-cv
+sig_obj.SIGNATURBLOCK_DE_PDFA_NOTE.table.main.4=SIG_NOTE-cv
+sig_obj.SIGNATURBLOCK_DE_PDFA_NOTE.table.main.5=SIG_DATE-cv
+
+sig_obj.SIGNATURBLOCK_DE_PDFA_NOTE.table.main.ColsWidth=1 5.5
+sig_obj.SIGNATURBLOCK_DE_PDFA_NOTE.table.main.Style.bgcolor=255 255 255
+sig_obj.SIGNATURBLOCK_DE_PDFA_NOTE.table.main.Style.padding=4
+sig_obj.SIGNATURBLOCK_DE_PDFA_NOTE.table.main.Style.border=0.1
+sig_obj.SIGNATURBLOCK_DE_PDFA_NOTE.table.main.Style.halign=center
+sig_obj.SIGNATURBLOCK_DE_PDFA_NOTE.table.main.Style.valuehalign=left
+sig_obj.SIGNATURBLOCK_DE_PDFA_NOTE.table.main.Style.valign=top
+sig_obj.SIGNATURBLOCK_DE_PDFA_NOTE.table.main.Style.imagevalign=middle
+sig_obj.SIGNATURBLOCK_DE_PDFA_NOTE.table.main.Style.font=TTF:DejaVuSansCondensed-Bold.ttf,8
+sig_obj.SIGNATURBLOCK_DE_PDFA_NOTE.table.main.Style.valuefont=TTF:DejaVuSansMono.ttf,8
+
+#---------------------- INFO TABLE -------------------------
+sig_obj.SIGNATURBLOCK_DE_PDFA_NOTE.table.info.ColsWidth=1 3.5
+sig_obj.SIGNATURBLOCK_DE_PDFA_NOTE.table.info.1=SIG_SUBJECT-cv
+sig_obj.SIGNATURBLOCK_DE_PDFA_NOTE.table.info.2=SIG_ISSUER-cv
+sig_obj.SIGNATURBLOCK_DE_PDFA_NOTE.table.info.3=SIG_NUMBER-cv
+sig_obj.SIGNATURBLOCK_DE_PDFA_NOTE.table.info.4=SIG_KZ-cv
+sig_obj.SIGNATURBLOCK_DE_PDFA_NOTE.table.info.5=SIG_ID-cv
diff --git a/work/cfg/profiles/SIGNATURBLOCK_EN.properties b/work/cfg/profiles/SIGNATURBLOCK_EN.properties
new file mode 100644
index 0000000..db68fb6
--- /dev/null
+++ b/work/cfg/profiles/SIGNATURBLOCK_EN.properties
@@ -0,0 +1,54 @@
+###################################################################################################
+# PROFIL: Signaturblock (Englisch) mit neuem Layout
+
+sig_obj.SIGNATURBLOCK_EN.description=Standardsignatur Englisch mit neuem Layout
+
+sig_obj.types.SIGNATURBLOCK_EN=on
+
+sig_obj.SIGNATURBLOCK_EN.key.SIG_VALUE=Signature Value
+sig_obj.SIGNATURBLOCK_EN.key.SIG_SUBJECT=Signatory
+sig_obj.SIGNATURBLOCK_EN.key.SIG_ISSUER=Issuer-Certificate
+sig_obj.SIGNATURBLOCK_EN.key.SIG_NUMBER=Serial-No.
+sig_obj.SIGNATURBLOCK_EN.key.SIG_KZ=Method
+sig_obj.SIGNATURBLOCK_EN.key.SIG_ID=Parameter
+sig_obj.SIGNATURBLOCK_EN.key.SIG_META=Verification
+sig_obj.SIGNATURBLOCK_EN.key.SIG_DATE=Date/Time-UTC
+
+sig_obj.SIGNATURBLOCK_EN.value.SIG_SUBJECT=${subject.T != null ? (subject.T + " ") : ""}${subject.CN}
+
+sig_obj.SIGNATURBLOCK_EN.pos=f:80
+sig_obj.SIGNATURBLOCK_EN.adobeSignFieldValue=PDF-AS Signature
+sig_obj.SIGNATURBLOCK_EN.adobeSignReasonValue=Signature verification at http://www.signature-verification.gv.at
+sig_obj.SIGNATURBLOCK_EN.verifyURL=http://www.signature-verification.gv.at
+
+# WAI
+sig_obj.SIGNATURBLOCK_EN.sigLogoAltText=A standard signature logo is shown.
+
+sig_obj.SIGNATURBLOCK_EN.value.SIG_META=Signature verification at: http://www.signature-verification.gv.at
+sig_obj.SIGNATURBLOCK_EN.value.SIG_LABEL=./images/signatur-logo_en.png
+
+#---------------------- MAIN TABLE -------------------------
+sig_obj.SIGNATURBLOCK_EN.table.main.1=SIG_VALUE-cv
+sig_obj.SIGNATURBLOCK_EN.table.main.2=SIG_LABEL-i|TABLE-info
+sig_obj.SIGNATURBLOCK_EN.table.main.3=SIG_META-cv
+sig_obj.SIGNATURBLOCK_EN.table.main.4=SIG_DATE-cv
+
+
+sig_obj.SIGNATURBLOCK_EN.table.main.ColsWidth=1 6
+sig_obj.SIGNATURBLOCK_EN.table.main.Style.bgcolor=255 255 255
+sig_obj.SIGNATURBLOCK_EN.table.main.Style.padding=4
+sig_obj.SIGNATURBLOCK_EN.table.main.Style.border=0.1
+sig_obj.SIGNATURBLOCK_EN.table.main.Style.halign=center
+sig_obj.SIGNATURBLOCK_EN.table.main.Style.valuehalign=left
+sig_obj.SIGNATURBLOCK_EN.table.main.Style.valign=top
+sig_obj.SIGNATURBLOCK_EN.table.main.Style.imagevalign=middle
+sig_obj.SIGNATURBLOCK_EN.table.main.Style.font=HELVETICA,8,BOLD
+sig_obj.SIGNATURBLOCK_EN.table.main.Style.valuefont=COURIER,8,NORMAL
+
+#---------------------- INFO TABLE -------------------------
+sig_obj.SIGNATURBLOCK_EN.table.info.ColsWidth=1 5
+sig_obj.SIGNATURBLOCK_EN.table.info.1=SIG_SUBJECT-cv
+sig_obj.SIGNATURBLOCK_EN.table.info.2=SIG_ISSUER-cv
+sig_obj.SIGNATURBLOCK_EN.table.info.3=SIG_NUMBER-cv
+sig_obj.SIGNATURBLOCK_EN.table.info.4=SIG_KZ-cv
+sig_obj.SIGNATURBLOCK_EN.table.info.5=SIG_ID-cv
diff --git a/work/cfg/profiles/SIGNATURBLOCK_EN_DEPRECATED.properties b/work/cfg/profiles/SIGNATURBLOCK_EN_DEPRECATED.properties
new file mode 100644
index 0000000..663a982
--- /dev/null
+++ b/work/cfg/profiles/SIGNATURBLOCK_EN_DEPRECATED.properties
@@ -0,0 +1,55 @@
+###################################################################################################
+# PROFIL: Signaturblock (Englisch)
+
+sig_obj.SIGNATURBLOCK_EN_DEPRECATED.description=Standardsignatur Englisch
+
+# Das Profil gilt als veraltet ("deprecated"). Deshalb wird es nur noch fuer Signaturpruefung
+# zugelassen ("verify_only"); fuer Signaturen kann es nicht mehr verwendet werden.
+sig_obj.types.SIGNATURBLOCK_EN_DEPRECATED=verify_only
+
+sig_obj.SIGNATURBLOCK_EN_DEPRECATED.key.SIG_VALUE=Signature Value
+sig_obj.SIGNATURBLOCK_EN_DEPRECATED.key.SIG_SUBJECT=Signatory
+sig_obj.SIGNATURBLOCK_EN_DEPRECATED.key.SIG_DATE=Date/Time-UTC
+sig_obj.SIGNATURBLOCK_EN_DEPRECATED.key.SIG_ISSUER=Issuer-Certificate
+sig_obj.SIGNATURBLOCK_EN_DEPRECATED.key.SIG_NUMBER=Serial-No.
+sig_obj.SIGNATURBLOCK_EN_DEPRECATED.key.SIG_KZ=Method
+sig_obj.SIGNATURBLOCK_EN_DEPRECATED.key.SIG_ID=Parameter
+sig_obj.SIGNATURBLOCK_EN_DEPRECATED.key.SIG_META=Verification
+
+sig_obj.SIGNATURBLOCK_EN_DEPRECATED.value.SIG_SUBJECT=${subject.T != null ? (subject.T + " ") : ""}${subject.CN}
+
+sig_obj.SIGNATURBLOCK_EN_DEPRECATED.pos=f:80
+sig_obj.SIGNATURBLOCK_EN_DEPRECATED.adobeSignFieldValue=PDF-AS Signature
+sig_obj.SIGNATURBLOCK_EN_DEPRECATED.adobeSignReasonValue=Information about the verification can be found at http://www.signature-verification.gv.at
+sig_obj.SIGNATURBLOCK_EN_DEPRECATED.verifyURL=http://www.signature-verification.gv.at
+
+# WAI
+sig_obj.SIGNATURBLOCK_EN_DEPRECATED.sigLogoAltText=A standard signature logo is shown.
+
+sig_obj.SIGNATURBLOCK_EN_DEPRECATED.value.SIG_META=Signature verification at: http://www.signature-verification.gv.at
+sig_obj.SIGNATURBLOCK_EN_DEPRECATED.value.SIG_LABEL=./images/signatur-logo_en.png
+
+#---------------------- MAIN TABLE -------------------------
+sig_obj.SIGNATURBLOCK_EN_DEPRECATED.table.main.1=SIG_VALUE-cv
+sig_obj.SIGNATURBLOCK_EN_DEPRECATED.table.main.2=SIG_LABEL-i|TABLE-info
+sig_obj.SIGNATURBLOCK_EN_DEPRECATED.table.main.3=SIG_META-cv
+
+sig_obj.SIGNATURBLOCK_EN_DEPRECATED.table.main.ColsWidth=1 6
+sig_obj.SIGNATURBLOCK_EN_DEPRECATED.table.main.Style.bgcolor=255 255 255
+sig_obj.SIGNATURBLOCK_EN_DEPRECATED.table.main.Style.padding=4
+sig_obj.SIGNATURBLOCK_EN_DEPRECATED.table.main.Style.border=0.1
+sig_obj.SIGNATURBLOCK_EN_DEPRECATED.table.main.Style.halign=center
+sig_obj.SIGNATURBLOCK_EN_DEPRECATED.table.main.Style.valuehalign=left
+sig_obj.SIGNATURBLOCK_EN_DEPRECATED.table.main.Style.valign=middle
+sig_obj.SIGNATURBLOCK_EN_DEPRECATED.table.main.Style.imagevalign=middle
+sig_obj.SIGNATURBLOCK_EN_DEPRECATED.table.main.Style.font=HELVETICA,8,BOLD
+sig_obj.SIGNATURBLOCK_EN_DEPRECATED.table.main.Style.valuefont=COURIER,8,NORMAL
+
+#---------------------- INFO TABLE -------------------------
+sig_obj.SIGNATURBLOCK_EN_DEPRECATED.table.info.ColsWidth=1 5
+sig_obj.SIGNATURBLOCK_EN_DEPRECATED.table.info.1=SIG_SUBJECT-cv
+sig_obj.SIGNATURBLOCK_EN_DEPRECATED.table.info.2=SIG_DATE-cv
+sig_obj.SIGNATURBLOCK_EN_DEPRECATED.table.info.3=SIG_ISSUER-cv
+sig_obj.SIGNATURBLOCK_EN_DEPRECATED.table.info.4=SIG_NUMBER-cv
+sig_obj.SIGNATURBLOCK_EN_DEPRECATED.table.info.5=SIG_KZ-cv
+sig_obj.SIGNATURBLOCK_EN_DEPRECATED.table.info.6=SIG_ID-cv
diff --git a/work/cfg/profiles/SIGNATURBLOCK_EN_NOTE.properties b/work/cfg/profiles/SIGNATURBLOCK_EN_NOTE.properties
new file mode 100644
index 0000000..cf5dd17
--- /dev/null
+++ b/work/cfg/profiles/SIGNATURBLOCK_EN_NOTE.properties
@@ -0,0 +1,58 @@
+###################################################################################################
+# PROFIL: Signaturblock (Englisch) mit neuem Layout und Hinweistext
+
+sig_obj.SIGNATURBLOCK_EN_NOTE.description=Standardsignatur Englisch mit neuem Layout
+
+sig_obj.types.SIGNATURBLOCK_EN_NOTE=on
+
+sig_obj.SIGNATURBLOCK_EN_NOTE.key.SIG_VALUE=Signature Value
+sig_obj.SIGNATURBLOCK_EN_NOTE.key.SIG_SUBJECT=Signatory
+sig_obj.SIGNATURBLOCK_EN_NOTE.key.SIG_ISSUER=Issuer-Certificate
+sig_obj.SIGNATURBLOCK_EN_NOTE.key.SIG_NUMBER=Serial-No.
+sig_obj.SIGNATURBLOCK_EN_NOTE.key.SIG_KZ=Method
+sig_obj.SIGNATURBLOCK_EN_NOTE.key.SIG_ID=Parameter
+sig_obj.SIGNATURBLOCK_EN_NOTE.key.SIG_META=Verification
+sig_obj.SIGNATURBLOCK_EN_NOTE.key.SIG_NOTE=Note
+sig_obj.SIGNATURBLOCK_EN_NOTE.key.SIG_DATE=Date/Time-UTC
+
+sig_obj.SIGNATURBLOCK_EN_NOTE.value.SIG_SUBJECT=${subject.T != null ? (subject.T + " ") : ""}${subject.CN}
+
+sig_obj.SIGNATURBLOCK_EN_NOTE.pos=f:80
+sig_obj.SIGNATURBLOCK_EN_NOTE.adobeSignFieldValue=PDF-AS Signature
+sig_obj.SIGNATURBLOCK_EN_NOTE.adobeSignReasonValue=Signature verification at http://www.signature-verification.gv.at
+sig_obj.SIGNATURBLOCK_EN_NOTE.verifyURL=http://www.signature-verification.gv.at
+
+# WAI
+sig_obj.SIGNATURBLOCK_EN_NOTE.sigLogoAltText=A standard signature logo is shown.
+
+sig_obj.SIGNATURBLOCK_EN_NOTE.value.SIG_META=Signature verification at: http://www.signature-verification.gv.at
+sig_obj.SIGNATURBLOCK_EN_NOTE.value.SIG_LABEL=./images/signatur-logo_en.png
+sig_obj.SIGNATURBLOCK_EN_NOTE.value.SIG_NOTE=This document is signed with a qualified electronic signature. According to \u00a7\u00A04 art.\u00A01 of the Signature Act it in principle is legally equivalent to an handwritten signature.
+
+
+#---------------------- MAIN TABLE -------------------------
+sig_obj.SIGNATURBLOCK_EN_NOTE.table.main.1=SIG_VALUE-cv
+sig_obj.SIGNATURBLOCK_EN_NOTE.table.main.2=SIG_LABEL-i|TABLE-info
+sig_obj.SIGNATURBLOCK_EN_NOTE.table.main.3=SIG_META-cv
+sig_obj.SIGNATURBLOCK_EN_NOTE.table.main.4=SIG_NOTE-cv
+sig_obj.SIGNATURBLOCK_EN_NOTE.table.main.5=SIG_DATE-cv
+
+
+sig_obj.SIGNATURBLOCK_EN_NOTE.table.main.ColsWidth=1 6
+sig_obj.SIGNATURBLOCK_EN_NOTE.table.main.Style.bgcolor=255 255 255
+sig_obj.SIGNATURBLOCK_EN_NOTE.table.main.Style.padding=4
+sig_obj.SIGNATURBLOCK_EN_NOTE.table.main.Style.border=0.1
+sig_obj.SIGNATURBLOCK_EN_NOTE.table.main.Style.halign=center
+sig_obj.SIGNATURBLOCK_EN_NOTE.table.main.Style.valuehalign=left
+sig_obj.SIGNATURBLOCK_EN_NOTE.table.main.Style.valign=top
+sig_obj.SIGNATURBLOCK_EN_NOTE.table.main.Style.imagevalign=middle
+sig_obj.SIGNATURBLOCK_EN_NOTE.table.main.Style.font=HELVETICA,8,BOLD
+sig_obj.SIGNATURBLOCK_EN_NOTE.table.main.Style.valuefont=COURIER,8,NORMAL
+
+#---------------------- INFO TABLE -------------------------
+sig_obj.SIGNATURBLOCK_EN_NOTE.table.info.ColsWidth=1 5
+sig_obj.SIGNATURBLOCK_EN_NOTE.table.info.1=SIG_SUBJECT-cv
+sig_obj.SIGNATURBLOCK_EN_NOTE.table.info.2=SIG_ISSUER-cv
+sig_obj.SIGNATURBLOCK_EN_NOTE.table.info.3=SIG_NUMBER-cv
+sig_obj.SIGNATURBLOCK_EN_NOTE.table.info.4=SIG_KZ-cv
+sig_obj.SIGNATURBLOCK_EN_NOTE.table.info.5=SIG_ID-cv
diff --git a/work/cfg/profiles/SIGNATURBLOCK_EN_PDFA.properties b/work/cfg/profiles/SIGNATURBLOCK_EN_PDFA.properties
new file mode 100644
index 0000000..0541fdb
--- /dev/null
+++ b/work/cfg/profiles/SIGNATURBLOCK_EN_PDFA.properties
@@ -0,0 +1,57 @@
+###################################################################################################
+# PROFIL: Signaturblock (Englisch), PDF/A-1b
+
+sig_obj.SIGNATURBLOCK_EN_PDFA.description=Standardsignatur Englisch, PDF/A-1b
+
+sig_obj.types.SIGNATURBLOCK_EN_PDFA=on
+
+# enable/disable PDF/A1b support for this profile
+sig_obj.SIGNATURBLOCK_EN_PDFA.key.SIG_PDFA1B_VALID=true
+
+sig_obj.SIGNATURBLOCK_EN_PDFA.key.SIG_VALUE=Signature Value
+sig_obj.SIGNATURBLOCK_EN_PDFA.key.SIG_SUBJECT=Signatory
+sig_obj.SIGNATURBLOCK_EN_PDFA.key.SIG_ISSUER=Issuer-Certificate
+sig_obj.SIGNATURBLOCK_EN_PDFA.key.SIG_NUMBER=Serial-No.
+sig_obj.SIGNATURBLOCK_EN_PDFA.key.SIG_KZ=Method
+sig_obj.SIGNATURBLOCK_EN_PDFA.key.SIG_ID=Parameter
+sig_obj.SIGNATURBLOCK_EN_PDFA.key.SIG_META=Verification
+sig_obj.SIGNATURBLOCK_EN_PDFA.key.SIG_DATE=Date/Time-UTC
+
+
+sig_obj.SIGNATURBLOCK_EN_PDFA.value.SIG_SUBJECT=${subject.T != null ? (subject.T + " ") : ""}${subject.CN}
+
+sig_obj.SIGNATURBLOCK_EN_PDFA.pos=f:80
+sig_obj.SIGNATURBLOCK_EN_PDFA.adobeSignFieldValue=PDF-AS Signature
+sig_obj.SIGNATURBLOCK_EN_PDFA.adobeSignReasonValue=Signature verification at http://www.signature-verification.gv.at
+sig_obj.SIGNATURBLOCK_EN_PDFA.verifyURL=http://www.signature-verification.gv.at
+
+# WAI
+sig_obj.SIGNATURBLOCK_EN_PDFA.sigLogoAltText=A standard signature logo is shown.
+
+sig_obj.SIGNATURBLOCK_EN_PDFA.value.SIG_META=Signature verification at: http://www.signature-verification.gv.at
+sig_obj.SIGNATURBLOCK_EN_PDFA.value.SIG_LABEL=./images/signatur-logo_en.png
+
+#---------------------- MAIN TABLE -------------------------
+sig_obj.SIGNATURBLOCK_EN_PDFA.table.main.1=SIG_VALUE-cv
+sig_obj.SIGNATURBLOCK_EN_PDFA.table.main.2=SIG_LABEL-i|TABLE-info
+sig_obj.SIGNATURBLOCK_EN_PDFA.table.main.3=SIG_META-cv
+sig_obj.SIGNATURBLOCK_EN_PDFA.table.main.4=SIG_DATE-cv
+
+sig_obj.SIGNATURBLOCK_EN_PDFA.table.main.ColsWidth=1 5.5
+sig_obj.SIGNATURBLOCK_EN_PDFA.table.main.Style.bgcolor=255 255 255
+sig_obj.SIGNATURBLOCK_EN_PDFA.table.main.Style.padding=4
+sig_obj.SIGNATURBLOCK_EN_PDFA.table.main.Style.border=0.1
+sig_obj.SIGNATURBLOCK_EN_PDFA.table.main.Style.halign=center
+sig_obj.SIGNATURBLOCK_EN_PDFA.table.main.Style.valuehalign=left
+sig_obj.SIGNATURBLOCK_EN_PDFA.table.main.Style.valign=top
+sig_obj.SIGNATURBLOCK_EN_PDFA.table.main.Style.imagevalign=middle
+sig_obj.SIGNATURBLOCK_EN_PDFA.table.main.Style.font=TTF:DejaVuSansCondensed-Bold.ttf,8
+sig_obj.SIGNATURBLOCK_EN_PDFA.table.main.Style.valuefont=TTF:DejaVuSansMono.ttf,8
+
+#---------------------- INFO TABLE -------------------------
+sig_obj.SIGNATURBLOCK_EN_PDFA.table.info.ColsWidth=1 4.5
+sig_obj.SIGNATURBLOCK_EN_PDFA.table.info.1=SIG_SUBJECT-cv
+sig_obj.SIGNATURBLOCK_EN_PDFA.table.info.2=SIG_ISSUER-cv
+sig_obj.SIGNATURBLOCK_EN_PDFA.table.info.3=SIG_NUMBER-cv
+sig_obj.SIGNATURBLOCK_EN_PDFA.table.info.4=SIG_KZ-cv
+sig_obj.SIGNATURBLOCK_EN_PDFA.table.info.5=SIG_ID-cv
diff --git a/work/cfg/profiles/SIGNATURBLOCK_EN_PDFA_NOTE.properties b/work/cfg/profiles/SIGNATURBLOCK_EN_PDFA_NOTE.properties
new file mode 100644
index 0000000..840fdf5
--- /dev/null
+++ b/work/cfg/profiles/SIGNATURBLOCK_EN_PDFA_NOTE.properties
@@ -0,0 +1,60 @@
+###################################################################################################
+# PROFIL: Signaturblock (Englisch), PDF/A-1b und mit Hinweistext
+
+sig_obj.SIGNATURBLOCK_EN_PDFA_NOTE.description=Standardsignatur Englisch, PDF/A-1b
+
+sig_obj.types.SIGNATURBLOCK_EN_PDFA_NOTE=on
+
+# enable/disable PDF/A1b support for this profile
+sig_obj.SIGNATURBLOCK_EN_PDFA_NOTE.key.SIG_PDFA1B_VALID=true
+
+sig_obj.SIGNATURBLOCK_EN_PDFA_NOTE.key.SIG_VALUE=Signature Value
+sig_obj.SIGNATURBLOCK_EN_PDFA_NOTE.key.SIG_SUBJECT=Signatory
+sig_obj.SIGNATURBLOCK_EN_PDFA_NOTE.key.SIG_ISSUER=Issuer-Certificate
+sig_obj.SIGNATURBLOCK_EN_PDFA_NOTE.key.SIG_NUMBER=Serial-No.
+sig_obj.SIGNATURBLOCK_EN_PDFA_NOTE.key.SIG_KZ=Method
+sig_obj.SIGNATURBLOCK_EN_PDFA_NOTE.key.SIG_ID=Parameter
+sig_obj.SIGNATURBLOCK_EN_PDFA_NOTE.key.SIG_META=Verification
+sig_obj.SIGNATURBLOCK_EN_PDFA_NOTE.key.SIG_NOTE=Note
+sig_obj.SIGNATURBLOCK_EN_PDFA_NOTE.key.SIG_DATE=Date/Time-UTC
+
+
+sig_obj.SIGNATURBLOCK_EN_PDFA_NOTE.value.SIG_SUBJECT=${subject.T != null ? (subject.T + " ") : ""}${subject.CN}
+
+sig_obj.SIGNATURBLOCK_EN_PDFA_NOTE.pos=f:80
+sig_obj.SIGNATURBLOCK_EN_PDFA_NOTE.adobeSignFieldValue=PDF-AS Signature
+sig_obj.SIGNATURBLOCK_EN_PDFA_NOTE.adobeSignReasonValue=Signature verification at http://www.signature-verification.gv.at
+sig_obj.SIGNATURBLOCK_EN_PDFA_NOTE.verifyURL=http://www.signature-verification.gv.at
+
+# WAI
+sig_obj.SIGNATURBLOCK_EN_PDFA_NOTE.sigLogoAltText=A standard signature logo is shown.
+
+sig_obj.SIGNATURBLOCK_EN_PDFA_NOTE.value.SIG_META=Signature verification at: http://www.signature-verification.gv.at
+sig_obj.SIGNATURBLOCK_EN_PDFA_NOTE.value.SIG_LABEL=./images/signatur-logo_en.png
+sig_obj.SIGNATURBLOCK_EN_PDFA_NOTE.value.SIG_NOTE=This document is signed with a qualified electronic signature. According to \u00a7\u00A04 art.\u00A01 of the Signature Act it in principle is legally equivalent to an handwritten signature.
+
+#---------------------- MAIN TABLE -------------------------
+sig_obj.SIGNATURBLOCK_EN_PDFA_NOTE.table.main.1=SIG_VALUE-cv
+sig_obj.SIGNATURBLOCK_EN_PDFA_NOTE.table.main.2=SIG_LABEL-i|TABLE-info
+sig_obj.SIGNATURBLOCK_EN_PDFA_NOTE.table.main.3=SIG_META-cv
+sig_obj.SIGNATURBLOCK_EN_PDFA_NOTE.table.main.4=SIG_NOTE-cv
+sig_obj.SIGNATURBLOCK_EN_PDFA_NOTE.table.main.5=SIG_DATE-cv
+
+sig_obj.SIGNATURBLOCK_EN_PDFA_NOTE.table.main.ColsWidth=1 5.5
+sig_obj.SIGNATURBLOCK_EN_PDFA_NOTE.table.main.Style.bgcolor=255 255 255
+sig_obj.SIGNATURBLOCK_EN_PDFA_NOTE.table.main.Style.padding=4
+sig_obj.SIGNATURBLOCK_EN_PDFA_NOTE.table.main.Style.border=0.1
+sig_obj.SIGNATURBLOCK_EN_PDFA_NOTE.table.main.Style.halign=center
+sig_obj.SIGNATURBLOCK_EN_PDFA_NOTE.table.main.Style.valuehalign=left
+sig_obj.SIGNATURBLOCK_EN_PDFA_NOTE.table.main.Style.valign=top
+sig_obj.SIGNATURBLOCK_EN_PDFA_NOTE.table.main.Style.imagevalign=middle
+sig_obj.SIGNATURBLOCK_EN_PDFA_NOTE.table.main.Style.font=TTF:DejaVuSansCondensed-Bold.ttf,8
+sig_obj.SIGNATURBLOCK_EN_PDFA_NOTE.table.main.Style.valuefont=TTF:DejaVuSansMono.ttf,8
+
+#---------------------- INFO TABLE -------------------------
+sig_obj.SIGNATURBLOCK_EN_PDFA_NOTE.table.info.ColsWidth=1 4.5
+sig_obj.SIGNATURBLOCK_EN_PDFA_NOTE.table.info.1=SIG_SUBJECT-cv
+sig_obj.SIGNATURBLOCK_EN_PDFA_NOTE.table.info.2=SIG_ISSUER-cv
+sig_obj.SIGNATURBLOCK_EN_PDFA_NOTE.table.info.3=SIG_NUMBER-cv
+sig_obj.SIGNATURBLOCK_EN_PDFA_NOTE.table.info.4=SIG_KZ-cv
+sig_obj.SIGNATURBLOCK_EN_PDFA_NOTE.table.info.5=SIG_ID-cv
diff --git a/work/cfg/profiles/SIGNATURBLOCK_MINIMAL_DE.properties b/work/cfg/profiles/SIGNATURBLOCK_MINIMAL_DE.properties
new file mode 100644
index 0000000..6ed88e9
--- /dev/null
+++ b/work/cfg/profiles/SIGNATURBLOCK_MINIMAL_DE.properties
@@ -0,0 +1,33 @@
+###################################################################################################
+# PROFIL: minimaler Signaturblock (Deutsch)
+
+sig_obj.types.SIGNATURBLOCK_MINIMAL_DE=on
+
+sig_obj.SIGNATURBLOCK_MINIMAL_DE.description=minimale Standardsignatur Deutsch
+sig_obj.SIGNATURBLOCK_MINIMAL_DE.key.SIG_META=Pr\u00fcfinformation
+
+sig_obj.SIGNATURBLOCK_MINIMAL_DE.pos=w:230.0;f:80
+sig_obj.SIGNATURBLOCK_MINIMAL_DE.adobeSignFieldValue=PDF-AS Signatur
+sig_obj.SIGNATURBLOCK_MINIMAL_DE.adobeSignReasonValue=Signaturpruefung unter http://www.signaturpruefung.gv.at
+sig_obj.SIGNATURBLOCK_MINIMAL_DE.verifyURL=http://www.signaturpruefung.gv.at
+
+sig_obj.SIGNATURBLOCK_MINIMAL_DE.value.SIG_META=Signaturpruefung unter: http://www.signaturpruefung.gv.at
+sig_obj.SIGNATURBLOCK_MINIMAL_DE.value.SIG_LABEL=./images/signatur-logo_de.png
+sig_obj.SIGNATURBLOCK_MINIMAL_DE.table.main.Style.imagescaletofit=65.0;65.0
+
+# WAI
+sig_obj.SIGNATURBLOCK_MINIMAL_DE.sigLogoAltText=Abgebildet ist eine Standard-Signaturbildmarke.
+
+#---------------------- MAIN TABLE -------------------------
+sig_obj.SIGNATURBLOCK_MINIMAL_DE.table.main.1=SIG_LABEL-i
+sig_obj.SIGNATURBLOCK_MINIMAL_DE.table.main.2=SIG_META-v
+
+sig_obj.SIGNATURBLOCK_MINIMAL_DE.table.main.ColsWidth=1
+sig_obj.SIGNATURBLOCK_MINIMAL_DE.table.main.Style.bgcolor=255 255 255
+sig_obj.SIGNATURBLOCK_MINIMAL_DE.table.main.Style.padding=4
+sig_obj.SIGNATURBLOCK_MINIMAL_DE.table.main.Style.border=0
+sig_obj.SIGNATURBLOCK_MINIMAL_DE.table.main.Style.halign=center
+sig_obj.SIGNATURBLOCK_MINIMAL_DE.table.main.Style.valuehalign=left
+sig_obj.SIGNATURBLOCK_MINIMAL_DE.table.main.Style.valign=middle
+sig_obj.SIGNATURBLOCK_MINIMAL_DE.table.main.Style.font=HELVETICA,9,NORMAL
+sig_obj.SIGNATURBLOCK_MINIMAL_DE.table.main.Style.valuefont=HELVETICA,9,NORMAL
diff --git a/work/cfg/profiles/SIGNATURBLOCK_MINIMAL_EN.properties b/work/cfg/profiles/SIGNATURBLOCK_MINIMAL_EN.properties
new file mode 100644
index 0000000..6a6374b
--- /dev/null
+++ b/work/cfg/profiles/SIGNATURBLOCK_MINIMAL_EN.properties
@@ -0,0 +1,33 @@
+###################################################################################################
+# PROFIL: minimaler Signaturblock (Englisch)
+
+sig_obj.SIGNATURBLOCK_MINIMAL_EN.description=minimale Standardsignatur Englisch
+
+sig_obj.types.SIGNATURBLOCK_MINIMAL_EN=on
+
+sig_obj.SIGNATURBLOCK_MINIMAL_EN.key.SIG_META=Verification
+sig_obj.SIGNATURBLOCK_MINIMAL_EN.pos=w:230.0;f:80
+sig_obj.SIGNATURBLOCK_MINIMAL_EN.adobeSignFieldValue=PDF-AS Signature
+sig_obj.SIGNATURBLOCK_MINIMAL_EN.adobeSignReasonValue=Information about the verification can be found at http://www.signature-verification.gv.at
+sig_obj.SIGNATURBLOCK_MINIMAL_EN.verifyURL=http://www.signature-verification.gv.at
+
+sig_obj.SIGNATURBLOCK_MINIMAL_EN.value.SIG_META=Signature verification at: http://www.signature-verification.gv.at
+sig_obj.SIGNATURBLOCK_MINIMAL_EN.value.SIG_LABEL=./images/signatur-logo_en.png
+sig_obj.SIGNATURBLOCK_MINIMAL_EN.table.main.Style.imagescaletofit=65.0;65.0
+
+# WAI
+sig_obj.SIGNATURBLOCK_MINIMAL_EN.sigLogoAltText=A standard signature logo is shown.
+
+#---------------------- MAIN TABLE -------------------------
+sig_obj.SIGNATURBLOCK_MINIMAL_EN.table.main.1=SIG_LABEL-i
+sig_obj.SIGNATURBLOCK_MINIMAL_EN.table.main.2=SIG_META-v
+
+sig_obj.SIGNATURBLOCK_MINIMAL_EN.table.main.ColsWidth=1
+sig_obj.SIGNATURBLOCK_MINIMAL_EN.table.main.Style.bgcolor=255 255 255
+sig_obj.SIGNATURBLOCK_MINIMAL_EN.table.main.Style.padding=4
+sig_obj.SIGNATURBLOCK_MINIMAL_EN.table.main.Style.border=0
+sig_obj.SIGNATURBLOCK_MINIMAL_EN.table.main.Style.halign=center
+sig_obj.SIGNATURBLOCK_MINIMAL_EN.table.main.Style.valuehalign=left
+sig_obj.SIGNATURBLOCK_MINIMAL_EN.table.main.Style.valign=middle
+sig_obj.SIGNATURBLOCK_MINIMAL_EN.table.main.Style.font=HELVETICA,9,NORMAL
+sig_obj.SIGNATURBLOCK_MINIMAL_EN.table.main.Style.valuefont=HELVETICA,9,NORMAL
diff --git a/work/cfg/profiles/SIGNATURBLOCK_SMALL_DE.properties b/work/cfg/profiles/SIGNATURBLOCK_SMALL_DE.properties
new file mode 100644
index 0000000..78e7a8a
--- /dev/null
+++ b/work/cfg/profiles/SIGNATURBLOCK_SMALL_DE.properties
@@ -0,0 +1,54 @@
+###################################################################################################
+# PROFIL: Signaturblock klein (Deutsch)
+
+sig_obj.SIGNATURBLOCK_SMALL_DE.description=Standardsignatur klein Deutsch
+
+sig_obj.types.SIGNATURBLOCK_SMALL_DE=on
+
+sig_obj.SIGNATURBLOCK_SMALL_DE.key.SIG_VALUE=Signaturwert
+sig_obj.SIGNATURBLOCK_SMALL_DE.key.SIG_SUBJECT=Unterzeichner
+sig_obj.SIGNATURBLOCK_SMALL_DE.key.SIG_ISSUER=Aussteller-Zertifikat
+sig_obj.SIGNATURBLOCK_SMALL_DE.key.SIG_NUMBER=Serien-Nr.
+sig_obj.SIGNATURBLOCK_SMALL_DE.key.SIG_KZ=Methode
+sig_obj.SIGNATURBLOCK_SMALL_DE.key.SIG_ID=Parameter
+sig_obj.SIGNATURBLOCK_SMALL_DE.key.SIG_META=Pr\u00fcfinformation
+sig_obj.SIGNATURBLOCK_SMALL_DE.key.SIG_DATE=Datum/Zeit-UTC
+
+
+sig_obj.SIGNATURBLOCK_SMALL_DE.value.SIG_SUBJECT=${subject.T != null ? (subject.T + " ") : ""}${subject.CN}
+
+sig_obj.SIGNATURBLOCK_SMALL_DE.pos=f:80;w:230
+sig_obj.SIGNATURBLOCK_SMALL_DE.adobeSignFieldValue=PDF-AS Signatur
+sig_obj.SIGNATURBLOCK_SMALL_DE.adobeSignReasonValue=Signaturpruefung unter http://www.signaturpruefung.gv.at
+sig_obj.SIGNATURBLOCK_SMALL_DE.verifyURL=http://www.signaturpruefung.gv.at
+
+# WAI
+sig_obj.SIGNATURBLOCK_SMALL_DE.sigLogoAltText=Abgebildet ist eine Standard-Signaturbildmarke.
+
+sig_obj.SIGNATURBLOCK_SMALL_DE.value.SIG_META=Signaturpruefung unter: http://www.signaturpruefung.gv.at
+sig_obj.SIGNATURBLOCK_SMALL_DE.value.SIG_LABEL=./images/signatur-logo_de.png
+
+#---------------------- MAIN TABLE -------------------------
+sig_obj.SIGNATURBLOCK_SMALL_DE.table.main.1=SIG_VALUE-cv
+sig_obj.SIGNATURBLOCK_SMALL_DE.table.main.2=SIG_LABEL-i|TABLE-info
+sig_obj.SIGNATURBLOCK_SMALL_DE.table.main.3=SIG_META-cv
+sig_obj.SIGNATURBLOCK_SMALL_DE.table.main.4=SIG_DATE-cv
+
+sig_obj.SIGNATURBLOCK_SMALL_DE.table.main.ColsWidth=1 4.5
+sig_obj.SIGNATURBLOCK_SMALL_DE.table.main.Style.bgcolor=255 255 255
+sig_obj.SIGNATURBLOCK_SMALL_DE.table.main.Style.padding=2
+sig_obj.SIGNATURBLOCK_SMALL_DE.table.main.Style.border=0.1
+sig_obj.SIGNATURBLOCK_SMALL_DE.table.main.Style.halign=center
+sig_obj.SIGNATURBLOCK_SMALL_DE.table.main.Style.valuehalign=left
+sig_obj.SIGNATURBLOCK_SMALL_DE.table.main.Style.valign=top
+sig_obj.SIGNATURBLOCK_SMALL_DE.table.main.Style.imagevalign=middle
+sig_obj.SIGNATURBLOCK_SMALL_DE.table.main.Style.font=HELVETICA,5,BOLD
+sig_obj.SIGNATURBLOCK_SMALL_DE.table.main.Style.valuefont=COURIER,5,NORMAL
+
+#---------------------- INFO TABLE -------------------------
+sig_obj.SIGNATURBLOCK_SMALL_DE.table.info.ColsWidth=1 2.7
+sig_obj.SIGNATURBLOCK_SMALL_DE.table.info.1=SIG_SUBJECT-cv
+sig_obj.SIGNATURBLOCK_SMALL_DE.table.info.2=SIG_ISSUER-cv
+sig_obj.SIGNATURBLOCK_SMALL_DE.table.info.3=SIG_NUMBER-cv
+sig_obj.SIGNATURBLOCK_SMALL_DE.table.info.4=SIG_KZ-cv
+sig_obj.SIGNATURBLOCK_SMALL_DE.table.info.5=SIG_ID-cv
diff --git a/work/cfg/profiles/SIGNATURBLOCK_SMALL_DE_NOTE.properties b/work/cfg/profiles/SIGNATURBLOCK_SMALL_DE_NOTE.properties
new file mode 100644
index 0000000..9373353
--- /dev/null
+++ b/work/cfg/profiles/SIGNATURBLOCK_SMALL_DE_NOTE.properties
@@ -0,0 +1,57 @@
+###################################################################################################
+# PROFIL: Signaturblock klein (Deutsch) mit Hinweistext
+
+sig_obj.SIGNATURBLOCK_SMALL_DE_NOTE.description=Standardsignatur klein Deutsch
+
+sig_obj.types.SIGNATURBLOCK_SMALL_DE_NOTE=on
+
+sig_obj.SIGNATURBLOCK_SMALL_DE_NOTE.key.SIG_VALUE=Signaturwert
+sig_obj.SIGNATURBLOCK_SMALL_DE_NOTE.key.SIG_SUBJECT=Unterzeichner
+sig_obj.SIGNATURBLOCK_SMALL_DE_NOTE.key.SIG_ISSUER=Aussteller-Zertifikat
+sig_obj.SIGNATURBLOCK_SMALL_DE_NOTE.key.SIG_NUMBER=Serien-Nr.
+sig_obj.SIGNATURBLOCK_SMALL_DE_NOTE.key.SIG_KZ=Methode
+sig_obj.SIGNATURBLOCK_SMALL_DE_NOTE.key.SIG_ID=Parameter
+sig_obj.SIGNATURBLOCK_SMALL_DE_NOTE.key.SIG_META=Pr\u00fcfinformation
+sig_obj.SIGNATURBLOCK_SMALL_DE_NOTE.key.SIG_NOTE=Hinweis
+sig_obj.SIGNATURBLOCK_SMALL_DE_NOTE.key.SIG_DATE=Datum/Zeit-UTC
+
+
+sig_obj.SIGNATURBLOCK_SMALL_DE_NOTE.value.SIG_SUBJECT=${subject.T != null ? (subject.T + " ") : ""}${subject.CN}
+
+sig_obj.SIGNATURBLOCK_SMALL_DE_NOTE.pos=f:80;w:230
+sig_obj.SIGNATURBLOCK_SMALL_DE_NOTE.adobeSignFieldValue=PDF-AS Signatur
+sig_obj.SIGNATURBLOCK_SMALL_DE_NOTE.adobeSignReasonValue=Signaturpruefung unter http://www.signaturpruefung.gv.at
+sig_obj.SIGNATURBLOCK_SMALL_DE_NOTE.verifyURL=http://www.signaturpruefung.gv.at
+
+# WAI
+sig_obj.SIGNATURBLOCK_SMALL_DE_NOTE.sigLogoAltText=Abgebildet ist eine Standard-Signaturbildmarke.
+
+sig_obj.SIGNATURBLOCK_SMALL_DE_NOTE.value.SIG_META=Signaturpruefung unter: http://www.signaturpruefung.gv.at
+sig_obj.SIGNATURBLOCK_SMALL_DE_NOTE.value.SIG_LABEL=./images/signatur-logo_de.png
+sig_obj.SIGNATURBLOCK_SMALL_DE_NOTE.value.SIG_NOTE=Dieses mit einer qualifizierten elektronischen Signatur versehene Dokument ist gem\u00e4\u00df \u00a7\u00A04 Abs.\u00A01 Signaturgesetz einem handschriftlich unterschriebenen Dokument grunds\u00e4tzlich rechtlich gleichgestellt.
+
+#---------------------- MAIN TABLE -------------------------
+sig_obj.SIGNATURBLOCK_SMALL_DE_NOTE.table.main.1=SIG_VALUE-cv
+sig_obj.SIGNATURBLOCK_SMALL_DE_NOTE.table.main.2=SIG_LABEL-i|TABLE-info
+sig_obj.SIGNATURBLOCK_SMALL_DE_NOTE.table.main.3=SIG_META-cv
+sig_obj.SIGNATURBLOCK_SMALL_DE_NOTE.table.main.4=SIG_NOTE-cv
+sig_obj.SIGNATURBLOCK_SMALL_DE_NOTE.table.main.5=SIG_DATE-cv
+
+sig_obj.SIGNATURBLOCK_SMALL_DE_NOTE.table.main.ColsWidth=1 4.5
+sig_obj.SIGNATURBLOCK_SMALL_DE_NOTE.table.main.Style.bgcolor=255 255 255
+sig_obj.SIGNATURBLOCK_SMALL_DE_NOTE.table.main.Style.padding=2
+sig_obj.SIGNATURBLOCK_SMALL_DE_NOTE.table.main.Style.border=0.1
+sig_obj.SIGNATURBLOCK_SMALL_DE_NOTE.table.main.Style.halign=center
+sig_obj.SIGNATURBLOCK_SMALL_DE_NOTE.table.main.Style.valuehalign=left
+sig_obj.SIGNATURBLOCK_SMALL_DE_NOTE.table.main.Style.valign=top
+sig_obj.SIGNATURBLOCK_SMALL_DE_NOTE.table.main.Style.imagevalign=middle
+sig_obj.SIGNATURBLOCK_SMALL_DE_NOTE.table.main.Style.font=HELVETICA,5,BOLD
+sig_obj.SIGNATURBLOCK_SMALL_DE_NOTE.table.main.Style.valuefont=COURIER,5,NORMAL
+
+#---------------------- INFO TABLE -------------------------
+sig_obj.SIGNATURBLOCK_SMALL_DE_NOTE.table.info.ColsWidth=1 2.7
+sig_obj.SIGNATURBLOCK_SMALL_DE_NOTE.table.info.1=SIG_SUBJECT-cv
+sig_obj.SIGNATURBLOCK_SMALL_DE_NOTE.table.info.2=SIG_ISSUER-cv
+sig_obj.SIGNATURBLOCK_SMALL_DE_NOTE.table.info.3=SIG_NUMBER-cv
+sig_obj.SIGNATURBLOCK_SMALL_DE_NOTE.table.info.4=SIG_KZ-cv
+sig_obj.SIGNATURBLOCK_SMALL_DE_NOTE.table.info.5=SIG_ID-cv
diff --git a/work/cfg/profiles/SIGNATURBLOCK_SMALL_EN.properties b/work/cfg/profiles/SIGNATURBLOCK_SMALL_EN.properties
new file mode 100644
index 0000000..4dbfbed
--- /dev/null
+++ b/work/cfg/profiles/SIGNATURBLOCK_SMALL_EN.properties
@@ -0,0 +1,54 @@
+###################################################################################################
+# PROFIL: Signaturblock Small (Englisch)
+
+sig_obj.SIGNATURBLOCK_SMALL_EN.description=Standardsignatur klein Englisch
+
+sig_obj.types.SIGNATURBLOCK_SMALL_EN=on
+
+sig_obj.SIGNATURBLOCK_SMALL_EN.key.SIG_VALUE=Signature Value
+sig_obj.SIGNATURBLOCK_SMALL_EN.key.SIG_SUBJECT=Signatory
+sig_obj.SIGNATURBLOCK_SMALL_EN.key.SIG_ISSUER=Issuer-Certificate
+sig_obj.SIGNATURBLOCK_SMALL_EN.key.SIG_NUMBER=Serial-No.
+sig_obj.SIGNATURBLOCK_SMALL_EN.key.SIG_KZ=Method
+sig_obj.SIGNATURBLOCK_SMALL_EN.key.SIG_ID=Parameter
+sig_obj.SIGNATURBLOCK_SMALL_EN.key.SIG_META=Verification
+sig_obj.SIGNATURBLOCK_SMALL_EN.key.SIG_DATE=Date/Time-UTC
+
+
+sig_obj.SIGNATURBLOCK_SMALL_EN.value.SIG_SUBJECT=${subject.T != null ? (subject.T + " ") : ""}${subject.CN}
+
+sig_obj.SIGNATURBLOCK_SMALL_EN.pos=f:80;w:260
+sig_obj.SIGNATURBLOCK_SMALL_EN.adobeSignFieldValue=PDF-AS Signature
+sig_obj.SIGNATURBLOCK_SMALL_EN.adobeSignReasonValue=Signature verification at: http://www.signature-verification.gv.at
+sig_obj.SIGNATURBLOCK_SMALL_EN.verifyURL=http://www.signature-verification.gv.at
+
+sig_obj.SIGNATURBLOCK_SMALL_EN.value.SIG_META=Signature verification at: http://www.signature-verification.gv.at
+sig_obj.SIGNATURBLOCK_SMALL_EN.value.SIG_LABEL=./images/signatur-logo_en.png
+
+# WAI
+sig_obj.SIGNATURBLOCK_SMALL_EN.sigLogoAltText=A standard signature logo is shown.
+
+#---------------------- MAIN TABLE -------------------------
+sig_obj.SIGNATURBLOCK_SMALL_EN.table.main.1=SIG_VALUE-cv
+sig_obj.SIGNATURBLOCK_SMALL_EN.table.main.2=SIG_LABEL-i|TABLE-info
+sig_obj.SIGNATURBLOCK_SMALL_EN.table.main.3=SIG_META-cv
+sig_obj.SIGNATURBLOCK_SMALL_EN.table.main.4=SIG_DATE-cv
+
+sig_obj.SIGNATURBLOCK_SMALL_EN.table.main.ColsWidth=1 4.5
+sig_obj.SIGNATURBLOCK_SMALL_EN.table.main.Style.bgcolor=255 255 255
+sig_obj.SIGNATURBLOCK_SMALL_EN.table.main.Style.padding=2
+sig_obj.SIGNATURBLOCK_SMALL_EN.table.main.Style.border=0.1
+sig_obj.SIGNATURBLOCK_SMALL_EN.table.main.Style.halign=center
+sig_obj.SIGNATURBLOCK_SMALL_EN.table.main.Style.valuehalign=left
+sig_obj.SIGNATURBLOCK_SMALL_EN.table.main.Style.valign=top
+sig_obj.SIGNATURBLOCK_SMALL_EN.table.main.Style.imagevalign=middle
+sig_obj.SIGNATURBLOCK_SMALL_EN.table.main.Style.font=HELVETICA,5,BOLD
+sig_obj.SIGNATURBLOCK_SMALL_EN.table.main.Style.valuefont=COURIER,5,NORMAL
+
+#---------------------- INFO TABLE -------------------------
+sig_obj.SIGNATURBLOCK_SMALL_EN.table.info.ColsWidth=1 3.2
+sig_obj.SIGNATURBLOCK_SMALL_EN.table.info.1=SIG_SUBJECT-cv
+sig_obj.SIGNATURBLOCK_SMALL_EN.table.info.2=SIG_ISSUER-cv
+sig_obj.SIGNATURBLOCK_SMALL_EN.table.info.3=SIG_NUMBER-cv
+sig_obj.SIGNATURBLOCK_SMALL_EN.table.info.4=SIG_KZ-cv
+sig_obj.SIGNATURBLOCK_SMALL_EN.table.info.5=SIG_ID-cv
diff --git a/work/cfg/profiles/SIGNATURBLOCK_SMALL_EN_NOTE.properties b/work/cfg/profiles/SIGNATURBLOCK_SMALL_EN_NOTE.properties
new file mode 100644
index 0000000..4824f4b
--- /dev/null
+++ b/work/cfg/profiles/SIGNATURBLOCK_SMALL_EN_NOTE.properties
@@ -0,0 +1,57 @@
+###################################################################################################
+# PROFIL: Signaturblock Small (Englisch) mit Hinweistext
+
+sig_obj.SIGNATURBLOCK_SMALL_EN_NOTE.description=Standardsignatur klein Englisch
+
+sig_obj.types.SIGNATURBLOCK_SMALL_EN_NOTE=on
+
+sig_obj.SIGNATURBLOCK_SMALL_EN_NOTE.key.SIG_VALUE=Signature Value
+sig_obj.SIGNATURBLOCK_SMALL_EN_NOTE.key.SIG_SUBJECT=Signatory
+sig_obj.SIGNATURBLOCK_SMALL_EN_NOTE.key.SIG_ISSUER=Issuer-Certificate
+sig_obj.SIGNATURBLOCK_SMALL_EN_NOTE.key.SIG_NUMBER=Serial-No.
+sig_obj.SIGNATURBLOCK_SMALL_EN_NOTE.key.SIG_KZ=Method
+sig_obj.SIGNATURBLOCK_SMALL_EN_NOTE.key.SIG_ID=Parameter
+sig_obj.SIGNATURBLOCK_SMALL_EN_NOTE.key.SIG_META=Verification
+sig_obj.SIGNATURBLOCK_SMALL_EN_NOTE.key.SIG_NOTE=Note
+sig_obj.SIGNATURBLOCK_SMALL_EN_NOTE.key.SIG_DATE=Date/Time-UTC
+
+
+sig_obj.SIGNATURBLOCK_SMALL_EN_NOTE.value.SIG_SUBJECT=${subject.T != null ? (subject.T + " ") : ""}${subject.CN}
+
+sig_obj.SIGNATURBLOCK_SMALL_EN_NOTE.pos=f:80;w:260
+sig_obj.SIGNATURBLOCK_SMALL_EN_NOTE.adobeSignFieldValue=PDF-AS Signature
+sig_obj.SIGNATURBLOCK_SMALL_EN_NOTE.adobeSignReasonValue=Signature verification at: http://www.signature-verification.gv.at
+sig_obj.SIGNATURBLOCK_SMALL_EN_NOTE.verifyURL=http://www.signature-verification.gv.at
+
+sig_obj.SIGNATURBLOCK_SMALL_EN_NOTE.value.SIG_META=Signature verification at: http://www.signature-verification.gv.at
+sig_obj.SIGNATURBLOCK_SMALL_EN_NOTE.value.SIG_LABEL=./images/signatur-logo_en.png
+sig_obj.SIGNATURBLOCK_SMALL_EN_NOTE.value.SIG_NOTE=This document is signed with a qualified electronic signature. According to \u00a7\u00A04 art.\u00A01 of the Signature Act it in principle is legally equivalent to an handwritten signature.
+
+# WAI
+sig_obj.SIGNATURBLOCK_SMALL_EN_NOTE.sigLogoAltText=A standard signature logo is shown.
+
+#---------------------- MAIN TABLE -------------------------
+sig_obj.SIGNATURBLOCK_SMALL_EN_NOTE.table.main.1=SIG_VALUE-cv
+sig_obj.SIGNATURBLOCK_SMALL_EN_NOTE.table.main.2=SIG_LABEL-i|TABLE-info
+sig_obj.SIGNATURBLOCK_SMALL_EN_NOTE.table.main.3=SIG_META-cv
+sig_obj.SIGNATURBLOCK_SMALL_EN_NOTE.table.main.4=SIG_NOTE-cv
+sig_obj.SIGNATURBLOCK_SMALL_EN_NOTE.table.main.5=SIG_DATE-cv
+
+sig_obj.SIGNATURBLOCK_SMALL_EN_NOTE.table.main.ColsWidth=1 4.5
+sig_obj.SIGNATURBLOCK_SMALL_EN_NOTE.table.main.Style.bgcolor=255 255 255
+sig_obj.SIGNATURBLOCK_SMALL_EN_NOTE.table.main.Style.padding=2
+sig_obj.SIGNATURBLOCK_SMALL_EN_NOTE.table.main.Style.border=0.1
+sig_obj.SIGNATURBLOCK_SMALL_EN_NOTE.table.main.Style.halign=center
+sig_obj.SIGNATURBLOCK_SMALL_EN_NOTE.table.main.Style.valuehalign=left
+sig_obj.SIGNATURBLOCK_SMALL_EN_NOTE.table.main.Style.valign=top
+sig_obj.SIGNATURBLOCK_SMALL_EN_NOTE.table.main.Style.imagevalign=middle
+sig_obj.SIGNATURBLOCK_SMALL_EN_NOTE.table.main.Style.font=HELVETICA,5,BOLD
+sig_obj.SIGNATURBLOCK_SMALL_EN_NOTE.table.main.Style.valuefont=COURIER,5,NORMAL
+
+#---------------------- INFO TABLE -------------------------
+sig_obj.SIGNATURBLOCK_SMALL_EN_NOTE.table.info.ColsWidth=1 3.2
+sig_obj.SIGNATURBLOCK_SMALL_EN_NOTE.table.info.1=SIG_SUBJECT-cv
+sig_obj.SIGNATURBLOCK_SMALL_EN_NOTE.table.info.2=SIG_ISSUER-cv
+sig_obj.SIGNATURBLOCK_SMALL_EN_NOTE.table.info.3=SIG_NUMBER-cv
+sig_obj.SIGNATURBLOCK_SMALL_EN_NOTE.table.info.4=SIG_KZ-cv
+sig_obj.SIGNATURBLOCK_SMALL_EN_NOTE.table.info.5=SIG_ID-cv
diff --git a/work/cfg/profiles/VARIABLER_AMTSSIGNATURBLOCK_DE.properties b/work/cfg/profiles/VARIABLER_AMTSSIGNATURBLOCK_DE.properties
new file mode 100644
index 0000000..cf7d72e
--- /dev/null
+++ b/work/cfg/profiles/VARIABLER_AMTSSIGNATURBLOCK_DE.properties
@@ -0,0 +1,62 @@
+###################################################################################################
+# PROFIL: Zusaetzlicher Amtssignaturblock (Deutsch) mit neuem Layout
+# Unterzeichner Musteramt
+
+sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.description=Variabler Amtssignaturblock-Deutsch, neues Layout
+
+sig_obj.types.VARIABLER_AMTSSIGNATURBLOCK_DE=on
+
+sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.key.SIG_VALUE=Signaturwert
+sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.key.SIG_SUBJECT=Unterzeichner
+sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.key.SIG_ISSUER=Aussteller-Zertifikat
+sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.key.SIG_NUMBER=Serien-Nr.
+sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.key.SIG_KZ=Methode
+sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.key.SIG_ID=Parameter
+sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.key.SIG_META=Pr\u00fcfinformation
+sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.key.SIG_NOTE=Hinweis
+sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.key.SIG_DATE=Datum/Zeit-UTC
+
+sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.phlength.SIG_SUBJECT=200
+sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.phlength.SIG_ISSUER=130
+sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.phlength.SIG_NUMBER=30
+sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.phlength.SIG_ID=30
+sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.value.SIG_SUBJECT=F\u00fcr die Richtigkeit der Ausfertigung:\nMusteramt\nMusterstadt
+#sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.moa.sign.KeyIdentifier=MusteramtatrustKey
+
+sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.pos=f:80
+sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.adobeSignFieldValue=PDF-AS Signatur
+sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.adobeSignReasonValue=Informationen zur Pr\u00fcfung finden Sie unter http://www.signaturpruefung.gv.at
+sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.verifyURL=http://www.signaturpruefung.gv.at
+
+# WAI
+sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.sigLogoAltText=Abgebildet ist eine Standard-Signaturbildmarke.
+
+sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.value.SIG_META=Informationen zur Pr\u00fcfung der elektronischen Signatur finden Sie unter: http://www.signaturpruefung.gv.at\nInformationen zur Pr\u00fcfung des Ausdrucks finden Sie unter: http://musteramt.musterstadt.gv.at
+sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.value.SIG_LABEL=./images/signatur-logo_de.png
+sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.value.SIG_NOTE=Dieses Dokument wurde amtssigniert. Auch ein Ausdruck dieses Dokuments hat gem\u00e4\u00df \u00a7 20 E-Government-Gesetz die Beweiskraft einer \u00f6ffentlichen Urkunde.
+
+#---------------------- MAIN TABLE -------------------------
+sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.table.main.1=SIG_VALUE-cv
+sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.table.main.2=SIG_LABEL-i|TABLE-info
+sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.table.main.3=SIG_META-cv
+sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.table.main.4=SIG_NOTE-cv
+sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.table.main.5=SIG_DATE-cv
+
+sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.table.main.ColsWidth=1 6
+sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.table.main.Style.bgcolor=255 255 255
+sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.table.main.Style.padding=4
+sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.table.main.Style.border=0.1
+sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.table.main.Style.halign=center
+sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.table.main.Style.valuehalign=left
+sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.table.main.Style.valign=top
+sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.table.main.Style.imagevalign=middle
+sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.table.main.Style.font=HELVETICA,8,BOLD
+sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.table.main.Style.valuefont=COURIER,8,NORMAL
+
+#---------------------- INFO TABLE -------------------------
+sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.table.info.ColsWidth=1 4
+sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.table.info.1=SIG_SUBJECT-cv
+sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.table.info.2=SIG_ISSUER-cv
+sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.table.info.3=SIG_NUMBER-cv
+sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.table.info.4=SIG_KZ-cv
+sig_obj.VARIABLER_AMTSSIGNATURBLOCK_DE.table.info.5=SIG_ID-cv