PageRenderTime 51ms CodeModel.GetById 7ms RepoModel.GetById 0ms app.codeStats 0ms

/Components/FastReport3/Source/ExportPack/frxExportPDF.pas

http://github.com/mitshel/tech-inv
Pascal | 174 lines | 129 code | 27 blank | 18 comment | 9 complexity | 0bac8090e03584a7beaac5e64f2a5779 MD5 | raw file
Possible License(s): AGPL-3.0
  1. {******************************************}
  2. { }
  3. { FastReport v3.0 }
  4. { PDF export filter }
  5. { }
  6. { Copyright (c) 2004 }
  7. { by Alexander Fediachov, }
  8. { Fast Reports, Inc. }
  9. { }
  10. {******************************************}
  11. unit frxExportPDF;
  12. interface
  13. {$I frx.inc}
  14. uses
  15. Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  16. StdCtrls, ExtCtrls, ComObj, Printers, frxClass, JPEG, ShellAPI,
  17. frxExportMatrix, frxExportProgr, ComCtrls, frxPDFFile
  18. {$IFDEF Delphi6}, Variants {$ENDIF};
  19. type
  20. TfrxPDFExportDialog = class(TForm)
  21. OkB: TButton;
  22. CancelB: TButton;
  23. GroupPageRange: TGroupBox;
  24. DescrL: TLabel;
  25. AllRB: TRadioButton;
  26. CurPageRB: TRadioButton;
  27. PageNumbersRB: TRadioButton;
  28. PageNumbersE: TEdit;
  29. GroupQuality: TGroupBox;
  30. CompressedCB: TCheckBox;
  31. OpenCB: TCheckBox;
  32. SaveDialog1: TSaveDialog;
  33. EmbeddedCB: TCheckBox;
  34. procedure FormCreate(Sender: TObject);
  35. end;
  36. TfrxPDFExport = class(TfrxCustomExportFilter)
  37. private
  38. FCompressed: Boolean;
  39. FEmbedded: Boolean;
  40. FName: String;
  41. FOpenAfterExport: Boolean;
  42. FPDF: TfrxPDFFile;
  43. FPDFpage: TfrxPDFPage;
  44. public
  45. constructor Create(AOwner: TComponent); override;
  46. class function GetDescription: String; override;
  47. function ShowModal: TModalResult; override;
  48. function Start: Boolean; override;
  49. procedure ExportObject(Obj: TfrxComponent); override;
  50. procedure Finish; override;
  51. procedure FinishPage(Page: TfrxReportPage; Index: Integer); override;
  52. procedure StartPage(Page: TfrxReportPage; Index: Integer); override;
  53. published
  54. property Compressed: Boolean read FCompressed write FCompressed default True;
  55. property EmbeddedFonts: Boolean read FEmbedded write FEmbedded default False;
  56. property FileName: String read FName write FName;
  57. property OpenAfterExport: Boolean read FOpenAfterExport
  58. write FOpenAfterExport default False;
  59. end;
  60. implementation
  61. uses frxUtils, frxRes, frxrcExports;
  62. {$R *.dfm}
  63. { TfrxPDFExport }
  64. constructor TfrxPDFExport.Create(AOwner: TComponent);
  65. begin
  66. inherited Create(AOwner);
  67. FCompressed := True;
  68. end;
  69. class function TfrxPDFExport.GetDescription: String;
  70. begin
  71. Result := frxResources.Get('PDFexport');
  72. end;
  73. function TfrxPDFExport.ShowModal: TModalResult;
  74. begin
  75. with TfrxPDFExportDialog.Create(nil) do
  76. begin
  77. OpenCB.Checked := FOpenAfterExport;
  78. CompressedCB.Checked := FCompressed;
  79. EmbeddedCB.Checked := FEmbedded;
  80. Result := ShowModal;
  81. if Result = mrOk then
  82. begin
  83. PageNumbers := '';
  84. CurPage := False;
  85. if CurPageRB.Checked then
  86. CurPage := True
  87. else if PageNumbersRB.Checked then
  88. PageNumbers := PageNumbersE.Text;
  89. FOpenAfterExport := OpenCB.Checked;
  90. FCompressed := CompressedCB.Checked;
  91. FEmbedded := EmbeddedCB.Checked;
  92. if SaveDialog1.Execute then
  93. FName := SaveDialog1.FileName
  94. else
  95. Result := mrCancel;
  96. end;
  97. Free;
  98. end;
  99. end;
  100. function TfrxPDFExport.Start: Boolean;
  101. begin
  102. if FName <> '' then
  103. begin
  104. FPDF := TfrxPDFFile.Create;
  105. {$IFNDEF BCB}
  106. FPDF.Compressed := FCompressed;
  107. {$ELSE}
  108. FPDF.Compressed := False;
  109. {$ENDIF}
  110. FPDF.EmbeddedFonts := FEmbedded;
  111. Result := True
  112. end
  113. else
  114. Result := False;
  115. end;
  116. procedure TfrxPDFExport.StartPage(Page: TfrxReportPage; Index: Integer);
  117. begin
  118. FPDFPage := FPDF.AddPage(Page);
  119. end;
  120. procedure TfrxPDFExport.ExportObject(Obj: TfrxComponent);
  121. begin
  122. if Obj is TfrxView then
  123. if TfrxView(Obj).Name <> '' then
  124. FPDFPage.AddObject(TfrxView(Obj));
  125. end;
  126. procedure TfrxPDFExport.FinishPage(Page: TfrxReportPage; Index: Integer);
  127. begin
  128. //
  129. end;
  130. procedure TfrxPDFExport.Finish;
  131. var
  132. Stream: TFileStream;
  133. begin
  134. Stream := TFileStream.Create(FName, fmCreate);
  135. FPDF.Title := Report.ReportOptions.Name;
  136. FPDF.SaveToStream(Stream);
  137. Stream.Free;
  138. FPDF.Free;
  139. if FOpenAfterExport then
  140. ShellExecute(GetDesktopWindow, 'open', PChar(FName), nil, nil, SW_SHOW);
  141. end;
  142. { TfrxPDFExportDialog }
  143. procedure TfrxPDFExportDialog.FormCreate(Sender: TObject);
  144. begin
  145. frxResources.LocalizeForm(Self);
  146. end;
  147. end.