/** * Copyright 2006 by Know-Center, Graz, Austria * 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 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.commons.DynamicSignatureLifetimeEnum; import at.gv.egiz.pdfas.api.commons.DynamicSignatureProfile; 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.api.sign.pos.SignaturePositioning; import at.gv.egiz.pdfas.io.FileBasedDataSink; import at.gv.egiz.pdfas.io.FileBasedDataSource; public class SignatureCreationWithDynamicProfilesDemo { /** * Disable instantiation. */ private SignatureCreationWithDynamicProfilesDemo() { } /** * 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.setSignatureDevice(Constants.SIGNATURE_DEVICE_MOA); signParameters.setSignaturePositioning(new SignaturePositioning("x:auto;y:auto;w:auto;p:auto;f:80")); // standard signature signParameters.setSignatureType(Constants.SIGNATURE_TYPE_TEXTUAL); // set signature profile (note: this setting is being overwritten if the optional settings (below) are used signParameters.setSignatureProfileId("SIGNATURBLOCK_DE"); // OPTIONAL[start]: adjust fixed signature profile dynamically according to your needs // create dynamic signature profile, take values from profile SIGNATURBLOCK_DE DynamicSignatureProfile dsp = pdfasAPI.createDynamicSignatureProfile( "SIGNATURBLOCK_DE", DynamicSignatureLifetimeEnum.AUTO // auto lifetime for one sign process ); // simple access for everyone // can also be done by using signParameters.setProfileOverrideValue("SIG_META", "New note value."); dsp.setFieldValue("SIG_META", "New note value."); // full control - USE THIS ONLY IF YOU REALLY KNOW WHAT YOU ARE DOING // inconsiderate use may lead to non verifiable signatures dsp.setPropertyRaw("table.main.Style.halign", "right"); // mandatory: register the profile dsp.apply(); // set dynamic sign profile signParameters.setSignatureProfileId(dsp.getName()); // OPTIONAL[end] // 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: " + signResult.getNonTextualObjects().size() + " non textual object(s) 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(); } } }