2012-09-14 29 views
10

pdfbox kitaplıklarını kullanarak pdf imzalamayı deniyorum. Şimdi takıldım ve gerçekten yardıma ihtiyacım var.pdfbox kullanarak Java'da pdf nasıl imzalanır

Bu benim kodudur:

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

Sonra Şimdi benim pdf kaydetme ama: 1) 2) nereden certyficate takmak gerekir asla denir o işaret yöntemini fark ettiniz? işaret yönteminde?

pdf:

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

Ben bir şey kaçırmak düşünüyorum ama dokümantasyon bir dosyayı imzalamak için nasıl bahsetmiyor.

Tahnks önceden JC.

İşte

@Ed benim pdf kurtarmak nasıl:

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 ile imzalama oldukça düşük seviyeli ve belgelenmemiş gibi görünüyor. PDF'de dijital imzalar hakkında daha fazla bilgi edinmek için bu tanıtım belgesini okumak isteyebilirsiniz: http://itextpdf.com/book/digitalsignatures –

+0

Belgeyi nasıl kaydediyorsunuz? İşaret() neden çağrılmadığını anlamaya ihtiyacımız var. –

+0

@Ed Kaydetme işlevimi –

cevap

6

bağlantılı PDFBox-SignExample.zip güncel değil. onun yerine bu örneği kullanın: Daha iyi belgelenmiş ve en güncel tutulmaktadır

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

.

+5

'un üstüne ekledim Bu bağlantı soruyu yanıtlayabilirken, cevabın temel kısımlarını buraya eklemek ve referans için bağlantı sağlamak daha iyidir. Bağlantılı sayfa değiştiğinde yalnızca bağlantı yanıtları geçersiz olabilir. –

+0

Evet, bu daha iyi olurdu, ancak bu soru "pdfbox imzalama" aramasında en yüksek isabetlerin altında ve şu anda imzalamayı seven çok kişi var. pdfbox svn trunk üzerindeki bağlantı noktası, bu nedenle proje git'e gitmezse, bağlantı eşleşecektir, aksi takdirde onu güncelleyeceğim. Yani gerçekten sorun yok. – ThomasCh

İlgili konular