2012-09-14 74 views
10

我正在嘗試使用pdfbox庫簽署pdf。 我現在卡住了,真的需要幫助。如何使用pdfbox在Java中籤署pdf

這是我的代碼:

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

然後蔭救了我的PDF格式,但: 1)我注意到,標誌方法不會被調用 2)應該在哪裏我附上certyficate?在符號方法?

PDF:

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

我認爲我錯過了什麼,但文件沒有提到如何簽署文件。

Tahnks提前JC。

@Ed

這是我如何保存我的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

看起來像使用PDFBox簽名是相當低級和無證。您可能需要閱讀本白皮書以瞭解有關PDF中數字簽名的更多信息:http://itextpdf.com/book/digitalsignatures –

+0

您如何保存文檔?這就是我們需要查看的地方,找出爲什麼sign()沒有被調用。 –

+0

@Ed我在上面加了我的保存功能 –

回答

6

鏈接的PDFBox-SignExample.zip是過時的。請改用此示例:

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

最好記錄,並隨時保持最新狀態。

+5

雖然這個鏈接可能回答這個問題,但最好在這裏包含答案的基本部分並提供參考鏈接。如果鏈接頁面更改,則僅鏈接答案可能會失效。 –

+0

是的,這樣做會更好,但是這個問題目前在搜索「pdfbox簽名」的時候處於頂級點擊下,而且有很多人喜歡簽名。 pdfbox svn trunk上的鏈接點,所以如果項目不移動到git,鏈接將匹配,否則我會更新它。所以真的沒有問題。 – ThomasCh

相關問題