12 Stimmen

OutputStream ist nicht verfügbar, wenn ein benutzerdefinierter TextWriter verwendet wird

Dies ist meine Funktion, die pdf in png Bild konvertiert, es ist ein Fehler auf werfen this line--> stream.WriteTo(Response.OutputStream); Ist da irgendetwas falsch??

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());
            }
        }

47voto

Roger Lipscombe Punkte 84868

Dies ist nicht direkt relevant für Ihr Problem, aber ich habe die gleiche Ausnahme erhalten, als ich etwas anderes tat, also dachte ich, ich würde die Antwort hier für die Nachwelt festhalten...

Ich bekam diese Ausnahme nur, wenn die Homepage gerendert wurde, anstatt beim Aufrufen der entsprechenden Controller-Aktion.

Es folgt viel Kopfzerbrechen, bis ich feststelle, dass ich die Html.Action (die die Aktion ausführt und den HTML-Code inline ausgibt) und nicht Url.Action (die die URL erzeugt).

1voto

Tomas Kubes Punkte 21732

In meinem Fall war der Grund ein falsches Argument in der Methode Controller.File.

Controller.File Methode mit dem dritten Parameter als null wird das Bild im Browserfenster angezeigt:

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

Controller.File Methode mit dem dritten Parameter als Dateiname wird das Herunterladen des Bildes im Browser ausgelöst:

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

Controller.File Methode mit dem dritten Parameter als Erweiterung wird den Fehler verursachen: OutputStream ist nicht verfügbar, wenn ein benutzerdefinierter TextWriter verwendet wird

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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X