Hallo,
ich habe folgendes Problem:
Ich habe ein Programm erstellt, welches auf mehreren Rechnern eingesetzt wird.
Innerhalb einer GUI existiert ein Button, mit dessen Hilfe eine PDF-Seite auf einer bestimmten Seite geöffnet wird.
Zuvor wird im Code nach der Datei "AcroRd32.exe" gesucht, da ich davon ausgegengen bin, dass jeder den Adobe Reader auf seinem Rechnet hat und nutzt.
Nun dürfen einige der PCs nicht mehr den Adobe-Reader verwenden, sondern einen anderen.
Wie finde ich nun den Pfad zu dem in Windows eingestellten Standardprogramm zum Öffnen von PDF-Dateien?
Oder habt ihr noch eine andere Idee?
PDF auf bestimmter Seite öffnen, Pfad zum Viewer nicht bekannt
Das "start" Kommando unter Windows sollte das normalerweise von alleine erledigen. Oder du schaust mal in Richtung DDE, und wie man das von Python aus nutzt. Ob allerdings alle PDF-Viewer die gleiche Art benutzen, nicht nur einen Datei zu oeffnen, sondern dann auch noch gleich zu einer bestimmten Seite zu springen - das kann ich schwer beurteilen.
@Patrick1990: Da alle modernen Browser auch PDF-Dateien anzeigen können, könnte man auch einen Browser mittels des `webbrowser`-Moduls starten und ein `#page=x` an die `file://`-URL hängen. Zumindest Firefox und Chromium springen damit zur richtigen Seite. Bei anderen Browsern müsstest du das ausprobieren.
-
- User
- Beiträge: 116
- Registriert: Freitag 3. Juni 2016, 05:45
Vielen Dank, das werde ich mal versuchen.
Habs nun versucht, jedoch öffnen sich die Seiten dann im PDF-Viewer und nicht im Browser.
Wenn ich die Zeile
in den Browser kopiere funktioniert es allerdings.
Der Code ist einfach gehalten:
Habs nun versucht, jedoch öffnen sich die Seiten dann im PDF-Viewer und nicht im Browser.
Wenn ich die Zeile
Code: Alles auswählen
file:///C:/.../data.pdf#page=2
Der Code ist einfach gehalten:
Code: Alles auswählen
import Webbrowser
webbrowser.open_new_tab('file:///C:/.../data.pdf#page=2')
@Patrick1990: Hmm, schade. Ich hatte das nicht getestet. Anscheinend sucht das `webbrowser`-Modul nicht nur Browser ab, sondern auch noch (betriebssystemabhängige) Standardprogramme, unter Linux u. a. `xdg-open` und unter Windows `os.startfile`.
Man könnte jetzt das `webbrowser`-Modul monkeypatchen, dass nur noch Browser abgesucht werden, aber so richtig schön wäre das nicht. Beispielsweise die ungewollten Einträge aus `webbrowser._tryorder` entfernen. Hat halt das Problem, dass das einfach kaputt gehen kann, wenn sich das Modul (bzw. die Python-Version) ändert. Oder man liefert einfach eine angepasste Version des Moduls mit dem eigenen Programm mit, bei der die ungewollte Programme entfernt wurden.
Man könnte jetzt das `webbrowser`-Modul monkeypatchen, dass nur noch Browser abgesucht werden, aber so richtig schön wäre das nicht. Beispielsweise die ungewollten Einträge aus `webbrowser._tryorder` entfernen. Hat halt das Problem, dass das einfach kaputt gehen kann, wenn sich das Modul (bzw. die Python-Version) ändert. Oder man liefert einfach eine angepasste Version des Moduls mit dem eigenen Programm mit, bei der die ungewollte Programme entfernt wurden.
Möglicherweise hast du selber schon die Lösung gefunden, hier mal was ich so für mich heraus gefunden habe.
Egal ob unter Win10 1803 oder Win8.1 bekomme ich nur jeweils 2 Handler
geliefert, obgleich auf beiden OS noch Firefox und Chrome und unter Win10 sogar noch Edge installiert sind.
Wenn man dann webbrowser.open( file adresse ) aufruft, wird der default handler für .pdf Dateien gestartet, also z.B. der PDF-Viewer.
Eine Möglichkeit wäre also, als Windows Defaulthandler für .PDF Dateien den gewünschten Browser zu konfigurieren.
Man kann jedoch auch die fehlenden Browser registrieren:
Der Firefox öffnet bei mir das PDF und springt auch zur angegebenen Seite.
Beim Chrome muss das Öffnen im Browser aktiviert sein,
siehe dazu https://support.google.com/chrome/answer/6213030?hl=de
Leider springt der Chrome nicht an die angegebene Seite.
Ich würde mich freuen, wenn dir das weiterhilft.
Egal ob unter Win10 1803 oder Win8.1 bekomme ich nur jeweils 2 Handler
Code: Alles auswählen
>>> import webbrowser
>>> webbrowser._browsers
{'windows-default': [<class 'webbrowser.WindowsDefault'>, None], 'c:\\program files\\internet explorer\\iexplore.exe': [None, <webbrowser.BackgroundBrowser object at 0x000000F2F2806048>]}
>>> webbrowser._tryorder
['windows-default', 'C:\\Program Files\\Internet Explorer\\IEXPLORE.EXE']
>>>
Wenn man dann webbrowser.open( file adresse ) aufruft, wird der default handler für .pdf Dateien gestartet, also z.B. der PDF-Viewer.
Eine Möglichkeit wäre also, als Windows Defaulthandler für .PDF Dateien den gewünschten Browser zu konfigurieren.
Man kann jedoch auch die fehlenden Browser registrieren:
Code: Alles auswählen
>>> ffox_path = "C:\\Program Files\\Mozilla Firefox\\firefox.exe"
>>> webbrowser.register('firefox', None, webbrowser.BackgroundBrowser(ffox_path), 1)
>>> ffox= webbrowser.get('firefox')
>>> ffox.open("file:///D://datei.pdf#page=3")
>>> chrome_path = "C:\\Program Files (x86)\\Google\\Chrome\\Application\\chrome.exe"
>>> webbrowser.register('chrome', None, webbrowser.BackgroundBrowser(chrome_path), 1)
>>> chrome = webbrowser.get('chrome')
>>> chrome.open("file:///D://datei.pdf#page=3")
>>>
Beim Chrome muss das Öffnen im Browser aktiviert sein,
siehe dazu https://support.google.com/chrome/answer/6213030?hl=de
Leider springt der Chrome nicht an die angegebene Seite.
Ich würde mich freuen, wenn dir das weiterhilft.
Ich bin Pazifist und greife niemanden an, auch nicht mit Worten.
Für alle meine Code Beispiele gilt: "There is always a better way."
https://projecteuler.net/profile/Brotherluii.png
Für alle meine Code Beispiele gilt: "There is always a better way."
https://projecteuler.net/profile/Brotherluii.png
Hey Patrick1990,narpfel hat geschrieben: ↑Mittwoch 6. Juni 2018, 14:12 @Patrick1990: Da alle modernen Browser auch PDF-Dateien anzeigen können, könnte man auch einen Browser mittels des `webbrowser`-Moduls starten und ein `#page=x` an die `file://`-URL hängen. Zumindest Firefox und Chromium springen damit zur richtigen Seite. Bei anderen Browsern müsstest du das ausprobieren.
ich lese gern mal Zeitschriften im PDF-Format im Chrome-Browser...
Jedesmal, wenn ich den Link (natürlich bequem in den Lesezeichen gespeichert) anklicke,
öffnet sich die Datei auf der Ersten Seite... *ätz* *kotz*
Es müßte doch möglich sein, irgendwie direkt auf die richtige Seite zu kommen... *seufz*
Ich, also, die Frage bei Google eingegeben und siehe da - direkt die perfekte Lösung gefunden!!!
Normalerweise schreib ich, wenn überhaupt, nur 'n Danke, oder so... aber diesmal
mußte ich mehr schreiben. Das Problem hat mich schon länger genervt und ich bin super happy
so eine einfache und perfekt passende Lösung gefunden zu haben.
Also, vielen Dank! Super!!
Mychael