Datei als PDF öffnen, obwohl Endung NICHT .PDF

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

Es gibt 19 Antworten in diesem Thema. Der letzte Beitrag () ist von petaod.

    Datei als PDF öffnen, obwohl Endung NICHT .PDF

    Hi,

    Ich öffne in meiner Programm PDF-Dateien in einem Webbrowser auf meiner Form.
    Nun würde ich gerne die PDF-Dateien mit einer anderen Endung (*.xyz) versehen, dass meine PDF-Dateien auch wirklich nur mit meinem Programm geöffnet werden können.

    Das Frage ist also, ob ich dem Webbrowser irgendwie sagen kann, dass er die ausgewählte Datei mit der Endung "xyz" als PDF behandeln soll beim öffnen???

    VB.NET-Quellcode

    1. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    2. Dim Response As DialogResult
    3. OpenFileDialog1.FileName = ""
    4. OpenFileDialog1.Filter = "PDF Files(*.pdf)|*.pdf|XYZ Files(*.xyz)|*.xyz"
    5. Response = OpenFileDialog1.ShowDialog()
    6. If Response <> Windows.Forms.DialogResult.Cancel Then
    7. If OpenFileDialog1.FileName <> "" Then
    8. WebBrowser1.Navigate(OpenFileDialog1.FileName & "#toolbar=0&navpanes=0&scrollbar=0")
    9. End If
    10. End If
    11. End Sub​
    Indem Du z.B. dem Adobe Reader sagst, dass er Deine Datei dieses Mal öffnen soll:

    VB.NET-Quellcode

    1. Diagnostics.Process.Start("C:\Program Files (x86)\Adobe\Acrobat Reader DC\Reader\AcroRd32.exe", PfadZuDeinerXyzDatei)
    (AdobeReader-Dateifad ggf. an Dein Installationsverzeichnis anpassen)
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Ja, über die "Process.Start"-Variante kenne ich das auch, aber ich wollte eigentlich, dass die PDF in einem Teil meiner Form geöffnet wird.
    Deswegen habe ich den Webbrowser auf meine Form an die Stelle gezogen, wo es sein soll.
    Daher auch die Frage, bezogen auf das starten in dem WebBrowser auf meiner Form!?!?
    Sorry. Das habe ich zwar erfolgreich gelesen, aber gleich danach aus dem Hirn verbannt :S
    Eine Möglichkeit als workaround: Vor der Anzeige im Webbrowser die Datei in ein Verzeichnis kopieren und in PDF umbenennen und diese dann anzeigen. Ob's ne schönere Methode gibt, weiß ich momentan nicht.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    @zauber777 Ich denke nicht, dass sich der der WebBrowser überreden lässt, ieine Datei als PDF zu öffnen.
    Nach der Umbenennung, wie @VaporiZed vorschlug, ist es auch nicht sicher, da der WebBrowser ein ggf. versionsabhängiges PDF-Plugin verwendet.
    Bedenke andererseits, dass das WebBrowser ein Steinkohlen-Control ist, wo unerwartete Dinge passieren können.
    Eine Datei welchen Typs ist denn Deine Wunsch-Datei?
    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!

    VaporiZed schrieb:

    Vor der Anzeige im Webbrowser die Datei in ein Verzeichnis kopieren und in PDF umbenennen
    Denke das ist die einfachste Lösung. Gibt glaub noch nen PDF Viewer Control von Adobe, aber mit dem kenne ich mich nicht aus. Vermute aber das dieses Control auch .pdf Dateien haben möchte...
    "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

    RodFromGermany schrieb:

    Bedenke andererseits, dass das WebBrowser ein Steinkohlen-Control ist, wo unerwartete Dinge passieren können.
    Eine Datei welchen Typs ist denn Deine Wunsch-Datei?


    Meine Wunschdatei ist auf jeden Fall ist eine PDF-Datei. Ich möchte nur verhindern, dass man die PDF nicht ausserhalb meines Programms öffnet. Deswegen will ich die Endung der Datei ändern, dass man gar nicht erst in Versuchung kommt diese direkt zu öffnen.
    Ich wusste nicht, dass der WebBrowser-Control so alt ist, dass man es nicht mehr verwenden sollte. Ein anderes Control war/ist mir nicht bekannt, welches ich nutzen kann zum anzeigen einer PDF-Datei innerhalb meiner Form.

    Gibt es eine andere Möglichkeit dieses Problem zulösen?
    @zauber777 Du hast hier einige Vorschläge bekommen.
    Probiere sie aus und berichte uns von Deinen Ergebnissen.
    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!
    Ich würde mal ganz primitiv einfach das "Adobe PDF reader COM Component" in den Raum werfen.
    Kommt direkt von Adobe und wird "glaube" ich sogar mit gepatcht wenn es um Sicherheitssachen geht.
    Nachteil: Der User muss Adobe Reader wenn ich richtig informiert bin installiert haben.

    Aber du könntest so deine PDF Datei in deiner Form öffnen.

    Siehe: codeproject.com/Questions/2908…-in-WinForms-using-Csharp
    Grüße , xChRoNiKx

    Nützliche Links:
    Visual Studio Empfohlene Einstellungen | Try-Catch heißes Eisen

    zauber777 schrieb:

    Ein anderes Control war/ist mir nicht bekannt, welches ich nutzen kann zum anzeigen einer PDF-Datei innerhalb meiner Form.
    Ich würde einfach mal im nuget-Manager PDFViewer eingeben.
    Da werden zahlreiche Komponenten angezeigt, z.B. FreeSpire ode Syncfusion.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    Habe jetzt ein bisschen rumprobiert.

    Mit dem Adobe-Control funktioniert es soweit, dass ich auch Dateien öffnen kann, die ich vorher umbenannt habe.

    Leider ist aber das Problem, dass ich diesen komischen "Bearbeitungsbalken" (siehe Screenshot) nicht deaktivieren kann. :(
    Kennt ihr den Befehl dafür?

    Aktuell sieht mein Code wie folgt aus (Scroll-Leiste + Werkzeugleiste + Lesezeichen kann ich schon ausblenden) :

    VB.NET-Quellcode

    1. AxAcroPDF1.setShowToolbar(False)
    2. AxAcroPDF1.setShowScrollbars(False)
    3. AxAcroPDF1.setPageMode("none")
    4. AxAcroPDF1.LoadFile(Application.StartupPath & "\" & "test.xyz")
    Bilder
    • pdf.png

      2,82 kB, 439×87, 76 mal angesehen

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

    @zauber777 222 Posts im Forum und noch nicht gelernt, das das Forum eine eigene Datei-Anhang-Funktion hat:
    Erweiterte Antwort => Dateianhänge => Hochladen.
    Ändere bitte gefälligst Deinen Post entsprechend.
    So ein werbe-verseuchtes Zeugs schau ich mir nicht an. 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!
    Also ich bin immer noch am testen, wie ich das Problem nun wirklich lösen kann.

    Das Umbennen der Datei durch renaming würde funktionieren... Aber da ich in meinem Ordner irgendwann ca. 200 PDF-(in meinem Fall XYZ-) Dateien habe und auf SSD´s jeder Schreibprozess auf Dauer die SSD Lebenszeit herabsetzt, versuche ich einen anderen Weg zufinden.

    Das Ziel ist es weiterhin eine PDF-Datei, welche nicht PDF sondern XYZ am Ende hat via Webbrowser-Control zu öffnen. Webbrowser-Control aus dem Grund, da man hier alle PDF-Dinge wie Navigations-Panels, Lesezeichen und dieses speichern/drucken/usw.-immer wieder auftauchende Ding deaktivieren kann.

    Mein neuester Ansatz ist wie folgt - ich nehme meine .xyz-Datei (hier im Test via OpenFileDialog), entferne die letzten 4 Zeichen und füge .pdf wieder hinzu und übergebe dies an den WebBrowser. Logischerweise kann aber der Webbrowser die Datei dann nicht finden und somit nicht anzeigen...

    VB.NET-Quellcode

    1. Dim Response As DialogResult
    2. OpenFileDialog1.FileName = ""
    3. OpenFileDialog1.Filter = "PDF Files(*.pdf)|*.pdf|XYZ Files(*.xyz)|*.xyz"
    4. Response = OpenFileDialog1.ShowDialog()
    5. If Response <> Windows.Forms.DialogResult.Cancel Then
    6. If OpenFileDialog1.FileName <> "" Then
    7. Dim s As String = OpenFileDialog1.FileName
    8. WebBrowser1.Navigate(s.Substring(0, s.Length - 4) & ".pdf" & "#toolbar=0&navpanes=0&scrollbar=0")
    9. End If
    10. End If


    Habt ihr noch eine Idee, wie ich dem WebBrowser meine .XYZ-Datei als PDF übergeben kann?
    @zauber777 Was willst Du denn erreichen?
    Wenn jemand sieht, dass da in einem WebBrowser-Control eine Datei mit der Endung XYZ wie eine PDF angezeigt wird, wird er stutzig, kopiert den Link ins Notepad, untersucht ihn und hat sofort vollen Zugriff auf die Datei, die er nach Umbenennung im Acrobat ansehen kann.
    ====
    Wenn die Datei auf einem USB-Stick liegt, wird die SSD nicht frequentiert.
    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!
    Such dir nen PDF Viewer Control dem man einem Stream übergeben kann. Der von Devexpress (kostet Geld) z.B. kann das. Da ist die Dateiendung vermutlich (nicht getestet) dann egal.

    Ansonsten lass doch den Quatsch mit der Dateieendung weg und belass es bei .pdf.
    "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
    @RodFromGermany nach dem ich das WebBrowser-Control auf meine Form gezogen habe und das Programm gestartet habe, sieht man nicht dass es ein WebBrowser-Control ist. Wenn keine Datei/Seite geladen ist, dann ist es ein einfaches weißes Fenster und mehr nicht. Somit kann sich auch keiner die Adresse kopieren oder ähnliches. Man kann es nur durch rechtsklick und dann Eigenschaften sehen. Dies kann man aber durch deaktivieren des rechtsklicks verhindern.

    @mrMo ja an einen PDF-Viewer-Control habe ich auch schon gedacht. Die kostenpflichtigen Varianten sind aber mit Preisen weit von kosten-nutzen entfernt.
    Mit dem Adobe PDF-Viewer-Control habe ich es auch schon versucht. Hier würde es sogar funktionieren, dass ich eine umbenannte Datei einlese.
    Jedoch hat man darin das Problem, dass dieses auftauchende Fenster (drucken,speichern,...) kommt --- gerne auch bezeichnet als "Floating-Control".

    zauber777 schrieb:


    Das Umbennen der Datei durch renaming würde funktionieren... Aber da ich in meinem Ordner irgendwann ca. 200 PDF-(in meinem Fall XYZ-) Dateien habe und auf SSD´s jeder Schreibprozess auf Dauer die SSD Lebenszeit herabsetzt, versuche ich einen anderen Weg zufinden.

    @Cheffboss das war vom TE nicht gewünscht...
    "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

    zauber777 schrieb:

    auf SSD´s jeder Schreibprozess auf Dauer die SSD Lebenszeit herabsetzt
    Dieser Mythos bleibt der SSD wohl ewig erhalten.
    Vielleicht mal ein Artikel dazu:
    compuram.de/blog/die-lebensdau…s-kann-ich-ihr-gutes-tun/

    Aber wenn du der Überzeugung bist, dass das Schreiben von ein paar Headereinträgen der Platte schadet, kannst du die Datei ja für die Dauer der Anzeige auf ein HDD-Temp-Verzeichnis kopieren und von dort einlesen.

    Trotzdem verstehe ich die ganze Versteckerei nicht.
    Aber muss ich wohl auch nicht.

    Dass in nuget genügend PdfViewer-Controls gelistet sind, die alle besser als der WebBrowser sind, weißt du ja, wenn du Post #10 gelesen hast.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --