- 浏览: 138664 次
- 性别:
文章分类
最新评论
动态创建Fastreport
动态创建Fastreport分以下几个步骤:
1.首先清空Fastreport,定义全局变量,并加载数据集
frReport.Clear;
frReport.DataSets.Add(frxDBDataset1);
DataHeight :=28;
DataWidth :=80;
FirstTop := 50;
FirstLeft := 15;
2.创建frxReportPage,并设置纸张大小
Page := TfrxReportPage.Create(frReport);
Page.CreateUniqueName;
page.Orientation := poLandscape;
Page.SetDefaults; //默认大小
//Page.PaperWidth := 210;
//Page.PaperHeight := 297;
//以下为动态设置纸张大小
{if (qryPrn.FieldCount-4)<=6 then //当列小于6
begin
Page.PaperWidth := 210;
Page.PaperHeight := 279.4;
page.Orientation := poPortrait;
end
else
begin
page.Orientation := poLandscape;
iWidth := 40+85+90+(qryPrn.FieldCount-4)*84+30;
//fr01cm=3.77953;
if iWidth<297*fr01cm then
//fr01cm为frxClass中定义的常量,为每毫米像素值,或PerMillPix := 25.38/Screen.PixelsPerInch;(25.38为每英寸毫米数)
begin
Page.PaperSize :=DMPAPER_A4;//设置为A4,因为激光打印机不支持自定义纸张的横打
end
else
begin
Page.PaperWidth :=iWidth/fr01cm;
Page.PaperHeight := 210;
end;
end;}
3.生成PageBand,并指定高度
Band := TfrxPageHeader.Create(Page); //页首
Band.Top := 10;
Band.Height := 150;
BandFoot := TfrxColumnFooter.Create(Page); //页脚
BandFoot.Top := 10;
BandFoot.Height := 50;
4.画页脚栏
//画操作员
memFoot := TfrxMemoView.Create(BandFoot);
with memFoot do
begin
CreateUniqueName;
HAlign := haLeft;
VAlign := vaCenter;
Memo.Text := '操作员:程序员';
SetBounds(40, 10, 150, 20);
ParentFont := False;
Font.Name := '宋体';
Font.Size := 10;
end;
//画打印时间
memFoot := TfrxMemoView.Create(BandFoot);
with memFoot do
begin
CreateUniqueName;
Align := baLeft;
HAlign := haLeft;
VAlign := vaCenter;
Memo.Text := '打印时间:' + FormatDateTime('yyyy-mm-dd hh:mm:ss', Now);
SetBounds(280, 10, 270, 20);
ParentFont := False;
Font.Name := '宋体';
Font.Size := 11;
end;
5.画标题栏
//画标题
Memo := TfrxMemoView.Create(Band);
with Memo do
begin
CreateUniqueName;
Align := baCenter;
Memo.Text := '******余额汇总表';
Frame.Typ :=[ftBottom];
Frame.BottomLine.Style :=fsDouble; //行类型
Top := FirstTop;
Height := 30;
AutoWidth :=True;
HAlign := haCenter;
ParentFont := False;
Font.Name := '黑体';
Font.Size := 16;
end;
//画单位
Memo := TfrxMemoView.Create(Band);
with Memo do
begin
CreateUniqueName;
HAlign := haLeft;
VAlign := vaCenter;
Memo.Text := '单位:************';
FirstTop := FirstTop + 40;
FirstWidth := 200;
FirstHeight := 30;
SetBounds(40, FirstTop, FirstWidth, FirstHeight);
ParentFont := False;
Font.Name := '宋体';
Font.Size := 10;
end;
//画日期
Memo := TfrxMemoView.Create(Band);
with Memo do
begin
CreateUniqueName;
Align := baLeft;
VAlign := vaCenter;
HAlign := haLeft;
Memo.Text := '日期:' + FormatDateTime('yyyy-mm-dd', Date);
FirstWidth := 10 + FirstWidth + 200;
FirstLeft := FirstLeft + FirstWidth;
SetBounds(FirstLeft, FirstTop, 200, FirstHeight);
ParentFont := False;
Font.Name := '宋体';
Font.Size := 10;
end;
//画页码
Memo := TfrxMemoView.Create(Band);
with Memo do
begin
CreateUniqueName;
Align := baLeft;
HAlign := haLeft;
VAlign := vaCenter;
Memo.Text := '第[Page#]/[TotalPages#]页'; //[]中括起来的是FastReport系统变量
FirstWidth := 10 + FirstWidth;
FirstLeft := FirstLeft + 200;
SetBounds(FirstLeft, FirstTop, 100, FirstHeight);
HAlign := haCenter;
ParentFont := False;
Font.Name := '宋体';
Font.Size := 10;
end;
for i := 1 to qryPrn.FieldCount - 4 do
begin
//画数据集的标题
Memo := TfrxMemoView.Create(Band);
Memo.CreateUniqueName;
Memo.ParentFont := False;
Memo.Font.Name := '宋体';
Memo.Font.Size := 10;
Memo.Text := qryPrn.Fields[i + 3].FieldName;
Memo.Frame.Typ := [ftTop, ftBottom, ftRight];
Memo.SetBounds(220 + (i - 1) * DataWidth, Band.Height - DataHeight, DataWidth, DataHeight);
Memo.HAlign := haCenter;
Memo.VAlign := vaCenter;
end;
6.画数据集
DataBand := TfrxMasterData.Create(Page);
DataBand.CreateUniqueName;
DataBand.DataSet := frxDBDataset1;
DataBand.Top := 200;
DataBand.Height := DataHeight;
Memo1 := TfrxMemoView.Create(DataBand);
with Memo1 do
begin
CreateUniqueName;
ParentFont := False;
SetBounds(30, 0, 90, DataHeight);
VAlign := vaCenter;
HAlign := haLeft;
Font.Name := '宋体';
Font.Size := 10;
DataSet := frxDBDataset1;
DataField := 'locus';
Frame.Typ := [ftRight, ftBottom, ftLeft];
end;
Memo1 := TfrxMemoView.Create(DataBand);
with Memo1 do
begin
CreateUniqueName;
ParentFont := False;
SetBounds(120, 0, 100, DataHeight);
VAlign := vaCenter;
HAlign := haRight;
Font.Name := '宋体';
Font.Size := 10;
DataSet := frxDBDataset1;
DataField := 'TotalMoney';
Frame.Typ := [ftRight, ftBottom]; //加上右边和底部的边框
end;
for i := 1 to qryPrn.FieldCount - 4 do
begin
Memo1 := TfrxMemoView.Create(DataBand);
Memo1.CreateUniqueName;
Memo1.ParentFont := False;
Memo1.SetBounds(220 + (i - 1) * DataWidth, 0, DataWidth, DataHeight);
Memo1.DisplayFormat.DecimalSeparator := '.';
//Memo1.ExpressionDelimiters := ',';
//Memo1.DisplayFormat.FormatStr := '%2.2f'; 定义显示格式
//Memo1.DisplayFormat.Kind := fkNumeric;
Memo1.VAlign := vaCenter;
Memo1.HAlign := haRight;
Memo1.Font.Name := '宋体';
Memo1.Font.Size := 10;
Memo1.DataSet := frxDBDataset1;
Memo1.DataField := qryPrn.Fields[i + 3].FieldName;
Memo1.Frame.Typ := [ftRight, ftBottom];
end;
7.显示
frReport.PrepareReport();
frReport.ShowReport();
8.将以上代码用函数表示
(1)定义
TBandType=(PageHeader,PageFooter);
procedure CreatePage(var Page:TfrxReportPage;frxReport:TfrxReport;iWidth,iHeight:Double;pDirect:TPrinterOrientation);
procedure CreateBand(var band:TfrxBand;Page:TfrxReportPage;iTop,iHeight:Double;BandType:TBandType);
procedure CreateDataBand(var band:TfrxMasterData;Page:TfrxReportPage;DbSet:TfrxDBDataset;iTop,iHeight:Integer);
procedure CreateMemoData(var memView: TfrxMemoView; Band: TfrxBand;
iLeft, iTop, iWidth, iHeight: Extended; fontname: string; fontsize: Integer;
Halign: TfrxHAlign; Valign: TfrxVAlign; frxData: TfrxDBDataset; DField: string;
FrameType: TfrxFrameTypes; Delimiters, ForStr: string; fkKind: TfrxFormatKind);
procedure CreateMemo(var memView: TfrxMemoView; Band: TfrxBand;
iLeft, iTop, iWidth, iHeight: Extended; fontname: string; fontsize: Integer;
Halign: TfrxHAlign; Valign: TfrxVAlign; FrameType: TfrxFrameTypes; sText: string);
(2)实现
procedure TForm1.CreatePage(var Page: TfrxReportPage;
frxReport: TfrxReport; iWidth, iHeight: Double;
pDirect: TPrinterOrientation);
begin
Page := TfrxReportPage.Create(frxReport);
Page.CreateUniqueName;
Page.PaperWidth :=iWidth;
Page.Height :=iHeight;
Page.Orientation :=pDirect;
end;
procedure TForm1.CreateBand(var band: TfrxBand; Page: TfrxReportPage; iTop,
iHeight:Double;BandType:TBandType);
begin
case BandType of
PageHeader: band :=TfrxPageHeader.Create(Page);
PageFooter: band :=TfrxPageFooter.Create(Page);
end;
band.CreateUniqueName;
band.Top :=iTop;
band.Height :=iHeight;
end;
procedure TForm1.CreateDataBand(var band: TfrxMasterData;
Page: TfrxReportPage; DbSet: TfrxDBDataset; iTop, iHeight: Integer);
begin
band :=TfrxMasterData.Create(Page);
band.CreateUniqueName;
band.DataSet := DbSet;
band.Top :=iTop;
band.Height :=iHeight;
end;
procedure TForm1.CreateMemo(var memView: TfrxMemoView; Band: TfrxBand;
iLeft, iTop, iWidth, iHeight: Extended; fontname: string;
fontsize: Integer; Halign: TfrxHAlign; Valign: TfrxVAlign;
FrameType: TfrxFrameTypes; sText: string);
begin
memView := TfrxMemoView.Create(Band);
memView.CreateUniqueName;
memView.ParentFont := False;
memView.Font.Name := fontname;
memView.Font.Size := fontsize;
memView.SetBounds(iLeft, iTop, iWidth, iHeight);
memView.HAlign := Halign;
memView.VAlign := Valign;
memView.Frame.Typ := FrameType;
memView.Memo.Text := sText;
end;
procedure TForm1.CreateMemoData(var memView: TfrxMemoView; Band: TfrxBand;
iLeft, iTop, iWidth, iHeight: Extended; fontname: string;
fontsize: Integer; Halign: TfrxHAlign; Valign: TfrxVAlign;
frxData: TfrxDBDataset; DField: string; FrameType: TfrxFrameTypes;
Delimiters, ForStr: string; fkKind: TfrxFormatKind);
begin
memView := TfrxMemoView.Create(Band);
memView.CreateUniqueName;
memView.ParentFont := False;
memView.Font.Name := fontname;
memView.Font.Size := fontsize;
memView.SetBounds(iLeft, iTop, iWidth, iHeight);
memView.HAlign := Halign;
memView.VAlign := Valign;
memView.DataSet := frxData;
memView.DataField := DField;
memView.Frame.Typ := FrameType;
memView.ExpressionDelimiters := Delimiters;
memView.DisplayFormat.FormatStr := ForStr;
memView.DisplayFormat.Kind := fkKind;
end;
(3)引用代码
const
arrFields:array[1..12,1..2] of string=(('Quantity_Start','数量'),('Expense_Start','金额'),
('Quantity_Buy_Add','数量'),('Quantity_Buy_Add','金额'),
('Quantity_Other_Add','数量'),('Expense_Other_Add','金额'),
('Quantity_Out_Reduce','数量'),('Expense_Out_Reduce','金额'),
('Quantity_Other_Reduce','数量'),('Expense_Other_Reduce','金额'),
('Quantity_End','数量'),('Expense_End','金额')
);
var
FirstTop, FirstWidth, FirstHeight, i, DataWidth, DataHeight, MlWidth: Integer;
Page: TfrxReportPage;
BandHeader, BandFoot: TfrxBand;
DataBand: TfrxMasterData;
Memo, Memo1, memFoot: TfrxMemoView;
iLeft, iWidth, iLeft1: Integer;
PerMillPix: Double;
iFont: Integer;
haAl: TfrxHAlign;
MemArray: array[0..4] of TfrxMemoView;
MemArray1, MemDataArray: array[0..12] of TfrxMemoView;
MemArray2, MemArray3: array[0..3] of TfrxMemoView;
frx:TfrxComponent;
begin
frReport.Clear;
iFont := iFont10;
frxDBDataset1.DataSet := qryPrn;
frReport.DataSets.Add(frxDBDataset1);
CreatePage(Page, frReport, 210, 279.4, poLandscape);
//fr01cm :=3.77953;
DataHeight := 25; //DataHeight*3为栏首高度(目录高度)
MlWidth := 84; //目录宽度
DataWidth := 40;
FirstTop := 40;
FirstHeight := 30;
iLeft := 60;
iLeft1 := 40;
CreateBand(BandHeader, Page, 10, 220, PageHeader);
CreateBand(BandFoot, Page, 10, 50, PageFooter);
//画操作员
CreateMemo(memFoot, BandFoot, 65, 10, 150, 20, FName, iFont, haLeft, vaCenter,
[], '操作员:'+IGlobalVar.GetUserName);
//画打印时间
CreateMemo(memFoot, BandFoot, 280, 10, 270, 20, FName, iFont, haLeft, vaCenter,
[], '打印时间:' + FormatDateTime('yyyy-mm-dd hh:mm:ss', Now));
//画标题
Memo := TfrxMemoView.Create(BandHeader);
with Memo do
begin
CreateUniqueName;
Align := baCenter;
Memo.Text := '**********汇总表';
Frame.Typ := [ftBottom];
Frame.BottomLine.Style := fsDouble;
Top := FirstTop;
Height := 24;
AutoWidth := True;
HAlign := haCenter;
ParentFont := False;
Font.Name := '黑体';
Font.Size := 16;
end;
//画单位
FirstTop := FirstTop + 40;
FirstWidth := 150;
CreateMemo(MemArray[0], BandHeader, 65, FirstTop, FirstWidth, FirstHeight, FName, iFont, haLeft,
vaCenter,
[], '单位:'+IGlobalVar.GetUnitID);
//画日期
CreateMemo(MemArray[1], BandHeader, 128, MemArray[0].Top,
270, FirstHeight, FName, iFont, haLeft, vaCenter,
[], '日期:' + FormatDateTime('yyyy年mm月dd日', Date) + '至' +
FormatDateTime('yyyy年mm月dd日', Date));
//画仓库
FirstWidth := 170;
CreateMemo(MemArray[2], BandHeader, MemArray[0].Left, MemArray[0].Top + 20, FirstWidth,
FirstHeight, FName, iFont, haLeft, vaCenter,
[], '仓库:'+LcbWh.Text);
//画分类方法
FirstWidth := 10 + FirstWidth;
CreateMemo(MemArray[3], BandHeader, MemArray[1].Left, MemArray[2].Top, 200, FirstHeight, '宋体',
iFont, haLeft, vaCenter,
[], '分类方法:'+lcb1.Text);
//画页码
FirstWidth := 10 + FirstWidth;
CreateMemo(MemArray[4], BandHeader, MemArray[3].Left + MemArray[3].Width + 100, MemArray[2].Top,
100, FirstHeight, FName, iFont, haLeft, vaCenter,
[], '第[Page#]页 共[TotalPages#]页');
//画栏标题
iWidth := 32 * Pix10; //14个汉字(28字符)所用的像素值
CreateMemo(MemArray1[0], BandHeader, iLeft, BandHeader.Height - DataHeight * 3, iWidth, DataHeight
* 3, FName, iFont,
haCenter, vaCenter, [ftTop, ftRight, ftBottom, ftLeft], '目录');
iLeft := iLeft + iWidth;
for i := 1 to 12 do
begin
if (i = 1) or (i = 2) or (i = 11) or (i = 12) then
CreateMemo(MemArray1[i], BandHeader, MemArray1[i - 1].Left + MemArray1[i - 1].Width,
BandHeader.Height -
DataHeight * 2, GetWidth(i),
DataHeight * 2,
FName, iFont, haCenter, vaCenter, [ftTop, ftBottom, ftRight], arrFields[i, 2])
else
CreateMemo(MemArray1[i], BandHeader, MemArray1[i - 1].Left + MemArray1[i - 1].Width,
BandHeader.Height -
DataHeight, GetWidth(i),
DataHeight,
FName, iFont, haCenter, vaCenter, [ftTop, ftBottom, ftRight], arrFields[i, 2]);
end;
CreateMemo(Memo, BandHeader, MemArray1[3].Left,MemArray1[1].Top,
MemArray1[3].Width+MemArray1[4].Width,DataHeight,
FName, iFont, haCenter, vaCenter, [ftTop, ftBottom, ftRight], '外购');
CreateMemo(Memo, BandHeader, MemArray1[5].Left,MemArray1[1].Top,
MemArray1[5].Width+MemArray1[6].Width,DataHeight,
FName, iFont, haCenter, vaCenter, [ftTop, ftBottom, ftRight], '其它');
CreateMemo(Memo, BandHeader, MemArray1[7].Left,MemArray1[1].Top,
MemArray1[7].Width+MemArray1[8].Width,DataHeight,
FName, iFont, haCenter, vaCenter, [ftTop, ftBottom, ftRight], '报废');
CreateMemo(Memo, BandHeader, MemArray1[9].Left,MemArray1[1].Top,
MemArray1[9].Width+MemArray1[10].Width,DataHeight,
FName, iFont, haCenter, vaCenter, [ftTop, ftBottom, ftRight], '其它');
CreateMemo(Memo, BandHeader, MemArray1[1].Left,MemArray1[0].Top,
MemArray1[1].Width+MemArray1[2].Width,DataHeight,
FName, iFont, haCenter, vaCenter, [ftTop, ftBottom, ftRight], '期初余额');
CreateMemo(Memo, BandHeader, MemArray1[3].Left,MemArray1[0].Top,
MemArray1[3].Width+MemArray1[4].Width+MemArray1[5].Width+MemArray1[6].Width,DataHeight,
FName, iFont, haCenter, vaCenter, [ftTop, ftBottom, ftRight], '本期增加');
CreateMemo(Memo, BandHeader, MemArray1[7].Left,MemArray1[0].Top,
MemArray1[7].Width+MemArray1[8].Width+MemArray1[9].Width+MemArray1[10].Width,DataHeight,
FName, iFont, haCenter, vaCenter, [ftTop, ftBottom, ftRight], '本期减少');
CreateMemo(Memo, BandHeader, MemArray1[11].Left,MemArray1[0].Top,
MemArray1[11].Width+MemArray1[12].Width,DataHeight,
FName, iFont, haCenter, vaCenter, [ftTop, ftBottom, ftRight], '期末余额');
CreateDataBand(DataBand, Page, frxDBDataset1, 200, DataHeight);
iWidth := 85;
CreateMemoData(MemDataArray[0], DataBand, MemArray1[0].Left, 0, MemArray1[0].Width, DataHeight,
FName, iFont, haLeft, vaCenter,
frxDBDataset1, 'contents', [ftRight, ftBottom, ftLeft], '', '', fkText);
frReport.Script.Clear;
frReport.ScriptLanguage :='PascalScript';
frReport.ScriptText.LoadFromFile('C:/fr_script.pas');
MemDataArray[0].OnBeforePrint :='MemoOnBeforePrint'; //动态定义OnBeforePrint事件
iLeft1 := iLeft1 + iWidth;
for i := 1 to 12 do
begin
if Odd(i) then
CreateMemoData(MemDataArray[i], DataBand, MemArray1[i].Left, 0, MemArray1[i].Width,
DataHeight,
FName, iFont, haCenter, vaCenter, frxDBDataset1, arrFields[i, 1],
[ftRight, ftBottom], '', '', fkText)
else
CreateMemoData(MemDataArray[i], DataBand, MemArray1[i].Left, 0, MemArray1[i].Width,
DataHeight,
FName, iFont, haRight, vaCenter, frxDBDataset1, arrFields[i, 1],
[ftRight, ftBottom], ',', '%2.2n', fkNumeric);
end;
frReport.PrepareReport();
frReport.ShowReport();
end;
C:/fr_script.pas中写入脚本
procedure MemoOnBeforePrint(Sender: TfrxComponent);
begin
if Length(TfrxMemoView(Sender).Memo.Text)>10 then
begin
TfrxMemoView(Sender).Memo.Text :=Trim(TfrxMemoView(Sender).Memo.Text);
TfrxMemoView(Sender).HAlign :=haLeft;
//TfrxMemoView(Sender).VAlign :=VaTop;
end;
end;
begin
end.
相关推荐
动态创建FastReport列的方法非常适用于以下几种场景: 1. **报表设计灵活性增强**:根据不同的数据源或业务需求自动生成报表列,提高报表的可定制性。 2. **多列数据展示**:当需要在同一报表中展示多个不同数据集时...
在Delphi开发环境中,FastReport是一款非常流行的报表生成工具,它允许开发者创建复杂且自定义的报告。在某些情况下,我们需要在运行时动态地改变报表中的内容,例如更新Memo组件的文字。本文将深入探讨如何在Delphi...
本文将深入探讨如何在运行时动态改变FastReport内的Memo组件内容。 1. FastReport简介: FastReport是一款支持多种编程语言的报表引擎,如Delphi, C++Builder, .NET Framework等。它具有直观的报告设计器,使得用户...
1. **创建FastReport对象**:在Delphi代码中,首先需要创建一个`FRXReport`对象,它是FastReport的核心,包含了报表的所有信息。 2. **加载报表模板**:使用`LoadFromFile`或`LoadFromStream`方法加载已经设计好的...
在这个特定的问题中,我们要探讨的是如何在FastReport报表中动态地为变量赋值,这是一个常见的需求,尤其是在处理动态数据或者需要根据用户输入调整报告内容时。 首先,让我们理解FastReport的工作原理。FastReport...
动态传参是FastReport的一项重要功能,使得报告能够根据用户输入或程序逻辑灵活地调整参数,从而实现个性化打印和数据分析。 首先,我们来看动态传参的基础概念。在FastReport中,参数通常用于存储外部数据,这些...
【FastReport Web动态传入数据详解】 FastReport是一款强大的报表设计和打印工具,它支持多种平台,包括.NET Framework和.NET Core。在Web环境下,FastReport提供了动态传入数据的功能,使得用户可以在运行时根据...
### FastReport 动态分页知识点详解 #### 一、FastReport简介 FastReport是一款功能强大的报表设计工具,被广泛应用于各种开发环境如Delphi、C++Builder等,支持复杂的数据处理与展示需求。它提供了丰富的特性来...
2. 创建报表:在Form上放置一个FastReport组件(如frxReport1),并设计好报表模板。可以在设计界面中预设页边距,也可以在代码中设置初始值。 3. 动态设置:在运行时,可以通过以下代码动态调整页边距: ``` ...
8. **脚本支持**:FastReport支持VCL和FireMonkey (FMX)脚本,允许在运行时动态修改报表,增加了报表的灵活性和动态性。 9. **云报表**:FastReport v6也支持云环境,可以与Web应用程序和API接口无缝集成,实现远程...
4. 设计报表:在FastReport的设计器中,你可以创建报表模板,将数据字段绑定到报表的各个元素,如文本框、表格等。 5. 运行和预览报表:最后,你可以运行报表,预览数据,或者将其导出为各种格式,如PDF、Excel、...
通过以上步骤,"小白"用户应该能够成功在FastReport中创建无水印的报表。记住,实践是学习的最佳途径,多尝试,遇到问题不要害怕,查阅文档或在线寻求帮助都是很好的解决方式。祝你在FastReport的使用过程中一切顺利...
它允许开发者在Windows Forms、ASP.NET、WPF以及MVC等平台下创建各种复杂的报表,包括表格、图表、文本、图像等多种元素。FastReport.NET的中文语言包是为了方便中国用户更好地理解和使用该软件而设计的。 ...
FastReport是一款强大的报表设计工具,尤其在Delphi开发环境中被广泛应用。它允许开发者创建复杂的报告...通过深入理解FastReport的脚本、变量、窗体交互和组件属性,开发者可以创建出满足各种业务需求的动态报表系统。
- `zint.dll`:这可能是Zint Barcode Generator的动态链接库文件,用于生成各种类型的条形码和二维码,FastReport可能利用了这个库来增强其二维码功能。 - `FRDemo.dpr`:Delphi或C++Builder的项目源文件,包含了...
4. **自定义组件**:FastReport 允许开发者创建自己的组件,扩展其功能,满足特定项目的需求。 5. **多语言支持**:对于全球化项目,FastReport 支持多语言报表,方便不同地区的用户使用。 6. **网络报表**:除了...
通过创建FastReport对象,设置条形码参数,然后调用打印方法。 7. **处理PDF417**: 虽然描述中特别提到了PDF417,但其操作流程与QRCode类似。在FastReport中选择PDF417条形码类型,设置相关参数,如数据、列数和...
为了打印二维码,我们需要创建一个FastReport报告。在FRXReport组件上添加必要的 Bands,例如Detail Band,用于放置二维码。然后,将FRXQRCode组件放入Detail Band,并关联到相应的数据源。数据源可以是数据库字段,...
通过运行这些Demo,用户可以看到FastReport的各种特性如何实际应用,比如如何创建报告模板,如何处理数据源,以及如何利用内置的组件实现动态效果等。 在压缩包内的"WindowsFormsApp1"文件名可能表示这是一个基于...