报表控件FastReport使用指南——使用NuGet包创建PDF文档
FastReport 是功能齐全的报表控件,可以帮助开发者可以快速并高效地为.NET,VCL,COM,ActiveX应用程序添加报表支持,由于其独特的编程原则,现在已经成为了Delphi平台最优秀的报表控件,支持将编程开发中的报表信息输出为TXT、PDF等多种文件格式,是编程开发人员必备的报表工具。
FastReport .Net是一款全功能的Windows Forms、ASP.NET和MVC报表分析解决方案,使用FastReport .Net可以创建独立于应用程序的.NET报表。
FastReport.NET官方版下载(qun:585577353)
https://www.evget.com/product/1861/download
在上篇文章中,我们学习了如何使用FastReport .NET在Ubuntu 22.04.1 LTS系统中的.JetBrains Rider上创建PDF文档。本次将分享FastReport .NET 在 JetBrains Rider 中工作的最简单方法——使用 Fast Reports 中的私有 NuGet 服务器。
因此,本文主要描述在购买FastReport .NET后如何添加NuGet包,从而在Ubuntu 22.04.1 LTS系统中的.NET IDE上创建、构建和导出PDF报告/文档的过程。
单击IDE底部的NuGet选项卡,然后单击Sources选项卡。

现在通过点击“+”来添加一个新的存储库,并输入必要的数据:
- Name—不带空格的源名称(例如FastReport);
- URL—https://nuget.fast-report.com/api/v3/index.json;
- User—来自Fast Reports帐户的电子邮箱;
- Password—来自Fast Reports帐户的密码。

您将看到存储库:

现在我们将安装FastReport Core 包。为此,请转到“Packages”选项卡并通过FastReport存储库过滤包。然后,安装找到的包。

安装成功,您将收到通知。

接下来,从代码中创建一个模板,为此我们将执行以下操作:添加到Program.cs:
using System.Drawing; using FastReport; using FastReport.Export.Pdf; using FastReport.Utils;
接下来,将 CreateDataSet 添加到下面的 Program.cs 中:
Report report = new Report(); CreateReportTemplate(); ExportToPDF();
然后,添加创建报表模板函数CreateReportTemplate:
void CreateReportTemplate()
{
// adding a report page
ReportPage page = new ReportPage();// creating a date band
DataBand data = new DataBand();
PageHeaderBand dataText = new PageHeaderBand();//creating a header
ReportTitleBand titleBand = new ReportTitleBand();
TextObject employeeIdText = new TextObject();
TextObject employeeNameText = new TextObject();
TextObject idText = new TextObject();
TextObject nameText = new TextObject();
TextObject titleText = new TextObject();
//registering the data source
report.RegisterData(dataSet);
//enabling on the data table
report.GetDataSource("Employees").Enabled = true;
//adding a page to the template
report.Pages.Add(page);
// add to the page: data,data Text, titleBand
// and set the unique name of the page
page.AddChild(data);
page.AddChild(dataText);
page.AddChild(titleBand);
page.CreateUniqueName();
// set the unique name titleBand
// and set the band settings
titleBand.CreateUniqueName();
titleBand.Height = Units.Centimeters * 1.5f;
titleText.Bounds = new RectangleF(300, 0, Units.Centimeters * 10, Units.Centimeters * 0.5f);
titleText.Text = "Employees";
titleText.Font = new Font("Arial", 14, FontStyle.Bold);
titleText.VertAlign = VertAlign.Center;// set the unique name data
// and set the data settings
data.CreateUniqueName();
data.DataSource = report.GetDataSource("Employees");
data.Height = Units.Centimeters * 0.5f;// set a unique dataText name
// and set the dataText settings
dataText.CreateUniqueName();
dataText.Height = Units.Centimeters * 0.8f;// setting the unique name employeeIdText
// and set the employeeIdText, idText settings
employeeIdText.Parent = data;
employeeIdText.CreateUniqueName();
employeeIdText.Bounds = new RectangleF(0, 0, Units.Centimeters * 10, Units.Centimeters * 0.5f);
idText.Bounds = new RectangleF(0, 0, Units.Centimeters * 10, Units.Centimeters * 0.5f);
idText.Text = "ID";
employeeIdText.Text = "[Employees.ID]";// set the unique name employeeNameText
// and set the employeeNameText, nameText settings
employeeNameText.Parent = data;
employeeNameText.CreateUniqueName();
employeeNameText.Bounds = new RectangleF(50, 0, Units.Centimeters * 10, Units.Centimeters * 0.5f);
nameText.Bounds = new RectangleF(50, 0, Units.Centimeters * 10, Units.Centimeters * 0.5f);
nameText.Text = "Name";
employeeNameText.Text = "[Employees.Name]";// add on data band: employeeIdText, employeeNameText
data.AddChild(employeeIdText);
data.AddChild(employeeNameText);// add on dataText band: idText, nameText
dataText.AddChild(idText);
dataText.AddChild(nameText);// add on titleBand band: itleText
titleBand.AddChild(titleText);
}
接下来,添加创建ExportToPDF报表模板的功能,并将报表导出命名为“Report.pdf”:
void ExportToPDF()
{
// running the report
report.Prepare();
// creating an export instance
PDFExport export = new PDFExport();
report.Export(export, "test.pdf");
// disposing the resources used by the report
report.Dispose();
}
最后,启动控制台应用程序。如果您收到响应 Process finished with exit code 0,那么您之前做的每一步,打开报告,在我们的例子中,它是路径:
/home/alex/RiderProjects/ReportPDF_Core_ConsoleApp/ReportPDF_Core_ConsoleApp/bin/Debug/net6.0/test .pdf:

