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 +++++++++++++++++++++ 3 files changed, 262 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 (limited to 'src/main/java') 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(); + } + + } + +} -- cgit v1.2.3