首页 / 软件开发 / Delphi / Delphi中用服务器组件解决WEB交叉报表问题(2)
Delphi中用服务器组件解决WEB交叉报表问题(2)2011-12-12 csdn博客 编程手札Fast Report是一个经典的报表控件,不过其导出功能只支持导出到磁盘文件,而此项目为了避开权限的限制和出于服务器安全的需要,要求将Fast Report生成的报表导出到内存流,所以要修改Fast Report源码。Fast Report2.5的导出函数在FR_Class文件中声明,参考此函数,可以很轻易的写出导出到内存流的函数://添加导出到内存流的支持 --Conch 2007-09-10--
procedure TfrReport.ExportToStream(Filter: TfrExportFilter; Stream: TMemoryStream);
var
s: String;
Flag, NeedConnect: Boolean;
begin
DocMode := dmPrinting;
FCurrentFilter := Filter;
if (Preview <> nil) and (EMFPages.Count = 0) then
begin
Preview.Disconnect;
NeedConnect := True;
end
else
NeedConnect := False;
Flag := True;
if Assigned(FCurrentFilter.OnBeforeExport) then
FCurrentFilter.OnBeforeExport(FCurrentFilter.FileName, Flag);
FCurrentFilter.Stream := Stream;
CurReport := Self;
MasterReport := Self;
SavedAllPages := EMFPages.Count;
FCurrentFilter.OnBeginDoc;
ExportBeforeModal(Self);
if Assigned(FCurrentFilter.OnAfterExport) then
FCurrentFilter.OnAfterExport(FCurrentFilter.FileName);
if NeedConnect then
Preview.Connect(Self);
FCurrentFilter := nil;
end;
同样,TfrHTML2Export控件是将CSS文件与HTML分开保存的,这样使得内存流中的HTML内容因缺少CSS而无法显示,故此要修改TfrHTML2Export.OnEndDoc函数。从该函数中找到SaveStringToFile(ImageFolderFull + "" + CSSFile, s)这一句(FR2.5在第461行),改为: if FileName <> "" then
SaveStringToFile(ImageFolderFull + "" + CSSFile, s)
else begin
s := "<style type=""text/css"">" + LF + s + LF + "</style>" + LF;
Stream.Write(s[1], Length(s));
end;