Zum Fußzeileninhalt springen
.NET HILFE

.NET Softwareentwicklung (Funktionsweise für Entwickler)

Die Softwareentwicklung mit .NET Framework stellt ein leistungsfähiges, vielseitiges Framework dar, das von Microsoft unterstützt wird und Entwicklern ermöglicht, robuste, qualitativ hochwertige Anwendungen zu erstellen, die verschiedene Plattformen, Betriebssysteme und Geräte abdecken. Dieses Softwareentwicklungs-Framework ist darauf ausgelegt, umfassend zu sein, indem es Werkzeuge, Bibliotheken und APIs bereitstellt, die Softwareentwickler verwenden können, um webbasierte, Desktop- und mobile Anwendungen effizient auf der .NET-Plattform zu erstellen.

Mit Unterstützung für mehrere Programmiersprachen, einschließlich C#, Visual Basic und F#, bietet die .NET-Entwicklung Flexibilität für Entwickler, sodass sie in ihrer bevorzugten Sprache arbeiten können, während sie von den umfangreichen Funktionen des .NET Core-Ökosystems profitieren. In diesem Tutorial werden wir sehen, wie IronPDF die .NET-Entwicklung verbessert, um reale Probleme zu lösen.

Verständnis des Ökosystems der .NET-Softwareentwicklung

Das .NET-Ökosystem, eine wichtige .NET-Implementierung, ist eine umfassende Plattform, die verschiedene Komponenten und Technologien einschließt, die zur Entwicklung von Anwendungen über verschiedene Betriebssysteme hinweg entwickelt wurden. Im Kern dienen das .NET Framework und .NET Core als die primären Motoren für das Ausführen von .NET-Anwendungen, indem sie eine gemeinsame Sprachlaufzeit (Common Language Runtime, CLR) bereitstellen, die die Ausführung von Code verwaltet und Dienste wie Speicherverwaltung, Typensicherheit, Ausnahmesteuerung und mehr bietet.

Die Common Language Runtime (CLR)

Die CLR ist ein wesentlicher Bestandteil der .NET-Architektur und ermöglicht die Ausführung von .NET-Code auf verschiedenen Betriebssystemen. Sie kompiliert die Gemeinsame Zwischen-Sprache (Common Intermediate Language, CIL) in nativen Maschinen-Code, der direkt vom Host-System ausgeführt werden kann. Dieser Prozess stellt sicher, dass .NET-Anwendungen nahtlos auf verschiedenen Plattformen laufen können, von großen mobilen Betriebssystemen bis hin zu Windows-Webservern.

Plattformübergreifendes Framework

.NET Core taucht als plattformübergreifendes Framework auf und ermöglicht es .NET-Anwendungen, auf Linux, macOS und Windows zu laufen. Diese Anpassungsfähigkeit macht .NET zu einer attraktiven Wahl für Entwickler, die ein breiteres Publikum über verschiedene Geräte und Plattformen hinweg erreichen wollen. Mit .NET Core können Anwendungen auf jedem unterstützten Betriebssystem entwickelt und bereitgestellt werden, was die Reichweite und Flexibilität der .NET-Softwareentwicklung erweitert und durch die umfassende .NET-Community gestärkt wird.

Integrierte Entwicklungsumgebung (IDE)

Visual Studio ist die führende integrierte Entwicklungsumgebung (IDE) für .NET-Entwicklung. Sie bietet Entwicklern leistungsstarke Werkzeuge zum Schreiben, Debuggen und Bereitstellen von .NET-Anwendungen. Visual Studio unterstützt verschiedene Programmiersprachen und bietet eine Vielzahl von Funktionen zum Erstellen von Web-, Desktop- und mobilen Anwendungen, was es zu einem unverzichtbaren Werkzeug für .NET-Entwickler macht.

Erstellung von Anwendungen mit .NET

Anwendungen auf der .NET-Plattform zu erstellen, beinhaltet die Nutzung einer breiten Palette von Werkzeugen, Bibliotheken und Programmiersprachen, die das Framework bietet, wie zum Beispiel Visual Basic, und das umfassende Ökosystem zeigt. Diese Vielseitigkeit ermöglicht es Softwareentwicklern, verschiedene Arten von .NET-Apps zu erstellen, von Web- und Desktop-Anwendungen bis hin zu cloudbasierten und mobilen Lösungen.

Web-Entwicklung mit ASP.NET

ASP.NET, ein wesentlicher Bestandteil des .NET Frameworks, ist speziell für die Erstellung dynamischer Webseiten und Anwendungen konzipiert. Es ermöglicht Entwicklern, reaktionsfähige und skalierbare Webanwendungen zu erstellen, die riesige Mengen an Datenverkehr bewältigen können. ASP.NET Core, die Open-Source-Version von ASP.NET, bietet zusätzliche Funktionen zur Erstellung plattformübergreifender Webanwendungen und macht es möglich, Web-Apps unter Windows, Linux und macOS zu entwickeln und bereitzustellen.

Desktop-Anwendungsentwicklung

.NET bietet zwei primäre Ansätze zur Erstellung von Desktop-Anwendungen: Windows Forms und Windows Presentation Foundation (WPF). Windows Forms bietet eine einfache Möglichkeit, Desktop-Apps mit einer reichhaltigen grafischen Benutzeroberfläche zu erstellen, während WPF XAML (Extensible Application Markup Language) verwendet, um die Entwicklung visuell ansprechender Benutzeroberflächen mit fortschrittlichen Grafiken und Animationen zu ermöglichen.

