Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   PDF als Hilfe (https://www.delphipraxis.net/192555-pdf-als-hilfe.html)

Sidi61 30. Apr 2017 23:04

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:
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');
Das PDF wird zwar geöffnet, aber immer auf Seite 1. Kann hier bitte jemand ein Beispiel ableiten welches funktioniert?

Liebe Grüße
Sidi61

haentschman 1. Mai 2017 06:20

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:
http://www.adobe.com/content/dam/Ado...parameters.pdf
Delphi-Quellcode:
.
Error := ShellExecute(0, 'open', PChar('C:\Program Files (x86)\Adobe\Acrobat Reader DC\Reader\AcroRd32'), PChar('/A "page=4" ' + '"' + PDFFile + '"'), nil, SW_SHOWNORMAL);
...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. :?
Da muß du dir den Pfad des verwendeten Readers selbst aus der Registry auslesen. :thumb: Die Parameter eines anderen Readers können anders sein... :?
http://www.entwickler-ecke.de/topic_...t_54916,0.html

:P

DeddyH 1. Mai 2017 12:15

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;

Bernhard Geyer 1. Mai 2017 12:23

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.

Sidi61 1. Mai 2017 12:54

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

nahpets 1. Mai 2017 13:00

AW: PDF als Hilfe
 
http://www.adobe.com/content/dam/Ado...parameters.pdf

Bernhard Geyer 1. Mai 2017 13:01

AW: PDF als Hilfe
 
Zitat:

Zitat von Sidi61 (Beitrag 1369597)
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ß?

Adobe hat das Anspringen an ein Kapitel (Bookmark) in ihrer Api nicht vorgesehen. Du müsstest also ein Mapping "Kapitel/Bookmark = Seite" aufbauen und dann beim start die Seite mitgeben.

zeras 1. Mai 2017 13:22

AW: PDF als Hilfe
 
Zitat:

Zitat von Bernhard Geyer (Beitrag 1369601)
Adobe hat das Anspringen an ein Kapitel (Bookmark) in ihrer Api nicht vorgesehen. Du müsstest also ein Mapping "Kapitel/Bookmark = Seite" aufbauen und dann beim start die Seite mitgeben.

Man könnte das aber auch mit Targets machen. Dazu müssen diese aber in der PDF Datei angelegt werden.

Olli73 1. Mai 2017 13:24

AW: PDF als Hilfe
 
Es gibt auch named destinations

Sidi61 1. Mai 2017 18:16

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 14:38 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz