保留您的报表。
更换您的报表引擎。
sgcReports 现在可以导入 FastReport、QuickReport 和 ReportBuilder 报表,并补齐了买家最先检查的功能:参数、真正的表格、报表模板、可搜索的预览以及电子发票。一个版本带来十二项新功能。
- VCL
- FireMonkey
- C++ Builder
- WinForms
- WPF
- Avalonia
四分钟内看完十二项新功能。也可在 YouTube 观看。
许多团队都想更换报表引擎,却始终没有行动,原因只有一个:手上有数百份现成的报表,没人愿意重新绘制。sgcReports 2026.11 消除了这个障碍。它可以读取并转换您的 FastReport、QuickReport 和 ReportBuilder 文件,同时补上团队在切换之前一定会检查的短板:报表参数、真正的表格项、支持继承的报表模板、带搜索和缩略图的预览,以及用于电子发票的 PDF 输出。
下面介绍的所有功能,在 Delphi 和 C++ Builder(VCL 与 FireMonkey)以及 .NET(WinForms、WPF 和 Avalonia)中的用法完全一致。本页的每一段代码示例都已针对 2026.11 源码编译并运行通过。
- 01报表导入器转换 FastReport、QuickReport 和 ReportBuilder 文件。
- 02报表参数由预览询问的类型化取值,也支持 HTTP。
- 03表格项合并单元格、重复表头行、合计行。
- 04新的项目类型复选框、SVG、迷你图和仪表盘。
- 05模板与继承一份信笺抬头,供所有报表使用。
- 06更好的预览搜索、缩略图和导出菜单。
- 07书签与链接PDF 大纲、超链接和锚点。
- 08电子发票 PDFPDF/A-3 中的 Factur-X、ZUGFeRD 和 XRechnung。
- 09表达式库68 个函数和 10 个聚合函数。
- 10高亮无需脚本的条件样式。
- 11进度与取消适用于大型报表,屏幕端和服务器端均可。
- 12全平台Delphi 和 .NET 使用相同的 API。
第 1 部分 · 消除切换成本
导入 FastReport、QuickReport 和 ReportBuilder 报表
全新的 TsgcReportImporter 可以读取 FastReport 的 .fr3 文件、QuickReport 窗体(包含 TQuickRep 的 .dfm)或 ReportBuilder 的 .rtm 模板,无论是文本还是二进制格式,并将其转换为 sgcReports 的报表定义。页面、带区、项目、样式和数据源都会被带过来,表达式会被翻译成 sgcReports 语法,QuickReport 和 ReportBuilder 的复选框则变成新的复选框项。
让它在真实项目中可以放心使用的,是结果的另一半。导入器会列出每一个无法映射的对象、属性、表达式、脚本和数据源,附上它在报表中的路径和原因,让您清楚地知道哪些部分需要手工完成。不会有任何内容被悄悄丢弃。
设计器提供了导入命令,因此无需编写代码就可以引入报表,在预览中检查,并保存为 JSON。如果用代码实现,除了清理资源之外只需四行:
oImporter := TsgcReportImporter.Create;
try
oImporter.ImportFromFile(oReport, 'fr_items.fr3');
for i := 0 to oImporter.ImportResult.Issues.Count - 1 do
Writeln(oImporter.ImportResult.Issues[i].Reason);
finally
oImporter.Free;
end;
C# 中的写法如下:
var oImporter = new TsgcReportImporter();
oImporter.ImportFromFile(oReport, "fr_items.fr3");
foreach (var oIssue in oImporter.ImportResult.Issues)
Console.WriteLine(oIssue.Reason);
源报表中的脚本、富文本、图表和交叉表不会被转换。它们会出现在问题列表中,您可以用 sgcReports 的对应功能重新构建。全新的 ReportImport 演示程序提供 Delphi、C++ Builder 和 .NET 版本,可导入这三种格式的示例文件。
报表参数,由预览来询问
报表现在可以声明自己的参数:文本、整数、数字、日期、日期时间或是/否,每个参数都可以有默认值或默认表达式、必填标志、多值选项,以及固定的或从数据源读取的允许值列表。表达式和脚本通过 :Name 读取它们。
您不必为此编写窗体。VCL 和 FireMonkey 的预览与设计器会在准备报表之前询问参数,.NET 的预览也是如此。HTML 查看器会显示一个类型化的参数表单,HTTP 端点会从查询字符串中读取 ?param.Name=value,遇到不符合要求的值时返回 400,而不是返回一份损坏的报表。
在 JSON 定义中,参数与页面并列:
"parameters": [
{ "name": "FromDate", "dataType": "rpdtDate", "required": true,
"defaultExpression": "EncodeDate(2026, 1, 1)" },
{ "name": "MinTotal", "dataType": "rpdtFloat", "defaultValue": "0" }
]
在没有用户参与的情况下准备报表的服务,可以在代码中设置这些值,不会弹出任何提示:
oEngine.Report := oReport;
oEngine.SetParameterValue('FromDate', VarFromDateTime(EncodeDate(2026, 3, 1)));
oEngine.SetParameterValue('MinTotal', 100.0);
真正的表格项
再也不用手工对齐文本项来伪造表格了。全新的表格项支持固定、百分比和自动三种列宽,可跨行跨列合并单元格,表头行会在每一页重复,数据行来自各自的数据源,页脚行可以放合计,行高会随内容增长。单元格支持样式、高亮和超链接。
导出时会保留表格结构。在可访问的 PDF 中,表格会成为带标签的表格,包含表头单元格、其作用范围和跨度,因此屏幕阅读器会把它当作表格来朗读。它还会变成 HTML 表格、重复表头行的 Word 表格,以及 XLSX 中的合并单元格。在代码中,流式构建器只需几行就能写出一个表格:
oTable := oBuilder.Page('Main').Paper(rpsA4).Margins(15).ReportTitle(14)
.CanGrow.Table(0, 0, 180, 'Products');
oTable.Column(25).Column(0, rtwmAuto).Column(30)
.HeaderRow(['Products', '', '']).RowStyle('Title').Cell(0, 0).Span(1, 3)
.HeaderRow(['Code', 'Name', 'Price']).RowStyle('Head')
.DataRow(['[Products.Code]', '[Products.Name]', '[Products.Price]'])
.Cell(1, 2).Format('#,##0.00');
oTable.Table.RepeatHeaderRows := True;
复选框、SVG、迷你图和仪表盘
页面上新增了四种可绘制的内容:
- 复选框项,由布尔表达式决定是否选中,标记可以是对勾、叉号或方块。在 PDF 中保持矢量,在 XLSX 和 CSV 中则变成 TRUE 或 FALSE 值。
- 图像项中的 SVG 图片,在 PDF 中以矢量图形打印,在 HTML 中保留为 SVG,在 Word 中则是清晰的图像,因此徽标无论如何缩放都保持锐利。
- 迷你图项,由 sgcCharts 绘制:折线、面积、柱形或盈亏图,每行一个。
- 仪表盘项,由 sgcGauges 绘制,支持径向或线性样式和彩色区间,通过全新的 sgcReportsGauges 桥接包实现。
自定义项的设置现在支持表达式,并为每个打印的带区求值,每一行就是这样绘制出自己的迷你图和仪表盘的:
oBand := oPage.MasterData('Projects', 14);
oBand.CheckBox('Projects.Done', 4, 4, 6, 6).Name('DoneBox');
oBand.Item.CheckBox.CheckStyle := rcsCheck;
oBand.Custom('Sparkline', 75, 1, 60, 12, ['values=[Projects.Trend]',
'kind=area', 'markers=last,high']).Name('Trend');
oBand.Custom('Gauge', 140, 2, 50, 10, ['value=[Projects.Progress]',
'gaugeKind=linear', 'unit=%']).Name('ProgressGauge');
报表模板与继承
每家公司都有自己的信笺抬头,而每张发票、对账单和送货单都要重复使用它。借助全新的 InheritsFrom 属性(在 JSON 中为 "inheritsFrom"),一份报表定义可以从基础定义出发,只保存与它的差异。页面、带区、项目和样式按名称合并。子报表可以覆盖属性、添加项目、用 "$first" 把某个带区放到最前面,或者用 "$remove" 去掉继承来的项目。在基础报表中更换徽标,所有继承它的报表都会随之更新。
上面的整张送货单只需要几行差异定义。下面这段去掉了信笺抬头中的联系方式区块:
"inheritsFrom": "letterhead.json",
"pages": [ { "name": "Page1", "bands": [
{ "name": "PageHeader", "items": [
{ "name": "Contact", "$remove": true }
] }
] } ]
oDef.BaseFolder := ExtractFilePath(ExpandFileName('letterhead.json'));
oDef.LoadFromFile(oReport, 'child.json');
基础报表会在 BaseFolder 下查找,或者由您的 OnResolveBase 处理程序从数据库或资源中加载。继承链最多可达八级,需要单个文件时,可用 Flat 写出合并后的定义。VCL、FireMonkey 和 HTML 设计器会标记继承来的对象,把对它们的编辑作为覆盖处理,并可基于一份基础报表新建报表。在 VCL 设计器中,被覆盖的属性以粗体显示。
带搜索、缩略图和导出菜单的预览
预览新增了查找栏(Ctrl+F、F3,支持区分大小写和全字匹配),会高亮页面上的每一处匹配,另有页面缩略图窗格,以及可导出 PDF、XLSX、CSV、PNG、HTML 和 Word 的导出菜单,还有 OnExport 事件可由您接管保存过程。这些功能适用于 VCL 和 FireMonkey 预览,以及 WinForms、WPF 和 Avalonia 预览,FireMonkey 的 PDF 查看器也新增了文本搜索。
oPreview.ShowThumbnails := True;
oPreview.ExportFormats := [rpxPDF, rpxXLSX];
if oPreview.SearchText('Total', False, True) then
Writeln(oPreview.SearchResults, ' match(es)');
第 2 部分 · 补齐短板
PDF 书签、超链接和锚点
在带区或项目上设置全新的 Bookmark 表达式,PDF 导出就会把书签写成文档大纲,并按分组嵌套,VCL 和 FireMonkey 预览则在大纲窗格(ShowOutline)中显示它们。全新的 Hyperlink 属性可以打开网址或 mailto 地址,也可以用 #name 跳转到同一报表中的某个 Anchor,这些链接在 PDF、HTML、Word 和 XLSX 导出中都会保留。
电子发票 PDF:Factur-X、ZUGFeRD 和 XRechnung
PDF 导出通过全新的 EInvoice 属性,把您的应用程序提供的电子发票 XML 作为 PDF/A-3 关联文件嵌入,支持 Factur-X、ZUGFeRD 和 XRechnung,也可以使用带 PDF/UA 的 PDF/A-3a。人阅读的发票和机器读取的数据放在同一个文件中。sgcReports 本身不生成 XML,由您的应用程序提供。
包含 68 个函数和 10 个聚合函数的表达式库
表达式库扩充到 68 个函数和 10 个聚合函数。新增的有日期运算、填充与格式化、Choose、可用 sgcUI 的 12 种语言把金额写成大写文字的 ToWords,以及聚合函数 SumIf、CountIf、Previous、RunningSum 和 RunningCount。聚合函数会跟随其所在的带区:分组页脚给出该分组的合计,页面页脚给出该页的合计。
高亮:无需脚本的条件样式
高亮可以在项目上设置一组条件和样式。第一个为真的条件会替换该项目的样式,因此负数合计显示为红色、良好结果显示为绿色,而不需要写一行脚本。高亮可以写在 JSON、流式构建器以及 VCL、FireMonkey 和 HTML 设计器中。
大型报表的进度与取消
引擎新增了 OnProgress 事件,提供页数和记录数,还有 Cancel 方法。预览在准备报表时会显示进度,并带有一个取消按钮,按 Esc 键也可以触发它。HTTP 端点新增了 MaxPages 和 Timeout 限制,避免一份失控的报表占住整个服务器。
全平台,相同的 API
本页的每一项功能都同时提供给 Delphi 和 C++ Builder(含 VCL 和 FireMonkey 的预览与设计器)以及 .NET(WinForms、WPF 和 Avalonia),类名和属性名完全相同。用 JSON 定义的报表可以在两个世界之间原样迁移,引擎仍然可以在服务和 Linux64 守护进程中无界面运行。
本次发布附带五个新的演示程序,提供 Delphi、C++ Builder 和 .NET 版本:ReportImport、ReportParameters、ReportTables、ReportVisualItems 和 ReportInheritance,另外还有 ReportEInvoice 演示程序。
sgcReports 2026.11 的其他新增内容
- 适用于 VCL 和 FireMonkey 的原生报表设计器,包含工具箱、大纲、检查器、标尺、参考线、吸附、撤销和重做、键盘编辑以及屏幕阅读器支持。
- 使用 Pascal 子集的脚本,可在 VCL 和 FireMonkey 设计器中编辑和检查。
- DOCX 导出(固定和流式模式)以及 HTML 导出(分页和连续),也可通过 HTTP 路由使用。
- 自定义项、原生交叉表,以及通过 sgcReportsCharts 和 sgcReportsPivotGrid 桥接包提供的图表和数据透视表项。
- 水印,以及可在 macOS、iOS 和 Android 上运行的 FireMonkey 预览。
报表导入器以及迷你图和仪表盘项需要注册版。sgcReports 包含在 sgcUI Enterprise 和 All-Access 中,也可单独购买。
试用 sgcReports 2026.11
导入您自己的一份 FastReport、QuickReport 或 ReportBuilder 文件,看看能带过来多少内容。
有问题或反馈?欢迎联系我们,回复您的是编写这些代码的人。