Mobile Anwendungsentwicklung

Für die mobile Entwicklung erstreckt sich .NET auf große mobile Betriebssysteme durch das Xamarin-Framework, das jetzt als .NET MAUI (Multi-platform App UI) in .NET integriert ist. Dieser Ansatz ermöglicht es Entwicklern, Code über iOS, Android und Windows hinweg wiederzuverwenden und vereinfacht dadurch den Prozess der Erstellung mobiler Anwendungen, die native Leistung und Benutzererfahrung bieten.

Cloud und Microservices

.NET eignet sich auch hervorragend zur Entwicklung von Anwendungen, die in der Cloud laufen. Mit Unterstützung für Azure und andere Cloud-Plattformen können Entwickler skalierbare, verteilte Anwendungen erstellen, die die Vorteile von Cloud-Computing-Ressourcen nutzen. ASP.NET Core spielt eine wesentliche Rolle bei der Entwicklung von Microservices, indem es leichte, modulare und unabhängig bereitstellbare Dienste bietet, die innerhalb von Cloud-Umgebungen skalieren können.

Maschinelles Lernen und KI

Das .NET-Ökosystem umfasst ML.NET, ein maschinelles Lern-Framework, das Entwicklern ermöglicht, benutzerdefinierte Modelle des maschinellen Lernens in ihre .NET-Anwendungen zu integrieren. Diese Integration eröffnet Möglichkeiten für die Erstellung intelligenter Anwendungen, die prädiktive Analysen, natürliche Sprachverarbeitung und mehr ermöglichen und die Macht von KI innerhalb des .NET-Frameworks nutzen.

Verbesserung der .NET-Softwareentwicklung mit IronPDF

.NET Software-Entwicklung (Wie es für Entwickler funktioniert): Abbildung 1 - IronPDF

Innerhalb des lebendigen Ökosystems der .NET Softwareentwicklung bietet die Fähigkeit, PDF-Dokumente direkt innerhalb von Anwendungen zu erzeugen, zu manipulieren und zu verwalten, einen erheblichen Vorteil. IronPDF, eine robuste Bibliothek, die für .NET-Entwickler entwickelt wurde, integriert sich nahtlos in diese Umgebung und bietet eine effiziente Möglichkeit, PDFs aus .NET-Anwendungen zu erstellen, einschließlich solcher, die mit Windows Forms entwickelt wurden.

Die Rolle von IronPDF in .NET-Anwendungen

IronPDF steht als Beweis für die Flexibilität und Stärke des .NET-Ökosystems und bietet Entwicklern eine intuitive API, um PDF-Dokumente aus HTML, Bildern, Texten und sogar ASP.NET-Webseiten zu erstellen. Diese Fähigkeit ist besonders nützlich in Szenarien, die die Erstellung dynamischer Dokumente erfordern, wie das Erstellen von Rechnungen, Berichten oder persönlichen Dokumenten in Desktop-Anwendungen.

Erstellung eines Windows Form Invoice Generator mit IronPDF

Eine Windows Form-Anwendung zur Erstellung von Rechnungen veranschaulicht die praktische Anwendung der .NET-Softwareentwicklung in Kombination mit IronPDF. Diese Anwendung ermöglicht es Nutzern, Details wie Kundeninformationen, gekaufte Artikel und Preise einzugeben, und dann eine professionelle PDF-Rechnung mit einem einzigen Klick zu erstellen.

Einrichten Ihres Windows Forms-Projekts und Entwerfen der Benutzeroberfläche

Beginnen Sie mit der Erstellung eines neuen Windows Forms-Projekts in Visual Studio. Dies ist Ihre Grundlage, auf der Sie die Benutzeroberfläche für Ihren Rechnungsgenerator gestalten. Gestalten Sie Ihr Formular, um die notwendigen Eingabefelder für Kunden- und Artikeldetails einzuschließen, zusammen mit einem Button zum Erstellen des PDFs. Es ist unsere Rechnungsgenerator-Oberfläche:

.NET Software-Entwicklung (Wie es für Entwickler funktioniert): Abbildung 2 - Rechnungsgenerator Windows Form-Ausgabe

Die Benutzeroberfläche der Windows Forms-Anwendung ist sorgfältig gestaltet, um Bedienungsfreundlichkeit und Funktionalität sicherzustellen. Das Hauptfenster, mit dem Titel "Rechnungsgenerator", ist in verschiedene Abschnitte unterteilt, um ein nahtloses Benutzererlebnis zu bieten.

Abschnitt Kundeninformation

Oben enthält das Formular Felder für 'Kundenname', 'Kundenadresse', 'Kunden-E-Mail' und 'Kundentelefonnummer'. Dieser Bereich ist der Aufnahme grundlegender Kundendaten gewidmet, die prominent auf der erstellten Rechnung erscheinen werden.

Rechnungspositionen hinzufügen

