Delphi-PRAXiS

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

zeras 1. Mai 2017 18:37

AW: PDF als Hilfe
 
Zitat:

Zitat von Sidi61 (Beitrag 1369657)

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.

Ich habe es gerade noch einmal probiert.

"C:\Program Files (x86)\Adobat Reader DC\Reader\acrord32" /A "nameddest=10278" "kap7_de.pdf"

Damit geht es.

Sidi61 1. Mai 2017 19:03

AW: PDF als Hilfe
 
Hallo Zeras,

wie kommst du auf 10278 :gruebel:

Vergibt Word für Bookmarks Nummern?? Wie kann ich erfahren wie das jeweilige Bookmark korrekt benannt wird??

Im Moment stehe ich nich im Nebel

Gruß
Siei61

zeras 1. Mai 2017 19:07

AW: PDF als Hilfe
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von Sidi61 (Beitrag 1369666)
Hallo Zeras,

wie kommst du auf 10278 :gruebel:

Das ist ein "Nameddest" in der PDF Datei. Wir haben Fehlernummern in den PDF Dateien und das ist eine Fehlernummer.
Die Nameddest habe ich aber nicht per Word eingebracht, sondern ein eigenes Programm geschrieben, was diese Informationen in die PDF bringt. Dazu nutze ich die Debenu Komponenten.

Wenn du prüfen willst, ob es "Nameddest" gibt, kannst du Adobe Acrobat (nicht der Reader!) nutzen, wie im Anhang der Screenshot zeigt. Dort ist auch die Nummer 10278 vergeben.

Sidi61 1. Mai 2017 19:18

AW: PDF als Hilfe
 
Hallo Zeras,

ok - d.h. es ist mit Word Bordmitteln nicht zu stemmen, nameddest und Bookmarks sind verschiedene Dinge :cry:

Nur zum Verständnis - in deinem Beispiel - springt er direkt auf das Kapitel oder öffnet er nur die Seite in dem sich das Kapitel befindet??

Gruß

zeras 1. Mai 2017 19:49

AW: PDF als Hilfe
 
Zitat:

Zitat von Sidi61 (Beitrag 1369671)

..
Nur zum Verständnis - in deinem Beispiel - springt er direkt auf das Kapitel oder öffnet er nur die Seite in dem sich das Kapitel befindet??

Gruß

Wie schon geschrieben nehme ich ein Debenu Komponenten und lasse mir den Text analysieren. Die bringen mir dann beim Finden meiner Fehlernummer auch gleich die X/Y Position mit, mit der ich dann ein "Nameddest" erstelle.
Damit kann man dann direkt auf die Zeile springen, die man gefunden hat.
Das ist ja das, was du willst.

Luckie 1. Mai 2017 19:57

AW: PDF als Hilfe
 
Das kommt mir alles sehr umständlich vor. Was passiert, wenn sich im PDF was verschiebt, weil was eingefügt wird?

zeras 1. Mai 2017 20:26

AW: PDF als Hilfe
 
Zitat:

Zitat von Luckie (Beitrag 1369675)
Das kommt mir alles sehr umständlich vor. Was passiert, wenn sich im PDF was verschiebt, weil was eingefügt wird?

Bei uns kein Problem, da die PDF Datei mit einem antiquarischen System erzeugt und dann nur mit meinem Programm nachbearbeitet wird. Einen umgekehrten Weg gibt es bei dieser Anwendung nicht. Auch kann das System keine "nameddest" erzeugen. So machen wir das dann im nachhinein.

Sidi61 1. Mai 2017 20:32

AW: PDF als Hilfe
 
Hallo zusammen,

bin nun auf eine sehr gute und einfache Lösung gestoßen :thumb:

LibreOffice

Ist ein open Source Office programm (kleine Spende ist erbeten) welches die Umwandlung von Bookmarks direkt in named destinations unterstützt.

Einfach das Word File laden - Export PDF wählen - auf der ersten Seite der Optionen Export Bookmarks anwählen, im Reiter 'Links' Export bookmars as named destinations auswählen und auf Export klicken.

Habe es ausprobiert und es funktioniert tadellos.

Mache jetzt Feierabend:hi:

Gruß
Sidi61

a.def 1. Mai 2017 21:10

AW: PDF als Hilfe
 
Was aber wenn jemand kein PDF-Programm installiert hat?
Hilfe als PDF finde ich sehr suspekt. Würde ich niemals öffnen.

Zitat:

Wenn man schon nicht mehr das Windows-Standardformat CHM nutzen will, sollte man (direkt) HTML (+JS/CSS) verwenden.
Ich bin zwar total schlecht das programmieren angeht. Aber so mache selbst ich es :stupid:

THTMLViewer hilft. https://github.com/BerndGabriel/HtmlViewer


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:11 Uhr.

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