2012-09-14 9 views
10

का उपयोग कर जावा में पीडीएफ पर हस्ताक्षर कैसे करें मैं पीडीएफबॉक्स पुस्तकालयों का उपयोग कर पीडीएफ पर हस्ताक्षर करने की कोशिश कर रहा हूं। अब मैं अटक गया हूं और वास्तव में एक मदद की ज़रूरत है।पीडीएफबॉक्स

यह मेरा कोड है:

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

फिर Iam अपने पीडीएफ बचत, लेकिन: 1) मुझे लगता है कि संकेत विधि कहा जाता है कभी नहीं है 2) मैं certyficate देते हैं चाहिए देखा है? साइन विधि में?

पीडीएफ:

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

मुझे लगता है कि मैं कुछ याद आती है, लेकिन दस्तावेज़ कैसे एक फ़ाइल पर हस्ताक्षर करने के बारे में कुछ नहीं कहते हैं।

अग्रिम जेसी में तहंक्स।

@Ed यहाँ कैसे मैं अपने पीडीएफ को बचाने है:

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

ऐसा लगता है कि पीडीएफबॉक्स के साथ साइनिंग करना निम्न स्तर और अनियंत्रित है। पीडीएफ में डिजिटल हस्ताक्षर के बारे में अधिक समझने के लिए आप इस श्वेत पत्र को पढ़ना चाह सकते हैं: http://itextpdf.com/book/digitalsignatures –

+0

आप दस्तावेज़ को कैसे सहेज रहे हैं? यही वह जगह है जहां हमें यह देखने की जरूरत है कि साइन() क्यों नहीं कहा जा रहा है। –

+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

हां यह बेहतर होगा, लेकिन यह प्रश्न "पीडीएफबॉक्स हस्ताक्षर" खोजते समय शीर्ष हिट के नीचे है और ऐसे कई लोग हैं जो साइन करना पसंद करते हैं। पीडीएफबॉक्स एसवीएन ट्रंक पर लिंक पॉइंट, इसलिए यदि परियोजना गिट में नहीं जाती है, तो लिंक मेल खाएगा, अन्यथा मैं इसे अपडेट कर दूंगा। तो वास्तव में कोई समस्या नहीं है। – ThomasCh

संबंधित मुद्दे