Direkt unter den Kundeninformationen befindet sich ein Bereich mit der Bezeichnung 'Rechnungsposten hinzufügen'. Hier können Benutzer die Details einzelner Artikel eingeben, wie 'Artikel-ID', 'Beschreibung', 'Menge' und 'Stückpreis'. Ein 'Artikel hinzufügen'-Button befindet sich daneben, der es Benutzern ermöglicht, den eingegebenen Artikel zur Rechnungsliste unten hinzuzufügen.

Rechnungspostenliste

Der zentrale Teil des Formulars zeigt den Abschnitt 'Rechnungsinformationen', der eine Tabelle anzeigt, in der die eingegebenen Artikel erscheinen, sobald sie hinzugefügt werden. Die Tabellenspalten umfassen 'Artikel-ID', 'Beschreibung', 'Menge', 'Stückpreis' und 'Gesamtpreis', wobei die letzte Spalte automatisch basierend auf Menge und Stückpreis berechnet wird. Ein Datumswahler mit der Bezeichnung 'Datum auswählen' ermöglicht es dem Benutzer, das Rechnungsdatum anzugeben, was zur Spezifität des Dokuments beiträgt.

Rechnungsvorgänge

Am unteren Rand des Formulars wird ein Label mit dem 'Gesamtbetrag' angezeigt, das dynamisch aktualisiert wird, wenn Artikel hinzugefügt oder entfernt werden. Dies stellt sicher, dass Benutzer stets einen Echtzeit-Überblick über den Gesamtwert der Rechnung haben. Zusätzlich löst ein 'Rechnung erstellen'-Button aus, dass die Anwendung die IronPDF-Bibliothek verwendet, um eine PDF-Version der Rechnung basierend auf den eingegebenen Daten zu erstellen.

Diese Benutzeroberfläche ist nicht nur funktional, sondern auch intuitiv und ermöglicht es Benutzern, problemlos mit der Anwendung zu interagieren, ohne dass eine steile Lernkurve erforderlich ist. Sie ist darauf ausgelegt, alle notwendigen Informationen für die Rechnungserstellung unterzubringen, während sie einen klaren und einfachen Weg von der Dateneingabe bis zur PDF-Erstellung bietet.

IronPDF zu Ihrem Projekt hinzufügen

Mit Ihrem Projekt eingerichtet, besteht der nächste Schritt darin, IronPDF hinzuzufügen. Dies erfolgt über NuGet, den integrierten NuGet-Paketmanager von Visual Studio, mit dem Sie IronPDF mühelos zu Ihrem Projekt hinzufügen können. Führen Sie den folgenden Befehl in der Paket-Manager-Konsole aus:

Install-Package IronPdf

Dieser Befehl installiert IronPDF und macht es in Ihrem Projekt verfügbar.

.NET Software-Entwicklung (Wie es für Entwickler funktioniert): Abbildung 3 - Installation von IronPDF

Implementierung der Rechnungserstellung

Der Kern der Windows Forms-Anwendung ist ihre Fähigkeit, Benutzereingaben zu verwalten, die Daten in ein strukturiertes Format zu organisieren und ein greifbares Dokument – in diesem Fall eine Rechnung im PDF-Format – zu erzeugen. Die Funktionalität basiert auf einer Reihe methodischer Schritte innerhalb des Anwendungscode.

Einrichten der Datenrasteransicht

Beim Initialisieren des Formulars ruft die Anwendung SetupDataGridViewColumns auf, um die Datenstruktur zu erstellen, in der Rechnungsartikel angezeigt werden. Spalten für Artikel-ID, Beschreibung, Menge, Stückpreis und Gesamtpreis werden erstellt, wobei der Gesamtpreis ein nur lesbares Feld ist, da er automatisch berechnet wird. Zusätzlich wird eine Button-Spalte zum Löschen von Artikeln hinzugefügt, was die Benutzerkontrolle über den Rechnungsinhalt verbessert.

private void SetupDataGridViewColumns()
{
    invoiceDataGridView.Columns.Clear(); // Clear existing columns if any
    // Add columns specifying the details to be displayed in the invoice
    invoiceDataGridView.Columns.Add("itemIdColumn", "Item ID");
    invoiceDataGridView.Columns.Add("descriptionColumn", "Description");
    invoiceDataGridView.Columns.Add("quantityColumn", "Quantity");
    invoiceDataGridView.Columns.Add("unitPriceColumn", "Unit Price");
    invoiceDataGridView.Columns.Add("totalPriceColumn", "Total Price");
    // Set the Total Price column to read-only as it will be calculated automatically
    invoiceDataGridView.Columns["totalPriceColumn"].ReadOnly = true;
    // Add a button column for delete action
    DataGridViewButtonColumn deleteButtonColumn = new DataGridViewButtonColumn();
    deleteButtonColumn.HeaderText = "";
    deleteButtonColumn.Name = "deleteButtonColumn";
    deleteButtonColumn.Text = "Delete";
    deleteButtonColumn.UseColumnTextForButtonValue = true; // Set the button text to "Delete"
    // Add the delete button column to the DataGridView
    invoiceDataGridView.Columns.Add(deleteButtonColumn);
}

public Form1()
{
    InitializeComponent();
    SetupDataGridViewColumns();
    // Wire up the CellClick event to a handler to manage deletion of items
    invoiceDataGridView.CellClick += invoiceDataGridView_CellClick;
}

