Hallo zusammen,
ich habe ein Kommando-Zeilen Programm geschrieben, dass rtf-Dateien mit Hilfe von Word in ein pdf umwandelt.
Dies funktioniert grundsätzlich. Das Problem ist, wenn das Programm aus einem Programm das als Dienst läuft aufgerufen wird.
Die Funktion:
Delphi-Quellcode:
function rtf2pdf(
const verzeichnis:
String;
const datei:
String;
var log: TStringList): boolean;
const
wdExportFormatPDF = 17;
wdDoNotSaveChanges = 0;
var
Word, Doc: OleVariant;
dateiname1, dateiname2: OleVariant;
begin
Result := false;
dateiname1 := verzeichnis + datei + '
.rtf';
dateiname2 := verzeichnis + datei + '
.pdf';
log.Add('
Create OLE Object');
Word := CreateOLEObject('
Word.Application');
log.Add('
Open Document');
Doc := Word.Documents.Open(dateiname1);
log.Add('
Export as pdf');
Doc.ExportAsFixedFormat(dateiname2, wdExportFormatPDF);
//Hier kommt die Exception (EVariantInvalidOpError)
log.Add('
Close');
Word.Quit(wdDoNotSaveChanges);
log.Add('
Done');
Result := true;
end;
Läuft das Host-Programm nicht als Dienst funktioniert das Programm fehlerfrei und generiert das pdf.
Nur aus dem Dienst kommt folgende
Exception:
Exception Message: Ungültige Variantenoperation
Exception ClassName: EVariantInvalidOpError
Entwicklungsumgebung: Delphi XE
Server: Windows 2008 R2 und Word 2010.
Hat mir jemand einen Tipp oder Lösungsansatz?
Vielen Dank und Grüsse
Stefan