Passer au contenu du pied de page
COMPARAISONS DE PRODUITS

Une Comparaison Entre CraftMyPDF & IronPDF

PDF, ou Portable Document Format, est un format de fichier développé par Adobe pour un échange de documents facile. Il garantit que les documents ont le même aspect sur n'importe quel appareil, préservant la mise en forme, les polices et les images. Les PDFs sont sécurisés, interactifs et compacts, ce qui les rend parfaits pour le partage tout en conservant le contenu intact.

Les bibliothèques de PDF en C# sont essentielles pour les développeurs travaillant avec des PDFs. Ces outils aident à créer, modifier et extraire du contenu des PDFs. Ils prennent en charge des fonctionnalités telles que la gestion des formulaires, les signatures numériques et fonctionnent sur différentes plateformes, améliorant l'efficacité du traitement des PDFs. Avec les bibliothèques de PDF en C#, les développeurs peuvent ajouter des fonctionnalités PDF à leurs applications, facilitant la création, la modification et la gestion des documents PDF de manière programmatique.

In this article, we will compare two different approaches to working with PDFs: the IronPDF C# library and the Craftmypdf API. Nous examinerons leurs fonctionnalités, fournirons des exemples de code et discuterons de leurs licences.

1. Solution de Base API CraftMyPDF

Une comparaison entre CraftMyPDF & IronPDF: Figure 1 - page d'accueil de la solution de base API CraftMyPDF

CraftMyPDF est une API polyvalente conçue pour créer des documents PDF. Elle propose un éditeur web de type glisser-déposer, vous permettant de concevoir des modèles PDF directement dans votre navigateur. Cette fonctionnalité est particulièrement utile pour créer des PDFs parfaits en pixels à partir de modèles réutilisables et de données JSON. L'éditeur inclut un riche ensemble de composants de mise en page, pris en charge par des expressions puissantes, une mise en forme avancée et la liaison de données, ce qui en fait un outil robuste pour divers besoins de génération de PDFs.

1.1 Caractéristiques clés de CraftMyPDF

  1. Éditeur de type glisser-déposer : L'éditeur intuitif de CraftMyPDF simplifie la création de modèles PDF. Vous pouvez concevoir des modèles sans aucune connaissance en codage, ce qui le rend accessible aux utilisateurs de tous niveaux. Cet éditeur vous permet d'ajouter divers éléments tels que texte, images et formes, et de personnaliser leur mise en page et apparence.

  2. Réutilisation des modèles : La plateforme supporte les modèles réutilisables, pouvant être un énorme gain de temps. Une fois un modèle conçu, il peut être utilisé à plusieurs reprises avec différents ensembles de données, le rendant idéal pour générer des documents tels que des factures, rapports et certificats. Vous pouvez le modifier à l'aide de l'éditeur de modèles PDF.

  3. Intégration des données JSON : CraftMyPDF permet une intégration transparente avec les données JSON. Cela signifie que vous pouvez injecter des données dynamiques dans vos modèles pour générer des documents PDF personnalisés. Cette fonctionnalité est particulièrement utile pour les applications nécessitant de produire des documents avec un contenu variable, tels que des factures personnalisées ou des rapports détaillés.

  4. Mise en forme et expressions avancées : L'API supporte les options de mise en forme avancées et les expressions permettant de créer des documents complexes. Vous pouvez formater des dates, nombres et devises selon vos spécifications et utiliser des expressions pour générer dynamiquement du contenu basé sur vos données.

  5. Intégrations API : CraftMyPDF peut être intégré à diverses plateformes en utilisant son API REST. Elle supporte l'intégration avec des plateformes sans code comme Zapier et Make.com, ainsi que des applications personnalisées. Cette flexibilité permet aux développeurs d'incorporer des capacités de génération PDF dans leurs flux de travail et d'automatiser les processus de création de documents.

  6. Composants remplissables : La plateforme supporte également des composants PDF remplissables tels que champs de texte, cases à cocher et listes déroulantes. Cette fonctionnalité est essentielle pour créer des formulaires interactifs que les utilisateurs peuvent remplir électroniquement.

  7. Sécurité et conformité : CraftMyPDF assure un accès sécurisé aux PDFs générés et prend en charge les points d'extrémité API régionaux, conformes aux régulations de protection des données telles que GDPR. Cet accent sur la sécurité en fait un choix fiable pour traiter des documents sensibles.

2. Introduction à IronPDF

IronPDF, bibliothèque PDF pour développeurs .NET, est une bibliothèque PDF robuste et polyvalente conçue pour les développeurs .NET, fournissant d'importantes capacités pour créer, éditer et gérer des documents PDF. Écrit en C#, IronPDF simplifie le processus de travail avec des PDFs en permettant aux développeurs de générer des documents PDF parfaits en pixels à partir de HTML, CSS, JavaScript et formats d'image. Son intégration avec .NET en fait un outil puissant pour toute application nécessitant la fonctionnalité PDF, de la génération simple de fichiers à la manipulation complexe de documents.

