SumatraPDF - PDF-Viewer-Komponente in Lazarus-Projekt

Für alles, was in den übrigen Lazarusthemen keinen Platz, aber mit Lazarus zutun hat.
Antworten
axmawi
Beiträge: 5
Registriert: Mi 5. Feb 2020, 21:52

SumatraPDF - PDF-Viewer-Komponente in Lazarus-Projekt

Beitrag von axmawi »

Hallo,
vielleicht kann mir jemand weiterhelfen.

Folgendes Problem:
Ein PDF wird seitenweise in einem Lazarus-Projekt mittels eingebundenem SumatraPDF.exe eingelesen.
Das PDF wird in eigenem Panel gezeigt.

procedure TForm1.ButtonLadenClick(Sender: TObject);
begin
SeitenNummer:=1; //pagenumber
PDFProcess:=TProcess.Create(nil);
if OpenDialog1.Execute
then
begin
PDFFileName:=UTF8Decode(OpenDialog1.filename); //Pfad der PDF-Datei
Anzahl:=SeitenAnzahl(PDFFileName);
if Anzahl>0 then
with PDFProcess do
begin
CommandLine := SumatraPfad +
' -plugin ' + IntToStr(PanelPDF.Handle)+
' -named-dest '+PDFFilename+' page 1'+
' -view "single page"'+
' -zoom '+IntToStr(SpinEditZoom.Value);

Execute;
end
end;
end;

Dabei gibt es PDF-Dateien, bei denen die letzte Seite über diesen Weg (CommandLine) nicht eingelesen/angezeigt wird. Auch Weiterblättern endet an der vorletzten Seite.

with PDFProcess do
begin
CommandLine := SumatraPfad+
' -reuse-instance -plugin '+
IntToStr(PanelPDF.Handle)+
'-named-dest '+PDFFilename+ //PDFFilename : Pfad der PDF-Datei
' -page '+intToStr(Seitennummer)+
' -view "single page"'+
' -zoom '+IntToStr(SpinEditZoom.Value);

Execute;
end;

Mit MS-Word erstellte PDF-Dateien werden alle Seiten vollständig angezeigt, von aus MS-PowerPoint erstellte PDF-Dateien erfolgt die Anzeige nur bis zur vorletzten Seite.
Untere Kommandozeile durch CommandLine bestimmt.
Untere Kommandozeile durch CommandLine bestimmt.
BspSeite.png (44.58 KiB) 293 mal betrachtet

Benutzeravatar
Jorg3000
Lazarusforum e. V.
Beiträge: 69
Registriert: So 10. Okt 2021, 10:24
OS, Lazarus, FPC: Win64
Wohnort: NRW

Re: SumatraPDF - PDF-Viewer-Komponente in Lazarus-Projekt

Beitrag von Jorg3000 »

Moin!
Zu deiner Frage bezüglich der angezeigten Seiten kann ich leider nichts sagen, aber Danke für den Source! :D

Zwei Dinge sind mir bei deinem Kommandozeilenaufruf aufgefallen:
Vor -named-dest fehlt ein Leerzeichen, d.h. es vermischt sich mit der Handle-Nummer.
Und die Übergabe von PDFFilename sollte von Anführungszeichen umschlossen werden, für den Fall dass im Pfad/Dateinamen Leerzeichen enthalten sind.

Grüße, Jörg

Antworten