Hallo,
ich habe ein PDF File als byte Array im Speicher, welches ich über das Response-Objekt mit dem Acrobat Reader im Browser anzeigen kann.
Ich möchte aber, dass für das PDF File eine neue Seite generiert wird, in der dieses File angezeigt wird, aber alles im Speicher.
Wie muss ich vorgehen um diese neue Seite zu generieren.
Ausgangslage:
byte[] b = myFunction();
Response.ContentType = "Application/pdf";
Response.BinaryWrite( b ); // dadurch wird pdf in der aktuellen seite angezeigt, hier soll eine neue seite generiert werden
Response.End();
Von der Serverseite aus kannst du keine neuen Seiten öffnen. Du hast zwei Alternativen, entweder du lässt den Acrobat Reader direkt als separates Programm aufgehen oder du machst einen Response.Redirect und gibst das Byte Array mit.
Allerdings finde ich die erste Variante einfach schöner wenn der Reader gestartet wird. Das machst du wie folgt:
byte[] b = myFunction();
Response.ContentType = "Application/pdf";
Response.AppendHeader( "Content-Disposition", "attachment;filename=result.pdf" );
Response.BinaryWrite( b ); // dadurch wird pdf in der aktuellen seite angezeigt, hier soll eine neue seite generiert werden
Response.End();
Mit freundlichen Grüßen
René Paschold
.NET Developer / Trainer / Speaker / Author /
Projectleader / Software-Architect
.blog http://www.rene-paschold.de/
.business http://www.smarthouse.de/
Hi,
danke für die Antwort, so sieht das schon viel besser aus.
Eines noch, dadurch wird ja das Dateidownload-Fenster geöffnet, kann ich das noch irgendwie unterdrücken?
Versuche mal folgende Zeile zu ändern:
Response.AppendHeader( "Content-Disposition", "attachment;filename=result.pdf" );
in
Response.AppendHeader( "Content-Disposition", "inline;filename=result.pdf" );
Mit freundlichen Grüßen
René Paschold
.NET Developer / Trainer / Speaker / Author /
Projectleader / Software-Architect
.blog http://www.rene-paschold.de/
.business http://www.smarthouse.de/
Ok stimmt. Dann versuche mal folgendes: Die Render Methode des Webservices gibt dir ein encoding als Output Parameter zurück.
rStream = r.Render
(
report,
format,
historyId,
deviceInfo,
parameterVaule,
credentials,
showHideToggle,
out encoding,
out mimeType,
out reportHistoryParameter,
out warnings,
out streamId
);
// ContentType definieren
Response.ContentEncoding = System.Text.Encoding.Unicode;
Response.ContentType = mimeType;
// Header festlegen damit Browser weiss
// wie er mit dem Inhalt umgehen muss
Response.AppendHeader
(
"Content-Disposition",
"attachment;filename=result.pdf"
);
// Ausgabestream beenden
Response.BinaryWrite( rStream );
Vielleicht stimmt nur was mit dem MimeType nicht. Versuche es mal so.
Mit freundlichen Grüßen
René Paschold
.NET Developer / Trainer / Speaker / Author /
Projectleader / Software-Architect
.blog http://www.rene-paschold.de/
.business http://www.smarthouse.de/