Webbrowser und Image

  • VB.NET
  • .NET (FX) 4.5–4.8

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

    Webbrowser und Image

    Hallo zusammen,
    habe in meinem Projekt aus der Toolbox das Webbrowser-Objekt eingebaut. Es überlagert in der Größe exakt eine Picturebox (Anzeigen von BMP, JPG, TIF, GIF, PNG). Wenn ich nun ein PDF als Anzeigebasis bekomme, möchte ich diese Sicht aktivieren. Funktioniert auch beim ersten Mal. Wenn ich dann in meiner DB weiterblättere und mir erneut ein PDF anzeigen lassen will, bekomme ich das zuerst angezeigte PDF angezeigt, obwohl der Pfad und Dateiname in der Routine angepasst ist (habe ich im DEBUG geprüft. Muss der Webbrowser vorher neutralisiert werden?
    Viel lieber hätte ich das PDF in eine Bilddatei konvertiert, um das Webbrowser-Control wieder zu entfernen. Der Bildaufbau hierin ist etwas langsam.
    Ich nutze VS2022 mit Framework 4.8. (W11).

    VB.NET-Quellcode

    1. Public Shared Sub Bild_Typ02()
    2. With NM_Ahnen
    3. .pbx_01_01.Visible = False
    4. .web_Brs1.Visible = True
    5. .web_Brs1.Navigate(Filepdf)
    6. .web_Brs1.Show()
    7. int_PDFZeigen = 1
    8. End With
    9. End Sub
    @Normen Wie wäre es mit nem TabControl ohne Reiter?
    TabControl ohne Reiter
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    @Normen Für jedes der übereinandergelegten Controls einen Tab.
    Du selektierst den Tab, der das aktuelle Dokument zeigt.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Hallo RFG,
    das löst aber nicht mein Problem. Mit meinen beiden übereinanderliegenden Controls funktioniert das ja genauso, die Tabs ohne Reiter habe ich an anderer Stelle bereits eingebaut. Aber die Anzeige des PDF´s mit einer falschen Zuordnung im Webbrowser ist das Problem und eine evtl. Konvertierung von PDF in ein Bild-Format.
    OHa.
    Probier mal diesen für PDF: Dateivorschau per Interface IPreviewHandler
    hab ich getestet, geht ganz gut.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Hallo RFG,
    habe ich mir gerade geladen und angeschaut. Diese vielen systemnahen Zeilen übersteigen meinen Horizont. Ich weiß nicht, wie man dies einbauen sollte.
    Hatte vorige Woche bereits den PDF-Viewer von Adobe runtergeladen und aus der Toolbox installiert. Kam auch da zu keinem Ergebnis. Wenn ich dann die kompilierte EXE aufrufen wollte, kam es zu keiner Ausführung. Klappte erst wieder, als das Adobe-Control wieder entfernt hatte.
    Ich habe bei meinen gestrigen Recherchen irgendwo ? den Hinweis gefunden, dass man ein PDF zu einer Bilddatei konvertieren kann - diese könnte ich dann in der PicBox anzeigen. Hast du dazu einen Hinweis.
    Meine komplexe Anwendung (Ahnenforschung) entwickel ich seit einigen Jahren. Im Moment habe ich die Zeit, das Werk zu vollenden. dabei habe ich bisher systemnahen Code noch nicht verwendet.
    Danke im Voraus
    Hi

    Das mit dem IPreviewHandler ist relativ einfach. Das wichtigste ist alles in einer Klasse. Diese Klasse fügst Deinem Projekt hinzu und dann so wie im Beispiel vom IPreviewHandler-Projekt aus dem Download vorgehen.

    Übrigens, das IPreviewHandler-Projekt kann neben PDFs, auch von anderen Dateien eine Vorschau erstellen. Es reicht daher diese Klasse und am einfachsten eine PictureBox wo dann alles angezeigt werden soll.
    Mfg -Franky-

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

    Hallo Franky,
    danke schon einmal für deine Bemühungen. Ich bitte um Verständnis, fremde Software habe ich bei mir noch nicht integriert, ist was völlig neues. Heißt das in diesem Fall, dass ich das Modul "PreviewHandler" bei mir per Copy als Classe einfügen muss, und in meinem Programm den Aufruf und das Laden von Dateien hierauf setze (ähnlich wie in "Form1_Load")?
    Es wäre natürlich super, alles mit der PcitureBox zu realisieren, macht das Programm schlanker uns sicherlich ist die Anzeige auch schneller als mit dem WebBrowser.
    Ich verstehe trotzdem in meinem Programm nicht, wieso der WebBrowser nur immer die erste Datei anzeigt und eine neue einfach ignoriert.
    Ich frage mich, wozu wird eigentlich die Anweisung ausgeführt?

    VB.NET-Quellcode

    1. .web_Brs1.Show()


    Bei mir reicht immer folgende Anweisung aus:

    VB.NET-Quellcode

    1. sFile = IO.Path.Combine(_Archivpfad, DGVArchiv.CurrentRow.Cells(0).Value.ToString)
    2. WBArchiv.Navigate(sFile)
    3. Do While WBArchiv.IsBusy
    4. Threading.Thread.Sleep(200)
    5. Loop


    Gruß Achilleus

    P.S.
    Ich lasse mir schon seit Ewigkeiten die PDF-Dateien immer im Browser anzeigen. Das hat den Vorteil das ich auf die PDF-Dateien sofort den vollständigen Zugriff habe.
    Hallo Achilles,
    das resultiert aus den Versuchen, die andere Datei sichtbar zu machen. Ich habe auch mit Refresh probiert, aber alles kein Erfolg.
    Zeit war genug vorhanden, um das Laden abzuschließen.
    @Normen Du kannst die PreviewHandler.vb vom Testprojekt entweder direkt in Dein Projektordner kopieren und dann in Deinem Projekt über die IDE die Datei hinzufügen oder Du erstellst selber in Deinem Projekt eine Klasse mit gleichem Namen und kopierst den Code aus der PreviewHandler.vb 1:1 in Deine Klasse rüber. Der Rest ist ja im Testprojekt ersichtlich was dann noch zu machen ist. Klasse per New initialisieren, eine PictureBox zuweisen auf der die Preview angezeigt werden soll und dann Dateien per ShowPreview laden.
    Mfg -Franky-
    Hallo Franky,
    habe ich jetzt so gemacht. Habe eine Klasse PreviewHandler in meinem Paket eingefügt und den kpl. Code hineinkopiert. Im Programmstart habe ich vor dem Load die Zeile" Privat Readonly Preview as new PreviewHandler" eingetragen und nach dem Load den Verweis "Preview.PreviewWindow = pbx_01_01" eingetragen. In meinem Bildaufruf (andere Klasse) wird der Code mit Fehler "Der Verweis auf eine nicht freigegebenen Member ...."
    siehe Codeausschnitt

    VB.NET-Quellcode

    1. ​Public Shared Sub Bild_Typ01()
    2. 'Dim picFileStream As New FileStream(Filepdf, FileMode.Open, FileAccess.Read)
    3. 'Img_Pers = Image.FromStream(picFileStream)
    4. 'picFileStream.Close()
    5. 'picFileStream.Dispose()
    6. With NM_Ahnen
    7. .bt_Pic_Rotation.Visible = True
    8. .web_Brs1.Visible = False
    9. .pbx_01_01.Visible = True
    10. Preview.ShowPreview("Filepdf")
    11. '.pbx_01_01.Show()
    12. End With
    13. End Sub


    Die auskommentierten Zeilen sind noch aus der Ursprungslösung. Was mache ich falsch?
    Hallo Franky,
    ZIP-Datei im Anhang. Das Problem stellt sich in der "cls_03_DB_Bilder".Es ist sicherlich schwierig, ohne DB-Anbindung das ganze nachzuvollziehen. Aber vielleicht findest du trotzdem die Lösung. Und bitte nicht erschrecken, wenn nicht alle VB.net-Konventionen eingehalten sind. Bin Programmierer der alten Schule (Cobol, PL/1). Da sah die Welt noch anders aus - keine OO.
    Vielen Dank schon mal für deine Hilfe
    Norbert
    Dateien
    • NM_Ahnen.zip

      (9,32 MB, 125 mal heruntergeladen, zuletzt: )
    @Normen Auf die schnelle über Dein Projekt drüber geschaut. Da mir wohl so einiges fehlt, erhalte ich diverse Fehlermeldungen und kann Dein Projekt nicht ausführen. Aber ich glaub ich hab die Stelle wo es hakt. Imports NM_Ahnen.PreviewHandler in der cls_03_DB_Bilder kannst auskommentieren/löschen. In der Sub Bild_Typ01 dann die Zeile entsprechend auf NM_Ahnen.Preview.ShowPreview(Filepdf) ändern.
    Mfg -Franky-
    @Normen Hättest Du Dein Projekt ohne die bin, obj und vs-Ordner abgespeichert, wäre es nur 572 KB groß. X(
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Hallo Franky,
    ja, das war die Lösung - aber sollte der PreviewHandler mir nicht auch PDF-Dateien anzeigen. Das macht er nicht. Er durchläuft die gesamten Routinen und zeigt mir als Ergebnis den darüberliegenden Index des Verzeichnis an. Dort kann ich dann zwar navigieren, aber das ist nicht die Idee. Ich möchte mir ja den Webbrowser sparen.
    Zusätzliche Frage: Wie kann ich ein angezeigtes Image drehen, mit ursprünglicher Dateiname ist ja nicht mehr up to Date.
    Danke schon mal für deine Mühen, um mir zu helfen.
    Gruß
    Norbert

    Normen schrieb:

    aber sollte der PreviewHandler mir nicht auch PDF-Dateien anzeigen
    Ja sollte, ich habe aber die Befürchtung das hier der PreviewHandler vom EdgeBrowser aufgerufen wird und der hat eine Macke wenn die PDF auf einem Netztwerklaufwerk liegt. Schaut dann so aus wie auf dem ScreenShot. Ist aber ein Problem von MS und nicht von meinem Code.

    Bilder kannst Du mit Image.RotateFlip drehen.

    Edit: Du kannst ja mal zu dem Ordner, wo die PDFs liegen, mit dem Explorer hin navigieren und eine PDF anklicken (kein doppelklick). Im Explorer muss die Vorschau eingeschalten sein. Wenn das dann so ausschaut wie auf dem ScreenShot, dann ist es definitiv der PreviewHandler vom EdgeBrowser. Mein Code verwendet das, was der Explorer für die Preview auch verwendet. Vllt ist bei Dir auch nur der PreviewHandler für PDF verstellt worden (wodurch kann ich nicht sagen, weil wir auf Arbeit das gelegentlich auch haben). Da wir aber den AcrobatReaderDC verwenden, drehe ich den vorbogenen Regkey auf den PreviewHandler mit einer REG-Datei wieder auf den PreviewHandler vom AcrobatReader zurück und dann funktioniert die Preview auch mit PDFs auf einem Netzwerklaufwerk wieder so wie sie soll.
    Bilder
    • EdgePreviewHandler.png

      8,45 kB, 370×181, 100 mal angesehen
    Mfg -Franky-

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

    Hallo Franky,
    ja genau sieht es aus. Ich habe jetzt den Acrobat Reader als Standard für PDF eingetragen, neu gestartet - Ergebnis aber wie vorher.

    wie heißt denn das Image, das zurückgeliefert wird (für Rotate)

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