expertenaustausch > microsoft.* > microsoft.german.entwickler.dotnet.vb

leslie eldrige (11.09.2009, 12:32)
Hallo Zusammen,

Ich möchte eine PDF Datei in Recourcen aufnehmen und zur Laufzeit dann in
meiner Applikation in einem WebControl anzeigen. Ich könnte zwar die PDF
Datei aus Resourcen zuerst einmal lokal auf die Festplatte speichern und im
WebBrowser Control die URL zum Pfad setzen, aber das will ich nicht (da sonst
meine PDF im Programmverzeichnis sichtbar wäre).

Gibt es also eine Möglichkeit die PDF Datei aus Resourcen herauszuholen und
ohne Zwischenspeichern direkt im WebBrowser anzuzeigen? Soweit es mir bekannt
ist hat WebBrowser eine Methode Namens DocumentStream, also müsste ich nur
noch meine Resourcen PDF Datei als Stream zur Verfügung stellen (aber wie?),
oder?

Danke schon mal im Voraus.

Grüsse
leslie eldrige (11.09.2009, 16:36)
Hmmmm, also ich hab's hingekriegt, jedoch werden nur binäre Daten im
WebBrowser Control ausgegeben. Der entsprechende Code ist:

Dim myAssembly As Assembly = Assembly.GetExecutingAssembly()
Dim PdfResourceName As String = String.Format("{0}.{1}",
myAssembly.GetName().Name, "MyPdfFile.pdf")
Dim PdfStream As Stream =
myAssembly.GetManifestResourceStream(PdfResourceNa me)

Me.WebBrowser1.DocumentStream = PdfStream

Nun soll der WebBrowser Control die Daten nicht umwandeln und anzeigen? Oder
erkennt es Adobe Plugin, das im IE Auf meinem Rechner installiert ist, nicht?

Weiss jemand vielleicht wie weiter?

PS: Natürlich muss man die Resourcendatei als Embedded (unter Eigenschaften)
definieren. Das war auch der Grund warum es vorerst bei mir nicht
funktiooniert hat.

"leslie eldrige" wrote:
[..]
leslie eldrige (11.09.2009, 17:00)
....das hat sicher was mit MIME type zu tun, aber die Eigenschaft
DocumentType ist schreibgeschützt!

Im Internet finde ich nicht wie man den MIME type auf "application/pdf" beim
WebBrowser Control setzen könnte!?

Weiss jemand zufällig wie man es machen könnte?

Schönes Weekend

"leslie eldrige" wrote:
[..]
Thorsten Doerfler (11.09.2009, 21:22)
leslie eldrige schrieb:
> Ich möchte eine PDF Datei in Recourcen aufnehmen und zur Laufzeit dann in
> meiner Applikation in einem WebControl anzeigen. Ich könnte zwar die PDF
> Datei aus Resourcen zuerst einmal lokal auf die Festplatte speichern und im
> WebBrowser Control die URL zum Pfad setzen, aber das will ich nicht (da sonst
> meine PDF im Programmverzeichnis sichtbar wäre).


Der Benutzer sieht Deine PDF Datei doch ohnehin irgendwann einmal. Ob er
die in Deiner Anwendung öffnet, oder im Explorer findet, dürfte dabei
wenig relevant sein.

> Gibt es also eine Möglichkeit die PDF Datei aus Resourcen herauszuholen und
> ohne Zwischenspeichern direkt im WebBrowser anzuzeigen?


Nein. Ein WebBrowser stellt HTML dar. Für alles andere bemüht er ggf.
Plugins. Setzt also erst einmal voraus, dass der Benutzer ein solches
für PDF installiert und auch aktiviert hat. Beides kannst Du nicht
100%ig sicherstellen. Somit ist es eher als Zufall zu betrachten, dass
der IE/WebBrowser PDFs darstellen kann.

> Soweit es mir bekannt
> ist hat WebBrowser eine Methode Namens DocumentStream, also müsste ich nur
> noch meine Resourcen PDF Datei als Stream zur Verfügung stellen (aber wie?),
> oder?


DocumentStream erwartet eine Webpage, also HTML. Möglich, dass er hier
auch Grafik interpretieren kann. Aber spätestens beim PDF oder anderem
nicht nativ unterstützten Formaten hört es auf, da der Webbrowser keine
Information hat, was er da im Stream bekommt. Wenn Du ein PDF
herunterlädst, bekommt der Webbrowser diese Information über die HTTP
Header.

Denkbar wäre vielleicht ein Mini-Webserver innerhalb Deiner Anwendung
(HttpListener), der auf Anfrage Ressourcen herausgibt. Hier könntest Du
dann das PDF mit dem passenden HTTP Header ausliefern. Aber Du
verlagerst damit nur den unumgänglichen Prozess, die Datei auf der
Festplatte zwischenzuspeichern, denn der IE bzw. das PDF Plugin, wird
auch eine lokale Kopie der PDF Datei zwischenspeichern. Diese würde
mitunter nicht nur für die Zeit der Anzeige im Cache des Anwenders
bleiben, sondern auch darüber hinaus. Das kannst Du umgehen, indem Du
die PDF Datei selber im Temp-Verzeichnis speicherst und nach Beenden der
Ansicht im Webbrowser, löschst Du sie wieder.

Thorsten Dörfler
leslie eldrige (11.09.2009, 22:23)
Denke Du hast Recht. Sehr wahrscheinlich werde ich es mit RTF Format
ausprobieren. Das sollte dann kein problem beim Darstellen verursachen (ein
RichTextbox Control ist ja vorhanden). Einzig wird die Grösse der Daten etwas
problematisch.

Grüsse

"Thorsten Doerfler" wrote:
[..]
Ähnliche Themen