Test dans un environnement réel
Test en production sans filigrane.
Fonctionne partout où vous en avez besoin.
développement de logiciels avec le Framework .NET représente un cadre puissant et polyvalent soutenu par Microsoft qui permet aux développeurs .NET de créer des applications robustes et de haute qualité couvrant diverses plateformes, systèmes d'exploitation et appareils. Ce framework de développement logiciel est conçu pour être complet, fournissant des outils, des bibliothèques et des API que les développeurs de logiciels peuvent utiliser pour créer efficacement des applications web, de bureau et mobiles dans la plateforme .NET.
Grâce à la prise en charge de plusieurs langages de programmation, notamment C#, Visual Basic et F#, le développement .NET étend sa flexibilité aux développeurs, leur garantissant de pouvoir travailler dans leur langage préféré tout en bénéficiant des riches fonctionnalités de l'écosystème .NET Core. Dans ce tutoriel, nous verrons IronPDF en action pour démontrer le développement .NET dans le cadre de la résolution d'un problème réel.
L'écosystème .NET, une mise en œuvre clé de .NET, est une plateforme large et englobante qui comprend divers composants et technologies conçus pour faciliter le développement d'applications sur différents systèmes d'exploitation. À la base, le .NET Framework et le .NET Core servent de moteurs principaux pour l'exécution des applications .NET, en fournissant un moteur d'exécution de langage commun (CLR) qui gère l'exécution du code et offre des services tels que la gestion de la mémoire, la sécurité des types, la gestion des exceptions, etc.
Le CLR est un élément crucial de l'architecture .NET, permettant l'exécution du code .NET sur différents systèmes d'exploitation. Il compile le langage intermédiaire commun (CIL) en code machine natif que la machine hôte peut directement exécuter. Ce processus garantit que les applications .NET peuvent fonctionner de manière transparente sur différentes plateformes, des principaux systèmes d'exploitation mobiles aux serveurs web Windows.
.NET Core apparaît comme un framework multiplateforme, permettant aux applications .NET de s'exécuter sur Linux, macOS et Windows. Cette adaptabilité fait de .NET un choix intéressant pour les développeurs qui souhaitent toucher un public plus large sur différents appareils et plateformes. Avec .NET Core, les applications peuvent être développées et déployées sur n'importe quel système d'exploitation pris en charge, ce qui renforce la portée et la flexibilité du développement de logiciels .NET, soutenu par la vaste communauté .NET.
Visual Studio est le premier environnement de développement intégré (L'IDE) pour le développement .NET. Il fournit aux développeurs des outils puissants pour l'écriture de code, le débogage et le déploiement d'applications .NET. Visual Studio prend en charge différents langages de programmation et offre un large éventail de fonctionnalités pour la création d'applications web, bureautiques et mobiles, ce qui en fait un outil indispensable pour les développeurs .NET.
La création d'applications sur la plateforme .NET implique de tirer parti d'un large éventail d'outils, de bibliothèques et de langages de programmation offerts par le framework, tels que Visual Basic, qui met en évidence son écosystème complet. Cette polyvalence permet aux développeurs de logiciels de créer différents types d'applications .NET, des applications web et de bureau aux solutions mobiles et basées sur le cloud.
ASP.NET, élément clé du Framework .NET, est spécialement conçu pour la création de pages web et d'applications dynamiques. Il permet aux développeurs de créer des applications web réactives et évolutives capables de gérer d'importants volumes de trafic. ASP.NET Core, la version open-source d'ASP.NET, apporte des fonctionnalités supplémentaires pour la création d'applications web multiplateformes, ce qui permet de développer et de déployer des applications web sur Windows, Linux et macOS.
.NET propose deux approches principales pour créer des applications de bureau : Windows Forms et Windows Presentation Foundation (WPF). Windows Forms offre un moyen simple de créer des applications de bureau avec une interface utilisateur graphique riche, tandis que WPF utilise XAML (Langage de balisage d'application extensible) pour permettre le développement d'interfaces utilisateur visuellement attrayantes avec des graphiques et des animations avancés.
Pour le développement mobile, .NET étend sa portée aux principaux systèmes d'exploitation mobiles grâce au framework Xamarin, désormais intégré à .NET sous le nom de .NET MAUI (L'interface utilisateur des applications multiplateformes). Cette approche permet aux développeurs de réutiliser le code entre iOS, Android et Windows, ce qui simplifie le processus de création d'applications mobiles offrant des performances et une expérience utilisateur natives.
.NET est également bien adapté au développement d'applications fonctionnant dans le nuage. Grâce à la prise en charge d'Azure et d'autres plateformes en nuage, les développeurs peuvent créer des applications évolutives et distribuées qui tirent parti des ressources informatiques en nuage. ASP.NET Core joue un rôle important dans le développement de microservices, en offrant des services légers, modulaires et déployables de manière indépendante, qui peuvent évoluer au sein d'environnements cloud.
L'écosystème .NET englobe ML.NET, un framework d'apprentissage automatique qui permet aux développeurs d'incorporer des modèles d'apprentissage automatique personnalisés dans leurs applications .NET. Cette intégration ouvre des possibilités de création d'applications intelligentes capables d'analyses prédictives, de traitement du langage naturel et bien plus encore, en tirant parti de la puissance de l'IA au sein du Framework .NET.
Dans l'écosystème dynamique du développement de logiciels .NET, la possibilité de générer, de manipuler et de gérer des documents PDF directement dans les applications présente un avantage considérable. IronPDF, une bibliothèque robuste conçue pour les développeurs .NET, s'intègre parfaitement dans cet environnement, offrant un moyen efficace de créer des PDF à partir d'applications .NET, y compris celles construites avec Windows Forms.
IronPDF témoigne de la souplesse et de la puissance de l'écosystème .NET, en fournissant aux développeurs une API intuitive pour générer des documents PDF à partir de HTM L, des images, du texte et même des pages web ASP.NET. Cette capacité est particulièrement utile dans les scénarios nécessitant la création dynamique de documents, tels que la génération de factures, de rapports ou de documents personnalisés dans les applications de bureau.
Une application Windows Form de génération de factures illustre l'application pratique du développement de logiciels .NET combiné à IronPDF. Cette application permet aux utilisateurs de saisir des détails tels que les informations sur les clients, les articles achetés et les prix, puis de générer une facture professionnelle au format PDF en un seul clic.
Commencez par créer un nouveau projet Windows Forms dans Visual Studio. Il s'agit de votre base, où vous concevrez l'interface utilisateur de votre générateur de factures. Concevez votre formulaire de manière à inclure les champs de saisie nécessaires pour les détails relatifs au client et à l'article, ainsi qu'un bouton permettant de générer le PDF. Il s'agit de l'interface utilisateur de notre générateur de factures :
L'interface utilisateur de l'application Windows Forms est méticuleusement conçue pour garantir la facilité d'utilisation et la fonctionnalité. La fenêtre principale, intitulée "Générateur de factures", est divisée en différentes sections pour une expérience utilisateur transparente.
En haut, le formulaire comprend des champs pour le "nom du client", l'"adresse du client", l'"adresse électronique du client" et le "numéro de téléphone du client" Cette zone est consacrée à la saisie des informations essentielles sur le client qui figureront en bonne place sur la facture générée.
Juste en dessous des informations sur le client, il y a une zone intitulée "Ajouter un article à la facture" Les utilisateurs peuvent y saisir les détails de chaque article, tels que l'"ID de l'article", la "Description", la "Quantité" et le "Prix unitaire" Un bouton "Ajouter un article" se trouve à côté de ces champs, ce qui permet aux utilisateurs d'ajouter l'article saisi à la liste de factures ci-dessous.
La partie centrale du formulaire comporte la section "Informations sur la facture", qui affiche un tableau dans lequel les éléments saisis apparaissent au fur et à mesure qu'ils sont ajoutés. Les colonnes du tableau comprennent "ID de l'article", "Description", "Quantité", "Prix unitaire" et "Prix total", la dernière colonne étant automatiquement calculée sur la base de la quantité et du prix unitaire. Un sélecteur de date intitulé "Select Date" permet à l'utilisateur de spécifier la date de la facture, ce qui renforce la spécificité du document.
Au bas du formulaire, une étiquette affiche le "montant total", qui se met à jour dynamiquement au fur et à mesure que des éléments sont ajoutés ou supprimés. Les utilisateurs disposent ainsi en temps réel du montant total de la facture. En outre, un bouton "Générer une facture" invite l'application à utiliser la bibliothèque IronPDF pour créer une version PDF de la facture sur la base des données saisies.
Cette interface utilisateur est non seulement fonctionnelle mais aussi intuitive, ce qui permet aux utilisateurs d'interagir facilement avec l'application sans avoir à suivre une courbe d'apprentissage abrupte. Il est conçu pour contenir toutes les informations nécessaires à la génération de factures, tout en offrant un chemin clair et direct de la saisie des données à la création du PDF.
Une fois votre projet mis en place, l'étape suivante consiste à intégrer IronPDF. Cela se fait par le biais de NuGet, le gestionnaire de paquets intégré à Visual Studio, qui vous permet d'ajouter IronPDF à votre projet sans effort. Écrivez la commande suivante et exécutez-la :
Install-Package IronPdf
Cette commande installera IronPDF et sera disponible pour être utilisé dans notre projet.
Le cœur de l'application Windows Forms est sa capacité à traiter les entrées de l'utilisateur, à organiser les données dans un format structuré et à produire un document tangible - dans ce cas, une facture au format PDF. La fonctionnalité est construite sur une série d'étapes méthodiques dans la base de code de l'application.
Lors de l'initialisation du formulaire, l'application appelle SetupDataGridViewColumns pour établir la structure de données dans laquelle les factures seront affichées. Des colonnes sont créées pour l'ID de l'article, la description, la quantité, le prix unitaire et le prix total, le prix total étant un champ en lecture seule car il est calculé automatiquement. En outre, une colonne de boutons permettant de supprimer des éléments a été ajoutée, ce qui renforce le contrôle de l'utilisateur sur le contenu de la facture.
private void SetupDataGridViewColumns()
{
invoiceDataGridView.Columns.Clear(); // Clear existing columns if any
// Now add the rest of your columns
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; // This will 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
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
// Now add the rest of your columns
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; // This will 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
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 Sub SetupDataGridViewColumns()
invoiceDataGridView.Columns.Clear() ' Clear existing columns if any
' Now add the rest of your columns
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
Dim deleteButtonColumn As New DataGridViewButtonColumn()
deleteButtonColumn.HeaderText = ""
deleteButtonColumn.Name = "deleteButtonColumn"
deleteButtonColumn.Text = "Delete"
deleteButtonColumn.UseColumnTextForButtonValue = True ' This will set the button text to "Delete"
' Add the delete button column to the DataGridView
invoiceDataGridView.Columns.Add(deleteButtonColumn)
End Sub
'INSTANT VB WARNING: The following constructor is declared outside of its associated class:
'ORIGINAL LINE: public Form1()
Public Sub New()
InitializeComponent()
SetupDataGridViewColumns()
' Wire up the CellClick event to a handler
AddHandler invoiceDataGridView.CellClick, AddressOf invoiceDataGridView_CellClick
End Sub
Private Sub invoiceDataGridView_CellClick(ByVal sender As Object, ByVal e As DataGridViewCellEventArgs)
' If the clicked cell is part of the button column and not the header row
If e.ColumnIndex = invoiceDataGridView.Columns ("deleteButtonColumn").Index AndAlso e.RowIndex >= 0 Then
' Confirm delete operation
If MessageBox.Show("Are you sure you want to delete this item?", "Confirm Delete", MessageBoxButtons.YesNo, MessageBoxIcon.Question) = DialogResult.Yes Then
' Remove the row from the DataGridView
invoiceDataGridView.Rows.RemoveAt(e.RowIndex)
End If
End If
End Sub
Lorsqu'un utilisateur saisit les détails d'un article et clique sur "Ajouter un article", l'événement btnAddItem_Click recueille les données saisies, les valide, puis appelle AddItemToInvoice. Cette méthode ajoute une nouvelle ligne au DataGridView avec les valeurs saisies, en calculant le prix total de l'article et en mettant à jour le montant total de la facture affiché au bas du formulaire.
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);
}
lblTotalAmount.Text = $"{totalAmount:C2}"; // Assuming 'lblTotalAmount' is the name of your Label control
}
private void btnAddItem_Click(object sender, EventArgs e)
{
// Assuming your text boxes and numeric up/down controls have the following names:
// txtItemID, txtDescription, txtUnitPrice, and numericUpDownQuantity
// Collect data from input controls
string itemId = txtItemID.Text;
string description = txtDescription.Text;
int quantity = (int)numericUpDownQuantity.Value;
decimal unitPrice;
// Validate the collected data
// Check if the unit price is a valid decimal
bool isUnitPriceValid = decimal.TryParse(txtUnitPrice.Text, out unitPrice);
// Additional validation can be implemented as needed
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);
// Optionally, clear the input fields after adding the item to the grid
txtItemID.Clear();
txtDescription.Clear();
txtUnitPrice.Clear();
numericUpDownQuantity.Value = 0; // or numericUpDownQuantity.Minimum if 0 is not allowed
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);
}
lblTotalAmount.Text = $"{totalAmount:C2}"; // Assuming 'lblTotalAmount' is the name of your Label control
}
private void btnAddItem_Click(object sender, EventArgs e)
{
// Assuming your text boxes and numeric up/down controls have the following names:
// txtItemID, txtDescription, txtUnitPrice, and numericUpDownQuantity
// Collect data from input controls
string itemId = txtItemID.Text;
string description = txtDescription.Text;
int quantity = (int)numericUpDownQuantity.Value;
decimal unitPrice;
// Validate the collected data
// Check if the unit price is a valid decimal
bool isUnitPriceValid = decimal.TryParse(txtUnitPrice.Text, out unitPrice);
// Additional validation can be implemented as needed
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);
// Optionally, clear the input fields after adding the item to the grid
txtItemID.Clear();
txtDescription.Clear();
txtUnitPrice.Clear();
numericUpDownQuantity.Value = 0; // or numericUpDownQuantity.Minimum if 0 is not allowed
CalculateTotalAmount();
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
En cliquant sur "Generate Invoice", l'application exécute le gestionnaire d'événement btnInvoice_Click, où elle construit une chaîne HTML à l'aide d'un StringBuilder. Cette chaîne comprend les coordonnées du client et un tableau HTML stylisé alimenté par les éléments de la facture provenant de la grille de données (DataGridView). Le moteur de rendu d'IronPDF convertit ensuite ce HTML en un document PDF, qui est enregistré dans un chemin d'accès spécifié. L'application confirme la création de la facture en envoyant un message à l'utilisateur.
private void btnInvoice_Click(object sender, EventArgs e)
{
IronPdf.License.LicenseKey = "License-Key";
// Collect customer information
var customerName = txtName.Text; // Adjusted to your actual TextBox names
var customerEmail = txtEmail.Text;
var customerAddress = txtAddress.Text;
var customerPhone = txtPhone.Text;
// Start building the HTML content for the invoice
var htmlStringBuilder = new StringBuilder();
htmlStringBuilder.Append("<html>");
htmlStringBuilder.Append("<head>");
htmlStringBuilder.Append("<title>Invoice</title>");
// Add some basic CSS styles for the invoice
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 {
font-family: 'Helvetica', 'Arial', sans-serif;
line-height: 1.6;
margin-bottom: 20px;
}
.customer-info p {
margin: 0 0 10px 0;
color: #333;
}
.customer-info label {
font-weight: bold;
}
</style>");
// You can add style tags here for styling your PDF content
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>");
// Add the invoice items
htmlStringBuilder.Append("<table border='1'><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; // Skip the new row placeholder
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>");
// Add the total amount
htmlStringBuilder.Append($"<h2>Total Amount: {lblTotalAmount.Text}</h2>");
// Close the HTML string
htmlStringBuilder.Append("</body></html>");
// Use IronPDF to convert the HTML string to a PDF document
var renderer = new IronPdf.ChromePdfRenderer();
var pdfDocument = renderer.RenderHtmlAsPdf(htmlStringBuilder.ToString());
// Save the PDF to a file
string savePath = Path.Combine($"F:\\Invoice_{DateTime.Now:yyyyMMddHHmmss}.pdf"); // to avoid file name conflicts and save to desktop
pdfDocument.SaveAs(savePath);
// Show a success dialog
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 = "License-Key";
// Collect customer information
var customerName = txtName.Text; // Adjusted to your actual TextBox names
var customerEmail = txtEmail.Text;
var customerAddress = txtAddress.Text;
var customerPhone = txtPhone.Text;
// Start building the HTML content for the invoice
var htmlStringBuilder = new StringBuilder();
htmlStringBuilder.Append("<html>");
htmlStringBuilder.Append("<head>");
htmlStringBuilder.Append("<title>Invoice</title>");
// Add some basic CSS styles for the invoice
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 {
font-family: 'Helvetica', 'Arial', sans-serif;
line-height: 1.6;
margin-bottom: 20px;
}
.customer-info p {
margin: 0 0 10px 0;
color: #333;
}
.customer-info label {
font-weight: bold;
}
</style>");
// You can add style tags here for styling your PDF content
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>");
// Add the invoice items
htmlStringBuilder.Append("<table border='1'><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; // Skip the new row placeholder
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>");
// Add the total amount
htmlStringBuilder.Append($"<h2>Total Amount: {lblTotalAmount.Text}</h2>");
// Close the HTML string
htmlStringBuilder.Append("</body></html>");
// Use IronPDF to convert the HTML string to a PDF document
var renderer = new IronPdf.ChromePdfRenderer();
var pdfDocument = renderer.RenderHtmlAsPdf(htmlStringBuilder.ToString());
// Save the PDF to a file
string savePath = Path.Combine($"F:\\Invoice_{DateTime.Now:yyyyMMddHHmmss}.pdf"); // to avoid file name conflicts and save to desktop
pdfDocument.SaveAs(savePath);
// Show a success dialog
MessageBox.Show("The invoice has been successfully saved to your desktop.", "Invoice Saved", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
Private Sub btnInvoice_Click(ByVal sender As Object, ByVal e As EventArgs)
IronPdf.License.LicenseKey = "License-Key"
' Collect customer information
Dim customerName = txtName.Text ' Adjusted to your actual TextBox names
Dim customerEmail = txtEmail.Text
Dim customerAddress = txtAddress.Text
Dim customerPhone = txtPhone.Text
' Start building the HTML content for the invoice
Dim htmlStringBuilder = New StringBuilder()
htmlStringBuilder.Append("<html>")
htmlStringBuilder.Append("<head>")
htmlStringBuilder.Append("<title>Invoice</title>")
' Add some basic CSS styles for the invoice
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 {
font-family: 'Helvetica', 'Arial', sans-serif;
line-height: 1.6;
margin-bottom: 20px;
}
.customer-info p {
margin: 0 0 10px 0;
color: #333;
}
.customer-info label {
font-weight: bold;
}
</style>")
' You can add style tags here for styling your PDF content
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>")
' Add the invoice items
htmlStringBuilder.Append("<table border='1'><tr><th>Item ID</th><th>Description</th><th>Quantity</th><th>Unit Price</th><th>Total Price</th></tr>")
For Each row As DataGridViewRow In invoiceDataGridView.Rows
If row.IsNewRow Then
Continue For ' Skip the new row placeholder
End If
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>")
Next row
htmlStringBuilder.Append("</table>")
' Add the total amount
htmlStringBuilder.Append($"<h2>Total Amount: {lblTotalAmount.Text}</h2>")
' Close the HTML string
htmlStringBuilder.Append("</body></html>")
' Use IronPDF to convert the HTML string to a PDF document
Dim renderer = New IronPdf.ChromePdfRenderer()
Dim pdfDocument = renderer.RenderHtmlAsPdf(htmlStringBuilder.ToString())
' Save the PDF to a file
Dim savePath As String = Path.Combine($"F:\Invoice_{DateTime.Now:yyyyMMddHHmmss}.pdf") ' to avoid file name conflicts and save to desktop
pdfDocument.SaveAs(savePath)
' Show a success dialog
MessageBox.Show("The invoice has been successfully saved to your desktop.", "Invoice Saved", MessageBoxButtons.OK, MessageBoxIcon.Information)
End Sub
Une fois l'application Windows Forms développée et la bibliothèque IronPDF intégrée, l'exécution de l'application et la génération de factures au format PDF sont des opérations simples. L'utilisateur interagit avec l'interface utilisateur de l'application pour saisir des données et produire le résultat souhaité. Voici comment se déroule généralement le processus :
Démarrer l'application en l'exécutant dans Visual Studio ou en exécutant le fichier exécutable compilé (.exe) directement à partir de l'environnement Windows. L'affichage du formulaire de l'application, prêt à être utilisé par l'utilisateur.
Saisissez les coordonnées du client dans les zones de texte prévues à cet effet en haut du formulaire, y compris son nom, son adresse, son adresse électronique et son numéro de téléphone. Ajoutez des éléments de facture en remplissant les champs "ID de l'élément", "Description", "Quantité" et "Prix unitaire" situés dans la section "Ajouter un élément de facture" du formulaire.
Cliquez sur "Ajouter un article " pour inclure l'article dans la liste des factures. Le DataGridView se met à jour et affiche le nouvel article, ses détails et le prix total calculé. Répétez le processus pour ajouter tous les articles nécessaires à la facture. L'étiquette "Montant total" sera dynamiquement mise à jour pour refléter le total cumulé des articles listés.
Cliquez sur "Générer une facture " une fois que tous les articles ont été ajoutés et que les informations sur le client sont complètes. L'application compilera les données au format HTML, stylisé avec CSS. IronPDF prend le relais pour convertir la chaîne HTML en un document PDF. Il est rendu avec le moteur Chrome, ce qui garantit une grande fidélité aux normes web modernes.
Après la génération du PDF, l'application enregistre le fichier PDF à un emplacement spécifié, souvent dans le même répertoire que l'application ou dans un chemin défini par l'utilisateur. Un message de réussite apparaît pour informer l'utilisateur que la facture PDF a été enregistrée avec succès. Les utilisateurs peuvent ensuite se rendre à l'emplacement sauvegardé pour consulter ou distribuer la facture.
Le produit PDF affiche les informations du client en haut de page, suivies d'un tableau détaillé des articles achetés, y compris les descriptions, les quantités et les prix. Le montant total de la facture figure à la fin du document, indiquant clairement le montant que le client doit payer. Le PDF est stylisé pour être propre et professionnel, en utilisant le CSS défini dans le code pour s'assurer que la facture n'est pas seulement fonctionnelle mais aussi esthétique.
Après avoir testé minutieusement votre application Windows Forms et vous être assuré que toutes les fonctionnalités telles que l'entrée de données, la génération de PDF et la sortie fonctionnent parfaitement, la phase suivante consiste à emballer votre projet dans un exécutable (.exe) . Ce processus de conversion est rationalisé au sein du Framework .NET, ce qui garantit que votre application est prête à être installée et utilisée sur des machines Windows.
Voici une approche étape par étape de la création de l'exécutable :
Construire l'application: Allez dans le menu "Construire" et choisissez "Construire la solution" Cette opération permet de compiler le code en assemblages et d'effectuer les optimisations nécessaires.
Localiser l'exécutable: Une fois la compilation terminée, naviguez jusqu'au dossier 'bin\Debug\net8.0' à l'intérieur du répertoire de votre projet. Vous y trouverez le fichier .exe ainsi que toutes les autres dépendances nécessaires à l'exécution de votre application.
Préparation de la distribution: Pour la distribution, vous pouvez partager directement le fichier .exe si aucune dépendance supplémentaire n'est nécessaire. Cependant, pour une approche plus professionnelle, envisagez de créer un programme d'installation à l'aide d'un projet d'installation dans Visual Studio ou d'un programme d'installation tiers comme Inno Setup ou WiX Toolset. Un programme d'installation peut gérer le processus d'installation, créer des raccourcis et gérer d'autres aspects complexes tels que l'enregistrement dans le registre Windows si nécessaire.
En suivant ces étapes, votre application Windows Forms est condensée en un seul fichier exécutable, prêt à être partagé et utilisé. Cette conversion marque l'aboutissement du processus de développement, en passant d'un projet sur votre machine de développement à un logiciel déployable qui peut être distribué et installé efficacement dans une multitude d'environnements Windows.
En conclusion, le développement d'une application Windows Forms pour la génération de factures PDF à l'aide d'IronPDF et du Framework .NET est un exemple d'application pratique des principes de développement de logiciels. Ce projet illustre non seulement la polyvalence et la puissance de l'écosystème .NET, mais aussi la manière dont les développeurs peuvent intégrer des bibliothèques tierces comme IronPDF pour étendre les fonctionnalités et répondre aux besoins spécifiques des entreprises.
En suivant les étapes décrites, de la configuration de l'interface utilisateur à la mise en œuvre de la génération de PDF et à l'intégration de l'application dans un exécutable, les développeurs peuvent créer une application fonctionnelle et conviviale. Ce processus met en évidence l'importance de combiner des cadres de programmation robustes avec des bibliothèques innovantes pour résoudre des problèmes concrets, afin de fournir un produit à la fois efficace et efficient.
IronPDF fournit généreusement une essai gratuit pour que les développeurs explorent ses fonctionnalités et déterminent dans quelle mesure il répond à leurs besoins. Une fois que vous avez expérimenté les avantages et que vous êtes prêt à intégrer IronPDF dans votre environnement de production, les licences commencent à partir de $749.
9 produits de l'API .NET pour vos documents de bureau