2010-05-05 21 views
11

esta es mi función que convierte el pdf a una imagen png, está arrojando un error en esta línea -> stream.WriteTo (Response.OutputStream); ¿¿Hay algo mal??OutputStream no está disponible cuando se utiliza un TextWriter personalizado

protected void CreatePngFromPdf() 
     { 

      try 
      { 

       string PDFLocation = string.Format(@"\\XXXX\{0}\{1}\{2}.pdf", Yr, Loc.Substring(0, 4), Loc.Substring(4, 4)); 
       Utilities.WebPDF.PDF WebPDF = new DocuvaultMVC.Utilities.WebPDF.PDF(); 

       WebPDF.Credentials = new NetworkCredential(@"xyz", "xyz"); 
       byte[] png = WebPDF.StreamPdfPageAsPngResize(PDFLocation,PageNumber, 612, 792); 

       MemoryStream ms = new MemoryStream(png); 
       MemoryStream stream = new MemoryStream(); 
       int newWidth = 612; 
       int newHeight = 792; 
       System.Drawing.Image newImg = System.Drawing.Image.FromStream(ms); 

       Bitmap temp = new Bitmap(newWidth, newHeight, newImg.PixelFormat); 
       Graphics newImage = Graphics.FromImage(temp); 
       newImage.DrawImage(newImg, 0, 0, newWidth, newHeight); 
       newImg.Dispose(); 

       temp.Save(stream, ImageFormat.Png); 
       stream.WriteTo(Response.OutputStream); 
       temp.Dispose(); 
       stream.Dispose(); 
      } 
      catch (Exception ex) 
      { 
       Response.Write(ex.Message.ToString()); 
      } 
     } 
+6

Oh, esto va a perder identificadores si se produce una excepción :-) realmente debería considerar el uso de 'using' cuando trabajando con recursos desechables como flujos y objetos GDI +. –

+1

Pinu, algunos detalles sobre la excepción ayudarían. También el contexto donde esto se llama. (ASPX o ASHX, ¿qué evento?) El código en sí está básicamente bien, excepto por el comentario que hace @Darin. –

+0

@Darin, no te quiero dar, ¿puedes darme un ejemplo de cómo puedo usar esto con el uso? – Pinu

Respuesta

40

Esto no es directamente relevante para su problema, pero me dio la misma excepción cuando se hace algo más, así que pensé que había puesto que la respuesta aquí para la posteridad ...

Tengo esta excepción meramente cuando se estaba procesando la página de inicio, en lugar de cuando se va a la acción del controlador relevante.

Se produce mucho arañazo en la cabeza, hasta que me doy cuenta de que he usado Html.Action (que ejecuta la acción y emite el código HTML en línea) en lugar de Url.Action (que genera la URL).

+4

+1. Tenía el mismo error. Esto me lo arregló. – Ben

+1

¡Sí! gracias - para cualquiera que quiera seguir con @Html helper - también puede usar @ Html.ActionLink (xxx) – Rick

0

En mi caso, el motivo era un argumento erróneo en el método Controller.File.

método Controller.File con el tercer parámetro como nula dará la imagen en la ventana del navegador:

public ActionResult GenerateImage(...) 
{ 
    ... 
    return File(fileResult.Buffer, fileResult.ContentType, null); 
} 

método Controller.File con el tercer parámetro como nombre de fichero dará lugar a la descarga de la imagen en el navegador:

public ActionResult GenerateImage(...) 
{ 
    ... 
    return File(fileResult.Buffer, fileResult.ContentType, "image.jpg"); 
} 

método Controller.File con tercer parámetro como extensión causará el error: OutputStream no está disponible cuando se utiliza un TextWriter encargo

public ActionResult GenerateImage(...) 
{ 
    ... 
    return File(fileResult.Buffer, fileResult.ContentType, ".jpg"); 
} 
Cuestiones relacionadas