Discussion:
PDF-Datei öffnen
(zu alt für eine Antwort)
Dieter Rössler
2005-07-25 10:33:05 UTC
Permalink
Hallo,

aus meinem VB6-Programm öffne ich eine PDF-Datei mit:

ShellExecute Me.hWnd, "open", "Handbuch.pdf", 0, 0, SW_SHOW

Nun möchte ich an eine bestimmte Stelle des PDF-Dokuments springen (z.B.
bestimmtes Kapitel). Weiss jemand ob und wie das geht ???
--
Gruß Dieter
Dieter Rössler
2005-07-25 16:52:01 UTC
Permalink
Nach langer Suche im Internet habe ich eine Lösung gefunden! Für alle, die es
brauchen können:

Dim sFile As String
Dim sParameter As String

sFile = "C:\Programme\Adobe\Acrobat 7.0\Reader\acrord32.exe"
sParameter = "/a page=5 c:\handbuch.pdf"

ShellExecute Me.hWnd, "open", sFile, sParameter, 0, SW_SHOW

Damit kommt man direkt auf Seite 5 der PDF-Datei.

Um zu einem bestimmten Kapitel zu kommen, kann man mit der Vollversion von
Acrobat 7.0 sogenannte Ziele definieren, die dann über den Parameter
"nameddest" angesprungen werden können:

sParameter = "/a nameddest=Kapitel3 c:\handbuch.pdf"

Gruß Dieter
Detlev Schubert
2005-07-27 13:33:39 UTC
Permalink
Hallo Dieter,

Deine Lösung ist ja ganz schön und gut, was aber ist, wenn der User den
Acrobat-Reader woanders installiert hat? Hier würde sich eine weitaus
bessere Möglichlkeit anbieten, indem Du du einen PDF-Reader direkt in Deinem
Programm anbietest. Siehe ->
http://www.vb-fun.de/vb/komponenten/komponente0035.shtml

Gruß
Detlev Schubert
- Microsoft MVP 2005 -
www.vb-fun.de
Thorsten Doerfler
2005-07-27 17:58:40 UTC
Permalink
Post by Dieter Rössler
Nach langer Suche im Internet habe ich eine Lösung gefunden! Für alle, die es
Dim sFile As String
Dim sParameter As String
sFile = "C:\Programme\Adobe\Acrobat 7.0\Reader\acrord32.exe"
sParameter = "/a page=5 c:\handbuch.pdf"
ShellExecute Me.hWnd, "open", sFile, sParameter, 0, SW_SHOW
Damit kommt man direkt auf Seite 5 der PDF-Datei.
Den festen Pfad zum Acrobat Reader musst Du nicht angeben. Es reicht
hier den EXE-Namen anzugeben. ShellExecute ist in der Lage sich den
passenden Pfad zu suchen und die Anwendung zu Starten. Folgender
Aufruf reicht also:

ShellExecute Me.hWnd, "open", "acrord32 /a page=5 c:\handbuch.pdf"

Thorsten Dörfler
--
vb-hellfire - einfach anders
http://www.vb-hellfire.de/
Herfried K. Wagner [MVP]
2005-07-28 00:32:56 UTC
Permalink
Hallo Thorsten!
Post by Thorsten Doerfler
ShellExecute Me.hWnd, "open", "acrord32 /a page=5 c:\handbuch.pdf"
Dummerweise schauen dabei auch alle Benutzer von Acrobat Professional
("Acrobat.exe") durch die Finger, die den Adobe Reader nicht installiert
haben.
--
M S Herfried K. Wagner
M V P <URL:http://dotnet.mvps.org/>
V B <URL:http://classicvb.org/petition/>
Thorsten Doerfler
2005-07-28 06:31:44 UTC
Permalink
Post by Herfried K. Wagner [MVP]
Post by Thorsten Doerfler
ShellExecute Me.hWnd, "open", "acrord32 /a page=5 c:\handbuch.pdf"
Dummerweise schauen dabei auch alle Benutzer von Acrobat Professional
("Acrobat.exe") durch die Finger, die den Adobe Reader nicht installiert
haben.
Dummerweise schauen dabei sogar alle durch die Finger, die weder
Acrobat noch Acrobat Reader zum Betrachten von PDF-Dateien eingestellt
haben. Ganz zu schweigen von denen, die gar keine Software zum
Betrachten von PDF Dateien installiert haben.

