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: Alles auswählen
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