private void invoiceDataGridView_CellClick(object sender, DataGridViewCellEventArgs e)
{
    // If the clicked cell is part of the button column and not the header row
    if (e.ColumnIndex == invoiceDataGridView.Columns["deleteButtonColumn"].Index && e.RowIndex >= 0)
    {
        // Confirm delete operation
        if (MessageBox.Show("Are you sure you want to delete this item?", "Confirm Delete", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
        {
            // Remove the row from the DataGridView
            invoiceDataGridView.Rows.RemoveAt(e.RowIndex);
        }
    }
}
private void SetupDataGridViewColumns()
{
    invoiceDataGridView.Columns.Clear(); // Clear existing columns if any
    // Add columns specifying the details to be displayed in the invoice
    invoiceDataGridView.Columns.Add("itemIdColumn", "Item ID");
    invoiceDataGridView.Columns.Add("descriptionColumn", "Description");
    invoiceDataGridView.Columns.Add("quantityColumn", "Quantity");
    invoiceDataGridView.Columns.Add("unitPriceColumn", "Unit Price");
    invoiceDataGridView.Columns.Add("totalPriceColumn", "Total Price");
    // Set the Total Price column to read-only as it will be calculated automatically
    invoiceDataGridView.Columns["totalPriceColumn"].ReadOnly = true;
    // Add a button column for delete action
    DataGridViewButtonColumn deleteButtonColumn = new DataGridViewButtonColumn();
    deleteButtonColumn.HeaderText = "";
    deleteButtonColumn.Name = "deleteButtonColumn";
    deleteButtonColumn.Text = "Delete";
    deleteButtonColumn.UseColumnTextForButtonValue = true; // Set the button text to "Delete"
    // Add the delete button column to the DataGridView
    invoiceDataGridView.Columns.Add(deleteButtonColumn);
}

public Form1()
{
    InitializeComponent();
    SetupDataGridViewColumns();
    // Wire up the CellClick event to a handler to manage deletion of items
    invoiceDataGridView.CellClick += invoiceDataGridView_CellClick;
}

private void invoiceDataGridView_CellClick(object sender, DataGridViewCellEventArgs e)
{
    // If the clicked cell is part of the button column and not the header row
    if (e.ColumnIndex == invoiceDataGridView.Columns["deleteButtonColumn"].Index && e.RowIndex >= 0)
    {
        // Confirm delete operation
        if (MessageBox.Show("Are you sure you want to delete this item?", "Confirm Delete", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
        {
            // Remove the row from the DataGridView
            invoiceDataGridView.Rows.RemoveAt(e.RowIndex);
        }
    }
}
$vbLabelText   $csharpLabel

Rechnungspositionen hinzufügen

Wenn ein Benutzer Details für einen Artikel eingibt und auf 'Artikel hinzufügen' klickt, erfasst das Ereignis btnAddItem_Click die eingegebenen Daten, überprüft sie und ruft anschließend AddItemToInvoice auf. Diese Methode fügt eine neue Zeile zur DataGridView mit den eingegebenen Werten hinzu, berechnet den Gesamtpreis für den Artikel und aktualisiert den angezeigten Rechnungsbetrag, der am unteren Rand des Formulars angezeigt wird.

public void AddItemToInvoice(string itemId, string description, int quantity, decimal unitPrice)
{
    decimal totalPrice = quantity * unitPrice;
    invoiceDataGridView.Rows.Add(itemId, description, quantity, unitPrice, totalPrice);
}

private void CalculateTotalAmount()
{
    decimal totalAmount = 0m;
    foreach (DataGridViewRow row in invoiceDataGridView.Rows)
    {
        totalAmount += Convert.ToDecimal(row.Cells["totalPriceColumn"].Value ?? 0);
    }
    // Display the total amount accumulated
    lblTotalAmount.Text = $"{totalAmount:C2}";
}

private void btnAddItem_Click(object sender, EventArgs e)
{
    // Collect data from input controls
    string itemId = txtItemID.Text;
    string description = txtDescription.Text;
    int quantity = (int)numericUpDownQuantity.Value;
    decimal unitPrice;
    // Validate the collected data
    bool isUnitPriceValid = decimal.TryParse(txtUnitPrice.Text, out unitPrice);
    if (string.IsNullOrEmpty(itemId) || string.IsNullOrEmpty(description) || quantity <= 0 || !isUnitPriceValid || unitPrice <= 0)
    {
        MessageBox.Show("Please enter valid data for all fields.", "Invalid Data", MessageBoxButtons.OK, MessageBoxIcon.Warning);
        return;
    }
    // Add data to the DataGridView
    AddItemToInvoice(itemId, description, quantity, unitPrice);
    // Clear the input fields after adding the item to the grid
    txtItemID.Clear();
    txtDescription.Clear();
    txtUnitPrice.Clear();
    numericUpDownQuantity.Value = 0;
    CalculateTotalAmount();
}
public void AddItemToInvoice(string itemId, string description, int quantity, decimal unitPrice)
{
    decimal totalPrice = quantity * unitPrice;
    invoiceDataGridView.Rows.Add(itemId, description, quantity, unitPrice, totalPrice);
}

private void CalculateTotalAmount()
{
    decimal totalAmount = 0m;
    foreach (DataGridViewRow row in invoiceDataGridView.Rows)
    {
        totalAmount += Convert.ToDecimal(row.Cells["totalPriceColumn"].Value ?? 0);
    }
    // Display the total amount accumulated
    lblTotalAmount.Text = $"{totalAmount:C2}";
}

private void btnAddItem_Click(object sender, EventArgs e)
{
    // Collect data from input controls
    string itemId = txtItemID.Text;
    string description = txtDescription.Text;
    int quantity = (int)numericUpDownQuantity.Value;
    decimal unitPrice;
    // Validate the collected data
    bool isUnitPriceValid = decimal.TryParse(txtUnitPrice.Text, out unitPrice);
    if (string.IsNullOrEmpty(itemId) || string.IsNullOrEmpty(description) || quantity <= 0 || !isUnitPriceValid || unitPrice <= 0)
    {
        MessageBox.Show("Please enter valid data for all fields.", "Invalid Data", MessageBoxButtons.OK, MessageBoxIcon.Warning);
        return;
    }
    // Add data to the DataGridView
    AddItemToInvoice(itemId, description, quantity, unitPrice);
    // Clear the input fields after adding the item to the grid
    txtItemID.Clear();
    txtDescription.Clear();
    txtUnitPrice.Clear();
    numericUpDownQuantity.Value = 0;
    CalculateTotalAmount();
}
$vbLabelText   $csharpLabel

Erstellung der PDF-Rechnung

Wenn auf 'Rechnung erstellen' geklickt wird, führt die Anwendung den Ereignis-Handler btnInvoice_Click aus, in dem sie eine HTML-Zeichenfolge unter Verwendung einer StringBuilder-Klasse konstruiert. Diese Zeichenfolge umfasst die Kundendetails und eine stilisierte HTML-Tabelle, die mit den Rechnungsartikeln aus der DataGridView gefüllt ist. Der Renderer von IronPDF konvertiert anschließend dieses HTML in ein PDF-Dokument, das an einem angegebenen Pfad gespeichert wird. Die Anwendung bestätigt die erfolgreiche Erstellung der Rechnung mit einer Nachricht an den Benutzer.

private void btnInvoice_Click(object sender, EventArgs e)
{
    IronPdf.License.LicenseKey = "your-license-key"; // Replace with your IronPDF license key
    var customerName = txtName.Text;
    var customerEmail = txtEmail.Text;
    var customerAddress = txtAddress.Text;
    var customerPhone = txtPhone.Text;
    var htmlStringBuilder = new StringBuilder();
    htmlStringBuilder.Append("<html>");
    htmlStringBuilder.Append("<head>");
    htmlStringBuilder.Append("<title>Invoice</title>");
    htmlStringBuilder.Append(@"
        <style>
            body { font-family: 'Arial', sans-serif; }
            h1 { color: #333; text-align: center; }
            table { width: 100%; border-collapse: collapse; margin-top: 20px; }
            th, td { border: 1px solid #999; padding: 8px; text-align: left; }
            th { background-color: #f2f2f2; }
            tr:nth-child(even) { background-color: #f9f9f9; }
            h2 { text-align: right; margin-top: 20px; }
            .customer-info { line-height: 1.6; margin-bottom: 20px; }
            .customer-info p { margin: 0 0 10px 0; color: #333; }
            .customer-info label { font-weight: bold; }
        </style>");
    htmlStringBuilder.Append("</head>");
    htmlStringBuilder.Append("<body>");
    htmlStringBuilder.Append("<h1>Invoice</h1>");
    htmlStringBuilder.Append("<div class='customer-info'>");
    htmlStringBuilder.Append($"<p><strong>Customer Name:</strong> {customerName}</p>");
    htmlStringBuilder.Append($"<p><strong>Customer Email:</strong> {customerEmail}</p>");
    htmlStringBuilder.Append($"<p><strong>Customer Address:</strong> {customerAddress}</p>");
    htmlStringBuilder.Append($"<p><strong>Customer Phone:</strong> {customerPhone}</p>");
    htmlStringBuilder.Append("</div>");
    htmlStringBuilder.Append("<table><tr><th>Item ID</th><th>Description</th><th>Quantity</th><th>Unit Price</th><th>Total Price</th></tr>");
    foreach (DataGridViewRow row in invoiceDataGridView.Rows)
    {
        if (row.IsNewRow) continue; 
        htmlStringBuilder.Append("<tr>");
        htmlStringBuilder.Append($"<td>{row.Cells["itemIdColumn"].Value}</td>");
        htmlStringBuilder.Append($"<td>{row.Cells["descriptionColumn"].Value}</td>");
        htmlStringBuilder.Append($"<td>{row.Cells["quantityColumn"].Value}</td>");
        htmlStringBuilder.Append($"<td>{row.Cells["unitPriceColumn"].Value:C2}</td>");
        htmlStringBuilder.Append($"<td>{row.Cells["totalPriceColumn"].Value:C2}</td>");
        htmlStringBuilder.Append("</tr>");
    }
    htmlStringBuilder.Append("</table>");
    htmlStringBuilder.Append($"<h2>Total Amount: {lblTotalAmount.Text}</h2>");
    htmlStringBuilder.Append("</body></html>");
    var renderer = new IronPdf.ChromePdfRenderer();
    var pdfDocument = renderer.RenderHtmlAsPdf(htmlStringBuilder.ToString());
    string savePath = Path.Combine($"F:\\Invoice_{DateTime.Now:yyyyMMddHHmmss}.pdf");
    pdfDocument.SaveAs(savePath);
    MessageBox.Show("The invoice has been successfully saved to your desktop.", "Invoice Saved", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
private void btnInvoice_Click(object sender, EventArgs e)
{
    IronPdf.License.LicenseKey = "your-license-key"; // Replace with your IronPDF license key
    var customerName = txtName.Text;
    var customerEmail = txtEmail.Text;
    var customerAddress = txtAddress.Text;
    var customerPhone = txtPhone.Text;
    var htmlStringBuilder = new StringBuilder();
    htmlStringBuilder.Append("<html>");
    htmlStringBuilder.Append("<head>");
    htmlStringBuilder.Append("<title>Invoice</title>");
    htmlStringBuilder.Append(@"
        <style>
            body { font-family: 'Arial', sans-serif; }
            h1 { color: #333; text-align: center; }
            table { width: 100%; border-collapse: collapse; margin-top: 20px; }
            th, td { border: 1px solid #999; padding: 8px; text-align: left; }
            th { background-color: #f2f2f2; }
            tr:nth-child(even) { background-color: #f9f9f9; }
            h2 { text-align: right; margin-top: 20px; }
            .customer-info { line-height: 1.6; margin-bottom: 20px; }
            .customer-info p { margin: 0 0 10px 0; color: #333; }
            .customer-info label { font-weight: bold; }
        </style>");
    htmlStringBuilder.Append("</head>");
    htmlStringBuilder.Append("<body>");
    htmlStringBuilder.Append("<h1>Invoice</h1>");
    htmlStringBuilder.Append("<div class='customer-info'>");
    htmlStringBuilder.Append($"<p><strong>Customer Name:</strong> {customerName}</p>");
    htmlStringBuilder.Append($"<p><strong>Customer Email:</strong> {customerEmail}</p>");
    htmlStringBuilder.Append($"<p><strong>Customer Address:</strong> {customerAddress}</p>");
    htmlStringBuilder.Append($"<p><strong>Customer Phone:</strong> {customerPhone}</p>");
    htmlStringBuilder.Append("</div>");
    htmlStringBuilder.Append("<table><tr><th>Item ID</th><th>Description</th><th>Quantity</th><th>Unit Price</th><th>Total Price</th></tr>");
    foreach (DataGridViewRow row in invoiceDataGridView.Rows)
    {
        if (row.IsNewRow) continue; 
        htmlStringBuilder.Append("<tr>");
        htmlStringBuilder.Append($"<td>{row.Cells["itemIdColumn"].Value}</td>");
        htmlStringBuilder.Append($"<td>{row.Cells["descriptionColumn"].Value}</td>");
        htmlStringBuilder.Append($"<td>{row.Cells["quantityColumn"].Value}</td>");
        htmlStringBuilder.Append($"<td>{row.Cells["unitPriceColumn"].Value:C2}</td>");
        htmlStringBuilder.Append($"<td>{row.Cells["totalPriceColumn"].Value:C2}</td>");
        htmlStringBuilder.Append("</tr>");
    }
    htmlStringBuilder.Append("</table>");
    htmlStringBuilder.Append($"<h2>Total Amount: {lblTotalAmount.Text}</h2>");
    htmlStringBuilder.Append("</body></html>");
    var renderer = new IronPdf.ChromePdfRenderer();
    var pdfDocument = renderer.RenderHtmlAsPdf(htmlStringBuilder.ToString());
    string savePath = Path.Combine($"F:\\Invoice_{DateTime.Now:yyyyMMddHHmmss}.pdf");
    pdfDocument.SaveAs(savePath);
    MessageBox.Show("The invoice has been successfully saved to your desktop.", "Invoice Saved", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
$vbLabelText   $csharpLabel

Ausführen der Anwendung und Erstellen von Rechnungen

Sobald die Windows Forms-Anwendung entwickelt und die IronPDF-Bibliothek integriert ist, ist das Ausführen der Anwendung und die Erzeugung von PDF-Rechnungen ein einfacher Prozess. Der Benutzer interagiert mit der Benutzeroberfläche der Anwendung, um Daten einzugeben und das gewünschte Ergebnis zu erzeugen. So verläuft der Prozess typischerweise:

Start der Anwendung

Starten Sie die Anwendung, indem Sie sie innerhalb von Visual Studio ausführen oder die kompilierte ausführbare Datei (.exe) direkt aus der Windows-Umgebung heraus starten. Die Anwendung zeigt das Formular zur Interaktion durch den Benutzer an.

Rechnungsdaten eingeben

Geben Sie Kundendetails in die vorgesehenen Textfelder oben im Formular ein, einschließlich Kundenname, Adresse, E-Mail und Telefonnummer. Fügen Sie Rechnungsartikel hinzu, indem Sie die Felder 'Artikel-ID', 'Beschreibung', 'Menge' und 'Stückpreis' im Abschnitt 'Rechnungsposten hinzufügen' des Formulars ausfüllen.

Klicken Sie auf 'Artikel hinzufügen', um den Artikel zur Rechnungsliste hinzuzufügen. Die DataGridView wird aktualisiert, um den neuen Artikel, seine Details und den berechneten Gesamtpreis anzuzeigen. Wiederholen Sie den Vorgang, um alle erforderlichen Artikel zur Rechnung hinzuzufügen. Das 'Gesamtbetrag'-Label wird dynamisch aktualisiert, um die kumulative Gesamtsumme der aufgelisteten Artikel anzuzeigen.

.NET Software-Entwicklung (Wie es für Entwickler funktioniert): Abbildung 4 - Rechnungsdaten

Erstellung der PDF-Rechnung

Klicken Sie auf 'Rechnung erstellen', sobald alle Artikel hinzugefügt und die Kundeninformationen vollständig sind. Die Anwendung kompiliert die Daten in HTML-Format, stilisiert mit CSS. IronPDF übernimmt die Konvertierung der HTML-Zeichenfolge in ein PDF-Dokument. Es wird mit der Chrome-Engine gerendert, was hohe Treue zu modernen Webstandards gewährleistet.

Ansicht der erstellten Rechnung

Nach der PDF-Generierung speichert die Anwendung die PDF-Datei an einem angegebenen Speicherort, oft im selben Verzeichnis wie die Anwendung oder einem vom Benutzer festgelegten Pfad. Eine Erfolgsmeldung erscheint, um dem Benutzer mitzuteilen, dass die PDF-Rechnung erfolgreich gespeichert wurde. Benutzer können dann zum gespeicherten Ort navigieren, um die Rechnung anzusehen oder zu verteilen.

.NET Software-Entwicklung (Wie es für Entwickler funktioniert): Abbildung 5 - Dialog mit gespeicherter Rechnung

PDF-Ausgabe

Das Ausgabe-PDF zeigt die Kundeninformationen oben an, gefolgt von einer detaillierten Tabelle der gekauften Artikel, einschließlich Beschreibungen, Mengen und Preisen. Der Gesamtbetrag der Rechnung ist am Ende des Dokuments aufgeführt und weist klar auf den Betrag hin, den der Kunde zahlen muss. Das PDF ist so gestaltet, dass es sauber und professionell aussieht, indem der innerhalb des Codes definierte CSS genutzt wird, um sicherzustellen, dass die Rechnung sowohl funktional als auch ästhetisch ansprechend ist.

.NET Software-Entwicklung (Wie es für Entwickler funktioniert): Abbildung 6 - PDF-Ausgabe

Das Windows Forms-Projekt in eine ausführbare Datei umwandeln

Nach gründlichem Testen Ihrer Windows Forms-Anwendung und Sicherstellen, dass alle Funktionen wie Dateneingabe, PDF-Generierung und Ausgabe fehlerfrei arbeiten, ist die nächste Phase, Ihr Projekt in eine ausführbare Datei (.exe) zu packen. Dieser Umwandlungsprozess wird innerhalb des .NET Frameworks nahtlos durchgeführt, wodurch Ihre Anwendung bereit ist, auf Windows-Rechnern installiert und genutzt zu werden.

Hier ist ein Schritt-für-Schritt-Ansatz zum Erstellen der ausführbaren Datei:

  1. Erstellen der Anwendung: Gehen Sie zum Menü 'Build' und wählen Sie 'Build Solution'. Dies kompiliert den Code in Assemblies und führt notwendige Optimierungen durch.

.NET Software-Entwicklung (Wie es für Entwickler funktioniert): Abbildung 7 - Build-Lösung

  1. Lokalisieren der ausführbaren Datei: Sobald der Build abgeschlossen ist, navigieren Sie zum Ordner 'bin\Debug\net8.0' innerhalb Ihres Projektverzeichnisses. Hier finden Sie die .exe-Datei zusammen mit allen weiteren Abhängigkeiten, die zum Ausführen Ihrer Anwendung erforderlich sind.

.NET Software-Entwicklung (Wie es für Entwickler funktioniert): Abbildung 8 - Standort der ausführbaren Datei

  1. Testen der ausführbaren Datei: Es ist eine gute Praxis, die .exe-Datei auf einem anderen Rechner zu starten, um zu bestätigen, dass sie außerhalb Ihrer Entwicklungsumgebung korrekt funktioniert.
  2. Vorbereitung auf die Verteilung: Zur Verteilung können Sie die .exe-Datei direkt freigeben, wenn keine zusätzlichen Abhängigkeiten erforderlich sind. Für einen professionelleren Ansatz sollten Sie jedoch die Erstellung eines Installationsprogramms in Betracht ziehen, indem Sie ein Setup-Projekt in Visual Studio oder ein Drittanbieter-Installationspaket wie Inno Setup oder WiX Toolset verwenden. Ein Installationsprogramm kann den Installationsprozess verwalten, Verknüpfungen erstellen und andere Komplexitäten wie das Registrieren in der Windows-Registrierung handhaben, falls erforderlich.

Durch das Befolgen dieser Schritte wird Ihre Windows Forms-Anwendung in eine einzelne ausführbare Datei verdichtet, die bereit ist, geteilt und genutzt zu werden. Diese Umwandlung markiert das Ende des Entwicklungsprozesses und führt vom Projekt auf Ihrem Entwicklungsrechner zu verteilter Software, die effizient verteilt und in einer Vielzahl von Windows-Umgebungen installiert werden kann.

Abschluss

.NET Software-Entwicklung (Wie es für Entwickler funktioniert): Abbildung 9 - Lizenzierung

Abschließend stellt die Entwicklung einer Windows Forms-Anwendung zur Erstellung von PDF-Rechnungen mit IronPDF und dem .NET Framework eine praktische Anwendung von Prinzipien der Softwareentwicklung dar. Dieses Projekt demonstriert nicht nur die Vielseitigkeit und Leistungsfähigkeit des .NET-Ökosystems, sondern auch, wie Entwickler Drittanbieter-Bibliotheken wie IronPDF integrieren können, um Funktionalitäten zu erweitern und spezifische geschäftliche Anforderungen zu erfüllen.

Durch das Befolgen der beschriebenen Schritte, vom Einrichten der Benutzeroberfläche über die Implementierung der PDF-Generierung bis hin zur Verpackung der Anwendung in eine ausführbare Datei, können Entwickler eine funktionale, benutzerfreundliche Anwendung erstellen. Dieser Prozess betont die Bedeutung der Kombination robuster Programmier-Frameworks mit innovativen Bibliotheken zur Lösung realer Probleme, was letztlich zu einem Produkt führt, das sowohl effektiv als auch effizient ist.

IronPDF bietet großzügig eine kostenlose Testversion für PDF-Erstellungsfunktionen für Entwickler an, um dessen Funktionen zu erkunden und zu bestimmen, wie es am besten ihren Bedürfnissen entspricht. Sobald Sie die Vorteile erlebt haben und bereit sind, IronPDF in Ihr Produktionsumfeld zu integrieren, beginnen die Lizenzen bei erschwinglichen Preisoptionen.

Häufig gestellte Fragen

Wie kann ich HTML in PDF in C# konvertieren?

Sie können die RenderHtmlAsPdf-Methode von IronPDF verwenden, um HTML-Strings in PDFs zu konvertieren. Sie können auch HTML-Dateien mit RenderHtmlFileAsPdf in PDFs konvertieren.

Welche Vorteile bietet die Verwendung von .NET Core für die plattformübergreifende Entwicklung?

.NET Core ermöglicht es, Anwendungen auf mehreren Plattformen wie Linux, macOS und Windows auszuführen, was es zu einer vielseitigen Wahl für Entwickler macht, die ein breiteres Publikum mit einer einzigen Codebasis erreichen möchten.

Wie kann ich PDFs aus einer Windows Form-Anwendung generieren?

Mit IronPDF können Sie PDFs aus einer Windows Form-Anwendung generieren, indem Sie die Bibliothek in Ihr Projekt integrieren und deren Methoden nutzen, um Formulardaten oder HTML-Inhalte in PDF-Dokumente umzuwandeln.

Was macht .NET zu einem idealen Framework für den Aufbau von Webanwendungen?

.NET und insbesondere ASP.NET bieten ein robustes Framework für die Erstellung dynamischer und skalierbarer Webanwendungen. Es bietet integrierte Tools für serverseitige Skripterstellung, Authentifizierung, Datenverarbeitung und mehr.

Wie kann ich meine .NET-Anwendung mit Dokumentenerstellungsfunktionen erweitern?

Die Integration einer Bibliothek wie IronPDF in Ihre .NET-Anwendung kann ihre Dokumentenerstellungsfähigkeiten erheblich verbessern und es Ihnen ermöglichen, PDF-Dateien direkt in Ihrer App zu erstellen, zu bearbeiten und zu verwalten.

Kann .NET für die Entwicklung mobiler Anwendungen verwendet werden?

Ja, .NET unterstützt die Entwicklung mobiler Anwendungen über das Xamarin-Framework, das jetzt Teil von .NET MAUI ist. Dadurch können plattformübergreifende mobile Apps mit nativer Leistung auf iOS, Android und Windows erstellt werden.

Was ist die Bedeutung der Common Language Runtime (CLR) in .NET?

Die Common Language Runtime (CLR) ist entscheidend in .NET, da sie die Ausführung von Programmen verwaltet, indem sie den kompilierten Code in nativen Maschinencode umwandelt und so die Kompatibilität mit verschiedenen Betriebssystemen gewährleistet.

Wie kann ich PDF-Erstellung in mein .NET-Projekt mit NuGet integrieren?

Sie können die PDF-Erstellung in Ihr .NET-Projekt integrieren, indem Sie mit NuGet eine Bibliothek wie IronPDF installieren. Dies macht das Hinzufügen von PDF-Funktionen bequem und unkompliziert in Visual Studio.

Welche Schritte sind erforderlich, um einen PDF-Rechnungsgenerator mit Windows Forms zu erstellen?

Der Prozess umfasst das Einrichten eines Windows Forms-Projekts, das Gestalten der Benutzeroberfläche, das Hinzufügen der erforderlichen Bibliotheken über NuGet, die Implementierung der Logik für die Dateneingabe und Rechnungserstellung und die Verwendung von IronPDF, um Rechnungsdetails in ein PDF umzuwandeln.

Jacob Mellor, Chief Technology Officer @ Team Iron
Chief Technology Officer

Jacob Mellor ist Chief Technology Officer bei Iron Software und ein visionärer Ingenieur, der führend in der C# PDF-Technologie ist. Als ursprünglicher Entwickler der Iron Software-Kerncodebasis hat er die Produktarchitektur des Unternehmens seit seiner Gründung gestaltet und zusammen mit CEO Cameron Rimington in ein Unternehmen ...

Weiterlesen