2.1 Fonctionnalités clés de IronPDF

  1. Conversion HTML en PDF : IronPDF excelle dans les conversions directes de HTML, CSS et JavaScript en documents PDF. Cela inclut la prise en charge des HTML5 et CSS3, garantissant que votre contenu web apparaît comme prévu dans les PDFs générés. Le processus de conversion maintient une précision pixel-perfect, ce qui le rend idéal pour les applications web-to-print.

  2. URL en PDF : Vous pouvez générer des PDFs à partir de n'importe quelle URL, permettant aux pages web d'être enregistrées en tant que fichiers PDF avec facilité. Cette fonctionnalité est utile pour archiver du contenu web ou générer des rapports à partir de données en ligne.

  3. Image en PDF : IronPDF supporte la conversion de divers formats d'image, y compris JPG, PNG, GIF, BMP et SVG, en documents PDF. Cette fonctionnalité est pratique pour créer des livres photos, galeries d'images, ou intégrer du contenu visuel dans vos PDFs.

  4. Remplissage de formulaires et extraction de données : La bibliothèque permet la création remplissage programmatique de formulaires PDF. De plus, vous pouvez extraire des données de formulaires existants, permettant un traitement de données fluide et l'intégration avec d'autres systèmes.

  5. Signatures numériques et sécurité : IronPDF fournit des fonctionnalités de sécurité robustes, y compris la capacité d'ajouter signatures numériques, définir des mots de passe et définir des permissions utilisateurs. Cela garantit que vos documents PDF sont sécurisés et conformes aux normes de l'industrie.

  6. Édition PDF : Vous pouvez éditer des documents PDF existants en ajoutant, copiant ou supprimant des pages. Importer des fichiers PDF existants. IronPDF permet également la fusion et la division de PDFs, en faisant un outil complet pour la gestion de documents.

  7. Annotations et pièces jointes : IronPDF supporte l'ajout d'annotations comme les post-its, et l'embedding de pièces jointes dans les documents PDF. Cette fonctionnalité est utile pour des révisions documentaires collaboratives et l'ajout d'informations supplémentaires.

  8. En-têtes, pieds de page et filigranes : La bibliothèque permet d'ajouter des en-têtes, pieds de page et filigranes personnalisés à vos documents PDF. Ces éléments peuvent être générés à partir de HTML, fournissant une flexibilité dans la conception et la gestion de contenu.

  9. Compatibilité multiplateforme : IronPDF fonctionne parfaitement sur diverses plateformes, y compris Windows, macOS, Linux, Docker, Azure, et AWS. Il supporte .NET Core, .NET Standard, et .NET Framework, assurant une large compatibilité et facilité de déploiement dans des environnements diversifiés.

  10. Optimisation des performances : Avec un support complet du multithreading et de l'asynchrone, IronPDF optimise les performances pour le traitement par lots et les tâches de génération PDF à haut volume. Cela assure une utilisation efficace des ressources et un traitement documentaire plus rapide.

  11. Documentation et Support Complet : IronPDF est livré avec une documentation étendue, tutoriels et exemples, facilitant les développeurs pour un démarrage rapide. La bibliothèque propose également un support technique 24/5, aidant les utilisateurs à résoudre les problèmes rapidement.

  12. Aucune Dépendance Externe : IronPDF fonctionne comme une seule DLL sans nécessiter de logiciels ou installations supplémentaires. Cela simplifie le déploiement et réduit les conflits potentiels avec d'autres composants logiciels.

IronPDF est conçu pour améliorer la productivité et rationaliser la gestion des PDFs au sein des applications .NET. Son riche ensemble de fonctionnalités, combiné avec une facilité d'utilisation et un support complet, en fait un outil inestimable pour les développeurs.

3. Créer une Application C# dans Visual Studio

Créer une application console C# dans Visual Studio comprend plusieurs étapes. Voici un guide détaillé pour vous aider à configurer et démarrer votre projet.

3.1. Ouvrir Visual Studio

Tout d'abord, assurez-vous que Visual Studio est installé sur votre ordinateur. Ouvrez Visual Studio en le recherchant dans le menu Démarrer ou en cliquant sur son icône de bureau.

3.2. Créer un Nouveau Projet

Une fois Visual Studio ouvert, suivez ces étapes pour créer un nouveau projet :

  1. Cliquez sur "Créer un nouveau projet" sur la page de démarrage.

  2. Dans la fenêtre "Créer un nouveau projet", une liste de modèles de projet sera affichée. Utilisez la barre de recherche pour trouver "Application Console" ou sélectionnez-la dans la liste des modèles.

3.3. Choisir le Modèle de Projet

À partir des résultats de recherche ou de la liste, sélectionnez "Application Console (.NET Core)" ou "Application Console (.NET Framework)", selon votre préférence ou les exigences de votre projet.

3.4. Configurer Votre Projet

Après avoir sélectionné le modèle d'application console, vous devrez configurer votre nouveau projet :

  1. Nom du Projet : Saisissez un nom pour votre projet. Ce sera le nom du dossier où vos fichiers de projet seront enregistrés.

  2. Emplacement : Choisissez le dossier où vous souhaitez enregistrer votre projet.

  3. Nom de la Solution : Cela est généralement le même que votre nom de projet, mais vous pouvez le changer si vous planifiez d'avoir plusieurs projets dans une solution.

  4. Cliquez sur "Créer" pour procéder.

4. Installer IronPDF

Pour commencer avec IronPDF, vous avez trois principales méthodes d'installation : en utilisant le gestionnaire de paquets NuGet, la console du gestionnaire de paquets NuGet, et le téléchargement depuis le site NuGet.

4.1 Gestionnaire de Paquets NuGet

D'abord, parlons du gestionnaire de paquets NuGet. Si vous utilisez Visual Studio, cette méthode est simple et conviviale. Ouvrez votre projet et faites un clic droit sur le nœud "Références" ou "Dépendances" dans l'Explorateur de solution. Sélectionnez "Gérer les Paquets NuGet" dans le menu contextuel.

Dans le gestionnaire de paquets NuGet, assurez-vous que l'onglet "Explorer" est sélectionné, puis tapez "IronPDF" dans la boîte de recherche. Une fois que vous avez localisé le paquet IronPDF, cliquez sur "Installer". Cette action ajoutera la bibliothèque IronPDF à votre projet et la configurera pour son utilisation.

Une comparaison entre CraftMyPDF & IronPDF: Figure 2 - Rechercher IronPDF via le gestionnaire de paquets NuGet

4.2 Console du Gestionnaire de Paquets NuGet

Ensuite, la console du gestionnaire de paquets NuGet offre un autre moyen pratique d'installer IronPDF. Pour accéder à cela, allez dans le menu "Outils" dans Visual Studio, choisissez "Gestionnaire de paquets NuGet", puis sélectionnez "Console du Gestionnaire de Paquets". Tapez la commande suivante dans la fenêtre de la console :

Install-Package IronPdf

et appuyez sur Entrée. Cette commande téléchargera et installera le paquet IronPDF directement dans votre projet. Cette méthode est efficace pour ceux qui préfèrent travailler avec des outils en ligne de commande au sein de l'environnement Visual Studio.

4.3 Site Web NuGet

Enfin, vous pouvez télécharger le paquet IronPDF directement du site Web NuGet. Cette méthode est particulièrement utile si vous avez besoin de gérer manuellement les versions de paquets ou si vous travaillez dans un environnement où la gestion directe des paquets est restreinte. Allez sur le site Web NuGet et recherchez "IronPDF". Téléchargez le fichier du paquet (généralement un fichier .nupkg).

