2010-11-03 20 views
6

Estoy usando FileResult como valor de retorno para una función en MVC que devuelve un archivo PDF..NET MVC FileResult equivalente en Web Forms

¿Qué tipo de devolución debo usar en formularios web?

Gracias

public FileResult PrintPDFVoucher(object sender, EventArgs e) 
    { 
     PdfDocument outputDoc = new PdfDocument(); 
     PdfDocument pdfDoc = PdfReader.Open(
      Server.MapPath(ConfigurationManager.AppSettings["Template"]), 
      PdfDocumentOpenMode.Import 
     ); 

     MemoryStream memory = new MemoryStream(); 

     try 
     { 
      //Add pages to the import document 
      int pageCount = pdfDoc.PageCount; 
      for (int i = 0; i < pageCount; i++) 
      { 
       PdfPage page = pdfDoc.Pages[i]; 
       outputDoc.AddPage(page); 
      } 
      //Target specifix page 
      PdfPage pdfPage = outputDoc.Pages[0]; 

      XGraphics gfxs = XGraphics.FromPdfPage(pdfPage); 
      XFont bodyFont = new XFont("Arial", 10, XFontStyle.Regular); 


      //Save 
      outputDoc.Save(memory, true); 
      gfxs.Dispose(); 
      pdfPage.Close(); 
     } 
     finally 
     { 
      outputDoc.Close(); 
      outputDoc.Dispose(); 
     } 

     var result = new FileContentResult(memory.GetBuffer(), "text/pdf"); 
     result.FileDownloadName = "file.pdf"; 
     return result; 
    } 

Respuesta

5

En ASP.NET formularios web que tendrá que escribir el archivo en la secuencia de respuesta manualmente. No hay abstracción de resultados en formularios web.

Response.ContentType = "Application/pdf";  
    //Write the generated file directly to the response stream 
    Response.BinaryWrite(memory);//Response.WriteFile(FilePath); if you have a physical file you want them to download 
    Response.End(); 

Este código no está probado, pero esto debería llevarlo en la dirección general.

3

Classic ASP.NET no tiene la idea de un tipo de devolución. La forma de abordar esto sería crear una página/controlador personalizado .ashx para servir el archivo.

su código detrás de este archivo debería ser algo similar a:

public class Download : IHttpHandler 
{ 
    public void ProcessRequest (HttpContext context) 
    { 
     PdfDocument outputDoc = new PdfDocument(); 
     PdfDocument pdfDoc = PdfReader.Open(
      Server.MapPath(ConfigurationManager.AppSettings["Template"]), 
      PdfDocumentOpenMode.Import 
     ); 

     MemoryStream memory = new MemoryStream(); 

     try 
     { 
      //Add pages to the import document 
      int pageCount = pdfDoc.PageCount; 
      for (int i = 0; i < pageCount; i++) 
      { 
       PdfPage page = pdfDoc.Pages[i]; 
       outputDoc.AddPage(page); 
      } 
      //Target specifix page 
      PdfPage pdfPage = outputDoc.Pages[0]; 

      XGraphics gfxs = XGraphics.FromPdfPage(pdfPage); 
      XFont bodyFont = new XFont("Arial", 10, XFontStyle.Regular); 


      //Save 
      Response.ContentType = ""text/pdf""; 
      Response.AppendHeader("Content-Disposition","attachment; filename=File.pdf"); 

      outputDoc.Save(Response.OutputStream, true); 

      gfxs.Dispose(); 
      pdfPage.Close(); 
     } 
     finally 
     { 
      outputDoc.Close(); 
      outputDoc.Dispose(); 
     } 
    } 

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

Gracias por "Content-Disposition" de cabecera –

Cuestiones relacionadas