Why am I just now writing about this? Well.. As time rolls on, the technology is still viable. Especially if you have a tone of Crystal reports you'd like your users to be able to download in .Doc or .PDF formats.
Here Goes...
Import the Crystal Reports type library, save it as CRAXDRT_TLB; (into new unit) This would apply to Crystal Reports version 9. Don't forget to add the "cr" in front of the object names!!!
Here's the source code example: Please forgive any poor formatting on my part I wrote an automated .Pas to HTML conversion program, in about ten minutes, and right now it's imperfect. So I will work on that program as I continue to post Delphi Tips. Thanks and enjoy.
PLEASE LEAVE ME A COMMENT IF YOU LIKE!
---------------------------------------------------------------------------------
procedure TWebModule1.WebModule1WaExportReportAction(Sender: TObject;
Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
var CrReport : Report;
NewStream : TStream;
TheReportType :CRExportFormatType;
S, TheCType : String;
begin
try
//For Initilization purposes only
TheReportType:= CRAXDRT_TLB.crEFTPortableDocFormat;
//End Initialization
////Use the value of a web page radio button to determine the type of export ////the users desires.
If TheButtonVal='PDF' then begin
TheReportType:= CRAXDRT_TLB.crEFTPortableDocFormat;
TheCType:='application/pdf'
end;
If TheButtonVal='DOC' then begin
TheReportType:= CRAXDRT_TLB.crEFTWordForWindows;
TheCType:='application/doc'
end;
If TheButtonVal='XLS' then begin
TheReportType:= CRAXDRT_TLB.crEFTExcel80;
TheCType:='application/xls'
end;
If TheButtonVal='RTF' then begin
TheReportType:= CRAXDRT_TLB.crEFTExactRichText;
TheCType:='application/rtf'
end;
///You could use the actual report name added to a select element using ///Delphi's ///FindFiles...
CrReport := Application1.OpenReport('DirectoryName\'+TheReportName);
CrReport.DiscardSavedData;
CrReport.EnableParameterPrompting:=False;
CrReport.DisplayProgressDialog:=False;
if TheButtonVal='PDF' then
CrReport.ExportOptions.PDFExportAllPages;
if CrReport.ParameterFields.Count=1 then
CrReport.ParameterFields.Item[1].AddCurrentValue(Code1);
////Depending upon any parameter values the Report uses and how they are //configured, these lines could change.
if CrReport.ParameterFields.Count=2 then begin
CrReport.ParameterFields.Item[1].AddCurrentValue(Code2);
CrReport.ParameterFields.Item[2].AddCurrentValue(Code3);
end;
CrReport.ExportOptions.FormatType :=TheReportType ;
CrReport.ExportOptions.DestinationType :=CRAXDRT_TLB.crEDTDiskFile;
/////Give the created report a destination on disk, and name
CrReport.ExportOptions.DiskFileName :=
CrReport.Export(False);
NewStream:=TFileStream.Create(the name you created above),
fmOpenRead and fmShareDenyWrite);
Response.ContentStream:=NewStream;
//IMPORTANT
Response.ContentType:=TheCType;
Response.SetCustomHeader('content-disposition', 'attachment; filename=YourShortFileName));
Except
Response.SendRedirect('Your Error Handling Page')
end;
end;
---------------------------------------------------------------------------------
1 comment:
Hello, I just wanted to take a minute to tell you that you have a great site! Keep up the good work. Your article inspired me to be in writing blog. Such a well written post.. Thnx for sharing this post!
-
Delphi Consulting Services
Post a Comment