Une fois téléchargé, ouvrez votre projet dans Visual Studio, faites un clic droit sur "Références" ou "Dépendances", et sélectionnez "Gérer les Paquets NuGet". Cliquez sur l'icône "Paramètres", puis choisissez "Ajouter" pour spécifier le chemin vers votre paquet téléchargé. Après avoir ajouté la source du paquet, revenez à l'onglet "Explorer", sélectionnez votre nouvelle source, et installez IronPDF à partir de là.

5. Utilisation de CraftMyPDF

Pour utiliser CraftMyPDF dans votre programme C#, vous devez d'abord créer un compte, sélectionner le plan gratuit pour l'API, puis l'intégrer à votre application. Voici comment vous pouvez commencer :

5.1. Créer un Compte et Sélectionner un Plan Gratuit

  1. S'inscrire : Visitez le site Web CraftMyPDF et inscrivez-vous pour un compte gratuit. Entrez les informations requises pour créer votre compte.

  2. Sélectionner le Plan Gratuit : Une fois votre compte créé, naviguez dans la section tarifaire et sélectionnez le plan gratuit. Ce plan permet généralement d'utiliser l'API avec des fonctionnalités et des quotas limités, idéal pour le développement et les tests.

Une comparaison entre CraftMyPDF & IronPDF: Figure 3 - Page de compte CraftMyPDF

  1. Obtenir la Clé API : Après avoir sélectionné le plan, allez dans votre tableau de bord de compte. Ici, vous trouverez votre clé API. Cette clé est nécessaire pour authentifier vos requêtes API.

5.2 Installer les Bibliothèques Requises

Assurez-vous d'avoir le System.Net.Http, RestSharpt, et le namespace Newtonsoft JSON disponibles, car ils sont essentiels pour effectuer des requêtes HTTP à l'API CraftMyPDF.

using System;
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;
using RestSharp;
using System;
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;
using RestSharp;
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Après cela, nous ferons un appel API à l'API CraftMyPDF.

var client = new RestClient("https://api.craftmypdf.com/v1/create");
var request = new RestRequest(Method.Post);
string apiKey = "API Key"; // Replace with your actual API key
string templateId = "Template ID"; // Replace with your actual template ID
request.AddHeader("X-API-KEY", apiKey);
request.AddHeader("Content-Type", "application/json");
var client = new RestClient("https://api.craftmypdf.com/v1/create");
var request = new RestRequest(Method.Post);
string apiKey = "API Key"; // Replace with your actual API key
string templateId = "Template ID"; // Replace with your actual template ID
request.AddHeader("X-API-KEY", apiKey);
request.AddHeader("Content-Type", "application/json");
Dim client = New RestClient("https://api.craftmypdf.com/v1/create")
Dim request = New RestRequest(Method.Post)
Dim apiKey As String = "API Key" ' Replace with your actual API key
Dim templateId As String = "Template ID" ' Replace with your actual template ID
request.AddHeader("X-API-KEY", apiKey)
request.AddHeader("Content-Type", "application/json")
$vbLabelText   $csharpLabel

6. Création de PDF

Créer des PDFs de manière programmée vous permet d'automatiser la génération de documents tels que des rapports, des factures et des certificats. IronPDF offre plusieurs méthodes pour créer des PDFs en C#, y compris la conversion de chaînes HTML, d'URLs et de fichiers HTML en documents PDF. Nous discuterons des méthodes plus en détail dans les sections suivantes.

6.1 Création de PDFs avec IronPDF

6.1.1 HTML en PDF

Convertir du HTML en PDF est l'une des utilisations les plus courantes. Il vous permet de concevoir votre document en utilisant HTML et CSS, puis de le convertir en PDF. Cette méthode est hautement flexible, car elle supporte les normes web modernes et assure que le PDF résultant semble exactement comme conçu. Voici un exemple de base de conversion d'une chaîne HTML en document PDF à l'aide de IronPDF :

using IronPdf;
public class PDFCreator
{
    public void CreatePdfFromHtml()
    {
        var renderer = new ChromePdfRenderer();
        // Define your HTML string
        string htmlContent = "<h1>Hello, IronPDF!</h1><p>This is a sample PDF document created from an HTML string.</p>";
        // Render the HTML as a PDF document
        var pdfDocument = renderer.RenderHtmlAsPdf(htmlContent);
        // Save the PDF document
        pdfDocument.SaveAs("html_output.pdf");
    }
}
using IronPdf;
public class PDFCreator
{
    public void CreatePdfFromHtml()
    {
        var renderer = new ChromePdfRenderer();
        // Define your HTML string
        string htmlContent = "<h1>Hello, IronPDF!</h1><p>This is a sample PDF document created from an HTML string.</p>";
        // Render the HTML as a PDF document
        var pdfDocument = renderer.RenderHtmlAsPdf(htmlContent);
        // Save the PDF document
        pdfDocument.SaveAs("html_output.pdf");
    }
}
Imports IronPdf
Public Class PDFCreator
	Public Sub CreatePdfFromHtml()
		Dim renderer = New ChromePdfRenderer()
		' Define your HTML string
		Dim htmlContent As String = "<h1>Hello, IronPDF!</h1><p>This is a sample PDF document created from an HTML string.</p>"
		' Render the HTML as a PDF document
		Dim pdfDocument = renderer.RenderHtmlAsPdf(htmlContent)
		' Save the PDF document
		pdfDocument.SaveAs("html_output.pdf")
	End Sub
End Class
$vbLabelText   $csharpLabel

Une comparaison entre CraftMyPDF & IronPDF: Figure 4 - Exemple de sortie du code ci-dessus utilisant IronPDF

Dans cet exemple, le ChromePdfRenderer convertit la chaîne HTML fournie en un PDF. Le PDF rendu est ensuite sauvegardé dans le système de fichiers.

6.1.2 URL en PDF

Une autre fonctionnalité puissante de IronPDF est sa capacité à convertir des pages web en documents PDF directement à partir de leurs URLs. Cela est particulièrement utile pour archiver des pages web ou générer des PDFs à partir de contenu web dynamique. Voici un exemple de comment convertir une URL en document PDF :

