Laden...

[gelöst] PDF vom Stream im WebBrowser-Control anzeigen?

Erstellt von Joetempes vor 11 Jahren Letzter Beitrag vor 9 Jahren 7.970 Views
Joetempes Themenstarter:in
888 Beiträge seit 2007
vor 11 Jahren
[gelöst] PDF vom Stream im WebBrowser-Control anzeigen?

Hallo,

ich erstelle über FastReport.Net ein PDF als MemoryStream.
Meinem WebBroser-Control setzte ich diesen Stream als Propertie DocumentStream.

Mein Problem ist, dass nicht das PDF angezeigt wird, sondern der Text vom PDF,
also quasi sowas hier:

%PDF-1.5
%µµµµ
1 0 obj
<</Type/Catalog/Pages 2 0 R/Lang(de-DE) /StructTreeRoot 14 0 R/MarkInfo<</Marked true>>>>
endobj
2 0 obj
<</Type/Pages/Count 1/Kids[ 3 0 R] >>
endobj
3 0 obj
<</Type/Page/Parent 2 0 R/Resources<</XObject<</Image6 6 0 R/Image11 11 0 R>>/Pattern<</P5 5 0 R>>/Font<</F1 7
/Prev 117061/XRefStm 116737>>
startxref
117899
%%EOF

Der Stream startet korrekt mit "%PDF-1.5" und endet korrekt mit "EOF".

Wo muss ich was einstellen, daß korrekt das PDF angezeigt wird?

Grüße

Joe

6.911 Beiträge seit 2009
vor 11 Jahren

Hallo Joetempes,

den Mime-Type musst du dem WebBrowser noch bekannt geben.

Ich denke aber dass es hierzu keine Eigenschaft/Methode gibt und daher hab ich das byte[]-PDF immer als temp. Datei geschrieben und dieses geladen (und anschließend die temp. Datei gelöscht). Vllt. hab ich auch aber was übersehen.

mfG Gü

Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"

Joetempes Themenstarter:in
888 Beiträge seit 2007
vor 11 Jahren

den Mime-Type musst du dem WebBrowser noch bekannt geben.

Ok, guck ich mir an...

Ich denke aber dass es hierzu keine Eigenschaft/Methode gibt und daher hab ich das byte[]-PDF immer als temp. Datei geschrieben und dieses geladen (und anschließend die temp. Datei gelöscht).

Genau das wollte ich vermeiden...

Joetempes Themenstarter:in
888 Beiträge seit 2007
vor 11 Jahren

Hallo gfoidl,

es geht wohl nur so wie Du es beschrieben hast.
Wie machst du das genau?

Mein Problem ist, das wenn das File geladen ist man es ja nicht löschen kann.
Nun wollte ich ein neues File laden und das alte File löschen.
Doch beim Versuch des Löschens gibt es einen Fehler, das File wird noch verwendet.
Wie Released Du das alte File?

Edit:
Hat sich erledigt: webBrowser1_DocumentCompleted

49.485 Beiträge seit 2005
vor 11 Jahren

Hallo Joetempes,

es sollte reichen, im WebBrowser-Control eine neue Seite zu laden (auf DocumentCompleted warten). Wenn du nicht eine (z.B. leere) Zwischenseite anzeigen willst, während du dieselbe Datei neu schreibst, kannst du dir damit behelfen, dass du zwei Dateien im Wechsel beschreibst, dann kannst du direkt von einem PDF zum nächsten wechseln.

herbivore

J
222 Beiträge seit 2006
vor 9 Jahren

Hallo,

Ich kämpfe nun schon seit geraumer Zeit, mein PDF ( erstellt via PDFSharp ) welches ich in einen MemoryStream geladen habe im WebBrowser darzustellen.
Es kommt aber immer nur eine Leere Seite ... und ich verzweifle.

Einziger weg was bis jetzt geht => Den MemoryStream vom PDF in ein File zu speichern und dann mit Navigate im Webbrwoser das File öffnen.
Dies möchte ich aber vermeiden da dies eingescannte PDF's sind und zum teil nicht gespeichert werden.


using( MemoryStream ms = new MemoryStream())
                 {
                     // doc.Save = Funktion von PDF Sharp wo das PDF in einen Stream gespeichert wird
                     doc.Save(ms, false);
                     webBrowser1.Navigate("about:blank");
                     webBrowser1.Document.OpenNew(false);
                     ms.Position = 0;
                     webBrowser1.DocumentStream = ms;
                   }

leider bleibt das WebBrowser Control leer
hat dies schon jemand gelöst ?

Grüße Chris

49.485 Beiträge seit 2005
vor 9 Jahren

Hallo Jabi,

nachdem bisher keine weitere Antwort kam, erhöht das die nur Wahrscheinlichkeit, dass die bisherigen Aussagen im Thread weiter oben zutreffend sind und es anscheinend keine andere Lösung gibt, als die Daten in eine Datei zu schreiben und diese anzuzeigen.

Sollte doch noch jemand eine direkte Lösung kennen, kann er sie natürlich gerne schreiben.

herbivore

16.806 Beiträge seit 2008
vor 9 Jahren

Die IE Instanz, die dahinter steckt, benötigt IMMER einen DocumentType, damit es mit dem Stream etwas anfangen kann.
Per default ist dies in .NET immer text/html. Gibst Du dem Stream nun einfach einen PDF Stream gibts eben nur Müll in der Anzeige.
Es ist nicht möglich dies zu ändern. Man müsste schauen, was das webBrowser Control für APIs verwendet und dieses selbst nachbauen.