function TPrintService.FileToBase64Str(const FrpFileName: string): WideString;
var
MemStream, DestStream: TMemoryStream;
StrStream: TStringStream;
begin
MemStream := TMemoryStream.Create;
DestStream := TMemoryStream.Create;
StrStream := TStringStream.Create('');
try
try
MemStream.LoadFromFile(FrpFileName);
CompressStream(MemStream, DestStream);
DestStream.SaveToStream(StrStream);
Result := EnCodeString(StrStream.DataString);
except
Result := '';
end;
finally
StrStream.Free;
DestStream.Free;
MemStream.Free;
end;
end;
function TPrintService.GetReportBase64Data(const SQL: string; const ReportFileName: string): WideString; stdcall;
var
MyDM: TDM;
TmpFileName: string;
begin
MyDM := TDM.Create(nil);
Randomize();
TmpFileName := 'c:\\' + IntToStr(GetTickCount()) + IntToStr(Random(10000)) + 'tmp.frp';
try
try
MyDM.SQLDataSet1.Close;
MyDM.SQLDataSet1.CommandText := SQL;
MyDM.SQLConnection1.Open;
MyDM.SQLDataSet1.Open;
if (MyDm.frReport1.LoadFromFile(ReportFileName) = True) then
begin
if (MyDm.frReport1.PrepareReport = True) then
begin
MyDM.frReport1.SavePreparedReport(TmpFileName);
Result := FileToBase64Str(TmpFileName);
try
DeleteFile(Pchar(TmpFileName));
except
end;
end
else
begin
Result := '';
end;
end
else //打开报表文件失败时
begin
Result := '';
end;
except
Result := '';
end;
finally
MyDM.Free;
end;
end;
initialization
{ Invokable classes must be registered }
InvRegistry.RegisterInvokableClass(TPrintService);