{******************************************} { } { FastReport v4.0 } { HTML table export filter } { } { Copyright (c) 1998-2007 } { by Alexander Fediachov, } { Fast Reports Inc. } { } {******************************************} unit frxExportHTML; interface {$I frx.inc} uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls, frxClass, JPEG, ShellAPI, frxExportMatrix, frxProgress {$IFDEF Delphi6}, Variants {$ENDIF}, frxExportImage; type TfrxHTMLExportDialog = class(TForm) SaveDialog1: TSaveDialog; GroupQuality: TGroupBox; StylesCB: TCheckBox; PicsSameCB: TCheckBox; FixWidthCB: TCheckBox; NavigatorCB: TCheckBox; MultipageCB: TCheckBox; GroupPageRange: TGroupBox; DescrL: TLabel; AllRB: TRadioButton; CurPageRB: TRadioButton; PageNumbersRB: TRadioButton; PageNumbersE: TEdit; OpenAfterCB: TCheckBox; OkB: TButton; CancelB: TButton; BackgrCB: TCheckBox; PicturesL: TLabel; PFormatCB: TComboBox; procedure FormCreate(Sender: TObject); procedure PageNumbersEChange(Sender: TObject); procedure PageNumbersEKeyPress(Sender: TObject; var Key: Char); procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); end; TfrxHTMLExport = class(TfrxCustomExportFilter) private Exp: TStream; FAbsLinks: Boolean; FCurrentPage: Integer; FExportPictures: Boolean; FExportStyles: Boolean; FFixedWidth: Boolean; FMatrix: TfrxIEMatrix; FMozillaBrowser: Boolean; FMultipage: Boolean; FNavigator: Boolean; FOpenAfterExport: Boolean; FPicsInSameFolder: Boolean; FPicturesCount: Integer; FProgress: TfrxProgress; FUseJpeg: Boolean; FServer: Boolean; FPrintLink: String; FRefreshLink: String; FBackground: Boolean; FBackImage: TBitmap; FBackImageExist: Boolean; FReportPath: String; FUseGif: Boolean; FCentered: Boolean; FEmptyLines: Boolean; procedure WriteExpLn(const str: String); procedure ExportPage; function ChangeReturns(const Str: String): String; function TruncReturns(const Str: WideString): WideString; function GetPicsFolder: String; function GetPicsFolderRel: String; function GetFrameFolder: String; function ReverseSlash(const S: String): String; function HTMLCodeStr(const Str: String): String; procedure SetUseGif(const Value: Boolean); procedure SetUseJpeg(const Value: Boolean); public constructor Create(AOwner: TComponent); override; destructor Destroy; override; function ShowModal: TModalResult; override; function Start: Boolean; override; procedure Finish; override; procedure FinishPage(Page: TfrxReportPage; Index: Integer); override; procedure StartPage(Page: TfrxReportPage; Index: Integer); override; procedure ExportObject(Obj: TfrxComponent); override; class function GetDescription: String; override; property Server: Boolean read FServer write FServer; property PrintLink: String read FPrintLink write FPrintLink; property RefreshLink: String read FRefreshLink write FRefreshLink; property ReportPath: String read FReportPath write FReportPath; published property OpenAfterExport: Boolean read FOpenAfterExport write FOpenAfterExport default False; property FixedWidth: Boolean read FFixedWidth write FFixedWidth default False; property ExportPictures: Boolean read FExportPictures write FExportPictures default True; property PicsInSameFolder: Boolean read FPicsInSameFolder write FPicsInSameFolder default False; property ExportStyles: Boolean read FExportStyles write FExportStyles default True; property Navigator: Boolean read FNavigator write FNavigator default False; property Multipage: Boolean read FMultipage write FMultipage default False; property MozillaFrames: Boolean read FMozillaBrowser write FMozillaBrowser default False; property UseJpeg: Boolean read FUseJpeg write SetUseJpeg default True; property UseGif: Boolean read FUseGif write SetUseGif default False; property AbsLinks: Boolean read FAbsLinks write FAbsLinks default False; property Background: Boolean read FBackground write FBackground; property Centered: Boolean read FCentered write FCentered; property EmptyLines: Boolean read FEmptyLines write FEmptyLines; end; implementation uses frxUtils, frxFileUtils, frxUnicodeUtils, frxRes, frxrcExports, Math; {$R *.dfm} const Xdivider = 1; Ydivider = 1.03; Navigator_src = ''#13#10 + '
' + '' + '' + '| '; end; if FMatrix.Width < 2 then columnWidths := columnWidths + ' | '; columnWidths := columnWidths + ' |
| ';
if Length(Obj.URL) > 0 then
begin
if Obj.URL[1] = '@' then
if FMultipage then
begin
Obj.URL := StringReplace(Obj.URL, '@', '', []);
Obj.URL := ReverseSlash(GetPicsFolderRel + Trim(Obj.URL) + '.html')
end
else
Obj.URL := StringReplace(Obj.URL, '@', '#PageN', []);
buff := buff + '';
hlink := True;
end
else
hlink := False;
if Obj.IsText then
begin
text := Trim(ChangeReturns(UTF8Encode(TruncReturns(Obj.Memo.Text))));
if Length(text) > 0 then
buff := buff + text
else
buff := buff + ' ';
end else
if Obj.Image <> nil then
begin
if FUseJpeg then
begin
s := GetPicsFolder + 'img' + IntToStr(FPicturesCount) + '.jpg';
s1 := ExtractFilePath(s);
if (s1 = ChangeFileExt(ExtractFileName(frxUnixPath2WinPath(FileName)), '.files\')) or (s1 = '') then
s := ExtractFilePath(filename) + s;
jpg := TJPEGImage.Create;
jpg.Assign(Obj.Image);
jpg.SaveToFile(s);
jpg.Free;
s := ReverseSlash(GetPicsFolderRel + 'img' + IntToStr(FPicturesCount) + '.jpg');
end else
if FUseGif then
begin
s := GetPicsFolder + 'img' + IntToStr(FPicturesCount) + '.gif';
s1 := ExtractFilePath(s);
if (s1 = ChangeFileExt(ExtractFileName(frxUnixPath2WinPath(FileName)), '.files\')) or (s1 = '') then
s := ExtractFilePath(filename) + s;
GIFSaveToFile(s, Obj.Image);
s := ReverseSlash(GetPicsFolderRel + 'img' + IntToStr(FPicturesCount) + '.gif');
end else
begin
s := GetPicsFolder + 'img' + IntToStr(FPicturesCount) + '.bmp';
s1 := ExtractFilePath(s);
if (s1 = ChangeFileExt(ExtractFileName(frxUnixPath2WinPath(FileName)), '.files\')) or
(s1 = '') then
s := ExtractFilePath(filename) + s;
Obj.Image.SaveToFile(s);
s := ReverseSlash(GetPicsFolderRel + 'img' + IntToStr(FPicturesCount) + '.bmp');
end;
buff := buff + ' | ';
end;
end
else
buff := buff + ''; end; WriteExpLn(buff); WriteExpLn(' |