咸鱼

咸鱼是以盐腌渍后,晒干的鱼

0%

FastReport.Net安装

项目需求:由自己的程序根据数据打印二维码标签,虽然调用 Win32 API 可以实现简单的格式,但利用 FastReport 报表模板显然是一个更好的解决方案,可维护性更好。

FastReport的功能很强大,报表模板打印只是它的一个小功能。

一、前言

FastReport.Net —— 报表开发.NET动态库,适用于 C# 编程语言,报表模板文件是frx

FastReport.Net 使用逻辑是:

  1. Designer.exe设计模板;
  2. 项目引用DLL动态链接库;
  3. 调用 API 设置标签变量参数、打印机属性
  4. 打印

相比 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/图片报表:
ExportToPDF生成的报表

这是网友设计的报表模板(真正用于生产环境):
别人的报表

在实践中容易发生项目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,可以体验它最完整的功能,比如:

  1. 可视化定制报表;
  2. 支持导出PDF、HTML等内容;
  3. 支持字符串、XML、JSON、各类数据库作为数据源;
  4. 支持脚本自动生成报表
  5. 等等。。。

参考