![]() |
PDF als Hilfe
Hallo zusammen,
suche eine Möglichkeit ein PDF über ShellExecute zu öffnen und eine bestimmte Seite anzeigen zu lassen. Hier im Forum wurde das Thema schon bearbeitet, ich kontne jedoch keinen funktionierenden Aufruf für mich ableiten. Habe mehrere Versuche durchgeführt, unter anderem sieht mein code wie folgt aus:
Delphi-Quellcode:
Das PDF wird zwar geöffnet, aber immer auf Seite 1. Kann hier bitte jemand ein Beispiel ableiten welches funktioniert?
if ShellExecute(Application.Handle,
'open', PChar('D:\Eigene Dateien\Delphi XE5 Projekte\Eigene Programme\KSVerleih_sql\Handbuch\KS-Verleih_Manager SQL.pdf'), PChar('/A "page=2"') , nil, SW_NORMAL) <= 32 then ShowMessage('Es ist ein Fehler aufgetreten'); Liebe Grüße Sidi61 |
AW: PDF als Hilfe
Moin...:P
Die Reihenfolge der Parameter ist wichtig. :zwinker: Geht nicht: acroRd32 "PDFFile" /A "page=3" Geht: acroRd32 /A "page=3" "PDFFile" Die Dokumentation sagt das auch...:wink: ![]()
Delphi-Quellcode:
...es sieht danach aus das das Öffnen der speziellen Seite nur mit dem expliziten Aufruf des Readers erfolgt. Über die PDF Vernüpfung geht das nicht. :?
.
Error := ShellExecute(0, 'open', PChar('C:\Program Files (x86)\Adobe\Acrobat Reader DC\Reader\AcroRd32'), PChar('/A "page=4" ' + '"' + PDFFile + '"'), nil, SW_SHOWNORMAL); Da muß du dir den Pfad des verwendeten Readers selbst aus der Registry auslesen. :thumb: Die Parameter eines anderen Readers können anders sein... :? ![]() :P |
AW: PDF als Hilfe
Ich würde es ungefähr so versuchen (wenn es nicht der AdobeReader ist, sollte das zugeordnete Programm zumindest parameter-kompatibel sein):
Delphi-Quellcode:
uses ShellAPI;
function OpenPDFAtPage(const PDFFile: string; PageNumber: Cardinal; out ErrorCode: Cardinal): Boolean; const MAX_SHELL_ERROR = 32; var ReaderProg: string; Params: string; begin Result := false; SetLength(ReaderProg, MAX_PATH); ErrorCode := FindExecutable(PChar(PDFFile), nil, PChar(ReaderProg)); if ErrorCode > MAX_SHELL_ERROR then begin SetLength(ReaderProg, StrLen(PChar(ReaderProg))); Params := Format('/A "page=%d" "%s"', [PageNumber, PDFFile]); ErrorCode := ShellExecute(0, 'open', PChar(ReaderProg), PChar(Params), nil, SW_SHOW); if ErrorCode > MAX_SHELL_ERROR then begin ErrorCode := 0; Result := true; end; end; end; |
AW: PDF als Hilfe
PDF als Hilfe? Vor 10 Jahren hätte ich gesagt: Ja, kann man machen.
In 2017 sehe ich diese Lösung PDF + Adobe Reader als Sackgasse an. Mit Windows 10 ist die Notwendigkeit eine PDF-Betrachter zu installieren nicht mehr gegeben. Wenn man schon nicht mehr das Windows-Standardformat CHM nutzen will, sollte man (direkt) HTML (+JS/CSS) verwenden. |
AW: PDF als Hilfe
Hallo Haentschmann,
dein Tip war Goldrichtig, habe es so umgesetzt und es funktioniert, das PDF wird mit der angegebenen Seite geöffnet. Schön wäre es nun, wenn ich direkt auf ein Kapitel springen könnte. Was ich so gefunden habe war die Angabe /A "Chapter1" nur leider funktioniert das nicht. Ich habe in Word ein Verzeichnis erstellt und eine automatische Nummerierung eingefügt und die Datei dann als PDF gespeichert. Klicke ich im PDF auf das Kapitel dann wird dieses direkt angesprungen. Ein direktes anspringen des Kapitels beim öffnen des PDF gelingt mir allerdings nicht. Weißt du wie ich hier den Parameter ändern muß? Gruß Sidi61 |
AW: PDF als Hilfe
|
AW: PDF als Hilfe
Zitat:
|
AW: PDF als Hilfe
Zitat:
|
AW: PDF als Hilfe
Es gibt auch
![]() |
AW: PDF als Hilfe
Hallo zusammen,
das mit den 'named destinations' habe ich mal aufgegriffen. In Word gibt es die Möglichkeit bei 'Speichern unter' die Optionen anzuklicken und dort die Option 'Textmarken erstellen mithilfe von:' einzustellen auf 'Überschriften'. Ein so erzeugtes PDF kann nun über Bookmarks gesteuert werden, das funktioniert ganz gut - im PDF - nicht jedoch beim aufrufen des PDF. Wenn ich nun ein Kapitel habe: '1 Kassenbuch' - gehe ich davon aus dass das Bookmark auch '1 Kassenbuch' heißt, verwende ich nun aber '/A "nameddest=1 Kassenbuch"' dann springt er eben nicht auf den Marker. Entweder meine Schreibweise ist falsch oder Bookmarks und named destinations sind zwei verschiedene Paar Stiefel. Weiß hier jemand Rat?? Liebe Grüße Sidi61 |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:21 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz