2014-01-08 2 views
1

Я работаю над подписью pdf-документа, используя Itext в Java.Подпишите документ PDF и получите pdf как байты или поток

он отлично работает, но могу ли я подписать PDF-документ без сохранения файла?

вот часть кода:

FileOutputStream os = (FileOutputStream) readWriteFiles(2); 
     System.out.println("FileOutputStream created"); 

     if (os == null) { 
      System.out.println("Operation canceled by the user. He chose to not overwrite existing file."); 
      return; 
     } 

     PdfStamper stamper = PdfStamper.createSignature(reader, os, '\0', null, true); 
     // PdfStamper stamper = PdfStamper.createSignature; 

     System.out.println("stamper created"); 


     /* Creating the appearance */ 
     PdfSignatureAppearance appearance = stamper.getSignatureAppearance(); 
     appearance.setReason(reason); 
     appearance.setLocation(location); 

     /* Creating the signature */ 
     ExternalDigest digest = new BouncyCastleDigest(); 

     ExternalSignature signature = 
       new PrivateKeySignature(pk, digestAlgorithm, provider); 

     System.out.println(signature.toString() + "\n\n\n" + appearance.toString()); 
     MakeSignature.signDetached(appearance, digest, signature, chain, 
       null, null, null, 0, subfilter); 

ОС включают в себя путь выходного файла PDF. , и когда я пытаюсь поставить os как null, он не подписывался.

Вопрос: Как подписать PDF-файл без сохранения выходного файла pdf?

и как я могу получить PDF в виде байтов или потоков, чтобы использовать его в javascript (это апплет)?

+2

* Когда я пытаюсь поставить os как null, он не подписывался * - ну, если вы не поставляете выходной поток или позицию временного файла (другой 'null', в вашем вызове), как вы ожидаете, что iText вернет вам подписанный файл? – mkl

+0

@mkl Вы правы. – Yassering

ответ

4

Согласно документации

общественности статической PdfStamper createSignature (PdfReader читатель, OutputStream ОС, символ pdfVersion) бросает DocumentException, IOException

Вы можете дать любой OutputStream вы хотите, так что я предлагаю вам do

ByteArrayOutputStream output = new ByteArrayOutputStream(); 
PdfStamper stamper = PdfStamper.createSignature(reader, output, '\0', null, true); 

Затем вы можете получить информацию o f выводится как массив байтов (http://docs.oracle.com/javase/7/docs/api/java/io/ByteArrayOutputStream.html)

+0

безупречный! Большое спасибо. – Yassering

Смежные вопросы