[gelöst]PDF-Creator
Verfasst: 27. November 2012 09:15
Hallo Allerseits,
ich möchte den PDFCreator benutzen, um PDFs aus Reports zu erzeugen. ich habe dazu hier im Forum einiges gefunden und das auch soweit gut hingekriegt. Hier mein (test)Code:
Ich habe allerdings ein Problem: Wenn der Benutzer beim REPORT.RUNMOLDAL... einfach das Fenster zumacht, dann kriege ich das nicht mit. Ich habe keinen Weg gefunden herauszukriegen, ob da überhaupt eine Spool-Datei angelegt wurde bevor der Konvertierungsvorgang gestartet wird. Das Programm geht also in den Loop wo es auf das Ende des Konvertierens wartet, nach 60 Sekunden kommt die entsprechende Fehlermeldung.
An der Stelle im Code wo " // Hier Prüfung einbauen!!!!" steht müsste eine Prüfung stattfinden können.
Hat jemand da entsprechende Erfahrunge bzw. weiss eine Lösung?
Danke
ich möchte den PDFCreator benutzen, um PDFs aus Reports zu erzeugen. ich habe dazu hier im Forum einiges gefunden und das auch soweit gut hingekriegt. Hier mein (test)Code:
- Code:
Pfad := 'C:\Temp\';
FileName := 'TestPdf.pdf';
Ok := ERASE(Pfad+FileName);
IF ISCLEAR(PDFCreator) THEN
CREATE(PDFCreator);
IF ISCLEAR(PDFCreatorError) THEN
CREATE(PDFCreatorError);
PDFCreatorError := PDFCreator.cError;
IF NOT PDFCreator.cStart('/NoProcessingAtStartup',TRUE) THEN
ERROR('Status: Error[' + FORMAT(PDFCreatorError.Number) + ']: ' + PDFCreatorError.Description);
PDFCreatorOption := PDFCreator.cOptions;
PDFCreatorOption.UseAutosave := 1;
PDFCreatorOption.UseAutosaveDirectory := 1;
PDFCreatorOption.AutosaveDirectory := Pfad;
PDFCreatorOption.AutosaveFormat := 0; //PDF-Format
PDFCreatorOption.AutosaveFilename := FileName;
PDFCreator.cIsConverted := FALSE;
PDFCreator.cOptions := PDFCreatorOption;
PDFCreator.cClearCache();
DefaultPrinter := PDFCreatorL.cDefaultPrinter; //Der System-Standarddrucker wird ziwschengespeichert
PDFCreatorL.cDefaultPrinter := 'PDFCreator';
PDFCreator.cPrinterStop := FALSE;
REPORT.RUNMODAL(REPORT::"Debitor - Liste",TRUE,FALSE);
// Hier Prüfung einbauen!!!!
Window.OPEN('Bitte warten, PDF wird erstellt #1# #2#...');
WindowIsOpen := TRUE;
//Auf Erstellen warten, bis PDF konvertiert ist oder 60 Sekunden um sind
CounterL := 0;
REPEAT
SLEEP(1000);
CounterL := CounterL + 1;
Window.UPDATE(1,CounterL);
UNTIL (PDFCreator.cIsConverted) OR (CounterL=60);
//Abbruch prüfen
IF NOT PDFCreator.cIsConverted THEN
ERROR('Die PDF-Datei konnte nicht erstellt werden!');
// zurücksetzen
PDFCreatorOption := PDFCreator.cOptions;
PDFCreatorOption.UseAutosave := 0;
PDFCreatorOption.UseAutosaveDirectory := 0;
PDFCreator.cOptions := PDFCreatorOption;
PDFCreatorOption.AutosaveDirectory := '';
PDFCreatorOption.AutosaveFilename := '';
PDFCreator.cOptions := PDFCreatorOption;
//Beenden der PDF-Funktion
PDFCreator.cPrinterStop := TRUE;
PDFCreator.cClearCache();
CounterL := 0;
REPEAT
SLEEP(200);
CounterL := CounterL + 1;
Window.UPDATE(2,CounterL);
UNTIL (PDFCreator.cClose()) OR (CounterL = 30);
IF CounterL = 30 THEN
ERROR('Fehler beim Beenden vom PDFCreator');
CLEAR(PDFCreator);
IF WindowIsOpen THEN
Window.CLOSE;
WindowIsOpen := FALSE;
HYPERLINK(Pfad+FileName);
Ich habe allerdings ein Problem: Wenn der Benutzer beim REPORT.RUNMOLDAL... einfach das Fenster zumacht, dann kriege ich das nicht mit. Ich habe keinen Weg gefunden herauszukriegen, ob da überhaupt eine Spool-Datei angelegt wurde bevor der Konvertierungsvorgang gestartet wird. Das Programm geht also in den Loop wo es auf das Ende des Konvertierens wartet, nach 60 Sekunden kommt die entsprechende Fehlermeldung.
An der Stelle im Code wo " // Hier Prüfung einbauen!!!!" steht müsste eine Prüfung stattfinden können.
Hat jemand da entsprechende Erfahrunge bzw. weiss eine Lösung?
Danke