2010-03-18 2 views
3

Я использую ITextSharp для генерации PDF на лету, а затем сохраняю его на диск и отображаю его с помощью Frame.Загрузить PDF из памяти ASP.Net

В кадре есть атрибут src, где передается сгенерированное имя файла.

Это все работает отлично, что я хочу достичь, это передать сгенерированный PDF-файл в Frame без сохранения его на диск.

HtmlToPdfBuilder builder = new HtmlToPdfBuilder(PageSize.LETTER); 
HtmlPdfPage first = builder.AddPage(); 

//import an entire sheet 
builder.ImportStylesheet(Request.PhysicalApplicationPath + "CSS\\Stylesheet.css"); 
string coupon = CreateCoupon(); 
first.AppendHtml(coupon); 

byte[] file = builder.RenderPdf(); 
File.WriteAllBytes(Request.PhysicalApplicationPath+"final.pdf", file); 
printable.Attributes["src"] = "final.pdf"; 

ответ

2

Я сделал именно то, что вы пытаетесь сделать. Вы хотите создать обработчик (.ashx). После того, как вы создали свой PDF-файл, загрузите его в свой обработчик, используя следующий код:

[WebService(Namespace = "http://tempuri.org/")] 
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] 
public class MapHandler : IHttpHandler, IReadOnlySessionState 
{ 

    public void ProcessRequest(HttpContext context) { 
     CreateImage(context); 
    } 

    private void CreateImage(HttpContext context) { 

     string documentFullname = // Get full name of the PDF you want to display... 

     if (File.Exists(documentFullname)) { 

      byte[] buffer; 

      using (FileStream fileStream = new FileStream(documentFullname, FileMode.Open, FileAccess.Read, FileShare.Read)) 
      using (BinaryReader reader = new BinaryReader(fileStream)) { 
       buffer = reader.ReadBytes((int)reader.BaseStream.Length); 
      } 

      context.Response.ContentType = "application/pdf"; 
      context.Response.AddHeader("Content-Length", buffer.Length.ToString()); 
      context.Response.BinaryWrite(buffer); 
      context.Response.End(); 

     } else { 
      context.Response.Write("Unable to find the document you requested."); 
     } 
    } 

    public bool IsReusable { 
     get { 
      return false; 
     } 
    } 
+0

+1, то же самое здесь. Отлично работает –

+0

Я думаю, вы неправильно поняли - он хочет выписать сгенерированный PDF-файл, не записывая его на диск. Если бы вы могли включить свой код генерации pdf в свою функцию CreateImage, чтобы PDF-файл был создан в памяти и был записан в ответ за один раз, это было бы хорошим ответом. – patmortech