In this article, we'll take a look at the world of the .NET platform on Ubuntu 22.04.1 LTS without using Microsoft Visual Studio, as it can't be installed on Linux, and create a PDF exportable report. The current analog of Visual Studio is, of course, JetBrains Rider. It is a cross-platform .NET IDE developed by JetBrains. It supports C#, VB.NET, and F# programming languages.
We will not discuss which IDE is better or worse. Let's just create, build, and export a PDF report/document from JetBrains Rider using FastReport .NET.
What do you need to get started? At least, you need to have the JetBrains Rider IDE installed on your PC. And also take into account the Linux features and make additional settings.
First of all, for Linux, we need additional libraries that may not be installed by default:
Linux setup with the example of Ubuntu 22.04.1 LTS:
1. Open console;
2. Update apt-get and install packages:
Next, create a new solution by selecting “New Solution”.
The next step is to set up the project. Select the Console Application project type in the .NET/.NET Core section. Then we give a name to the project, as an example, we use "ReportPDF_Core_ConsoleApp." After we click on the Console Application type, C# language, NET 6.0 framework.
Let's start by adding a simple sample dataset for our report in our application code. To do this, add to Program.cs:
using System.Data;
Let's add a variable next:
// creating a dataset set DataSet dataSet = new DataSet();
Let's add the CreateDataSet function, in which we will create and fill in the data set:
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"); }
And add a call to the CreateDataSet function:
//creating a dataset object DataSet dataSet = new DataSet(); CreateDataSet();
What is the easiest way to get FastReport .NET working in JetBrains Rider? To use our Private NuGet-server from Fast Reports.
This article describes how to add NuGet packages after purchasing FastReport .NET. Here is a brief instruction so as not to search for another article. Click on the NuGet tab at the bottom of the IDE, and click on the Sources tab.
Now we add a new repository by clicking on the "+" and enter the necessary data:
- Name—source name without spaces (for example FastReport);
- URL—https://nuget.fast-report.com/api/v3/index.json;
- User—email from Fast Reports account;
- Password—password from Fast Reports account.
You will see the repository:
We will now install the FastReport Core package. To do this, go to the Packages tab and filter the packages by the FastReport repository. And of course, install the found package.
If it was successful, you will receive a notification.
Next, let’s create a template from the code, for this we will do the following. Add to Program.cs:
using System.Drawing; using FastReport; using FastReport.Export.Pdf; using FastReport.Utils;
Next, add CreateDataSet to Program.cs below:
Report report = new Report(); CreateReportTemplate(); ExportToPDF();
Then add the function for creating a report template 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); }
Next, add the function to create an ExportToPDF report template and name the report export "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(); }
Let's start the console application. If you received the response Process finished with exit code 0, then you did everything right, open the report, in our case, it is the path /home/alex/RiderProjects/ReportPDF_Core_ConsoleApp/ReportPDF_Core_ConsoleApp/bin/Debug/net6.0/test.pdf:
Thus, we got a simple report/PDF document built from a dataset.
In this article, we have discussed the binding JetBrains Rider (C#) + .NET Core + Console Application + FastReport .NET Core + Linux (Ubuntu 22.04.1 LTS) and got a report built from a PDF dataset. And of course, we made sure that the .NET platform can be easily used without Microsoft Visual Studio since Linux simply does not have it.
Of course, we have not told you about creating a GUI application on Linux, which can, for example, be done using the Mono framework, but you can find articles on how to do this on our site.
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"); }