2011-11-09 44 views
2

PDFテンプレートからPDFファイルを生成するコード(.ashxファイル内)があります。生成されたpdfは、名前とコードでパーソナライズされます。私はiTextSharpを使っています。生成したpdfファイルをサーバーに保存せずに置く

これはコードです:

using (var existingFileStream = new FileStream(fileNameExisting, FileMode.Open)) 
    using (var newFileStream = new FileStream(fileNameNew, FileMode.Create)) 
    { 
     var pdfReader = new PdfReader(existingFileStream); 
     var stamper = new PdfStamper(pdfReader, newFileStream); 

     var form = stamper.AcroFields; 
     var fieldKeys = form.Fields.Keys; 

     form.SetField("Name", name); 
     form.SetField("Code", code); 

     stamper.FormFlattening = true; 

     stamper.Close(); 
     pdfReader.Close(); 
    } 

context.Response.AppendHeader("content-disposition", "inline; filename=zenith_coupon.pdf"); 
context.Response.TransmitFile(fileNameNew); 
context.Response.ContentType = "application/pdf"; 

これは動作しますが、それは、サーバー上のファイルを保存します。 PDFファイルをダウンロードしている人がたくさんいるため、サーバーがすぐにいっぱいになるため、私はそれをやりたくありません。

私の質問は、どうやってiTextSharpでPDFを生成し、それを保存せずにユーザに置くことができるかということです。あなたはファイルとして保存したくない場合は

答えて

4

あなたは(あなたのコードでは、現在newFileStreamという名前の)中間PDFのために(例えば、MemoryStream用)任意のストリームを使用することができます - サンプルコードのためhttp://www.developerfusion.com/code/6623/dynamically-generating-pdfs-in-net/http://forums.asp.net/t/1093198.aspx/1を参照してください。

ちょうどあなたがMemoryStreamをを使用して、Response.Write()を使用することができ代わりのFileStreamを使用しての...(Response.WriteまたはCopyTo (Response.OutputStream)により)、それをクライアントに送信する前に(すなわちPosition = 0を設定)巻き戻し

5

MemoryStreamを覚えていますストリームの内容を出力する。

関連する問題