由此,我们得到了一个从数据集构建的简单报表/PDF文档。
在本文中,我们讨论了绑定JetBrains Rider (C#) + .NET Core + Console Application + FastReport .NET Core + Linux (Ubuntu 22.04.1 LTS) ,并从PDF数据集构建了一个报告。当然,我们确保.NET平台可以在没有Microsoft Visual Studio的情况下轻松使用,因为Linux根本没有它。
完整的程序清单
using System.Data;
using System.Drawing;
using FastReport;
using FastReport.Export.Pdf;
using FastReport.Utils;//creating a data set
DataSet dataSet = new DataSet();
CreateDataSet();
//creating a report
Report report = new Report();CreateReportTemplate();
ExportToPDF();void CreateReportTemplate()
{
// add a report page
ReportPage page = new ReportPage();// create a data band
DataBand data = new DataBand();
PageHeaderBand dataText = new PageHeaderBand();//create a title
ReportTitleBand titleBand = new ReportTitleBand();
TextObject employeeIdText = new TextObject();
TextObject employeeNameText = new TextObject();
TextObject idText = new TextObject();
TextObject nameText = new TextObject();
TextObject titleText = new TextObject();
//register a data source
report.RegisterData(dataSet);
//enable a data table
report.GetDataSource("Employees").Enabled = true;
//add a page to the template
report.Pages.Add(page);
//add on a page: data,dataText, titleBand
// and set the unique page name
page.AddChild(data);
page.AddChild(dataText);
page.AddChild(titleBand);
page.CreateUniqueName();
// set the unique name titleBand
// and set the band settings
titleBand.CreateUniqueName();
titleBand.Height = Units.Centimeters * 1.5f;
titleText.Bounds = new RectangleF(300, 0, Units.Centimeters * 10, Units.Centimeters * 0.5f);
titleText.Text = "Employees";
titleText.Font = new Font("Arial", 14, FontStyle.Bold);
titleText.VertAlign = VertAlign.Center;// create the unique data name
// and set the data settings
data.CreateUniqueName();
data.DataSource = report.GetDataSource("Employees");
data.Height = Units.Centimeters * 0.5f;// create a unique dataText name
// and set dataText settings
dataText.CreateUniqueName();
dataText.Height = Units.Centimeters * 0.8f;// create the unique employeeIdText name
// and set the employeeIdText, idText settings
employeeIdText.Parent = data;
employeeIdText.CreateUniqueName();
employeeIdText.Bounds = new RectangleF(0, 0, Units.Centimeters * 10, Units.Centimeters * 0.5f);
idText.Bounds = new RectangleF(0, 0, Units.Centimeters * 10, Units.Centimeters * 0.5f);
idText.Text = "ID";
employeeIdText.Text = "[Employees.ID]";// create the unique name employeeNameText
// and set the employeeNameText, nameText settings
employeeNameText.Parent = data;
employeeNameText.CreateUniqueName();
employeeNameText.Bounds = new RectangleF(50, 0, Units.Centimeters * 10, Units.Centimeters * 0.5f);
nameText.Bounds = new RectangleF(50, 0, Units.Centimeters * 10, Units.Centimeters * 0.5f);
nameText.Text = "Name";
employeeNameText.Text = "[Employees.Name]";// and add on data band: employeeIdText, employeeNameText
data.AddChild(employeeIdText);
data.AddChild(employeeNameText);// add on dataText band: idText, nameText
dataText.AddChild(idText);
dataText.AddChild(nameText);// add on titleBand band: itleText
titleBand.AddChild(titleText);
}void ExportToPDF()
{
report.Prepare();
PDFExport export = new PDFExport();
report.Export(export, "test.pdf");
report.Dispose();
}void CreateDataSet()
{
// create a simple dataset with a single table// create a simple dataset
dataSet = new DataSet();// create a table
DataTable table = new DataTable();
table.TableName = "Employees";
// add the table to dataset
dataSet.Tables.Add(table);// add data to the table
table.Columns.Add("ID", typeof(int));
table.Columns.Add("Name", typeof(string));
table.Rows.Add(1, "Andrew Fuller");
table.Rows.Add(2, "Nancy Davolio");
table.Rows.Add(3, "Margaret Peacock");
}
以上就是本文全部内容,如果您有任何问题需了解详情,请评论或私聊我,欢迎大家加入官方社群互相交流~
相关文章:
报表控件FastReport使用指南——使用NuGet包创建PDF文档
FastReport 是功能齐全的报表控件,可以帮助开发者可以快速并高效地为.NET,VCL,COM,ActiveX应用程序添加报表支持,由于其独特的编程原则,现在已经成为了Delphi平台最优秀的报表控件,支持将编程开…...
策略模式-类型统计
文章目录 前言一、策略模式是什么?二、策略模式应用场景三、策略模式优点四、策略模式缺点五、场景案例:类型统计1.项目结构2.UML图解3.代码实现3.1 指标枚举3.2 请求体3.3 响应体3.4.分析统计指标策略3.5.接口3.6.扩展接口3.7.接口实现3.8.控制层 六、P…...
android 12.0app应用安装白名单
1.概述 在12.0定制化开发中,客户需求要实现应用安装白名单功能,在白名单之中的应用可以安装,其他的app不准安装,实现一个 控制app安装的功能,这需要从app安装流程入手就可以实现功能 PMS就是负责管理app安装的,功能就添加在这里就可以了, 2.app应用安装白名单核心代码 …...
android 12.0Launcher3禁止拖动图标到Hotseat
1.概述 在12.0系统Launcher3进行定制化开发中,对于hotseat的开发中,由功能需求要求禁止拖动图标到Hotseat的功能,而拖拽也是在workspace.java中处理的 接下来就从workspace.java 开始找解决的办法 2.Launcher3禁止拖动图标到Hotseat相关代码分析 packages/apps/Launcher3…...
Java阶段三Day03
Java阶段三Day03 文章目录 Java阶段三Day03JavaScript语言JavaScript概述什么是JavaScript语言特点一门编程语言包括哪些内容 语言基础变量JavaScript常用数据类型运算符各种语句如何在HTML页面中引入JavaScript代码方法和页面相关的方法 BOM和DOM什么是BOMwindow对象location对…...
【STM32G431RBTx】备战蓝桥杯嵌入式→决赛试题→第七届
文章目录 前言一、题目二、模块初始化三、代码实现interrupt.h:interrupt.h:main.h:main.h: 四、完成效果五、总结 前言 无 一、题目 二、模块初始化 1.LCD这里不用配置,直接使用提供的资源包就行 2.ADC:开启ADCsingle-ended 3.LED:开启PC8-15,PD2输出模式就行了…...
Java日期时间调整的几种方式
一、Calendar类 我们现在已经能够格式化并创建一个日期对象了,但是我们如何才能设置和获取日期数据的特定部分呢,比如说小时,日,或者分钟? 我们又如何在日期的这些部分加上或者减去值呢? 答案是使用Calendar 类。 Calendar类的…...
如何在Windows 11更新后解决C盘已满的问题?
Windows 11比Windows 10需要占用C盘更多的空间,在升级到Windows 11后,如果升级后出现问题,安装程序可以帮你退回到Windows 10。无论怎样,在升级到Windows 11后,系统会自动制作以前的数据的副本,这会占用大量…...
DJ6-1/2/3 文件系统
目录 6.1 文件系统概述 6.1.1 文件、记录和数据项 6.1.2 文件类型 6.1.3 文件系统模型 6.1.4 对文件的操作 6.2 文件的逻辑结构 6.2.1 文件逻辑结构的类型 6.2.2 顺序文件(Sequential File) 6.2.4 索引文件(Index File&…...
华为OD机试真题 Java 实现【打印文件】【2023Q1 100分】
一、题目描述 有 5 台打印机打印文件,每台打印机有自己的待打印队列。 因为打印的文件内容有轻重缓急之分,所以队列中的文件有1~10不同的优先级,其中数字越大优先级越高。 打印机会从自己的待打印队列中选择优先级最高的文件来打印。 如果存在两个优先级一样的文件,则选…...
基于LSB实现文本、图片、压缩包的隐藏
关于LSB的相关介绍: LSB全称为 Least Significant Bit(最低有效位),是一种基于图片最低有效位修改储存信息的隐写方法,在CTF杂项中经常会遇到,LSB属于空域算法中的一种,是将信息嵌入到图像点中…...
(万字长文)Linux——IO之重定向+缓冲区 +重定向 +缓冲区原理实现 +带重定向的简易版shell+标准输出标准错误
索引 文件描述符分配规则重定向 缓冲区1.什么是缓冲区2.缓冲区在哪里 重定向源码模拟实现缓冲区原理带重定向的简易版Xshell标准输入和标准错误 文件描述符分配规则 文件描述符的分配规则 从头遍历数组fd_array[],找到一个最小的,没有被使用的下标,分配…...
面试:js 延迟加载方式
相关知识点: js 延迟加载,也就是等页面加载完成之后再加载 JavaScript 文件。 js 延迟加载有助于提高页面加载速度 一般有以下几种方式: defer 属性 async 属性 动态创建 DOM 方式 使用 setTimeout 延迟方法 让 JS 最后加载 js 的加载…...
将Oracle数据文件导入SQL Server的方法
审计过程中,采集的业务数据有Oracle备份数据,备份文件的后缀名为.dmp。如何将*.dmp文件导入审计人员熟悉的SQL Server中呢?以下是现场审计数据导入方法介绍。 一、将*.dmp文件导入oracle数据库 *.dmp文件为Oracle数据库备份文件,因…...
《汇编语言》- 读书笔记 - 实验5 编写、调试具有多个段的程序
《汇编语言》- 读书笔记 - 实验5 编写、调试具有多个段的程序 题目1题目2题目3题目4题目5题目6总结 题目1 将下面的程序编译、连接,用 Debug 加载、跟踪,然后回答问题 assume cs:code, ds:data, ss:stack data segmentdw 0123h,0456h,0789h,0abch,0def…...
剑指offer -- 二维数组中的查找
二维数组中的查找_牛客题霸_牛客网 (nowcoder.com) 暴力查找法: 是一种简单直接的解决方法,可以用于在二维数组中查找目标值。该方法的思路是遍历数组的每个元素,逐个与目标值进行比较。 具体步骤如下: 从数组的第一行第一列开始,…...
3. 自然语言处理NLP:具体用途(近义词类比词;情感分类;机器翻译)
一、求近义词和类比词 1. 近义词 方法一:在嵌入模型后,可以根据两个词向量的余弦相似度表示词与词之间在语义上的相似度。 方法二:KNN(K近邻) 2. 类比词 使用预训练词向量求词与词之间的类比关系。eg:man&a…...
Hibernate的FlushMode
一、Session中FlushMode的设置: 在事务开启前设置FlushMode属性,方法: // session.setFlushMode(FlushMode.Always|AUTO|COMMIT|NEVER|MANUAL)。Service public class TestService {Logger log LoggerFactory.getLogger(getClass());AutowiredEntityM…...
二线程序员的出路
最近长沙不太平。去年被动离职一拨人之后,HR一直强调降本增效,人人自危,挤走一拨人,反正会有大量内卷失败的一线程序员进来填坑。当然留就有人走,前同事除了几个出去搞培训创业(后面解散了)的之…...
MKS SERVO4257D 闭环步进电机_系列2 菜单说明
第1部分 产品介绍 MKS SERVO 28D/35D/42D/57D 系列闭环步进电机是创客基地为满足市场需求而自主研发的一款产品。具备脉冲接口和RS485/CAN串行接口,支持MODBUS-RTU通讯协议,内置高效FOC矢量算法,采用高精度编码器,通过位置反馈&am…...
黄仁勋放话:AI基建要烧掉4万亿美元 谁买单?
最近,英伟达掌门人黄仁勋抛出了一句让人瞠目结舌的预测——未来几年,全球在人工智能基础设施上的投入,可能达到4万亿美元。这个数字不是小数目,它相当于某些国家一年的国内生产总值总和。这笔账怎么算的?黄仁勋在达沃斯…...
【教育部“人工智能+教育”试点标杆】:从零部署到常态化应用——某省327所乡村校6个月落地实录
更多请点击: https://intelliparadigm.com 第一章:PlayAI教育领域应用案例 PlayAI 作为面向教育场景的轻量级AI交互平台,已在多个K12及职业教育机构落地实践,聚焦于个性化学习路径生成、实时学情反馈与智能助教协同三大方向。其核…...
从零入门 OpenAI Codex|登录、权限、终端、记忆配置全实操
我先来简单介绍一下Codex。 Codex是 OpenAI 推出的 AI 编程模型与工具系列。Codex 最初于 2021 年作为 OpenAI API 的一部分发布,基于 GPT 架构专门针对代码数据进行了训练。2024 至 2025 年间,OpenAI 推出了独立的 Codex CLI命令行工具,使其…...
CANN-HCCL-昇腾NPU分布式训练的通信库怎么选
8 卡 Atlas 800I A2 内部走 HCCS(带宽 200GB/s),跨机走 RoCE(带宽 100GB/s)。HCCL 是昇腾NPU的通信库,对标 NVIDIA 的 NCCL。Tensor Parallel 和 Pipeline Parallel 的 All-Reduce、All-to-All 都靠它。 HC…...
鸿蒙今日穿搭页面构建:搭配推荐与风格筛选模块详解
鸿蒙今日穿搭页面构建:搭配推荐与风格筛选模块详解 前言 在 HarmonyOS 6.0 应用开发中,穿搭类页面的核心挑战在于如何展示搭配灵感、风格筛选和衣橱管理。本文将以“今日穿搭”应用的主页面为例,深入解析如何在鸿蒙平台上构建时尚穿搭类应用的…...
为ClaudeCode配置Taotoken作为备用API解决访问限制
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 为ClaudeCode配置Taotoken作为备用API解决访问限制 基础教程类,指导经常遇到ClaudeCode访问限制的开发者,如…...
别再死记公式了!用Python和NumPy直观理解向量模长与矩阵范数
用Python和NumPy直观理解向量模长与矩阵范数 线性代数中的向量模长和矩阵范数常被视为抽象的数学符号,但它们在机器学习、图像处理和科学计算中扮演着核心角色。本文将用Python代码将这些概念可视化,让你在交互式实践中建立直觉理解。 1. 向量模长&#…...
当大模型遇见嵌入式MCU:RISC-V+TinyML+Agent状态机的超低功耗智能体设计(STM32H7实测待机功耗仅2.1mW)
更多请点击: https://codechina.net 第一章:AI Agent边缘计算应用 AI Agent在边缘计算场景中正从“云端智能”转向“端侧自治”,通过轻量化模型、实时推理与本地决策能力,显著降低延迟、带宽依赖与数据隐私风险。典型应用包括工业…...
iMLite AI Map 2.1:嵌入式离线地图如何赋能智能穿戴独立导航
1. 项目概述:当智能穿戴“断网”后,如何实现精准导航?作为一名在智能硬件和嵌入式系统领域摸爬滚打了十多年的从业者,我见过太多“伪智能”产品。它们功能花哨,但一离开手机或网络,就立刻变成一块“砖”。尤…...
RK3588核心板开发全解析:从8K编解码到NPU AI应用实战
1. 项目概述:当“八核”遇上“8K”,一块核心板能做什么?最近拿到了一块RK3588的核心板套件,这玩意儿在圈子里热度一直不低。RK3588这颗芯片,从发布之初就被贴上了“旗舰”、“全能”的标签,八核CPU、8K编解…...