using IronPdf;
public class PDFCreator
{
    public void CreatePdfFromUrl(string url)
    {
        // Initialize the ChromePdfRenderer
        var renderer = new ChromePdfRenderer();
        // Render the URL as a PDF document
        var pdfDocument = renderer.RenderUrlAsPdf(url);
        // Save the PDF document
        pdfDocument.SaveAs("url_output.pdf");
    }
}
using IronPdf;
public class PDFCreator
{
    public void CreatePdfFromUrl(string url)
    {
        // Initialize the ChromePdfRenderer
        var renderer = new ChromePdfRenderer();
        // Render the URL as a PDF document
        var pdfDocument = renderer.RenderUrlAsPdf(url);
        // Save the PDF document
        pdfDocument.SaveAs("url_output.pdf");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Une comparaison entre CraftMyPDF & IronPDF: Figure 5 - page d'accueil de IronPDF

Cette méthode prend une URL en entrée, rend la page web en PDF et sauvegarde le document résultant. Elle gère tout le contenu web, y compris HTML, CSS, JavaScript et images, assurant que le PDF reflète avec précision la page web originale.

6.1.3 Fichier HTML en PDF

Convertir un fichier HTML en PDF est similaire à la conversion d'une chaîne HTML ou d'une URL. Cette méthode vous permet d'utiliser des fichiers HTML locaux, ce qui est pratique pour générer des PDFs à partir de pages web préexistantes ou de modèles stockés sur le système de fichiers. Voici comment vous pouvez convertir un fichier HTML en PDF :

using IronPdf;
public class PDFCreator
{
    public void CreatePdfFromHtmlFile(string filePath)
    {
        // Initialize the ChromePdfRenderer
        var renderer = new ChromePdfRenderer();
        // Render the HTML file as a PDF document
        var pdfDocument = renderer.RenderHtmlFileAsPdf(filePath);
        // Save the PDF document
        pdfDocument.SaveAs("html_file_output.pdf");
    }
}
using IronPdf;
public class PDFCreator
{
    public void CreatePdfFromHtmlFile(string filePath)
    {
        // Initialize the ChromePdfRenderer
        var renderer = new ChromePdfRenderer();
        // Render the HTML file as a PDF document
        var pdfDocument = renderer.RenderHtmlFileAsPdf(filePath);
        // Save the PDF document
        pdfDocument.SaveAs("html_file_output.pdf");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Dans cet exemple, la méthode RenderHtmlFileAsPdf est utilisée pour convertir le contenu d'un fichier HTML spécifié par son chemin en document PDF. Le PDF résultant est ensuite sauvegardé.

En tirant parti de ces méthodes, vous pouvez utiliser IronPDF pour créer des PDFs à partir de diverses sources de contenu HTML, fournissant une solution flexible et puissante pour la génération de documents dans vos applications C#. Ces méthodes assurent que vous pouvez facilement intégrer des capacités de création de PDF, que vous travailliez avec du contenu web dynamique, des fichiers HTML locaux, ou des chaînes HTML directement définies.

6.2 Création de PDFs avec l'API CraftMyPDF

CraftMyPDF fournit une API flexible pour générer des PDFs à partir de modèles. Pour créer un PDF en utilisant cette API, vous devez d'abord créer un modèle dans le tableau de bord CraftMyPDF. Une fois votre modèle prêt, vous pouvez envoyer une requête à l'API avec les données nécessaires pour générer le PDF. Voici les étapes pour y parvenir.

6.2.1 Création d'un Modèle

  1. Connectez-vous au tableau de bord CraftMyPDF : Connectez-vous à votre compte CraftMyPDF et naviguez vers le tableau de bord.

  2. Créez un Nouveau Modèle : Cliquez sur le bouton "Créer un Modèle". Utilisez l'éditeur de glisser-déposer pour concevoir votre modèle PDF. Vous pouvez inclure du texte, des images, des tableaux et d'autres éléments si nécessaire.

  3. Sauvegardez le Modèle : Une fois satisfait du design, enregistrez le modèle. Un ID de modèle vous sera fourni, dont vous aurez besoin pour générer des PDFs utilisant ce modèle.

Une comparaison entre CraftMyPDF & IronPDF: Figure 6 - tableau de bord CraftMyPDF

6.2.2 Envoi d'une Requête pour Générer un PDF

Après avoir créé votre modèle, vous pouvez utiliser le code C# suivant pour générer un PDF en envoyant une requête à l'API CraftMyPDF.

using System;
using System.Net;
using System.Threading.Tasks;
using RestSharp;

class Program
{
    static async Task Main(string[] args)
    {
        var client = new RestClient("https://api.craftmypdf.com/v1/create");
        var request = new RestRequest(Method.Post);
        string apiKey = "API-Key"; // Replace with your actual API key
        string templateId = "Template-ID"; // Replace with your actual template ID
        request.AddHeader("X-API-KEY", apiKey);
        request.AddHeader("Content-Type", "application/json");
        var body = new
        {
            data = new
            {
                invoice_number = "INV48321",
                date = "2024-05-27",
                due_date = "2024-06-27",
                currency = "EUR",
                discount = 10,
                tax = 5,
                company_name = "Tech Innovations Ltd",
                email = "contact@techinnovations.com",
                client = "Future Solutions GmbH",
                client_address = "1234 Innovation Drive",
                client_address2 = "Berlin",
                client_address3 = "10115",
                items = new[]
                {
                    new { description = "Cloud Hosting Services", quantity = 12, unit_price = 75, total = 900 },
                    new { description = "Custom Web Application", quantity = 3, unit_price = 150, total = 450 },
                    new { description = "Technical Support", quantity = 15, unit_price = 30, total = 450 },
                    new { description = "Digital Marketing Campaign", quantity = 2, unit_price = 500, total = 1000 },
                    new { description = "SEO Optimization", quantity = 5, unit_price = 120, total = 600 }
                },
                gross_total = 3400
            },
            load_data_from = (string)null,
            template_id = templateId,
            version = 8,
            export_type = "json",
            expiration = 60,
            output_file = "output.pdf",
            is_cmyk = false,
            image_resample_res = 600,
            direct_download = 0,
            cloud_storage = 1
        };
        request.AddJsonBody(body);
        RestResponse response = await client.ExecuteAsync(request);
        Console.WriteLine(response.Content);
        if (response.IsSuccessful)
        {
            var content = response.Content;
            dynamic result = Newtonsoft.Json.JsonConvert.DeserializeObject(content);
            string fileUrl = result.file;
            string localPath = "f:\\downloaded_output.pdf";
            using (WebClient webClient = new WebClient())
            {
                webClient.DownloadFile(fileUrl, localPath);
            }
            Console.WriteLine($"PDF downloaded successfully to {localPath}");
        }
        else
        {
            Console.WriteLine($"Error: {response.Content}");
        }
    }
}
using System;
using System.Net;
using System.Threading.Tasks;
using RestSharp;

class Program
{
    static async Task Main(string[] args)
    {
        var client = new RestClient("https://api.craftmypdf.com/v1/create");
        var request = new RestRequest(Method.Post);
        string apiKey = "API-Key"; // Replace with your actual API key
        string templateId = "Template-ID"; // Replace with your actual template ID
        request.AddHeader("X-API-KEY", apiKey);
        request.AddHeader("Content-Type", "application/json");
        var body = new
        {
            data = new
            {
                invoice_number = "INV48321",
                date = "2024-05-27",
                due_date = "2024-06-27",
                currency = "EUR",
                discount = 10,
                tax = 5,
                company_name = "Tech Innovations Ltd",
                email = "contact@techinnovations.com",
                client = "Future Solutions GmbH",
                client_address = "1234 Innovation Drive",
                client_address2 = "Berlin",
                client_address3 = "10115",
                items = new[]
                {
                    new { description = "Cloud Hosting Services", quantity = 12, unit_price = 75, total = 900 },
                    new { description = "Custom Web Application", quantity = 3, unit_price = 150, total = 450 },
                    new { description = "Technical Support", quantity = 15, unit_price = 30, total = 450 },
                    new { description = "Digital Marketing Campaign", quantity = 2, unit_price = 500, total = 1000 },
                    new { description = "SEO Optimization", quantity = 5, unit_price = 120, total = 600 }
                },
                gross_total = 3400
            },
            load_data_from = (string)null,
            template_id = templateId,
            version = 8,
            export_type = "json",
            expiration = 60,
            output_file = "output.pdf",
            is_cmyk = false,
            image_resample_res = 600,
            direct_download = 0,
            cloud_storage = 1
        };
        request.AddJsonBody(body);
        RestResponse response = await client.ExecuteAsync(request);
        Console.WriteLine(response.Content);
        if (response.IsSuccessful)
        {
            var content = response.Content;
            dynamic result = Newtonsoft.Json.JsonConvert.DeserializeObject(content);
            string fileUrl = result.file;
            string localPath = "f:\\downloaded_output.pdf";
            using (WebClient webClient = new WebClient())
            {
                webClient.DownloadFile(fileUrl, localPath);
            }
            Console.WriteLine($"PDF downloaded successfully to {localPath}");
        }
        else
        {
            Console.WriteLine($"Error: {response.Content}");
        }
    }
}
'INSTANT VB NOTE: 'Option Strict Off' is used here since dynamic typing is used:
Option Strict Off

Imports System
Imports System.Net
Imports System.Threading.Tasks
Imports RestSharp

Friend Class Program
	Shared Async Function Main(ByVal args() As String) As Task
		Dim client = New RestClient("https://api.craftmypdf.com/v1/create")
		Dim request = New RestRequest(Method.Post)
		Dim apiKey As String = "API-Key" ' Replace with your actual API key
		Dim templateId As String = "Template-ID" ' Replace with your actual template ID
		request.AddHeader("X-API-KEY", apiKey)
		request.AddHeader("Content-Type", "application/json")
		Dim body = New With {
			Key .data = New With {
				Key .invoice_number = "INV48321",
				Key .date = "2024-05-27",
				Key .due_date = "2024-06-27",
				Key .currency = "EUR",
				Key .discount = 10,
				Key .tax = 5,
				Key .company_name = "Tech Innovations Ltd",
				Key .email = "contact@techinnovations.com",
				Key .client = "Future Solutions GmbH",
				Key .client_address = "1234 Innovation Drive",
				Key .client_address2 = "Berlin",
				Key .client_address3 = "10115",
				Key .items = {
					New With {
						Key .description = "Cloud Hosting Services",
						Key .quantity = 12,
						Key .unit_price = 75,
						Key .total = 900
					},
					New With {
						Key .description = "Custom Web Application",
						Key .quantity = 3,
						Key .unit_price = 150,
						Key .total = 450
					},
					New With {
						Key .description = "Technical Support",
						Key .quantity = 15,
						Key .unit_price = 30,
						Key .total = 450
					},
					New With {
						Key .description = "Digital Marketing Campaign",
						Key .quantity = 2,
						Key .unit_price = 500,
						Key .total = 1000
					},
					New With {
						Key .description = "SEO Optimization",
						Key .quantity = 5,
						Key .unit_price = 120,
						Key .total = 600
					}
				},
				Key .gross_total = 3400
			},
			Key .load_data_from = DirectCast(Nothing, String),
			Key .template_id = templateId,
			Key .version = 8,
			Key .export_type = "json",
			Key .expiration = 60,
			Key .output_file = "output.pdf",
			Key .is_cmyk = False,
			Key .image_resample_res = 600,
			Key .direct_download = 0,
			Key .cloud_storage = 1
		}
		request.AddJsonBody(body)
		Dim response As RestResponse = Await client.ExecuteAsync(request)
		Console.WriteLine(response.Content)
		If response.IsSuccessful Then
			Dim content = response.Content
'INSTANT VB NOTE: In the following line, Instant VB substituted 'Object' for 'dynamic' - this will work in VB with Option Strict Off:
			Dim result As Object = Newtonsoft.Json.JsonConvert.DeserializeObject(content)
			Dim fileUrl As String = result.file
			Dim localPath As String = "f:\downloaded_output.pdf"
			Using webClient As New WebClient()
				webClient.DownloadFile(fileUrl, localPath)
			End Using
			Console.WriteLine($"PDF downloaded successfully to {localPath}")
		Else
			Console.WriteLine($"Error: {response.Content}")
		End If
	End Function
End Class
$vbLabelText   $csharpLabel

Une comparaison entre CraftMyPDF & IronPDF: Figure 7 - Exemple de sortie indiquant un objet de réponse réussi

Et voici le document PDF généré par l'API de génération de PDF CraftMyPdf :

Une comparaison entre CraftMyPDF & IronPDF: Figure 8 - Exemple de sortie de l'API de génération de PDF CraftMyPdf

Génération de Factures Bootstrap

La génération de factures professionnelles nécessite des mises en page modernes et réactives. Cet exemple Bootstrap 5 démontre la capacité de IronPDF à créer des factures parfaitement pixelisées sans API ou modèles externes.

using IronPdf;

var renderer = new ChromePdfRenderer();

string professionalInvoice = @"
<!DOCTYPE html>
<html>
<head>
    <meta charset='utf-8'>
    <link href='https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css' rel='stylesheet'>
    <style>
        .invoice-header { background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); color: white; }
        .invoice-table th { background: #f8f9fa; }
        @media print { .invoice-box { page-break-inside: avoid; } }
    </style>
</head>
<body>
    <div class='container my-4'>
        <div class='card shadow-lg invoice-box'>
            <div class='invoice-header p-4'>
                <div class='row align-items-center'>
                    <div class='col-md-8'>
                        <h1 class='mb-0'>INVOICE</h1>
                        <p class='mb-0 opacity-75'>Invoice #INV-2024-0427</p>
                    </div>
                    <div class='col-md-4 text-md-end'>
                        <h3 class='mb-0'>$3,400.00</h3>
                        <small class='opacity-75'>Due: June 27, 2024</small>
                    </div>
                </div>
            </div>

            <div class='card-body p-4'>
                <div class='row mb-4'>
                    <div class='col-md-6'>
                        <h6 class='text-primary text-uppercase mb-2'>From</h6>
                        <strong>Tech Innovations Ltd</strong><br>
                        contact@techinnovations.com
                    </div>
                    <div class='col-md-6 text-md-end'>
                        <h6 class='text-primary text-uppercase mb-2'>Bill To</h6>
                        <strong>Future Solutions GmbH</strong><br>
                        1234 Innovation Drive<br>
                        Berlin, 10115
                    </div>
                </div>

                <table class='table invoice-table'>
                    <thead>
                        <tr>
                            <th>Description</th>
                            <th class='text-center'>Qty</th>
                            <th class='text-end'>Unit Price</th>
                            <th class='text-end'>Total</th>
                        </tr>
                    </thead>
                    <tbody>
                        <tr>
                            <td>Cloud Hosting Services</td>
                            <td class='text-center'>12</td>
                            <td class='text-end'>€75.00</td>
                            <td class='text-end'>€900.00</td>
                        </tr>
                        <tr>
                            <td>Custom Web Application</td>
                            <td class='text-center'>3</td>
                            <td class='text-end'>€150.00</td>
                            <td class='text-end'>€450.00</td>
                        </tr>
                        <tr>
                            <td>Technical Support</td>
                            <td class='text-center'>15</td>
                            <td class='text-end'>€30.00</td>
                            <td class='text-end'>€450.00</td>
                        </tr>
                        <tr>
                            <td>Digital Marketing Campaign</td>
                            <td class='text-center'>2</td>
                            <td class='text-end'>€500.00</td>
                            <td class='text-end'>€1,000.00</td>
                        </tr>
                        <tr>
                            <td>SEO Optimization</td>
                            <td class='text-center'>5</td>
                            <td class='text-end'>€120.00</td>
                            <td class='text-end'>€600.00</td>
                        </tr>
                    </tbody>
                </table>

                <div class='row justify-content-end'>
                    <div class='col-md-4'>
                        <table class='table table-sm'>
                            <tr>
                                <td>Subtotal:</td>
                                <td class='text-end'><strong>€3,400.00</strong></td>
                            </tr>
                            <tr>
                                <td>Discount (10%):</td>
                                <td class='text-end text-success'>-€340.00</td>
                            </tr>
                            <tr>
                                <td>Tax (5%):</td>
                                <td class='text-end'>€153.00</td>
                            </tr>
                            <tr class='table-primary'>
                                <td><strong>Total Due:</strong></td>
                                <td class='text-end'><strong>€3,213.00</strong></td>
                            </tr>
                        </table>
                    </div>
                </div>

                <div class='alert alert-info mt-4'>
                    <strong>Payment Terms:</strong> Payment due within 30 days. Late payments may incur additional charges.
                </div>

                <div class='row mt-4 pt-3 border-top'>
                    <div class='col-md-6'>
                        <small class='text-muted'>Generated with IronPDF - No external APIs required</small>
                    </div>
                    <div class='col-md-6 text-md-end'>
                        <span class='badge bg-success'>PAID</span>
                    </div>
                </div>
            </div>
        </div>
    </div>
</body>
</html>";

var pdf = renderer.RenderHtmlAsPdf(professionalInvoice);
pdf.SaveAs("professional-invoice.pdf");
using IronPdf;

var renderer = new ChromePdfRenderer();

string professionalInvoice = @"
<!DOCTYPE html>
<html>
<head>
    <meta charset='utf-8'>
    <link href='https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css' rel='stylesheet'>
    <style>
        .invoice-header { background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); color: white; }
        .invoice-table th { background: #f8f9fa; }
        @media print { .invoice-box { page-break-inside: avoid; } }
    </style>
</head>
<body>
    <div class='container my-4'>
        <div class='card shadow-lg invoice-box'>
            <div class='invoice-header p-4'>
                <div class='row align-items-center'>
                    <div class='col-md-8'>
                        <h1 class='mb-0'>INVOICE</h1>
                        <p class='mb-0 opacity-75'>Invoice #INV-2024-0427</p>
                    </div>
                    <div class='col-md-4 text-md-end'>
                        <h3 class='mb-0'>$3,400.00</h3>
                        <small class='opacity-75'>Due: June 27, 2024</small>
                    </div>
                </div>
            </div>

            <div class='card-body p-4'>
                <div class='row mb-4'>
                    <div class='col-md-6'>
                        <h6 class='text-primary text-uppercase mb-2'>From</h6>
                        <strong>Tech Innovations Ltd</strong><br>
                        contact@techinnovations.com
                    </div>
                    <div class='col-md-6 text-md-end'>
                        <h6 class='text-primary text-uppercase mb-2'>Bill To</h6>
                        <strong>Future Solutions GmbH</strong><br>
                        1234 Innovation Drive<br>
                        Berlin, 10115
                    </div>
                </div>

                <table class='table invoice-table'>
                    <thead>
                        <tr>
                            <th>Description</th>
                            <th class='text-center'>Qty</th>
                            <th class='text-end'>Unit Price</th>
                            <th class='text-end'>Total</th>
                        </tr>
                    </thead>
                    <tbody>
                        <tr>
                            <td>Cloud Hosting Services</td>
                            <td class='text-center'>12</td>
                            <td class='text-end'>€75.00</td>
                            <td class='text-end'>€900.00</td>
                        </tr>
                        <tr>
                            <td>Custom Web Application</td>
                            <td class='text-center'>3</td>
                            <td class='text-end'>€150.00</td>
                            <td class='text-end'>€450.00</td>
                        </tr>
                        <tr>
                            <td>Technical Support</td>
                            <td class='text-center'>15</td>
                            <td class='text-end'>€30.00</td>
                            <td class='text-end'>€450.00</td>
                        </tr>
                        <tr>
                            <td>Digital Marketing Campaign</td>
                            <td class='text-center'>2</td>
                            <td class='text-end'>€500.00</td>
                            <td class='text-end'>€1,000.00</td>
                        </tr>
                        <tr>
                            <td>SEO Optimization</td>
                            <td class='text-center'>5</td>
                            <td class='text-end'>€120.00</td>
                            <td class='text-end'>€600.00</td>
                        </tr>
                    </tbody>
                </table>

                <div class='row justify-content-end'>
                    <div class='col-md-4'>
                        <table class='table table-sm'>
                            <tr>
                                <td>Subtotal:</td>
                                <td class='text-end'><strong>€3,400.00</strong></td>
                            </tr>
                            <tr>
                                <td>Discount (10%):</td>
                                <td class='text-end text-success'>-€340.00</td>
                            </tr>
                            <tr>
                                <td>Tax (5%):</td>
                                <td class='text-end'>€153.00</td>
                            </tr>
                            <tr class='table-primary'>
                                <td><strong>Total Due:</strong></td>
                                <td class='text-end'><strong>€3,213.00</strong></td>
                            </tr>
                        </table>
                    </div>
                </div>

                <div class='alert alert-info mt-4'>
                    <strong>Payment Terms:</strong> Payment due within 30 days. Late payments may incur additional charges.
                </div>

                <div class='row mt-4 pt-3 border-top'>
                    <div class='col-md-6'>
                        <small class='text-muted'>Generated with IronPDF - No external APIs required</small>
                    </div>
                    <div class='col-md-6 text-md-end'>
                        <span class='badge bg-success'>PAID</span>
                    </div>
                </div>
            </div>
        </div>
    </div>
</body>
</html>";

var pdf = renderer.RenderHtmlAsPdf(professionalInvoice);
pdf.SaveAs("professional-invoice.pdf");
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Sortie : Un PDF de facture professionnelle avec des en-têtes dégradés Bootstrap 5, des tableaux réactifs et des résumés de calculs. IronPDF rend tous les dégradés CSS, les styles de tableau et les classes utilitaires avec une précision parfaite - pas d'appels à des API externes, pas de modèles, pas besoin de connexion internet. Contrairement à l'approche en nuage de CraftMyPDF, IronPDF génère les factures instantanément sur votre serveur avec un contrôle total.

Pour plus d'informations sur le support des tableaux Bootstrap, voir le Guide CSS Bootstrap & Flexbox.

Explication du Code

  1. Configurer RestClient et RestRequest : Un RestClient est instancié avec l'URL API de CraftMyPDF, et un RestRequest est créé pour la méthode POST pour générer le PDF.

  2. Ajouter des En-têtes : La clé API est ajoutée aux en-têtes de requête pour l'authentification. Le type de contenu est défini comme application/json.

  3. Préparer le Corps de la Requête : Le corps de la requête est créé comme un objet JSON. Il inclut les données pour remplir les champs de modèle, l'ID de modèle, et diverses options telles que le type d'exportation et l'expiration.

  4. Envoyer la Requête : La requête est envoyée de manière asynchrone en utilisant ExecuteAsync et elle génère des documents PDF basés sur le corps de la requête.

  5. Gérer la Réponse : Si la réponse est réussie, l'URL du fichier PDF généré est extraite de la réponse, et le fichier est téléchargé vers un chemin local using WebClient. Si la requête échoue, un message d'erreur sera imprimé.

7. Licence

Une comparaison entre CraftMyPDF & IronPDF: Figure 9 - Une comparaison entre IronPDF & DinktoPDF: Figure 10 - Options de licence de IronPDF.

IronPDF offre diverses options de licence pour répondre aux différents besoins des utilisateurs. Les principales licences incluent les éditions Lite, Professionnelle et Entreprise. La licence Lite, au prix de $799, convient aux développeurs individuels travaillant sur un projet. La licence Professionnelle coûte $1,199 et supporte plusieurs projets et développeurs, tandis que la licence Entreprise est conçue pour les équipes plus larges et les déploiements plus étendus, au prix de $2,399. Chaque licence est facturée une seule fois et inclut un an de support et mises à jour. De plus, il existe une licence OEM de redistribution qui permet la distribution de IronPDF dans le cadre d'un produit commercial. IronPDF propose également une version d'essai gratuite à des fins d'évaluation.

CraftMyPDF fonctionne sur un modèle de licence basé sur l'abonnement. Elle propose plusieurs plans, y compris un niveau gratuit adapté aux petits projets et aux développements. Le plan gratuit permet une utilisation limitée de l'API, idéal pour les tests et petits projets. Pour une utilisation plus importante, il existe des plans payants qui offrent des limites d'appels d'API accrues et des fonctionnalités supplémentaires. Ces plans payants sont conçus pour évoluer avec les besoins de l'entreprise, offrant flexibilité et support robuste. Les utilisateurs doivent s'abonner à ces plans via le site CraftMyPDF et peuvent gérer leur abonnement et clés API via le tableau de bord utilisateur.

8. Documentation et Support

8.1 Documentation et Support IronPDF

IronPDF offre une documentation complète et un support robuste pour aider les utilisateurs à utiliser efficacement la bibliothèque. La documentation est exhaustive et inclut des guides détaillés, des exemples, et une section QuickStart pour aider les nouveaux utilisateurs à démarrer rapidement. Les sections clés couvrent l'utilisation de base, les configurations avancées et la résolution des problèmes. IronPDF propose également un support par différents canaux, incluant une base de connaissances étendue, le support par email, et des demandes de support d'ingénierie pour les problèmes plus complexes. L'équipe de support est disponible 24/5, offrant une assistance rapide pour résoudre les questions et problèmes des utilisateurs.

8.2 Documentation et Support CraftMyPdf

CraftMyPDF offre également une documentation et un support approfondis pour ses utilisateurs. La documentation API fournit des informations détaillées sur tous les points d'extrémité disponibles, paramètres, et exemples de requêtes, assurant que les développeurs peuvent intégrer l'API de manière fluide. La documentation comprend des guides sur la création de modèles, la réalisation de requêtes API, et la gestion des réponses. CraftMyPDF fournit un support client par email et offre un forum communautaire où les utilisateurs peuvent poser des questions et partager des idées. La documentation est conçue pour être conviviale, assurant que les développeurs de tous niveaux de compétence peuvent utiliser efficacement l'API pour générer des PDFs.

9. Conclusion

Dans cet article, nous avons exploré les fonctionnalités, licences, et documentations de deux outils puissants pour générer des PDFs : IronPDF et CraftMyPDF. Les deux outils offrent des capacités robustes pour créer et gérer des documents PDF, mais IronPDF se distingue avec plusieurs avantages distincts.

IronPDF propose un ensemble complet de fonctionnalités qui répond à un large éventail de besoins en génération de PDFs, y compris la conversion de chaînes HTML, URLs, et fichiers HTML en PDFs avec facilité. Son intégration transparente avec l'environnement .NET et la capacité à gérer des structures complexes de documents en font un outil très polyvalent. De plus, IronPDF supporte des options avancées telles que l'ajout d'en-têtes et pieds de page, signatures numériques, et la gestion des formulaires PDF, assurant qu'il puisse répondre aux besoins de diverses applications.

Un des avantages significatifs de IronPDF est sa structure de licence. Il offre une version d'essai gratuite, permettant aux utilisateurs d'évaluer le logiciel avant de l'acheter. Les licences commencent à $799, le rendant accessible pour les développeurs individuels et les petites équipes. IronPDF offre également une excellente proposition de valeur en offrant la Iron Suite, qui inclut neuf produits, au prix de deux, en faisant un choix rentable pour des besoins de gestion de PDFs et de documents complets.

En résumé, bien que IronPDF et CraftMyPDF soient d'excellents outils pour la génération de PDF, IronPDF offre un ensemble de fonctionnalités plus étendu, un support robuste, et un modèle de licence plus avantageux. Sa capacité à gérer les exigences complexes en matière de documents et le package Iron Suite à un prix avantageux lui donnent un avantage sur CraftMyPDF. Que vous soyez un développeur individuel ou faisant partie d'une équipe plus large, IronPDF fournit une solution fiable et puissante pour tous vos besoins de génération de PDFs.

[{i: (CraftMyPDF est une marque déposée de son propriétaire respectif. Ce site n'est pas affilié, approuvé, ou parrainé par CraftMyPDF. Tous les noms de produits, logos et marques sont la propriété de leurs propriétaires respectifs. Les comparaisons sont à des fins d'information uniquement et reflètent les informations disponibles publiquement au moment de la rédaction.)}]

Questions Fréquemment Posées

Quels sont les avantages d'utiliser une bibliothèque PDF C# par rapport à une solution basée sur une API ?

Une bibliothèque PDF complète comme IronPDF offre des fonctionnalités étendues, une intégration transparente avec les environnements de développement .NET, un support robuste et des options de licence rentables, ce qui en fait un excellent choix pour la gestion de documents complexes.

Comment puis-je convertir du contenu HTML en document PDF en utilisant C# ?

Vous pouvez utiliser IronPDF pour convertir du contenu HTML en documents PDF. Il prend en charge HTML5 et CSS3, garantissant que le contenu web est fidèlement reproduit dans les PDF générés.

Quelles fonctionnalités sont mises en avant dans IronPDF pour la génération de PDF ?

IronPDF offre des signatures numériques, le remplissage de formulaires, l'édition de PDF, des annotations et une compatibilité multiplateforme. Il excelle dans la conversion de HTML, d'URL et d'images en PDF avec des performances et une optimisation robustes.

Comment CraftMyPDF gère-t-il la conception de modèles PDF ?

CraftMyPDF propose un éditeur en ligne avec une interface glisser-déposer qui permet aux utilisateurs de concevoir des modèles PDF sans avoir besoin de coder. Il prend en charge l'intégration de données JSON, permettant la création de documents PDF personnalisés.

Quelles sont les options de licence disponibles pour les outils PDF comme IronPDF ?

IronPDF propose des options de licence flexibles, notamment les licences Lite, Professional, et Enterprise moyennant un tarif unique. Il offre également un essai gratuit pour permettre aux nouveaux utilisateurs d'explorer ses fonctionnalités.

Comment puis-je intégrer une API de génération de PDF dans mon application C# ?

Pour intégrer une API de génération de PDF comme CraftMyPDF, vous devez créer un compte, sélectionner un plan approprié, obtenir une clé API et utiliser des bibliothèques telles que System.Net.Http et RestSharp pour effectuer des appels API.

Quelles ressources d'assistance sont disponibles pour les développeurs utilisant IronPDF ?

IronPDF fournit une documentation extensive, des tutoriels et un support technique 24/5. Ces ressources aident les développeurs à mettre en œuvre et à résoudre efficacement les problèmes de la bibliothèque dans leurs projets.

Comment installer IronPDF dans une application C# ?

IronPDF peut être installé via le gestionnaire de packages NuGet dans Visual Studio, en utilisant la console du gestionnaire de packages NuGet, ou en téléchargeant le package directement depuis le site NuGet.

Comment IronPDF améliore-t-il la sécurité et l'interactivité des documents PDF ?

IronPDF prend en charge des fonctionnalités telles que les signatures numériques et la gestion des formulaires, qui améliorent la sécurité et l'interactivité des documents, ce qui le rend adapté pour la gestion complète des PDF.

Curtis Chau
Rédacteur technique

Curtis Chau détient un baccalauréat en informatique (Université de Carleton) et se spécialise dans le développement front-end avec expertise en Node.js, TypeScript, JavaScript et React. Passionné par la création d'interfaces utilisateur intuitives et esthétiquement plaisantes, Curtis aime travailler avec des frameworks modernes ...

Lire la suite