Thorsten Dörfler
--
vb-hellfire - einfach anders
http://www.vb-hellfire.de/
Johannes Busch
2005-07-28 09:41:39 UTC
Permalink
Moin Thorsten,
Post by Thorsten Doerfler
Post by Herfried K. Wagner [MVP]
Post by Thorsten Doerfler
ShellExecute Me.hWnd, "open", "acrord32 /a page=5 c:\handbuch.pdf"
Dummerweise schauen dabei auch alle Benutzer von Acrobat Professional
("Acrobat.exe") durch die Finger, die den Adobe Reader nicht installiert
haben.
Dummerweise schauen dabei sogar alle durch die Finger, die weder
Acrobat noch Acrobat Reader zum Betrachten von PDF-Dateien eingestellt
haben. Ganz zu schweigen von denen, die gar keine Software zum
Betrachten von PDF Dateien installiert haben.
Dem kann man ja vorbeugen:

Private Declare Function FindExecutable Lib "shell32.dll" Alias _
"FindExecutableA" (ByVal lpFile As String, ByVal lpDirectory As _
String, ByVal lpResult As String) As Long

DIM szPDFFile as string
DIM szPDFViewer as string

szPDFFile ="Blabla.PDF" (irgendetwas gültiges...)
szPDFViewer =string(255,0)
if (FindExecutable(szPDFFile ,app.path,szPDFViewer ) =1) then
Call ShellExecute(Me.hwnd, "open", szPDFViewer ,szPDFFile , app.path, 1)
else
msgbox "Nix gefunden, womit du gucken kannst"
endif

Gruss
Johannes
Herfried K. Wagner [MVP]
2005-07-28 12:16:19 UTC
Permalink
Hallo Johannes!
Post by Johannes Busch
Post by Thorsten Doerfler
Post by Herfried K. Wagner [MVP]
Post by Thorsten Doerfler
ShellExecute Me.hWnd, "open", "acrord32 /a page=5 c:\handbuch.pdf"
Dummerweise schauen dabei auch alle Benutzer von Acrobat Professional
("Acrobat.exe") durch die Finger, die den Adobe Reader nicht installiert
haben.
Dummerweise schauen dabei sogar alle durch die Finger, die weder
Acrobat noch Acrobat Reader zum Betrachten von PDF-Dateien eingestellt
haben. Ganz zu schweigen von denen, die gar keine Software zum
Betrachten von PDF Dateien installiert haben.
Private Declare Function FindExecutable Lib "shell32.dll" Alias _
"FindExecutableA" (ByVal lpFile As String, ByVal lpDirectory As _
String, ByVal lpResult As String) As Long
Nicht jede Anwendung zur PDF-Anzeige unterstützt das Anspringen einer
bestimmten Seite. Man könnte daher zuerst ermitteln, welche
PDF-Anzeigeanwendungen (Adobe Reader, Adobe Acrobat, GhostView) auf dem
System vorhanden sind, dann ggf. diese mit einer bestimmten Datei und Seite
öffnen, und notfalls mit 'FindExecutable' die wirklich mit PDF verbundene
Anwendung ermitteln, ein Meldungsfeld anzeigen, falls keine solche Anwendung
existiert oder den Benutzer mittels des "Öffnen mit..."-Dialogs eine
Anwendung auswählen lassen.
--
M S Herfried K. Wagner
M V P <URL:http://dotnet.mvps.org/>
V B <URL:http://classicvb.org/petition/>
Johannes Busch
2005-07-29 10:04:25 UTC
Permalink
Hallo Herfried,
Post by Herfried K. Wagner [MVP]
Hallo Johannes!
[snipp]
Post by Herfried K. Wagner [MVP]
Nicht jede Anwendung zur PDF-Anzeige unterstützt das Anspringen einer
bestimmten Seite. Man könnte daher zuerst ermitteln, welche
PDF-Anzeigeanwendungen (Adobe Reader, Adobe Acrobat, GhostView) auf dem
System vorhanden sind,
Nette Idee. Habe ich noch nie versucht. Wie macht das denn am bequemsten?

;-)
Johannes Busch

Loading...