You need a valid certificate and can use this code:
public static final boolean signPdf(String keystoreType, // Keystore
type. Can be KeyStore.getDefaultType()
File keystore, // The
keystore file
char[] keystorePassword, // the
password to the keystore
char[] privateKeyPassword, // the
passwort of the private key
File pdfFile, // the PDF
input File
String pdfOutfile, // The whole
filename of the PDF output File
String reason, // the reason
for this signing
String location, // and the
location where it was signed
String userPassword, // Username
for encryption
String ownerPassword // Password
used for encryption
) throws SignatureException, IOException,
DocumentException {
try {
PrivateKey key = null;
Certificate[] chain = null;
if (!keystore.exists())
return false;
if (reason != null) {
KeyStore ks = KeyStore.getInstance(keystoreType);
FileInputStream fis = new FileInputStream(keystore);
try {
ks.load(fis, keystorePassword);
}
finally { fis.close(); }
String alias = (String) ks.aliases().nextElement();
key = (PrivateKey) ks.getKey(alias, privateKeyPassword);
chain = ks.getCertificateChain(alias);
}
PdfReader pdfReader = new PdfReader(pdfFile.getAbsolutePath());
File outputFile = new File(pdfOutfile);
PdfStamper pdfStamper;
if (reason != null) {
pdfStamper = PdfStamper.createSignature(pdfReader, null, '\0',
outputFile);
PdfSignatureAppearance sap = pdfStamper.getSignatureAppearance();
sap.setCrypto(key, chain, null, PdfSignatureAppearance.SELF_SIGNED);
sap.setReason(reason);
sap.setLocation(location);
}
else {
FileOutputStream fos = new FileOutputStream(outputFile);
pdfStamper = new PdfStamper(pdfReader, fos);
}
if (userPassword != null)
pdfStamper.setEncryption(true, userPassword, ownerPassword,
PdfWriter.AllowPrinting | PdfWriter.AllowCopy | PdfWriter.AllowScreenReaders |
PdfWriter.AllowDegradedPrinting);
pdfStamper.setFormFlattening(true);
pdfStamper.close();
return true;
}
catch (KeyStoreException key) {
throw new SignatureException(key);
}
catch (NoSuchAlgorithmException nsa) {
throw new SignatureException(nsa);
}
catch (CertificateException ce) {
throw new SignatureException(ce);
}
catch (UnrecoverableKeyException ur) {
throw new SignatureException(ur);
}
}
This also sets Encryption and flags, but you can easily leave the userpassword
to null to not encrypt the PDF.
If you want to add multiple signatures, you need to open the PDF in append mode:
pdfStamper = PdfStamper.createSignature(pdfReader, null, '\0',
outputFile, true);
And thats about it. Works with a valid PKCS12 certificate.
Regards,
Rog
It was Tue, 15 Aug 2006 16:35:54 +0800, a beautiful sunny day, until "Eric
Chow" <[EMAIL PROTECTED]> wrote this:
> Hello,
>
> Is there any simple PDF digital signature for reference?
> Sign(Multi-sign) a PDF and verify a PDF using iText?
>
> Is it possible to add a signature stamp in a PDF ?
>
>
> Best regards,
> Eric
>
> -------------------------------------------------------------------------
> Using Tomcat but need to do more? Need to support web services, security?
> Get stuff done quickly with pre-integrated technology to make your job easier
> Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo
> http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642
> _______________________________________________
> iText-questions mailing list
> [email protected]
> https://lists.sourceforge.net/lists/listinfo/itext-questions
/*
* Roger Misteli - ABACUS Research AG
* The trouble with troubleshooting is that trouble sometimes shoots back!
*/
-------------------------------------------------------------------------
Using Tomcat but need to do more? Need to support web services, security?
Get stuff done quickly with pre-integrated technology to make your job easier
Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642
_______________________________________________
iText-questions mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/itext-questions