asp.net - PdfStamper.CreateSignature and empty MemoryStream -


using itextsharp 5.3.4.0, i'm having difficulty working pdfstamper , memorystream.

the memorystream empty.

    pdfreader pdfreader = new pdfreader(server.mappath(@"document.pdf"));      memorystream memorystream = new memorystream();      pdfstamper pdfstamper = pdfstamper.createsignature(pdfreader, memorystream, '\0');      //...      pdfstamper.writer.closestream = false;     pdfstamper.close();      byte[] bt = memorystream.getbuffer(); //.toarray()     pdfreader.close(); 

download project (full source code)

how can solve problem? thank you!

in default.aspx.cs relevant left out in code block of question:

pdfstamper pdfstamper = pdfstamper.createsignature(pdfreader, memorystream, '\0');  pdfsignatureappearance pdfsignatureappearance = pdfstamper.signatureappearance; //... pdfsignatureappearance.preclose(exc); //...  pdfstamper.writer.closestream = false; pdfstamper.close(); 

whenever call pdfsignatureappearance.preclose, must use pdfsignatureappearance.close, not pdfstamper.close, cf. method documentations:

/**  * first method called when using external signatures. general sequence is:  * preclose(), getdocumentbytes() , close().  * <p>  * if calling preclose() <b>dont't</b> call pdfstamper.close().  * <p>  * <code>exclusionsizes</code> must contain @ least  * <code>pdfname.contents</code> key size take in  * document. note due hex string coding size should  * byte_size*2+2.  * @param exclusionsizes <code>hashmap</code> names , sizes excluded in signature  * calculation. key <code>pdfname</code> , value  * <code>integer</code>. @ least <code>pdfname.contents</code> must present  * @throws ioexception on error  * @throws documentexception on error  */ public void preclose(dictionary<pdfname, int> exclusionsizes) { 

(from pdfsignatureappearance.cs)

/**  * closes document. no more content can written after  * document closed.  * <p>  * if closing signed document external signature closing must done  * in <code>pdfsignatureappearance</code> instance.  * @throws documentexception on error  * @throws ioexception on error  */ public void close() { 

(from pdfstamper.cs)

the reason when create pdfstamper using createsignature(pdfreader, memorystream, '\0'), stamper not write memory stream instead internal bytebuffer (this required eventual signature creation , integration). no sooner during pdfsignatureappearance.close content of bytebuffer written memory stream.

furthermore see using

byte[] bt = memorystream.getbuffer(); 

please don't! unless sure interpreting buffer contents correctly (which may contain additional trash data), please use

byte[] bt = memorystream.toarray(); 

instead.


Comments

Popular posts from this blog

php - Calling a template part from a post -

Firefox SVG shape not printing when it has stroke -

How to mention the localhost in android -