Adobe PDF in WebBrowser darstellen

  • VB.NET
  • .NET (FX) 4.0

Es gibt 43 Antworten in diesem Thema. Der letzte Beitrag () ist von Dksksm.

    @Takafusa
    Das ist unabhängig ob die Pro oder die normale Version installiert ist.

    @Dksksm
    Die API AssocQueryStringW kann auch durch normale .Net Funktionen ersetzt werden die in der Registry den entsprechenden Wert (CLSID der Shellextension) auslesen. Für OpenOffice müsste man mal in der Registry nachschauen was da für ein PreviewHandler (IID_ ) gesetzt ist.
    Mfg -Franky-
    Auf meinem Arbeitsrechner läuft die Vorschau mit Office-Dateien, da ist Office auch noch eine lokale Installation (nicht Office 365, wie bei mir privat).
    Dafür geht die Vorschau mit Acrobat aber gar nicht. Hier auf dem Arbeitsrechner ist Adobe Acrobat Reader DC MUI unter Apps aufgeführt. Ich habe hier leider einen verwalteten Rechner (i.do) und kann da nicht viel ausrichten.
    Die GUID der App die aus der Registry ausgelesen wird ist dc6efb56-9cfa-464d-8880-44885d7dc193, CreateInstance liefert null zurück.
    Schon drollig, wie unterschiedlich sich die Systeme verhalten.

    Nachtrag: Ich schwöre ich habe nichts geändert an der FilePreview-Klasse, aber die Vorschau von PDF's geht auch. Das versteh ich nicht, aber es freut mich.

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

    @Dksksm
    Ich habe noch eine kleine Änderung in der Funktion CreateInstance gemacht.

    VB.NET-Quellcode

    1. Private Function CreateInstance(clsid As Guid) As Object
    2. Dim oIUnknown As Object = Nothing
    3. If CoCreateInstance(clsid, Nothing, CLSCTX_LOCAL_SERVER,
    4. New Guid(IID_IUnknown), oIUnknown) = S_OK Then
    5. 'Debug.Print("CreateInstance per CLSCTX_LOCAL_SERVER")
    6. Return oIUnknown
    7. ElseIf CoCreateInstance(clsid, Nothing, CLSCTX_INPROC_SERVER,
    8. New Guid(IID_IUnknown), oIUnknown) = S_OK Then
    9. 'Debug.Print("CreateInstance per CLSCTX_INPROC_SERVER")
    10. Return oIUnknown
    11. End If
    12. Return Nothing
    13. End Function

    Sofern das erste CoCreateInstance mit CLSCTX_LOCAL_SERVER fehlschlägt, wird der zweite CoCreateInstance mit CLSCTX_INPROC_SERVER aufgerufen. Eines von beiden sollte dann zumindest ein IUnknown zurück liefern. So die Theorie (klappt bei mir natürlich auch anstandslos).

    Wie gesagt, es gibt genügend Beispiele im Internet zum Thema PreviewHandler die alle irgendwie gleich aufgebaut sind. Es gibt da zwar kleine Unterschiede wie das auslesen der CLSID. Mal per AssocQueryStringW oder direkt mit .NET Funktionen oder wie der IStream zum Initialisieren erstellt wird. Das einzige was diese Beispiele gemeinsam haben wenn man sich die Antworten zu den Samples durchließt, das alle irgendwie Probleme mit dem AcrobatReader haben.

    Im Nachhinein kann ich nur sagen, ich hätte den Vorschlag mit den PreviewHandlern wohl nicht gemacht wenn ich die gleichen Probleme wie die anderen gehabt hätte. Hatte ich aber nicht. Läuft ja bei mir auf zwei Systemen problemlos. What ever. Vllt findet ja jemand eine bessere Lösung wie man mit dem PreviewHandler vom Acrobat umgehen muss das dieser nicht so rumzickt.
    Mfg -Franky-
    Ich beschäftige mich jetzt seit 2 Tagen damit aber eben auch daran, das bei mir einzubinden.
    Acrobat zickt bei mir auf der Arbeit nicht mehr herum, braucht auch nur die eine und einzige Aufforderung zum Anzeigen.

    Also ich bin dankbar und froh über deinen Beitrag und die Arbeit die du da rein-investiert hast.
    Mein Skill ist das trotzdem nicht, auch was ich zum Thema gefunden habe ist für mich nicht "sprechend". Mag ja sein dass du das sogar problemlos verstehst, für mich sind das eher Klimmzüge.
    Wenn du Arnold Schwarzenegger in seinen besten Jahren bist, bin ich Rowan Atkinson an seinen schwächsten Tagen.