In diesem Artikel werfen wir einen Blick auf die Welt der .NET-Plattform in Ubuntu 22.04.1 LTS, ohne Microsoft Visual Studio zu verwenden, da sie unter Linux nicht installiert werden kann, und erstellen einen Bericht, der ins PDF-Format exportiert werden kann. Das aktuelle Vergleichsprodukt von Visual Studio ist natürlich JetBrains Rider. Es ist eine von JetBrains entwickelte plattformübergreifende integrierte Softwareentwicklungsumgebung für die .NET-Plattform. Sie unterstützt die Programmiersprachen C#, VB.NET und F#.
Wir werden hier nicht diskutieren, welche IDE besser oder schlechter ist. Lassen Sie uns also einfach einen PDF-Bericht/ein Dokument aus JetBrains Rider mit FastReport .NET erstellen, aufbauen und exportieren.
Was brauchen Sie vorerst? Sie müssen mindestens die JetBrains Rider IDE auf Ihrem PC installiert haben und auch die Besonderheiten von Linux berücksichtigen und zusätzliche Einstellungen vornehmen.
Zuerst benötigen wir für Linux zusätzliche Bibliotheken, die möglicherweise nicht standardmäßig vorinstalliert sind:
Linux-Einstellung am Beispiel von Ubuntu 22.04.1 LTS:
1. Konsole öffnen;
2. apt-get aktualisieren und Pakete installieren:
Als nächstes erstellen Sie eine neue Lösung, indem Sie «New Solution» wählen.
Der nächste Schritt ist die Projekt-Einstellungen. Wählen Sie unter .NET/.NET Core den Projekttyp „Console Application“. Benennen Sie anschließend das Projekt, zum Beispiel „ReportPDF_Core_ConsoleApp“. Klicken Sie dann auf Console Application, Sprache C#, NET 6.0 Framework.
Beginnen Sie mit dem Hinzufügen eines einfachen Beispieldatensatzes für Ihren Bericht in dem Anwendungscode. Fügen Sie dazu in Program.cs folgendes hinzu:
using System.Data;
Fügen Sie als Nächstes die Variable hinzu:
// creating a dataset set DataSet dataSet = new DataSet();
Fügen Sie die CreateDataSet Funktion, in der der Datensatz erstellt und ausgefüllt wird:
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"); }
Und fügen Sie einen Aufruf der CreateDataSet Funktion hinzu:
//creating a dataset object DataSet dataSet = new DataSet(); CreateDataSet();
Was ist der einfachste Weg, FastReport .NET in JetBrains Rider zum Laufen zu bringen? Verwenden Sie unsere Private NuGet-server Fast Reports.
Dieser Artikel beschreibt, wie Sie NuGet-Pakete nach der Beschaffung von FastReport .NET hinzufügen können. Hier ist eine kurze Anleitung für Sie, damit Sie nicht zu einem anderen Artikel gehen müssen. Klicken Sie auf die Registerkarte NuGet am unteren Rand der IDE und klicken Sie auf die Registerkarte Sources.
Fügen Sie nun ein neues Repository hinzu, indem Sie auf "+" klicken und die erforderlichen Daten eingeben:
- Name - Quellenname ohne Leerzeichen (z.B., FastReport);
- URL - https://nuget.fast-report.com/api/v3/index.json;
- User – E-Mail von Ihrem Fast Reports Konto;
- Password - Passwort vom Fast Reports Konto.
Sie werden sehen, dass das entsprechende Repository erschienen ist:
Wir werden nun das FastReport Core-Paket installieren. Gehen Sie dazu auf die Registerkarte Packages und filtern Sie die Pakete nach FastReport-Repository. Und natürlich installieren Sie das gefundene Paket.
Wenn die Installation erfolgreich abgeschlossen ist, werden Sie in einer Benachrichtigung darüber informiert.
Als Nächstes erstellen Sie eine Vorlage aus dem Code, indem Sie die folgenden Schritte ausführen. Fügen Sie anschließend zu Program.cs folgendes hinzu:
using System.Drawing; using FastReport; using FastReport.Export.Pdf; using FastReport.Utils;
Fügen Sie als Nächstes CreateDataSet zu Program.cs unten hinzu:
Report report = new Report(); CreateReportTemplate(); ExportToPDF();
Fügen Sie dann die Funktion zum Erstellen einer Berichtsvorlage CreateReportTemplate hinzu:
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); }
Fügen Sie als Nächstes die Funktion zum Erstellen einer Berichtsvorlage „ExportToPDF“ hinzu und nennen Sie den Berichtsexport "Bericht.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(); }
Starten Sie die Konsolenanwendung. Wenn die Meldung „Process finished with exit code 0“ kommt, haben Sie alles richtig gemacht. Öffnen Sie dann den Bericht in unserem Fall unter /home/alex/RiderProjects/ReportPDF_Core_ConsoleApp/ReportPDF_Core_ConsoleApp/bin/Debug/net6.0/test.pdf:
So haben wir einen einfachen Bericht/ein einfaches Dokument im PDF-Format, der/das aus einem Datensatz erstellt worden ist.
In diesem Artikel haben wir die Kombination aus JetBrains Rider (C#) + .NET Core + Console Application + FastReport .NET Core + Linux (Ubuntu 22.04.1 LTS) betrachtet und einen Bericht aus einem PDF-Datensatz erstellt. Und natürlich haben wir uns davon überzeugt, dass die .NET-Plattform problemlos ohne Microsoft Visual Studio verwendet werden kann, da Linux es einfach nicht hat.
Wir haben natürlich nicht die Erstellung einer GUI-Anwendung unter Linux betrachtet, die beispielsweise mit dem Mono-Framework möglich ist, aber auf unserer Website finden Sie Artikel dazu.
using System.Data; using System.Drawing; using FastReport; using FastReport.Export.Pdf; using FastReport.Utils; //Erstellen eines Datensatzobjektes DataSet dataSet = new DataSet(); CreateDataSet(); // Erstellen eines Berichtobjektes Report report = new Report(); CreateReportTemplate(); ExportToPDF(); void CreateReportTemplate() { // Hinzufügen einer Berichtsseite ReportPage page = new ReportPage(); // Erstellen von DataBand DataBand data = new DataBand(); PageHeaderBand dataText = new PageHeaderBand(); //Erstellen der Kopfzeile ReportTitleBand titleBand = new ReportTitleBand(); TextObject employeeIdText = new TextObject(); TextObject employeeNameText = new TextObject(); TextObject idText = new TextObject(); TextObject nameText = new TextObject(); TextObject titleText = new TextObject(); //Erfassung der Datenquelle report.RegisterData(dataSet); //Einfügen der Datentabelle report.GetDataSource("Mitarbeiter").Enabled = true; // Hinzufügen einer Seite zur Vorlage report.Pages.Add(page); // Hinzufügen zur Seite: data,dataText, titleBand // und Vergabe eines eindeutigen Seitennamens page.AddChild(data); page.AddChild(dataText); page.AddChild(titleBand); page.CreateUniqueName(); // Vergabe eines eindeutigen Namens titleBand // und Festlegung der Band- Einstellungen titleBand.CreateUniqueName(); titleBand.Height = Units.Centimeters * 1.5f; titleText.Bounds = new RectangleF(300, 0, Units.Centimeters * 10, Units.Centimeters * 0.5f); titleText.Text = "Mitarbeiter"; titleText.Font = new Font("Arial", 14, FontStyle.Bold); titleText.VertAlign = VertAlign.Center; // Vergabe eines eindeutigen data-Namens // und Festlegung der data- Einstellungen data.CreateUniqueName(); data.DataSource = report.GetDataSource("Mitarbeiter"); data.Height = Units.Centimeters * 0.5f; // Vergabe eines eindeutigen dataText-Namens // und Festlegung der dataText- Einstellungen dataText.CreateUniqueName(); dataText.Height = Units.Centimeters * 0.8f; // Vergabe eines eindeutigen employeeIdText- Namens // und Festlegung der employeeIdText, idText- Einstellungen 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 = "[Mitarbeiter.ID]"; // Vergabe eines eindeutigen employeeNameText- Namens // und Festlegung der employeeNameText, nameText- Einstellungen 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 = "[Mitarbeiter.Name]"; // Ergänzung von data Band: employeeIdText, employeeNameText data.AddChild(employeeIdText); data.AddChild(employeeNameText); // Ergänzung von dataText Band: idText, nameText dataText.AddChild(idText); dataText.AddChild(nameText); // Ergänzung von titleBand: itleText titleBand.AddChild(titleText); } void ExportToPDF() { report.Prepare(); PDFExport export = new PDFExport(); report.Export(export, "test.pdf"); report.Dispose(); } void CreateDataSet() { // Erstellen eines einfachen Datensatzes mit einer Tabelle // Erstellen eines einfachen Datensatzes dataSet = new DataSet(); // Erstellen einer Tabelle DataTable table = new DataTable(); table.TableName = "Mitarbeiter"; // Hinzufügen einer Tabelle zum Datensatz dataSet.Tables.Add(table); // Hinzufügen von Daten zu einer Tabelle 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"); }