Seite 1 von 1

PDF auf bestimmter Seite öffnen, Pfad zum Viewer nicht bekannt

Verfasst: Mittwoch 6. Juni 2018, 13:25
von Patrick1990
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?

Re: PDF auf bestimmter Seite öffnen, Pfad zum Viewer nicht bekannt

Verfasst: Mittwoch 6. Juni 2018, 13:51
von __deets__
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.

Re: PDF auf bestimmter Seite öffnen, Pfad zum Viewer nicht bekannt

Verfasst: Mittwoch 6. Juni 2018, 14:12
von narpfel
@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.

Re: PDF auf bestimmter Seite öffnen, Pfad zum Viewer nicht bekannt

Verfasst: Donnerstag 14. Juni 2018, 07:31
von Patrick1990
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

Code: Alles auswählen

file:///C:/.../data.pdf#page=2
in den Browser kopiere funktioniert es allerdings.

Der Code ist einfach gehalten:

Code: Alles auswählen

import Webbrowser
webbrowser.open_new_tab('file:///C:/.../data.pdf#page=2')

Re: PDF auf bestimmter Seite öffnen, Pfad zum Viewer nicht bekannt

Verfasst: Samstag 16. Juni 2018, 15:24
von narpfel
@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.

Re: PDF auf bestimmter Seite öffnen, Pfad zum Viewer nicht bekannt

Verfasst: Samstag 16. Juni 2018, 20:17
von ThomasL
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

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']
>>> 
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:

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")

>>> 
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.

Re: PDF auf bestimmter Seite öffnen, Pfad zum Viewer nicht bekannt

Verfasst: Samstag 5. Dezember 2020, 18:30
von MychaelE
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.
Hey Patrick1990,

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