WebBrowser Steuerelement und das Anzeigen einer Datei

  • WPF

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von -Franky-.

    WebBrowser Steuerelement und das Anzeigen einer Datei

    Hallo,

    meine Anwendung (WPF, .NET 6) erzeugt ein PDF, das ich in einem extra Fenster anzeigen will.

    Dazu habe ich ein Fenster definitert, das im wesentlichen nichts anderes als ein WebBrowserElement enthält. Dem Konstruktor gebe ich den Pfad der Datei mit.

    C#-Quellcode

    1. public PDFViewerControl()
    2. {
    3. InitializeComponent();
    4. }
    5. public PDFViewerControl(string path) : this()
    6. {
    7. DataContext = new PDFViewerViewModel(this);
    8. //Browser.Source = new(@"file://"+path);
    9. Browser.Navigate(path);
    10. }


    Das komische dabei ist aber nun, dass sobald ich den Zielpfad des Browsers setze, der Acrobat Reader geöffnet wird und dort das Dokument angezeigt. Im Browserfenster selbst steht dann


    Es ist wohl so, dass die Standardapp, die für .pdf eingestellt ist, aufgerufen wird. Wenn ich nämlich die Standardapp auf einen Browser lege und nicht auf dem Acrobat Reader, dann kommt dieser Browser hoch.

    Auf alle Fälle wird im Browserfenster meiner Anwendung kein PDF, sondern nur der Hinweis angezeigt. Und gebe ich keine Datei an, sondern eine normale Webseite, dann wird alles korrekt in meinem Fenster angezeigt.

    Was mache ich falsch?

    MQ

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „MasterQ“ ()

    Ich würde sagen das du nicjts falsch machst. Das Webbrowser Control basiert auf den IE, der war ja immer schon gut. Haha

    Und es ist ein Webbrowser Control, kein PDF Viewer. Ich würde mir an deiner stelle ein geeignetes Control besorgen.

    Grüße
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    Hab heute den WebView2 bei mir integriert. Evtl. eignet der sich ja auch für die PDF Anzeige.

    docs.microsoft.com/de-de/microsoft-edge/webview2/
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen
    Hi

    Wenn es Dir nur um eine Anzeige (Preview) einer PDF geht, so wie im Explorer die Vorschau, dann kannst Du das auch über das COM Interface IPreviewHandler realisieren. Darüber kann man von jeder Datei eine Preview erstellen, sofern für diese Datei ein PreviewHandler vorhanden ist.
    Mfg -Franky-
    Mit dem Webbrowser Control will ich nur PDF anzeigen und nicht durchs Netz brausen.

    Ich hatte den Adobe Reader direkt über COM eingebunden. Das funtkioniert soweit aber leider nur zeitweise. In unregelmäßigen Abständen bringt die DLL alles durcheinander, vor allem wenn mal wieder ein Update installiert wurde. Andere Pakete hatte ich gesucht und schon ein Haufen Zeit gelassen bei diversen Versuchen.

    Das Konstrukt mit dem alten WebBrowser hat auch schon funktioniert. Nur, warum auch immer, ist da jetzt schluss mit und seit eingen Tagen kommt das geschilderte Verhalten.

    mrMo schrieb:

    Hab heute den WebView2 bei mir integriert. Evtl. eignet der sich ja auch für die PDF Anzeige.


    WebView2 tut's.

    Damit habe ich keinen weiteren Aufwand und daher gehe ich mal diesen Weg.

    Gruß

    MQ

    MasterQ schrieb:

    Mit dem Webbrowser Control will ich nur PDF anzeigen und nicht durchs Netz brausen.

    Ja eben, das könnte man mit dem WebView2 auch.

    MasterQ schrieb:

    Ich hatte den Adobe Reader direkt über COM eingebunden.

    Das sind zwei verschiedene paar Schuhe ob man der AcrobatReader direkt einbindet oder ob man dessen PreviewHandler nutzt. Das COM Interface IPreviewHandler nutzt halt den eingerichteten PreviewHandler für ein PDF. Das kann der AcrobatReader oder auch ein anderes Programm sein, das einen PreviewHandler für PDF mitbringt. Bedeutet auch das wenn der Cromium Edge zb als Standardbetrachter für PDF eingerichtet ist, das auch dessen PreviewHandler genutzt wird. Von daher brauch man die WebView2 dann nicht. Die PreviewHandler, bzw dessen CLSID, findet man für PDF hier: HKEY_CLASSES_ROOT\.pdf\ShellEx und mit der IID_IPreviewHandler wird ein entsprechendes COM Interface IPreviewHandler erstellt. Dieses muss dann nur noch, je nachdem was der PreviewHandler kann (QueryInterface), per File, per IStream oder per IShellItem Initialisiert werden. Ein FensterHandle, Position sowie Größe zuweisen und das ganze anzeigen.
    Mfg -Franky-

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „-Franky-“ ()