2012-09-14 17 views
10

Sto provando a firmare il pdf usando le librerie pdfbox. Mi sono bloccato ora e ho davvero bisogno di aiuto.Come firmare il pdf in Java usando pdfbox

Questo è il mio codice:

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); 
} 

Poi Iam salvato la pdf, ma: 1) Ho notato che il metodo segno non viene mai chiamato 2) Dove devo collegare certyficate? nel metodo del segno?

pdf:

/Type /Sig 
/Filter /Adobe.PPKLite 
/SubFilter /adbe.pkcs7.sha1 
/Contents <0000000000. a lot of zeros..000> 
/ByteRange [0 1000000000 1000000000 1000000000] 

Penso che mi manca qualcosa, ma la documentazione non dice nulla su come firmare un file.

Tahnks in anticipo JC.

@Ed

ecco come lo salvare il mio 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(); 
     } 
    } 
} 
+2

Sembra che la firma con PDFBox sia piuttosto di basso livello e non documentata. Si consiglia di leggere questo white paper per comprendere meglio le firme digitali in PDF: http://itextpdf.com/book/digitalsignatures –

+0

Come si salva il documento? È lì che dobbiamo guardare, per capire perché sign() non viene chiamato. –

+0

@Ed Ho aggiunto la mia funzione di salvataggio sopra –

risposta

6

Il collegato PDFBox-SignExample.zip non è aggiornato. Si prega di utilizzare questo esempio invece:

https://svn.apache.org/repos/asf/pdfbox/trunk/examples/src/main/java/org/apache/pdfbox/examples/signature/CreateSignature.java

è meglio documentato e mantenuto up-to-date.

+5

Sebbene questo collegamento possa rispondere alla domanda, è meglio includere qui le parti essenziali della risposta e fornire il link per riferimento. Le risposte di solo collegamento possono diventare non valide se la pagina collegata cambia. –

+0

Sì, questo sarebbe meglio, ma questa domanda è al momento sotto i migliori successi durante la ricerca di "pdfbox signing" e ci sono molte persone a cui piace firmare. Il punto di collegamento sul tronco svn pdfbox, quindi se il progetto non si sposta su git, il link corrisponderà, altrimenti lo aggiornerò. Quindi non c'è davvero alcun problema. – ThomasCh

Problemi correlati