Suse Linux 11.0 (KDE) , fpc 2.2.4 und Lazarus 0.9.29beta.
Vorhanden sind: Das Buch Free Pascal 2 und die Reference Guide (pdf).
Die Function Sysutils.ExecuteProcess(...) führt angeblich einen shell-Befehl aus und gibt ein Ergbnis als Integer zurück.
(Bei Erfolg eine 0)
Ich möchte mit Hilfe von OpenOffice ein paar Writer-Dateien in pdf wandeln.
Danach möchte aus diesen PDF-Dateien mit Hilfe von "pdftk" eine "Gesamt-PDF-Datei" erzeugen (mergen).
So sieht in etwa die Geschichte aus:
Code: Alles auswählen
if Sysutils.ExecuteProcess(soffice,' -headless -pt PDF-Konverter '+OOO_Files) = 0 then
Begin
// delay(2000);
ErgFile:='Test';
Merge_PDF(PDF_Files,ErgFile);
Sysutils.ExecuteProcess('/opt/kde3/bin/kpdf',ErgFile);
end;
Das Umwandeln einiger PDF-Dateien mittels OpenOffice benötigt heribei Zeit, ca. 500ms pro Seite.
Der o.g. Code funktioniert nicht, weil die 0 geliefert wird, bevor OpenOffice mit dem Umwandeln fertig ist.
Da zu diesem Zeitpunkt aber nicht unbedingt alle PDF-Dateien schon existieren, stirbt die Prozedure Merge_PDF eines unnatürlichen Todes, weil sie einige der PDF-Dateien nicht findet, da diese zu diemsem Zeitpunkt noch nicht existieren.
Wenn ich das Delay(2000) auskommentiere, funktioniert es dann. Ich könnte also sinngenmäß schreiben: Delay ca. 500ms pro Datei.
Je mehr Seiten ich umwandele , um so höher muss der Delay-Wert sein.
Frage: Warum kommt die 0 von "Sysutils.ExecuteProcess(soffice,' -headless -pt PDF-Konverter '+OOO_Files) = 0" zu früh?
bzw. wieso fängt die Merge-Geschichte an, bevor OpenOffice fertig ist?
Frage: Gibt es bessere Lösungen als Delay?
Mfg, P. Jensen