项目需求:由自己的程序根据数据打印二维码标签,虽然调用 Win32 API
可以实现简单的格式,但利用 FastReport
报表模板显然是一个更好的解决方案,可维护性更好。
FastReport
的功能很强大,报表模板打印只是它的一个小功能。
一、前言
FastReport.Net —— 报表开发.NET
动态库,适用于 C#
编程语言,报表模板文件是frx
。
FastReport.Net
使用逻辑是:
- 用
Designer.exe
设计模板;
- 项目引用
DLL
动态链接库;
- 调用 API 设置标签变量参数、打印机属性
- 打印
相比 VCL
版本,FastReport.Net
的安装和配置相对简单了许多。
二、安装 .NET
开发环境
没有.NET
开发环境,所以在线安装了 Visual Studio Community 2017
,选择了 MFC
/ C#
组件 :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
| Microsoft Visual Studio Community 2017 版本 15.9.54 VisualStudio.15.Release/15.9.54+33529.398 Microsoft .NET Framework 版本 4.8.04084
已安装的版本: Community
Visual C++ 2017 Microsoft Visual C++ 2017
ASP.NET and Web Tools 2017 15.9.04012.0 ASP.NET and Web Tools 2017
C# 工具 2.10.0-beta2 在 IDE 中使用的 C# 组件。根据项目类型和设置,可能会使用不同版本的编译器。
...
Microsoft Visual C++ 向导 1.0 Microsoft Visual C++ 向导
Microsoft Visual Studio VC 软件包 1.0 Microsoft Visual Studio VC 软件包
MLGen Package Extension 1.0 MLGen Package Visual Studio Extension Detailed Info
NuGet 包管理器 4.6.0 Visual Studio 中的 NuGet 包管理器。有关 NuGet 的详细信息,请访问 http://docs.nuget.org/。
...
|
三、安装FastReport
其实FastReport.Net
不需要安装,可以往下看。
1. 安装
就一个 FRNetDemo.msi
安装包,直接点下一步安装到指定位置即可,安装后是这样的:
2. 安装产物
以下是安装后的目录,要用到是:
Designer.exe
用来设计frx模板;
*.DLL
链接库,这是我们项目中要用的库;
Demos
示例代码,学习库的API。
3. 运行Demos
从安装目录拷贝Demos目录出来(否则会有写权限
的问题)
运行 Main
项目或者 ExportToPDF
(推荐)
这是Demos自带的frx模板
4. 运行Demos/ExportToPDF
ExportToPDF
代码比较简单:frx模板 + 变量数据 -> 生成报表(导出PDF/图片,类似打印)。
** 注意:FastReport是商用软件,未授权的DLL生成报表是有水印的。**
** 注意:FastReport是商用软件,未授权的DLL生成报表是有水印的。**
** 注意:FastReport是商用软件,未授权的DLL生成报表是有水印的。**
从ExportToPDF
的源码可以看出,输入了两个变量,FastReport.Net
生成简单的PDF/图片报表:
这是网友设计的报表模板(真正用于生产环境):
在实践中容易发生项目DLL的引用路径丢失,可以删除引用,再重新添加引用。
5. 项目引入DLL
前面说: FastReport.Net
不需要安装,是指你的项目有DLL库就可以使用了。
这是安装后所有的 DLL
链接库:
1 2 3 4 5 6
| FastReport.Bars.dll FastReport.dll FastReport.Editor.dll FastReport.Service.dll FastReport.VSDesign.dll FastReport.Web.dll
|
仅打印的项目只需要引入以下两个库:
1 2
| FastReport.Bars.dll FastReport.dll
|
编辑/设计模板的项目还需要引入以下两个库:
1 2
| FastReport.Editor.dll FastReport.VSDesign.dll
|
【导出PDF】(因为没有打印机)测试代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
| using System; using System.Windows.Forms; using FastReport; using FastReport.Export.Pdf;
namespace WindowsFormsApp1 { public partial class Form1 : Form { public Form1() { InitializeComponent(); }
private void button1_Click(object sender, EventArgs e) { Report report = new Report(); report.Load(@"C:\Users\jack\Desktop\ExportToPDF\Label_ID.frx"); report.SetParameterValue("MY_ID", "hello"); report.SetParameterValue("MY_QR", "hello world"); report.Prepare();
PDFExport export = new PDFExport(); report.Export(export, @"C:\Users\jack\Desktop\ExportToPDF\report_123.pdf");
report.Dispose(); } } }
|
Label_ID.frx
源码是xml格式:
1 2 3 4 5 6 7 8 9 10 11 12 13
| <?xml version="1.0" encoding="utf-8"?> <Report ScriptLanguage="CSharp" ReportInfo.Created="04/26/2023 17:31:52" ReportInfo.Modified="05/05/2023 14:34:01" ReportInfo.CreatorVersion="2019.1.5.0"> <Dictionary> <Parameter Name="MY_ID" DataType="System.String"/> <Parameter Name="MY_QR" DataType="System.String"/> </Dictionary> <ReportPage Name="Page1" PaperWidth="60" PaperHeight="30" LeftMargin="0" TopMargin="0" RightMargin="0" BottomMargin="0" OutlineExpression=""> <DataBand Name="Data1" Width="226.8" Height="113.4"> <TextObject Name="Text1" Left="9.45" Top="47.25" Width="113.4" Height="18.9" Text="[MY_ID]" Font="新宋体, 9pt"/> <BarcodeObject Name="Barcode1" Restrictions="DontDelete" Left="122.85" Top="7.56" Width="98.28" Height="98.28" AutoSize="false" Text="[MY_QR]" ShowText="false" AllowExpressions="true" Barcode="QR Code" Barcode.ErrorCorrection="L" Barcode.Encoding="UTF8" Barcode.QuietZone="false"/> </DataBand> </ReportPage> </Report>
|
6. 项目通过Nuget安装引入DLL
没有安装 FRNetDemo.msi
就没有 DLL
??? (在第三方网站有单独的DLL提供下载)
“Nuget包管理器”
上可以安装 FastReport
引用,“Nuget包管理器”
会自动安装 FastReport.dll
及它所需要的依赖项。
从搜索结果来看,Nuget上是开源部分组件,多数是各种数据库的组件。
只需要在 “Nuget包管理器”
上安装 【FastReport.OpenSource.Export.PdfSimple】
组件(选用了 v2022.2.11
版本,最新版本很多其他依赖),会自动安装好依赖。
“Nuget包”
依赖配置文件packages.config:
1 2 3 4 5
| <packages> <package id="FastReport.Compat" version="2021.3.1" targetFramework="net461" /> <package id="FastReport.OpenSource" version="2022.2.11" targetFramework="net461" /> <package id="FastReport.OpenSource.Export.PdfSimple" version="2022.2.11" targetFramework="net461" /> </packages>
|
还是这段【导出PDF】测试代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
| using System; using System.Windows.Forms; using FastReport;
using FastReport.Export.PdfSimple;
namespace WindowsFormsApp1 { public partial class Form1 : Form { public Form1() { InitializeComponent(); }
private void button1_Click(object sender, EventArgs e) { Report report = new Report(); report.Load(@"C:\Users\jack\Desktop\ExportToPDF\Label_ID.frx"); report.SetParameterValue("MY_ID", "hello"); report.SetParameterValue("MY_QR", "hello world"); report.Prepare();
PDFSimpleExport export = new PDFSimpleExport(); report.Export(export, @"C:\Users\jack\Desktop\ExportToPDF\report_456.pdf");
report.Dispose(); } } }
|
运行上面的代码可以导出PDF,并且没有Demo水印,OK。
总结
FastReport
是一个功能很齐全的报表工具,本文只是涉及到利用它的库打印报表。安装了FRNetDemo.msi
,可以体验它最完整的功能,比如:
- 可视化定制报表;
- 支持导出PDF、HTML等内容;
- 支持字符串、XML、JSON、各类数据库作为数据源;
- 支持脚本自动生成报表
- 等等。。。
参考