From 840d6a4b71e5c8c0273be231a85306be26356933 Mon Sep 17 00:00:00 2001 From: tknall Date: Wed, 2 Dec 2009 18:10:49 +0000 Subject: Two demos added, showing extraction of non-textual objects during signature and verification git-svn-id: https://joinup.ec.europa.eu/svn/pdf-as/trunk@484 7b5415b0-85f9-ee4d-85bd-d5d0c3b42d1c --- .../java/demo/ExtractNonTextualObjectsDemo.java | 60 +++++++++++ src/main/java/demo/SignatureCreationDemo.java | 87 ++++++++++++++++ src/main/java/demo/SignatureVerificationDemo.java | 115 +++++++++++++++++++++ src/main/resources/config/help_text.properties | 94 +++++++++++++++++ 4 files changed, 356 insertions(+) create mode 100644 src/main/java/demo/ExtractNonTextualObjectsDemo.java create mode 100644 src/main/java/demo/SignatureCreationDemo.java create mode 100644 src/main/java/demo/SignatureVerificationDemo.java create mode 100644 src/main/resources/config/help_text.properties (limited to 'src') diff --git a/src/main/java/demo/ExtractNonTextualObjectsDemo.java b/src/main/java/demo/ExtractNonTextualObjectsDemo.java new file mode 100644 index 0000000..d7c651f --- /dev/null +++ b/src/main/java/demo/ExtractNonTextualObjectsDemo.java @@ -0,0 +1,60 @@ +package demo; + +import java.io.File; +import java.io.IOException; +import java.util.Iterator; +import java.util.List; + +import at.gv.egiz.pdfas.api.analyze.NonTextObjectInfo; +import at.gv.egiz.pdfas.api.io.DataSource; +import at.gv.egiz.pdfas.impl.api.commons.PdfDataSourceAdapter; +import at.gv.egiz.pdfas.io.FileBasedDataSource; +import at.knowcenter.wag.egov.egiz.PdfAS; + +public class ExtractNonTextualObjectsDemo { + + /** + * Disable instantiation. + */ + private ExtractNonTextualObjectsDemo() { + } + + /** + * Starts a demo that extracts non-textual elements from a document. + * + * @param args + * The parameter(s). + */ + public static void main(String[] args) { + + if (args == null || args.length == 0) { + System.err.println("Please provide path of file to be signed."); + System.exit(1); + } + + File testFile = new File(args[0]); + + try { + + // set source + DataSource dataSource = new FileBasedDataSource(testFile, "application/pdf"); + + List nonTextualObjects = PdfAS.extractNonTextualObjects(new PdfDataSourceAdapter(dataSource)); + if (nonTextualObjects != null && !nonTextualObjects.isEmpty()) { + System.out.println("Non-textual objects found."); + Iterator noit = nonTextualObjects.iterator(); + while (noit.hasNext()) { + NonTextObjectInfo info = (NonTextObjectInfo) noit.next(); + System.out.println(" -> " + info.toString()); + } + } else { + System.out.println("No non-textual objects found."); + } + + } catch (IOException e) { + e.printStackTrace(); + } + + } + +} diff --git a/src/main/java/demo/SignatureCreationDemo.java b/src/main/java/demo/SignatureCreationDemo.java new file mode 100644 index 0000000..c43b45e --- /dev/null +++ b/src/main/java/demo/SignatureCreationDemo.java @@ -0,0 +1,87 @@ +package demo; + +import java.io.File; +import java.io.IOException; +import java.util.Iterator; + +import at.gv.egiz.pdfas.PdfAsFactory; +import at.gv.egiz.pdfas.api.PdfAs; +import at.gv.egiz.pdfas.api.analyze.NonTextObjectInfo; +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.sign.SignParameters; +import at.gv.egiz.pdfas.api.sign.SignResult; +import at.gv.egiz.pdfas.io.FileBasedDataSink; +import at.gv.egiz.pdfas.io.FileBasedDataSource; + +public class SignatureCreationDemo { + + /** + * Disable instantiation. + */ + private SignatureCreationDemo() { + } + + /** + * Starts a demo that signs a document. + * + * @param args + * The parameter(s). + */ + public static void main(String[] args) { + + if (args == null || args.length == 0) { + System.err.println("Please provide path of file to be signed."); + System.exit(1); + } + + File configdir = new File("./work"); + File unsignedFile = new File(args[0]); + File signedFile = new File(args[0] + "_signed.pdf"); + + try { + + // instantiate api + PdfAs pdfasAPI = PdfAsFactory.createPdfAs(configdir); + + // set source + DataSource dataSource = new FileBasedDataSource(unsignedFile, "application/pdf"); + + // set output + FileBasedDataSink dataSink = new FileBasedDataSink(signedFile); + + // configure signature + SignParameters signParameters = new SignParameters(); + signParameters.setDocument(dataSource); + signParameters.setOutput(dataSink); + signParameters.setSignatureType(Constants.SIGNATURE_TYPE_BINARY); + signParameters.setSignatureDevice(Constants.SIGNATURE_DEVICE_MOA); + signParameters.setSignatureProfileId("SIGNATURBLOCK_DE"); + signParameters.setSignaturePositioning(null); + + // sign + System.out.println("Signing..."); + SignResult signResult = pdfasAPI.sign(signParameters); + System.out.println("Successfully signed."); + + // check if non textual elements have been detected + if (signResult.hasNonTextualObjects()) { + System.out.println("\nWARNING: Non textual objects detected."); + Iterator noit = signResult.getNonTextualObjects().iterator(); + while (noit.hasNext()) { + NonTextObjectInfo info = (NonTextObjectInfo) noit.next(); + System.out.println(" -> " + info.toString()); + } + System.out.println(); + } + + } catch (PdfAsException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } + + } + +} diff --git a/src/main/java/demo/SignatureVerificationDemo.java b/src/main/java/demo/SignatureVerificationDemo.java new file mode 100644 index 0000000..498849d --- /dev/null +++ b/src/main/java/demo/SignatureVerificationDemo.java @@ -0,0 +1,115 @@ +package demo; + +import java.io.File; +import java.io.IOException; +import java.io.PrintWriter; +import java.util.Iterator; +import java.util.List; + +import at.gv.egiz.pdfas.PdfAsFactory; +import at.gv.egiz.pdfas.api.PdfAs; +import at.gv.egiz.pdfas.api.analyze.AnalyzeParameters; +import at.gv.egiz.pdfas.api.analyze.AnalyzeResult; +import at.gv.egiz.pdfas.api.analyze.NonTextObjectInfo; +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.verify.VerifyAfterAnalysisParameters; +import at.gv.egiz.pdfas.api.verify.VerifyResult; +import at.gv.egiz.pdfas.api.verify.VerifyResults; +import at.gv.egiz.pdfas.commandline.Main; +import at.gv.egiz.pdfas.framework.config.SettingsHelper; +import at.gv.egiz.pdfas.framework.vfilter.VerificationFilterParameters; +import at.gv.egiz.pdfas.io.FileBasedDataSource; + +public class SignatureVerificationDemo { + + /** + * Starts a demo that verifies a document. + * + * @param args + * The parameter(s). + */ + public static void main(String[] args) { + + if (args == null || args.length == 0) { + System.err.println("Please provide path of file to be verified."); + System.exit(1); + } + + File configdir = new File("./work"); + File signedFile = new File(args[0]); + + try { + + // instantiate api + PdfAs pdfasAPI = PdfAsFactory.createPdfAs(configdir); + + // set source + DataSource dataSource = new FileBasedDataSource(signedFile, "application/pdf"); + + // evaluate settings + VerificationFilterParameters parameters = SettingsHelper.readVerificationFilterParametersFromSettings(); + String verifyMode = Constants.VERIFY_MODE_FULL_CONSERVATIVE; + + if (parameters.extractBinarySignaturesOnly()) { + verifyMode = Constants.VERIFY_MODE_BINARY_ONLY; + } else if (parameters.assumeOnlySignatureUpdateBlocks()) { + verifyMode = Constants.VERIFY_MODE_SEMI_CONSERVATIVE; + } else { + verifyMode = Constants.VERIFY_MODE_FULL_CONSERVATIVE; + } + + // configure analyze parameters + AnalyzeParameters analyzeParameters = new AnalyzeParameters(); + analyzeParameters.setDocument(dataSource); + analyzeParameters.setVerifyMode(verifyMode); + analyzeParameters.setReturnNonTextualObjects(true); + + // analyze + System.out.println("Analyzing..."); + AnalyzeResult analyzeResult = pdfasAPI.analyze(analyzeParameters); + System.out.println("Successfully analyzed."); + + // setup verification + VerifyAfterAnalysisParameters vaap = new VerifyAfterAnalysisParameters(); + vaap.setAnalyzeResult(analyzeResult); + vaap.setReturnHashInputData(true); + vaap.setSignatureDevice(Constants.SIGNATURE_DEVICE_MOA); + vaap.setVerificationTime(null); + + // invoke verification + System.out.println("Verifying..."); + VerifyResults verifyResults = pdfasAPI.verify(vaap); + List verifyResultList = verifyResults.getResults(); + System.out.println("Verification complete."); + + // iterate over results + PrintWriter out = new PrintWriter(System.out); + Iterator it = verifyResultList.iterator(); + while (it.hasNext()) { + VerifyResult result = (VerifyResult) it.next(); + Main.formatVerifyResult(result, out); + } + out.flush(); + + // check if non textual elements have been detected + if (analyzeResult.hasNonTextualObjects()) { + System.out.println("\nWARNING: Non textual objects detected."); + Iterator noit = analyzeResult.getNonTextualObjects().iterator(); + while (noit.hasNext()) { + NonTextObjectInfo info = (NonTextObjectInfo) noit.next(); + System.out.println(" -> " + info.toString()); + } + System.out.println(); + } + + } catch (PdfAsException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } + + } + +} diff --git a/src/main/resources/config/help_text.properties b/src/main/resources/config/help_text.properties new file mode 100644 index 0000000..12b240c --- /dev/null +++ b/src/main/resources/config/help_text.properties @@ -0,0 +1,94 @@ +#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.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.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.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. + +#PDFDocumentException +error.code.201=Das PDF Dokument kann nicht gelesen werden, oder die Datei hat ein falsches Format. +error.code.202=Der Text konnte nicht extrahiert werden. +error.code.203=Die PDF Library konnte nicht geladen werden. +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.223=Es ist keine Signaturtabelle definiert. +error.code.224=Die angegebene absolute Position ist ungültig. +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.230=Die Schriftart konnte nicht geladen 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. + +#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.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.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.310=Die Signatur kann nicht überprüft 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.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. + +# 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.318=Die binäre Signatur kann nicht geprüft werden. Die Signatur enthält nicht unterstützte /replaces-Namen. + +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. + +# TODO remove this when MOA detached is ready +error.code.370=Eine detached Signature kann zur Zeit mit MOA nicht überprüft 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. + +# 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. + +# Unsupported BKU +error.code.373=Dieses Signaturgerät wird nicht unterstützt. + +#NormalizeException +error.code.400=Das Normalisierungsmodul kann nicht initialisiert werden. + +#LDAPException +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. + +#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. +#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. + +#CorrectorException +error.code.800=Fehler beim Parsen der binären Signatur. +error.code.801=Das Dokument konnte nicht korrigiert werden. +error.code.802=Die externe Korrektur konnte nicht innerhalb des festgesetzten Timeouts fertiggestellt werden. -- cgit v1.2.3