
在本文中,我们将在 Ubuntu 22.04.1 LTS 上看看 .NET 平台的世界,而不使用 Microsoft Visual Studio(因为 Linux 上无法安装),并创建一份可导出的 PDF 报告。目前与Visual Studio类似的当然是JetBrains Rider。它是由 JetBrains 开发的跨平台 .NET 集成开发环境。它支持 C#、VB.NET 和 F# 编程语言。
我们不讨论哪个集成开发环境更好或更差。让我们使用 FastReport .NET 从 JetBrains Rider 创建、构建和导出 PDF 报告/文档。
开始需要什么?至少,您需要在电脑上安装 JetBrains Rider IDE。此外,还要考虑到 Linux 的特性并进行额外设置。
首先,对于 Linux,我们需要额外的库,这些库可能默认没有安装:
• libgdiplus;
• libx11-dev.
以 Ubuntu 22.04.1 LTS 为例进行 Linux 设置:
1.打开控制台;
2.更新 apt-get 并安装软件包:
• sudo apt-get update;
• sudo apt-get install libgdiplus;
接下来,选择 "新建解决方案",创建一个新的解决方案。

下一步是设置项目。在 .NET/.NET Core 部分选择控制台应用程序项目类型。然后为项目命名,例如使用 "ReportPDF_Core_ConsoleApp"。点击 "控制台应用程序类型"、"C# 语言"、".NET 6.0 框架 "之后,我们将看到 "控制台应用程序 "项目。

首先,让我们在程序代码中为报告添加一个简单的示例数据集。为此,请在 Program.cs 中添加
using System.Data;
接下来让我们添加一个变量:
// creating a dataset set
DataSet dataSet = new DataSet();
让我们添加 CreateDataSet 函数,创建并填充数据集:
void CreateDataSet()
{
// create a simple dataset with one table
// create a simple dataset
dataSet = new DataSet();
// create a table
DataTable table = new DataTable();
table.TableName = "Employees";
// adding a table to the dataset
dataSet.Tables.Add(table);
// adding data to a 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");
}
并添加对 CreateDataSet 函数的调用:
//creating a dataset object
DataSet dataSet = new DataSet();
CreateDataSet();
让 FastReport .NET 在 JetBrains Rider 中运行的最简单方法是什么?从Fast Reports中使用我们的私有NuGet服务器。
本文将介绍如何在购买FastReport .NET后添加NuGet包。下面是一个简短的说明,以免您需要搜索另一篇文章。点击 IDE 底部的 NuGet 选项卡,然后点击 Sources 选项卡。

现在,我们点击 "+"添加一个新的存储库,并输入必要的数据:
- 名称-源名称,不含空格(例如 FastReport);
- URL-https://nuget.fast-report.com/api/v3/index.json;
- 用户-Fast Reports 账户的电子邮件;
- 密码-来自 Fast Reports 账户的密码。

您将看到存储库:

现在我们将安装 FastReport Core 软件包。为此,请转到 "软件包 "选项卡,然后根据 FastReport 软件库过滤软件包。当然,安装找到的软件包。

如果成功,您将收到通知。

接下来,让我们从代码中创建一个模板,为此我们将执行以下操作。添加到 Program.cs 中:
using System.Drawing;
using FastReport;
using FastReport.Export.Pdf;
using FastReport.Utils;
接下来,在下面的 Program.cs 中添加 CreateDataSet:
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();
}
让我们启动控制台应用程序。如果收到退出代码为 0 的 Process finished 响应,则说明一切正常,请打开报告,在我们的例子中,路径是 /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根本就没有Visual Studio。
当然,我们还没有告诉你如何在 Linux 上创建图形用户界面应用程序,例如,可以使用 Mono 框架来完成,但你可以在我们的网站上找到有关如何实现的文章。
完整程序列表
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");
}
渝公网安备50010702505508