Laden...

Neue Seite dynamsich generieren, um byte[] als PDF darzustellen

Erstellt von Noodles vor 19 Jahren Letzter Beitrag vor 19 Jahren 2.898 Views
N
Noodles Themenstarter:in
4.644 Beiträge seit 2004
vor 19 Jahren
Neue Seite dynamsich generieren, um byte[] als PDF darzustellen

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

381 Beiträge seit 2004
vor 19 Jahren

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/

N
Noodles Themenstarter:in
4.644 Beiträge seit 2004
vor 19 Jahren

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?

381 Beiträge seit 2004
vor 19 Jahren

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/

N
Noodles Themenstarter:in
4.644 Beiträge seit 2004
vor 19 Jahren

Moin,

mit inline wird das File leider im selben Browser geöffnet.

381 Beiträge seit 2004
vor 19 Jahren

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/