From 2c18f4da56232cf0173747d1716bf96da0e6613a Mon Sep 17 00:00:00 2001 From: datalogics-saharay Date: Fri, 3 Apr 2026 14:59:03 -0500 Subject: [PATCH] Add Java sample for PAdES policy-based signatures --- Security/AddPAdESPolicySignature/pom.xml | 160 ++++++++++++++++++ .../pdfl/samples/AddPAdESPolicySignature.java | 87 ++++++++++ Security/README.md | 3 + tasks.py | 1 + 4 files changed, 251 insertions(+) create mode 100644 Security/AddPAdESPolicySignature/pom.xml create mode 100644 Security/AddPAdESPolicySignature/src/main/java/com/datalogics/pdfl/samples/AddPAdESPolicySignature.java diff --git a/Security/AddPAdESPolicySignature/pom.xml b/Security/AddPAdESPolicySignature/pom.xml new file mode 100644 index 0000000..05d9f4f --- /dev/null +++ b/Security/AddPAdESPolicySignature/pom.xml @@ -0,0 +1,160 @@ + + + 4.0.0 + com.datalogics.pdfl.samples + AddPAdESPolicySignature + 1.0-SNAPSHOT + + 1.8 + 1.8 + + + + Windows64 + + + windows + amd64 + + + + win-x86-64-jni + + + + MacArm + + + mac + aarch64 + + + + mac-arm-64-jni + + + + Linux64 + + + + Linux + amd64 + + + + linux-x86-64-jni + + + + + + com.datalogics.pdfl + pdfl + LATEST + pom + + + com.datalogics.pdfl + pdfl + LATEST + + + com.datalogics.pdfl + pdfl + LATEST + zip + ${jni.classifier} + + + com.datalogics.pdfl + pdfl + LATEST + zip + resources + + + com.datalogics.pdfl + pdfl + LATEST + javadoc + + + + + + + org.apache.maven.plugins + maven-dependency-plugin + 3.0.2 + + + + + + org.apache.maven.plugins + maven-dependency-plugin + + + unpack-resources + generate-resources + + unpack + + + + + com.datalogics.pdfl + pdfl + resources + zip + ${project.build.directory}/lib/Resources + + + + + + unpack-jni + generate-resources + + unpack + + + + + com.datalogics.pdfl + pdfl + ${jni.classifier} + zip + ${project.build.directory}/lib + + + + + + + + maven-assembly-plugin + + + package + + single + + + + + + + true + com.datalogics.pdfl.samples.AddPAdESPolicySignature + + + + jar-with-dependencies + + + + + + diff --git a/Security/AddPAdESPolicySignature/src/main/java/com/datalogics/pdfl/samples/AddPAdESPolicySignature.java b/Security/AddPAdESPolicySignature/src/main/java/com/datalogics/pdfl/samples/AddPAdESPolicySignature.java new file mode 100644 index 0000000..7f43e95 --- /dev/null +++ b/Security/AddPAdESPolicySignature/src/main/java/com/datalogics/pdfl/samples/AddPAdESPolicySignature.java @@ -0,0 +1,87 @@ +/* + * + * This sample program demonstrates the use of AddDigitalSignature for PAdES + * (PDF Advanced Electronic Signatures) with an explicit signature policy. + * PAdES policy signatures (EPES) conform to the ETSI EN 319 142 standard, + * use the ETSI.CAdES.detached SubFilter, and embed one or more signature + * policy identifiers along with optional policy qualifiers. + * + * Copyright (c) 2026, Datalogics, Inc. All rights reserved. + * + */ + +package com.datalogics.pdfl.samples; + +import com.datalogics.PDFL.*; + +public class AddPAdESPolicySignature { + + public static void main(String [] args) throws Exception { + System.out.println("AddPAdESPolicySignature sample:"); + + Library lib = new Library(); + try { + String sInput = Library.getResourceDirectory() + "Sample_Input/SixPages.pdf"; + String sLogo = Library.getResourceDirectory() + "Sample_Input/ducky_alpha.tif"; + String sOutput = "PAdESPolicySignature-out.pdf"; + + String sPEMCert = Library.getResourceDirectory() + "Sample_Input/Credentials/PEM/ecSecP521r1Cert.pem"; + String sPEMKey = Library.getResourceDirectory() + "Sample_Input/Credentials/PEM/ecSecP521r1Key.pem"; + + if (args.length > 0) + sInput = args[0]; + + if (args.length > 1) + sOutput = args[1]; + + if (args.length > 2) + sLogo = args[2]; + + System.out.println("Applying a PAdES policy digital signature to " + sInput + " with a logo " + sLogo + " and saving it as " + sOutput); + + Document doc = new Document(sInput); + + SignDoc sigDoc = new SignDoc(); + + // Setup Sign params + sigDoc.setFieldID(SignatureFieldID.CREATE_FIELD_WITH_QUALIFIED_NAME); + sigDoc.setFieldName("Signature_es_:signatureblock"); + + // Set credential related attributes + // PAdES signatures use SHA-384 digest with EC credentials + sigDoc.setDigestCategory(DigestCategory.SHA_384); + sigDoc.setCredentialDataFormat(CredentialDataFmt.NON_PFX); + sigDoc.setNonPfxSignerCert(sPEMCert, 0, CredentialStorageFmt.ON_DISK); + sigDoc.setNonPfxPrivateKey(sPEMKey, 0, CredentialStorageFmt.ON_DISK); + + // Set the signature type to PAdES (PDF Advanced Electronic Signatures). + // NOTE: Signature type must be set prior to adding policies. + sigDoc.setDocSignType(SignatureType.PADES); + + // Define a signature policy (SigPolicyId) using an OID. + sigDoc.addSigPolicy("2.16.724.1.3.1.1.2.1.9"); + + // Add a policy qualifier (SPuri) pointing to the policy specification document. + sigDoc.addSigPolicyQualifierURI( + "https://sede.administracion.gob.es/politica_de_firma_anexo_1.pdf"); + + // Setup the signer information + // (Logo image is optional) + sigDoc.setSignerInfo(sLogo, 0.5F, "John Doe", "Chicago, IL", "Approval", "Datalogics, Inc.", DisplayTraits.KDISPLAY_ALL); + + // Set the size and location of the signature box (optional) + // If not set, invisible signature will be placed on first page + sigDoc.setSignatureBoxPageNumber(0); + sigDoc.setSignatureBoxRectangle(new Rect(100, 300, 400, 400)); + + // Setup Save params + sigDoc.setOutputPath(sOutput); + + // Finally, sign and save the document + sigDoc.addDigitalSignature(doc); + } + finally { + lib.delete(); + } + } +} diff --git a/Security/README.md b/Security/README.md index 0d4760c..162e385 100644 --- a/Security/README.md +++ b/Security/README.md @@ -1,6 +1,9 @@ ## ***AddBasicPAdESElectronicSignature*** Demonstrates adding a PAdES B-T baseline electronic signature to a PDF document. +## ***AddPAdESPolicySignature*** +Demonstrates adding a PAdES B-T policy-based signature to a PDF document. + ## ***AddDigitalSignatureCMS*** Demonstrates adding a digital signature with a logo to a PDF document. diff --git a/tasks.py b/tasks.py index 16bf128..e1f812a 100644 --- a/tasks.py +++ b/tasks.py @@ -78,6 +78,7 @@ 'Other/MemoryFileSystem/', 'Other/StreamIO/', 'Security/AddBasicPAdESElectronicSignature/', + 'Security/AddPAdESPolicySignature/', 'Security/AddDigitalSignatureCMS/', 'Security/AddDigitalSignatureRFC3161/', 'Security/AddRegexRedaction/',