LazReport, lrcodereport: fix problem with slow generation of pages on second batch, sample now ask for target pdf filename, from Julio Jimenez Borreguero

git-svn-id: trunk@37381 -
This commit is contained in:
jesus 2012-05-21 17:10:46 +00:00
parent ec79d9e28b
commit a77e88fed3
3 changed files with 64 additions and 30 deletions

View File

@ -281,7 +281,7 @@ end;
procedure TlrCodeReport.SetActivePage(APage: integer);
begin
if APage in [1 .. PageCount] then
if (APage >= 1) and (APage <= PageCount) then
ActivePage := APage - 1
else
raise Exception.CreateFmt(sErrorOccured, [self.ClassName]);
@ -516,7 +516,6 @@ var
aLine: TfrLineView;
begin
aLine := TfrLineView.Create;
aLine.CreateUniqueName;
aLine.Left := X * XRatio;
aLine.Top := Y * YRatio;
aLine.Width := W * XRatio;
@ -553,7 +552,6 @@ var
AText: TfrMemoview;
begin
AText := TfrMemoView.Create;
AText.CreateUniqueName;
AText.Left := X * XRatio;
AText.Top := Y * YRatio;
AText.Width := W * XRatio;
@ -673,7 +671,6 @@ var
APicture: TfrPictureView;
begin
APicture := TfrPictureView.Create;
APicture.CreateUniqueName;
APicture.Left := X * XRatio;
APicture.Top := Y * YRatio;
APicture.Width := W * XRatio;
@ -691,7 +688,6 @@ var
AShape: TfrShapeView;
begin
AShape := TfrShapeView.Create;
AShape.CreateUniqueName;
AShape.Left := X * XRatio;
AShape.Top := Y * YRatio;
AShape.Width := W * XRatio;
@ -758,7 +754,6 @@ var
ABarCode: TfrBarCodeView;
begin
ABarCode := TfrBarCodeView.Create;
ABarCode.CreateUniqueName;
ABarCode.Left := X * XRatio;
ABarCode.Top := Y * YRatio;
ABarCode.Width := W * XRatio;

View File

@ -1,18 +1,19 @@
object Form1: TForm1
Left = 296
Height = 397
Height = 402
Top = 163
Width = 458
Caption = 'Form1'
ClientHeight = 397
ClientHeight = 402
ClientWidth = 458
LCLVersion = '1.1'
object Image1: TImage
Left = 8
Height = 300
Height = 297
Top = 8
Width = 443
Anchors = [akTop, akLeft, akRight, akBottom]
Center = True
Picture.Data = {
1754506F727461626C654E6574776F726B47726170686963EB66010089504E47
0D0A1A0A0000000D49484452000001C20000012C0802000000DF3424E0000000
@ -2894,23 +2895,33 @@ object Form1: TForm1
object Button1: TButton
Left = 8
Height = 25
Top = 320
Top = 312
Width = 443
Anchors = [akLeft, akRight, akBottom]
Caption = 'Execute Report'
Caption = 'Execute and Show Report'
OnClick = Button1Click
TabOrder = 0
end
object Button2: TButton
Left = 8
Height = 25
Top = 360
Top = 341
Width = 443
Anchors = [akLeft, akRight, akBottom]
Caption = 'Export to PDF'
OnClick = Button2Click
TabOrder = 1
end
object Button3: TButton
Left = 8
Height = 25
Top = 368
Width = 443
Anchors = [akLeft, akRight, akBottom]
Caption = 'Print full report'
OnClick = Button3Click
TabOrder = 2
end
object frTNPDFExport1: TfrTNPDFExport
left = 184
top = 152
@ -2923,9 +2934,13 @@ object Form1: TForm1
left = 184
top = 208
end
object Report: TlrCodeReport
OnBeginReport = ReportBeginReport
object CodeReport1: TlrCodeReport
OnBeginReport = CodeReport1BeginReport
left = 40
top = 152
end
object SaveDialog1: TSaveDialog
left = 304
top = 152
end
end

View File

@ -6,7 +6,7 @@ interface
uses
Classes, SysUtils, LR_Class, LR_Shape, LR_BarC, lr_e_pdf, Forms,
Controls, Graphics, Dialogs, ExtCtrls, StdCtrls, LR_CodeReport;
Graphics, Dialogs, ExtCtrls, StdCtrls, LR_CodeReport;
type
@ -15,14 +15,17 @@ type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
Button3: TButton;
frBarCodeObject1: TfrBarCodeObject;
frShapeObject1: TfrShapeObject;
frTNPDFExport1: TfrTNPDFExport;
Image1: TImage;
Report: TlrCodeReport;
CodeReport1: TlrCodeReport;
SaveDialog1: TSaveDialog;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure ReportBeginReport(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure CodeReport1BeginReport(Sender: TObject);
private
{ private declarations }
public
@ -40,26 +43,40 @@ implementation
procedure TForm1.Button1Click(Sender: TObject);
begin
//report.RunReport;
if Report.PageCount = 0 then
with CodeReport1 do
begin
ReportBeginReport(report);
Report.Clear; // restart the report (delete existing pages)
RunReport; // execute code and show report
end;
Report.Report.ShowReport;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
//direct export to PDF. Set the desired destination file.
if Report.PageCount = 0 then
begin
ReportBeginReport(report);
Report.Report.PrepareReport;
end;
Report.Report.ExportTo(TfrTNPDFExportFilter, '/tmp/generated-pdf.pdf');
SaveDialog1.FileName := 'mycodereport.pdf';
if SaveDialog1.Execute then
with CodeReport1 do
begin
Report.Clear; // reset report
CodeReport1BeginReport(CodeReport1); // execute code
Report.PrepareReport;
Report.ExportTo(TfrTNPDFExportFilter, SaveDialog1.FileName);
end;
end;
procedure TForm1.ReportBeginReport(Sender: TObject);
procedure TForm1.Button3Click(Sender: TObject);
begin
with CodeReport1 do
begin
Report.Clear; // reset report
CodeReport1BeginReport(CodeReport1); // execute code
Report.PrepareReport;
Report.PrintPreparedReport('', 1); // empty string print all the pages
// '1-5' print pages from 1 to 5
// '1,3,5' print pages 1, 3 and 5
end;
end;
procedure TForm1.CodeReport1BeginReport(Sender: TObject);
var
BoxText: TlrTextRectStyle;
n: integer;
@ -265,8 +282,15 @@ begin
TextOutXY(X, GetPageHeight - PageMargin.Bottom,
Format('Page %d of %d', [GetActivePage, PageCount]), taRightJustify);
end;
end;
// For a really big report (10015 pages), try uncommenting next lines
//for n:= 1 to 10000 do
//begin
// NewPage;
// TextOut(Format('Page %d', [GetActivePage]));
//end;
end;
end;