Gracias colega, mi código es muy similar, "sucio y desprolijo"
Function Rtf_a_PDF( Origen: String): String;
Var
Ejecutable_LibreOffice, Archivo_PDF: String;
Proceso: TProcess;
Begin
// "C:\Program Files\LibreOffice\program\soffice.exe" --headless --invisible --norestore --convert-to pdf c:\estudios\informe.rtf
Result := '';
If Not fileExists( Origen ) Then Exit;
//
Ejecutable_LibreOffice := 'C:\Program Files\LibreOffice\program\soffice.exe';
//
If Not FileExists( Ejecutable_LibreOffice, False) Then Exit;
//
Archivo_PDF := ExtractFilePath( ParamStr(0)) + ChangeFileExt( ExtractFileName( Origen),'.pdf');
//
If FileExists( Archivo_PDF ) Then // Eliminar PDF temporal
If Not DeleteFile( Archivo_PDF ) Then
Begin
MessageDlg('No se pudo eliminar el archivo PDF antes de crearlo:' + Archivo_PDF, mtError, [mbOK, mbCancel], 0);
Exit;
end;
//
Screen.Cursor := crHourGlass;
//
Proceso := TProcess.Create(nil);
Proceso.CommandLine := Ejecutable_LibreOffice + ' --headless --invisible --norestore --convert-to pdf ' + Origen;
Proceso.Options := Proceso.Options + [poWaitOnExit];;
Proceso.Execute;
Proceso.Free;
//
Screen.Cursor := CrDefault;
//
If FileExists( Archivo_PDF ) Then result := Archivo_PDF;
end;
Saludos !