Comment signer pdf en Java à l'aide de pdfbox
Je suis en train de signer des fichiers pdf à l'aide pdfbox bibliothèques.
J'ai coincé maintenant et vraiment besoin d'une aide.
C'est mon code:
private static void signPdf(PDDocument document) throws Exception
{
PDSignature sig = new PDSignature();
sig.setFilter(COSName.ADOBE_PPKLITE);
sig.setSubFilter(COSName.ADBE_PKCS7_DETACHED);
sig.setByteRange(new int[] {'a','a','a','a'});
sig.setContents(new byte[]{(byte) 23, (byte) 23, (byte) 23, (byte) 23});
SignatureOptions options = new SignatureOptions();
document.addSignature(sig, new SignatureInterface() {
public byte[] sign(InputStream content)
throws SignatureException, IOException {
//this should be made MD5 checksum?
return new byte[]{(byte) 'a', (byte) 'a', (byte) 'a', (byte) 'a'};
}
}, options);
}
Puis Iam sauver ma pdf, mais:
1) j'ai remarqué que le signe méthode n'est jamais appelé
2) Où dois-je joindre certyficate? en signe de méthode?
pdf:
/Type /Sig
/Filter /Adobe.PPKLite
/SubFilter /adbe.pkcs7.sha1
/Contents <0000000000. a lot of zeros..000>
/ByteRange [0 1000000000 1000000000 1000000000]
Je pense que j'ai raté quelque chose, mais la documentation ne dit rien sur la façon de signer un fichier.
Tahnks à l'avance JC.
@Ed
Voici comment j'ai enregistrer mon pdf:
public static void saveFile(COSDocument doc, String out)
throws IOException, COSVisitorException {
java.io.OutputStream os = null;
COSWriter writer = null;
try {
os = new java.io.FileOutputStream(out);
writer = new COSWriter(os);
writer.write(doc);
} finally {
if (os != null) {
os.close();
}
if (writer != null) {
writer.close();
}
}
}
Semble que la Signature avec le PDFBox est plutôt faible et sans-papiers. Vous pouvez lire ce livre blanc pour comprendre plus sur les signatures numériques au format PDF: itextpdf.com/book/digitalsignatures
Comment êtes-vous d'enregistrer le document? C'est là que nous avons besoin de regarder, de comprendre pourquoi le signe() n'est pas appelé.
J'ai ajouté ma fonction d'économie au-dessus de
Comment êtes-vous d'enregistrer le document? C'est là que nous avons besoin de regarder, de comprendre pourquoi le signe() n'est pas appelé.
J'ai ajouté ma fonction d'économie au-dessus de
OriginalL'auteur Jakub C | 2012-09-14
Vous devez vous connecter pour publier un commentaire.
Liés PDFBox-SignExample.zip est pas à jour. Veuillez utiliser cet exemple de la place:
https://svn.apache.org/repos/asf/pdfbox/trunk/examples/src/main/java/org/apache/pdfbox/examples/signature/CreateSignature.java
C'est mieux documentées et mises à jour.
Oui ce serait mieux, mais cette question est pour le moment sous le top hits lors de la recherche "pdfbox signature" et il y a beaucoup de gens qui aiment à signer. Le lien pointe sur la pdfbox svn trunk, donc si le projet ne passez pas à git, le lien, sinon je vais le mettre à jour. Donc, il n'y a vraiment pas de problème.
OriginalL'auteur ThomasCh