Passer au contenu du pied de page
COMPARAISONS DE PRODUITS

Comparaison APITemplate io et IronPDF pour les Bibliothèques PDF en C#

En tant que développeur C#, j'ai souvent rencontré des difficultés pour générer et manipuler des PDF dans mes projets. Le besoin de solutions PDF efficaces, fiables et faciles à intégrer est un point sensible commun dans notre domaine. That's why I decided to explore APITemplate and IronPDF, two popular tools that promise to streamline PDF-related tasks in C# applications.

Dans cet article, je vais partager mon expérience pratique avec APITemplate et IronPDF, en comparant leurs fonctionnalités, performances et capacités d'intégration. Mon objectif est de vous fournir une analyse claire et impartiale pour vous aider à prendre une décision éclairée pour votre prochain projet. Lorsque j'ai d'abord rencontré APITemplate et IronPDF, j'ai été intrigué par leur potentiel à résoudre les défis liés aux PDF dans le développement C#. Voyons ce que chacun de ces outils propose.

APITemplate

Comparaison entre APITemplate io et IronPDF pour les bibliothèques PDF en C# : Figure 1

APITemplate est un service basé sur le cloud qui se concentre sur la génération de PDF et d'images à partir de modèles. Il fournit une API qui permet aux développeurs de créer des documents et des graphiques en envoyant des données JSON vers des modèles prédéfinis. Lors de mes premiers tests, j'ai trouvé qu'APITemplate était simple à utiliser. Je pouvais créer un modèle en utilisant leur interface web, puis utiliser leur API pour le remplir avec des données de mon application C#.

Caractéristiques clés d'APITemplate

Génération à base de modèles

La force principale d'APITemplate réside dans son approche basée sur les modèles. Je peux créer des modèles réutilisables pour les documents et les images, ce qui me fait gagner beaucoup de temps sur des tâches répétitives. Il propose également un éditeur de modèles en markdown pour générer des PDF. Vous pouvez générer des PDF à partir de modèles réutilisables intégrés avec Zapier et d'autres tiers.

Intégration des données JSON

L'intégration des données JSON est une fonctionnalité que j'utilise fréquemment. Elle vous permet de remplir des modèles avec des données JSON. Cela rend l'intégration incroyablement facile avec mes applications C#, car je peux sérialiser mes objets en JSON et les envoyer à l'API.

Console API

La fonctionnalité de console API m'a fait gagner du temps. Avec elle, je peux prévisualiser et tester des appels API directement depuis leur site web, m'aidant à déboguer et peaufiner mes requêtes avant de les implémenter dans mon code C#.

En-têtes et pieds de page personnalisables

La possibilité d'ajouter des en-têtes et pieds de page personnalisés à mes PDF a été précieuse, surtout lors de la création de rapports ou de factures professionnels. Je peux facilement inclure des numéros de pages, des dates, ou des logos d'entreprise.

IronPDF

Comparaison entre APITemplate io et IronPDF pour les bibliothèques PDF en C# : Figure 2

IronPDF, d'autre part, est une bibliothèque .NET spécialement conçue pour la manipulation de PDF dans les applications C#. Elle offre une large gamme de fonctionnalités, y compris la création, l'édition et la conversion de PDF. L'une de ses caractéristiques distinctives est la capacité de générer des PDF à partir de HTML, ce qui peut être extrêmement utile pour les applications web.

Ma première expérience avec IronPDF a consisté à l'installer via NuGet et à l'intégrer directement dans mon projet C#. Son processus d'intégration API est très fluide, ce qui signifie que j'ai pu l'avoir en fonctionnement dans mes projets en un rien de temps. J'ai été impressionné par la facilité avec laquelle je pouvais créer des PDF de manière programmatique, sans dépendre de services externes.

La principale différence que j'ai remarquée est qu'APITemplate excelle dans la création de documents à partir de modèles prédéfinis, tandis qu'IronPDF offre plus de flexibilité pour la manipulation personnalisée de PDF dans votre code C#. La nature basée sur le cloud d'APITemplate signifie que vous n'avez pas à vous soucier des ressources serveur pour la génération de PDF, mais cela nécessite une connexion Internet. IronPDF, en étant une bibliothèque locale, peut fonctionner hors ligne mais utilise les ressources de votre serveur.

Caractéristiques clés d'IronPDF

Création de PDF à partir de HTML

IronPDF excelle dans la génération de PDF à partir de contenu HTML. J'ai utilisé cette fonctionnalité de façon intensive pour créer des rapports et documents de manière dynamique. C'est aussi simple que de passer des chaînes HTML ou même des URL à la bibliothèque. Le support étendu d'IronPDF pour les standards web modernes signifiait que chaque PDF que je générais à partir de contenu HTML était de haute qualité.

Manipulation de PDF

Cette fonctionnalité me permet de modifier des PDF existants de manière programmatique. Je peux ajouter du texte, des images, ou même de nouvelles pages aux documents PDF, ce qui est extrêmement utile pour mettre à jour des rapports ou formulaires.

Fusion et fractionnement de PDF

J'ai trouvé cette fonctionnalité particulièrement pratique lors de la manipulation de grands documents. IronPDF makes it easy to combine multiple PDFs into one or split a single PDF into several files.

Extraction de texte

Lorsque j'ai besoin d'extraire du contenu texte des PDF pour une analyse ou un indexage, les capacités d'extraction de texte d'IronPDF sont utiles. Il gère bien divers formats de mise en page PDF, ce qui facilite l'extraction des données.

Remplissage de formulaires

Pour les projets impliquant le remplissage automatisé de formulaires, la fonctionnalité remplissage de formulaires d'IronPDF est très utile. Je peux remplir des formulaires PDF de manière programmatique et économiser du temps sur la saisie manuelle de données.

Signatures numériques

La sécurité est cruciale dans plusieurs de mes projets. IronPDF me permet d'ajouter des signatures numériques aux PDF, augmentant ainsi l'authenticité et la sécurité des documents.

Protection par mot de passe

Lorsqu'il s'agit de documents sensibles, j'utilise IronPDF pour ajouter une protection par mot de passe aux PDF. C'est extrêmement utile pour garantir que mes informations confidentielles restent sécurisées.

Conversion de PDF en image

Il y a des moments où je dois convertir des pages PDF en images pour des aperçus ou des miniatures. IronPDF rend ce processus simple, il nécessite seulement quelques lignes de code de ma part et prend en charge divers formats d'image.

Compatibilité multiplateforme

En tant que développeur .NET travaillant sur des projets multiplateformes, j'apprécie qu'IronPDF fonctionne sans problème sur différents systèmes d'exploitation, grâce à son support .NET Standard.

Installer IronPDF et APITemplate pour votre projet C

La mise en place de ces outils dans un projet C# est assez simple. Je vais vous guider à travers le processus pour IronPDF et APITemplate selon mon expérience.

IronPDF

Pour installer IronPDF dans mes projets C#, je procède comme suit :

  1. Ouvrez mon projet dans Visual Studio.

  2. Utilisez le Gestionnaire de packages NuGet pour installer IronPDF. J'utilise soit le Gestionnaire de packages NuGet soit la Console du gestionnaire de packages.

    1. Dans le Gestionnaire de packages NuGet, recherchez IronPDF et installez-le.

    APITemplate io et IronPDF Comparison pour les bibliothèques PDF en C# : Figure 3

    1. Sinon, dans la Console du gestionnaire de packages, je lance :
    Install-Package IronPdf

    APITemplate io et IronPDF Comparison pour les bibliothèques PDF en C# : Figure 4

  3. Après l'installation, j'ajoute la déclaration using nécessaire en haut de mon fichier C# :

    using IronPdf;
    using IronPdf;
    Imports IronPdf
    $vbLabelText   $csharpLabel
  4. Pour activer la licence, j'ajoute cette ligne tôt dans le démarrage de mon application :

    IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY-HERE";
    IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY-HERE";
    IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY-HERE"
    $vbLabelText   $csharpLabel

Et voilà ! Maintenant, je peux commencer à utiliser IronPDF dans mon code.

APITemplate

Pour APITemplate, le processus d'installation est un peu différent puisqu'il s'agit d'une API web :

  1. D'abord, je crée un compte APITemplate sur leur site web.
  2. Après m'être inscrit, je vais dans la section API pour obtenir ma clé API.
  3. Dans mon projet C#, je n'ai pas besoin d'installer de package spécifique. J'utilise généralement le HttpClient intégré pour effectuer des appels API.

  4. Je stocke la clé API de manière sécurisée. En développement, je pourrais utiliser les secrets utilisateur :

    dotnet user-secrets set "APITemplate:ApiKey" "YOUR-API-KEY-HERE"
    dotnet user-secrets set "APITemplate:ApiKey" "YOUR-API-KEY-HERE"
    SHELL
  5. Dans mon code, je configure le HttpClient avec la clé API :

    using System.Net.Http;
    using System.Net.Http.Headers;
    
    var client = new HttpClient();
    client.DefaultRequestHeaders.Add("X-API-KEY", Configuration["APITemplate:ApiKey"]);
    using System.Net.Http;
    using System.Net.Http.Headers;
    
    var client = new HttpClient();
    client.DefaultRequestHeaders.Add("X-API-KEY", Configuration["APITemplate:ApiKey"]);
    Imports System.Net.Http
    Imports System.Net.Http.Headers
    
    Private client = New HttpClient()
    client.DefaultRequestHeaders.Add("X-API-KEY", Configuration("APITemplate:ApiKey"))
    $vbLabelText   $csharpLabel
  6. Maintenant, je suis prêt à faire des appels API à APITemplate.

Pour ce projet, j'utiliserai le projet GitHub d'exemple officiel d'APITemplate qui est déjà configuré et vous devez seulement ajouter la clé du modèle. Avec ces installations terminées, je peux commencer à utiliser IronPDF et APITemplate dans mes projets C#. IronPDF fonctionne localement dans mon application, tandis qu'APITemplate nécessite une connectivité Internet pour communiquer avec ses serveurs.

Fonctionnalités avancées d'IronPDF vs APITemplate

En tant que développeur C#, j'ai eu l'occasion d'approfondir IronPDF et APITemplate. Explorons certaines de leurs fonctionnalités avancées qui m'ont impressionné.

Fonctionnalités avancées d'IronPDF

Conversion de HTML en PDF avec support de JavaScript

La conversion HTML en PDF d'IronPDF est plutôt impressionnante. Elle ne se contente pas de rendre du HTML statique - elle peut aussi gérer JavaScript. Cela a été un changement radical pour moi lors de la manipulation de contenu web dynamique.

Voici un exemple rapide de comment je l'utilise :

var Renderer = new ChromePdfRenderer();
string htmlContent = @"
    <html>
    <body>
        <h1>Dynamic Chart</h1>
        <canvas id='myChart'></canvas>
        <script src='https://cdn.jsdelivr.net/npm/chart.js'></script>
        <script>
            var ctx = document.getElementById('myChart').getContext('2d');
            new Chart(ctx, {
                type: 'bar',
                data: {
                    labels: ['Red', 'Blue', 'Yellow', 'Green', 'Purple', 'Orange'],
                    datasets: [{
                        label: '# of Votes',
                        data: [12, 19, 3, 5, 2, 3],
                        backgroundColor: [
                            'rgba(255, 99, 132, 0.2)',
                            'rgba(54, 162, 235, 0.2)',
                            'rgba(255, 206, 86, 0.2)',
                            'rgba(75, 192, 192, 0.2)',
                            'rgba(153, 102, 255, 0.2)',
                            'rgba(255, 159, 64, 0.2)'
                        ],
                        borderColor: [
                            'rgba(255, 99, 132, 1)',
                            'rgba(54, 162, 235, 1)',
                            'rgba(255, 206, 86, 1)',
                            'rgba(75, 192, 192, 1)',
                            'rgba(153, 102, 255, 1)',
                            'rgba(255, 159, 64, 1)'
                        ],
                        borderWidth: 1
                    }]
                },
                options: {
                    scales: {
                        y: {
                            beginAtZero: true
                        }
                    }
                }
            });
        </script>
    </body>
    </html>";
var PDF = Renderer.RenderHtmlAsPdf(htmlContent);
PDF.SaveAs("dynamic_chart.pdf");
var Renderer = new ChromePdfRenderer();
string htmlContent = @"
    <html>
    <body>
        <h1>Dynamic Chart</h1>
        <canvas id='myChart'></canvas>
        <script src='https://cdn.jsdelivr.net/npm/chart.js'></script>
        <script>
            var ctx = document.getElementById('myChart').getContext('2d');
            new Chart(ctx, {
                type: 'bar',
                data: {
                    labels: ['Red', 'Blue', 'Yellow', 'Green', 'Purple', 'Orange'],
                    datasets: [{
                        label: '# of Votes',
                        data: [12, 19, 3, 5, 2, 3],
                        backgroundColor: [
                            'rgba(255, 99, 132, 0.2)',
                            'rgba(54, 162, 235, 0.2)',
                            'rgba(255, 206, 86, 0.2)',
                            'rgba(75, 192, 192, 0.2)',
                            'rgba(153, 102, 255, 0.2)',
                            'rgba(255, 159, 64, 0.2)'
                        ],
                        borderColor: [
                            'rgba(255, 99, 132, 1)',
                            'rgba(54, 162, 235, 1)',
                            'rgba(255, 206, 86, 1)',
                            'rgba(75, 192, 192, 1)',
                            'rgba(153, 102, 255, 1)',
                            'rgba(255, 159, 64, 1)'
                        ],
                        borderWidth: 1
                    }]
                },
                options: {
                    scales: {
                        y: {
                            beginAtZero: true
                        }
                    }
                }
            });
        </script>
    </body>
    </html>";
var PDF = Renderer.RenderHtmlAsPdf(htmlContent);
PDF.SaveAs("dynamic_chart.pdf");
Dim Renderer = New ChromePdfRenderer()
Dim htmlContent As String = "
    <html>
    <body>
        <h1>Dynamic Chart</h1>
        <canvas id='myChart'></canvas>
        <script src='https://cdn.jsdelivr.net/npm/chart.js'></script>
        <script>
            var ctx = document.getElementById('myChart').getContext('2d');
            new Chart(ctx, {
                type: 'bar',
                data: {
                    labels: ['Red', 'Blue', 'Yellow', 'Green', 'Purple', 'Orange'],
                    datasets: [{
                        label: '# of Votes',
                        data: [12, 19, 3, 5, 2, 3],
                        backgroundColor: [
                            'rgba(255, 99, 132, 0.2)',
                            'rgba(54, 162, 235, 0.2)',
                            'rgba(255, 206, 86, 0.2)',
                            'rgba(75, 192, 192, 0.2)',
                            'rgba(153, 102, 255, 0.2)',
                            'rgba(255, 159, 64, 0.2)'
                        ],
                        borderColor: [
                            'rgba(255, 99, 132, 1)',
                            'rgba(54, 162, 235, 1)',
                            'rgba(255, 206, 86, 1)',
                            'rgba(75, 192, 192, 1)',
                            'rgba(153, 102, 255, 1)',
                            'rgba(255, 159, 64, 1)'
                        ],
                        borderWidth: 1
                    }]
                },
                options: {
                    scales: {
                        y: {
                            beginAtZero: true
                        }
                    }
                }
            });
        </script>
    </body>
    </html>"
Dim PDF = Renderer.RenderHtmlAsPdf(htmlContent)
PDF.SaveAs("dynamic_chart.pdf")
$vbLabelText   $csharpLabel

Ce code génère un PDF avec un graphique dynamique utilisant Chart.js. Le JavaScript est exécuté durant le processus de création du PDF, résultant en un PDF qui contient le graphique rendu. J'ai utilisé cela pour créer des rapports dynamiques où les données changent fréquemment, m'évitant de mettre à jour manuellement des graphiques et des diagrammes.

Comparaison entre APITemplate io et IronPDF pour les bibliothèques PDF en C# : Figure 5

La possibilité d'inclure des scripts externes, comme Chart.js dans cet exemple, signifie que je peux utiliser de puissantes bibliothèques JavaScript pour créer du contenu riche et dynamique dans mes PDF. De plus, cette fonctionnalité me permet d'utiliser des techniques de design CSS et responsive dans mon HTML, garantissant que le PDF résultant est superbe sur divers appareils et formats d'impression. J'ai même utilisé des media queries pour créer des PDF optimisés pour l'affichage-écran et l'impression à partir de la même source HTML.

Chiffrement et déchiffrement de PDF

La sécurité est primordiale dans nombre de mes projets, surtout lorsque je manipule des informations sensibles. Les capacités de chiffrement et déchiffrement d'IronPDF ont été inestimables dans ces scénarios.

var pdf = PdfDocument.FromFile("input.pdf");
// Set user password (for opening the document)
pdf.Password = "user_password";
// Set owner password (for editing, printing, etc.)
pdf.OwnerPassword = "owner_password";
// Set specific permissions
pdf.SecuritySettings.AllowUserPrinting = IronPdf.Security.PdfPrintSecurity.NoPrint;
pdf.SecuritySettings.AllowUserCopyPasteContent = false;
pdf.SecuritySettings.AllowUserEdits = IronPdf.Security.PdfEditSecurity.NoEdit;
pdf.SaveAs("highly_secured.pdf");
var pdf = PdfDocument.FromFile("input.pdf");
// Set user password (for opening the document)
pdf.Password = "user_password";
// Set owner password (for editing, printing, etc.)
pdf.OwnerPassword = "owner_password";
// Set specific permissions
pdf.SecuritySettings.AllowUserPrinting = IronPdf.Security.PdfPrintSecurity.NoPrint;
pdf.SecuritySettings.AllowUserCopyPasteContent = false;
pdf.SecuritySettings.AllowUserEdits = IronPdf.Security.PdfEditSecurity.NoEdit;
pdf.SaveAs("highly_secured.pdf");
Dim pdf = PdfDocument.FromFile("input.pdf")
' Set user password (for opening the document)
pdf.Password = "user_password"
' Set owner password (for editing, printing, etc.)
pdf.OwnerPassword = "owner_password"
' Set specific permissions
pdf.SecuritySettings.AllowUserPrinting = IronPdf.Security.PdfPrintSecurity.NoPrint
pdf.SecuritySettings.AllowUserCopyPasteContent = False
pdf.SecuritySettings.AllowUserEdits = IronPdf.Security.PdfEditSecurity.NoEdit
pdf.SaveAs("highly_secured.pdf")
$vbLabelText   $csharpLabel

Comparaison entre APITemplate io et IronPDF pour les bibliothèques PDF en C# : Figure 6

Ce code chiffre non seulement le PDF avec un mot de passe utilisateur, mais il définit également un mot de passe propriétaire avec un contrôle granulaire sur les autorisations. Je peux spécifier précisément ce que les utilisateurs peuvent et ne peuvent pas faire avec le PDF, comme l'impression ou la copie de contenu.

Pour le déchiffrement, j'opte souvent pour cette approche :

try
{
    var pdf = PdfDocument.FromFile("encrypted.pdf", "user_password");
    pdf.SecuritySettings.RemovePasswordsAndEncryption();
    pdf.SaveAs("decrypted.pdf");
    Console.WriteLine("PDF decrypted successfully!");
}
catch (Exception ex)
{
    Console.WriteLine($"Decryption failed: {ex.Message}");
}
try
{
    var pdf = PdfDocument.FromFile("encrypted.pdf", "user_password");
    pdf.SecuritySettings.RemovePasswordsAndEncryption();
    pdf.SaveAs("decrypted.pdf");
    Console.WriteLine("PDF decrypted successfully!");
}
catch (Exception ex)
{
    Console.WriteLine($"Decryption failed: {ex.Message}");
}
Try
	Dim pdf = PdfDocument.FromFile("encrypted.pdf", "user_password")
	pdf.SecuritySettings.RemovePasswordsAndEncryption()
	pdf.SaveAs("decrypted.pdf")
	Console.WriteLine("PDF decrypted successfully!")
Catch ex As Exception
	Console.WriteLine($"Decryption failed: {ex.Message}")
End Try
$vbLabelText   $csharpLabel

Ce code tente d'ouvrir un PDF chiffré avec un mot de passe utilisateur, supprime toutes les restrictions de sécurité et le sauvegarde comme un nouveau fichier non chiffré. Le bloc try-catch aide à gérer les cas où le mot de passe pourrait être incorrect.

J'ai utilisé ces fonctionnalités dans divers scénarios, tels que la création de systèmes de gestion de documents sécurisés où différents utilisateurs ont différents niveaux d'accès aux PDF. Par exemple, dans un système de dossiers médicaux, j'ai veillé à ce que les informations sensibles des patients soient chiffrées et accessibles seulement par du personnel autorisé.

Compression de PDF

Lorsque je traite un grand nombre de PDF, la taille des fichiers devient un facteur clé. La fonction de compression d'IronPDF a été un sauveur pour gérer les contraintes de stockage et de bande passante.

Voici un exemple plus avancé de comment j'utilise la compression :

using IronPdf;
using System.IO;
using PdfDocument = IronPdf.PdfDocument;

var PDF = PdfDocument.FromFile(@"F:/Test.pdf");
// Compress images
PDF.CompressImages(80); // 80% quality
// Compress fonts
PDF.CompressStructTree();
// Save the compressed PDF
PDF.SaveAs(@"F:/highly_compressed.pdf");
// Compare file sizes
var originalSize = new FileInfo(@"F:/Test.pdf").Length;
var compressedSize = new FileInfo(@"F:/highly_compressed.pdf").Length;
var compressionRatio = (1 - (double)compressedSize / originalSize) * 100;
Console.WriteLine($"Original size: {originalSize / 1024} KB");
Console.WriteLine($"Compressed size: {compressedSize / 1024} KB");
Console.WriteLine($"Compression ratio: {compressionRatio:F2}%");
using IronPdf;
using System.IO;
using PdfDocument = IronPdf.PdfDocument;

var PDF = PdfDocument.FromFile(@"F:/Test.pdf");
// Compress images
PDF.CompressImages(80); // 80% quality
// Compress fonts
PDF.CompressStructTree();
// Save the compressed PDF
PDF.SaveAs(@"F:/highly_compressed.pdf");
// Compare file sizes
var originalSize = new FileInfo(@"F:/Test.pdf").Length;
var compressedSize = new FileInfo(@"F:/highly_compressed.pdf").Length;
var compressionRatio = (1 - (double)compressedSize / originalSize) * 100;
Console.WriteLine($"Original size: {originalSize / 1024} KB");
Console.WriteLine($"Compressed size: {compressedSize / 1024} KB");
Console.WriteLine($"Compression ratio: {compressionRatio:F2}%");
Imports IronPdf
Imports System.IO
Imports PdfDocument = IronPdf.PdfDocument

Private PDF = PdfDocument.FromFile("F:/Test.pdf")
' Compress images
PDF.CompressImages(80) ' 80% quality
' Compress fonts
PDF.CompressStructTree()
' Save the compressed PDF
PDF.SaveAs("F:/highly_compressed.pdf")
' Compare file sizes
Dim originalSize = (New FileInfo("F:/Test.pdf")).Length
Dim compressedSize = (New FileInfo("F:/highly_compressed.pdf")).Length
Dim compressionRatio = (1 - CDbl(compressedSize) / originalSize) * 100
Console.WriteLine($"Original size: {originalSize \ 1024} KB")
Console.WriteLine($"Compressed size: {compressedSize \ 1024} KB")
Console.WriteLine($"Compression ratio: {compressionRatio:F2}%")
$vbLabelText   $csharpLabel

Voici le résultat :

Comparaison entre APITemplate io et IronPDF pour les bibliothèques PDF en C# : Figure 7

J'ai trouvé cette combinaison de techniques très efficace pour réduire la taille des fichiers sans affecter significativement la qualité.

J'ai utilisé cette fonctionnalité dans divers scénarios :

  1. Pièces jointes par email : Lorsque j'envoie des PDF par email, je les compresse pour m'assurer qu'ils ne dépassent pas les limites de taille des pièces jointes.
  2. Applications web : Pour les PDF qui doivent être téléchargés par les utilisateurs, la compression aide à réduire les temps de chargement et l'utilisation de la bande passante.
  3. Archivage : Lors du stockage d'un grand nombre de PDF pour une rétention à long terme, la compression réduit considérablement les coûts de stockage.

Dans un projet, j'ai travaillé sur un système de gestion de documents pour un cabinet d'avocats. Ils avaient des milliers de dossiers de cas au format PDF, dont beaucoup étaient des documents scannés avec de grandes tailles de fichiers. En mettant en œuvre cette technique de compression, nous avons réduit leurs besoins de stockage de plus de 60%, entraînant des économies importantes sur leurs factures de stockage cloud.

Signatures numériques

Ajouter des signatures numériques aux PDF est une fonctionnalité indispensable pour de nombreux processus métier pour garantir l'authenticité et la non-répudiation des documents. IronPDF rend cette tâche complexe étonnamment simple. Voici un exemple plus détaillé de comment je mets en œuvre des signatures numériques :

using IronPdf;
using IronPdf.Signing;

var renderer = new ChromePdfRenderer();
var pdf = PdfDocument.FromFile(@"F:/Contract.pdf");
var signature = new IronPdf.Signing.PdfSignature(@"F:/Iron.pfx", "123")
{
    // Step 3. Optional signing options and a handwritten signature graphic
    SigningContact = "support@ironsoftware.com",
    SigningLocation = "New York, USA",
    SigningReason = "Signing PDF"
};
pdf.Sign(signature);
pdf.SaveAs(@"F:/signed.pdf");
using IronPdf;
using IronPdf.Signing;

var renderer = new ChromePdfRenderer();
var pdf = PdfDocument.FromFile(@"F:/Contract.pdf");
var signature = new IronPdf.Signing.PdfSignature(@"F:/Iron.pfx", "123")
{
    // Step 3. Optional signing options and a handwritten signature graphic
    SigningContact = "support@ironsoftware.com",
    SigningLocation = "New York, USA",
    SigningReason = "Signing PDF"
};
pdf.Sign(signature);
pdf.SaveAs(@"F:/signed.pdf");
Imports IronPdf
Imports IronPdf.Signing

Private renderer = New ChromePdfRenderer()
Private pdf = PdfDocument.FromFile("F:/Contract.pdf")
Private signature = New IronPdf.Signing.PdfSignature("F:/Iron.pfx", "123") With {
	.SigningContact = "support@ironsoftware.com",
	.SigningLocation = "New York, USA",
	.SigningReason = "Signing PDF"
}
pdf.Sign(signature)
pdf.SaveAs("F:/signed.pdf")
$vbLabelText   $csharpLabel

J'ai utilisé cette fonctionnalité dans plusieurs applications du monde réel :

  1. Système de gestion des contrats : Nous l'avons mis en place pour une entreprise qui devait envoyer et recevoir des contrats signés électroniquement. Les signatures numériques assuraient la validité légale des contrats.
  2. Système de dossiers médicaux : Dans une application de santé, nous avons utilisé des signatures numériques pour permettre aux médecins de signer des dossiers de patients et des ordonnances.
  3. Traitement des documents gouvernementaux : Pour une agence gouvernementale, nous avons mis en œuvre un système où des documents officiels pouvaient être signés numériquement.

Division et fusion de PDF

La capacité de diviser et fusionner des PDF est une fonctionnalité fondamentale que j'utilise fréquemment dans les systèmes de gestion de documents. La mise en œuvre de ces fonctionnalités par IronPDF est à la fois puissante et flexible. Voici un exemple plus avancé de division et fusion de PDF :

using IronPdf;
class Program
{
    static void Main(string[] args)
    {
        // Create first PDF with three pages
        const string html_a = @"
            <h1>Document A</h1>
            <p>This is the first page of Document A.</p>
            <div style='page-break-after: always;'></div>
            <h2>Document A - Page 2</h2>
            <p>This is the second page of Document A.</p>
            <div style='page-break-after: always;'></div>
            <h2>Document A - Page 3</h2>
            <p>This is the third and final page of Document A.</p>";
        // Create second PDF with two pages
        const string html_b = @"
            <h1>Document B</h1>
            <p>Welcome to the first page of Document B.</p>
            <div style='page-break-after: always;'></div>
            <h2>Document B - Page 2</h2>
            <p>This is the second and last page of Document B.</p>";
        // Render HTML to PDF
        var renderer = new ChromePdfRenderer();
        var pdfdoc_a = renderer.RenderHtmlAsPdf(html_a);
        var pdfdoc_b = renderer.RenderHtmlAsPdf(html_b);
        // Merge PDFs
        var merged = PdfDocument.Merge(pdfdoc_a, pdfdoc_b);
        merged.SaveAs(@"F:/IronPdf/MergedDocument.pdf");
        Console.WriteLine("Merged PDF created: MergedDocument.pdf");
        // Load the merged PDF
        var pdf = PdfDocument.FromFile(@"F:/IronPdf/MergedDocument.pdf");
        // Extract the first page
        var firstPage = pdf.CopyPage(0);
        firstPage.SaveAs(@"F:/IronPdf/FirstPageOnly.pdf");
        Console.WriteLine("First page extracted: FirstPageOnly.pdf");
        // Extract pages 2 to 4 (note: index starts at 0)
        var middlePages = pdf.CopyPages(1, 3);
        middlePages.SaveAs(@"F:/IronPdf/Pages2to4.pdf");
        Console.WriteLine("Pages 2 to 4 extracted: Pages2to4.pdf");
        Console.WriteLine("Process completed. Press any key to exit.");
        Console.ReadKey();
    }
}
using IronPdf;
class Program
{
    static void Main(string[] args)
    {
        // Create first PDF with three pages
        const string html_a = @"
            <h1>Document A</h1>
            <p>This is the first page of Document A.</p>
            <div style='page-break-after: always;'></div>
            <h2>Document A - Page 2</h2>
            <p>This is the second page of Document A.</p>
            <div style='page-break-after: always;'></div>
            <h2>Document A - Page 3</h2>
            <p>This is the third and final page of Document A.</p>";
        // Create second PDF with two pages
        const string html_b = @"
            <h1>Document B</h1>
            <p>Welcome to the first page of Document B.</p>
            <div style='page-break-after: always;'></div>
            <h2>Document B - Page 2</h2>
            <p>This is the second and last page of Document B.</p>";
        // Render HTML to PDF
        var renderer = new ChromePdfRenderer();
        var pdfdoc_a = renderer.RenderHtmlAsPdf(html_a);
        var pdfdoc_b = renderer.RenderHtmlAsPdf(html_b);
        // Merge PDFs
        var merged = PdfDocument.Merge(pdfdoc_a, pdfdoc_b);
        merged.SaveAs(@"F:/IronPdf/MergedDocument.pdf");
        Console.WriteLine("Merged PDF created: MergedDocument.pdf");
        // Load the merged PDF
        var pdf = PdfDocument.FromFile(@"F:/IronPdf/MergedDocument.pdf");
        // Extract the first page
        var firstPage = pdf.CopyPage(0);
        firstPage.SaveAs(@"F:/IronPdf/FirstPageOnly.pdf");
        Console.WriteLine("First page extracted: FirstPageOnly.pdf");
        // Extract pages 2 to 4 (note: index starts at 0)
        var middlePages = pdf.CopyPages(1, 3);
        middlePages.SaveAs(@"F:/IronPdf/Pages2to4.pdf");
        Console.WriteLine("Pages 2 to 4 extracted: Pages2to4.pdf");
        Console.WriteLine("Process completed. Press any key to exit.");
        Console.ReadKey();
    }
}
Imports IronPdf
Friend Class Program
	Shared Sub Main(ByVal args() As String)
		' Create first PDF with three pages
		Const html_a As String = "
            <h1>Document A</h1>
            <p>This is the first page of Document A.</p>
            <div style='page-break-after: always;'></div>
            <h2>Document A - Page 2</h2>
            <p>This is the second page of Document A.</p>
            <div style='page-break-after: always;'></div>
            <h2>Document A - Page 3</h2>
            <p>This is the third and final page of Document A.</p>"
		' Create second PDF with two pages
		Const html_b As String = "
            <h1>Document B</h1>
            <p>Welcome to the first page of Document B.</p>
            <div style='page-break-after: always;'></div>
            <h2>Document B - Page 2</h2>
            <p>This is the second and last page of Document B.</p>"
		' Render HTML to PDF
		Dim renderer = New ChromePdfRenderer()
		Dim pdfdoc_a = renderer.RenderHtmlAsPdf(html_a)
		Dim pdfdoc_b = renderer.RenderHtmlAsPdf(html_b)
		' Merge PDFs
		Dim merged = PdfDocument.Merge(pdfdoc_a, pdfdoc_b)
		merged.SaveAs("F:/IronPdf/MergedDocument.pdf")
		Console.WriteLine("Merged PDF created: MergedDocument.pdf")
		' Load the merged PDF
		Dim pdf = PdfDocument.FromFile("F:/IronPdf/MergedDocument.pdf")
		' Extract the first page
		Dim firstPage = pdf.CopyPage(0)
		firstPage.SaveAs("F:/IronPdf/FirstPageOnly.pdf")
		Console.WriteLine("First page extracted: FirstPageOnly.pdf")
		' Extract pages 2 to 4 (note: index starts at 0)
		Dim middlePages = pdf.CopyPages(1, 3)
		middlePages.SaveAs("F:/IronPdf/Pages2to4.pdf")
		Console.WriteLine("Pages 2 to 4 extracted: Pages2to4.pdf")
		Console.WriteLine("Process completed. Press any key to exit.")
		Console.ReadKey()
	End Sub
End Class
$vbLabelText   $csharpLabel

Comparaison entre APITemplate io et IronPDF pour les bibliothèques PDF en C# : Figure 8

Voici le document fusionné généré par le code :

Comparaison entre APITemplate io et IronPDF pour les bibliothèques PDF en C# : Figure 9

Remplissage de formulaires

L'automatisation du remplissage de formulaires a fait gagner beaucoup de temps dans plusieurs de mes projets. IronPDF me permet de remplir des formulaires PDF de manière programmatique, ce qui est inestimable pour traiter de gros volumes de formulaires ou créer des documents personnalisés. Voici un exemple plus complet de remplissage de formulaires :

using IronPdf;
using System;

// Load the combined form
PdfDocument pdf = PdfDocument.FromFile(@"F:/completeForm.pdf");

// Handle radio buttons
var radioForm = pdf.Form.FindFormField("traveltype");
radioForm.Value = "Airplane";

// Handle checkbox
var checkboxForm = pdf.Form.FindFormField("taskCompleted");
checkboxForm.Value = "Yes";

// Handle combobox
var comboboxForm = pdf.Form.FindFormField("priority");
comboboxForm.Value = "Low";

// Print out all the available choices for combobox
foreach (var choice in comboboxForm.Choices)
{
    Console.WriteLine(choice);
}

// Handle text inputs
pdf.Form.FindFormField("firstname").Value = "John";
pdf.Form.FindFormField("lastname").Value = "Smith";

// Handle text area
pdf.Form.FindFormField("address").Value = "Iron Software\r\n205 N. Michigan Ave.";

// Save the edited PDF
pdf.SaveAs(@"F:/completeFormEdited.pdf");
using IronPdf;
using System;

// Load the combined form
PdfDocument pdf = PdfDocument.FromFile(@"F:/completeForm.pdf");

// Handle radio buttons
var radioForm = pdf.Form.FindFormField("traveltype");
radioForm.Value = "Airplane";

// Handle checkbox
var checkboxForm = pdf.Form.FindFormField("taskCompleted");
checkboxForm.Value = "Yes";

// Handle combobox
var comboboxForm = pdf.Form.FindFormField("priority");
comboboxForm.Value = "Low";

// Print out all the available choices for combobox
foreach (var choice in comboboxForm.Choices)
{
    Console.WriteLine(choice);
}

// Handle text inputs
pdf.Form.FindFormField("firstname").Value = "John";
pdf.Form.FindFormField("lastname").Value = "Smith";

// Handle text area
pdf.Form.FindFormField("address").Value = "Iron Software\r\n205 N. Michigan Ave.";

// Save the edited PDF
pdf.SaveAs(@"F:/completeFormEdited.pdf");
Imports Microsoft.VisualBasic
Imports IronPdf
Imports System

' Load the combined form
Private pdf As PdfDocument = PdfDocument.FromFile("F:/completeForm.pdf")

' Handle radio buttons
Private radioForm = pdf.Form.FindFormField("traveltype")
radioForm.Value = "Airplane"

' Handle checkbox
Dim checkboxForm = pdf.Form.FindFormField("taskCompleted")
checkboxForm.Value = "Yes"

' Handle combobox
Dim comboboxForm = pdf.Form.FindFormField("priority")
comboboxForm.Value = "Low"

' Print out all the available choices for combobox
For Each choice In comboboxForm.Choices
	Console.WriteLine(choice)
Next choice

' Handle text inputs
pdf.Form.FindFormField("firstname").Value = "John"
pdf.Form.FindFormField("lastname").Value = "Smith"

' Handle text area
pdf.Form.FindFormField("address").Value = "Iron Software" & vbCrLf & "205 N. Michigan Ave."

' Save the edited PDF
pdf.SaveAs("F:/completeFormEdited.pdf")
$vbLabelText   $csharpLabel

J'ai utilisé cette fonctionnalité dans plusieurs applications du monde réel :

  1. Système d'intégration de RH : Nous avons créé un système qui remplissait automatiquement les documents des nouveaux employés à partir des informations de la base de données RH, économisant des heures de saisie manuelle.

  2. Traitement des réclamations d'assurance : Pour une compagnie d'assurance, nous avons construit un système qui pré-remplissait les formulaires de réclamation avec les informations des assurés, accélérant considérablement le processus de soumission des réclamations.

  3. Système de demande d'inscription scolaire : Dans un projet éducatif, nous avons mis en place un système qui remplissait des formulaires de candidature scolaire à partir des données des étudiants, facilitant le processus de candidature pour les étudiants et le personnel administratif.

  4. Génération de formulaires fiscaux : Pour un cabinet comptable, nous avons créé un système qui remplissait automatiquement les formulaires fiscaux à partir des données financières des clients, réduisant les erreurs et économisant du temps pendant la saison fiscale.

La capacité de remplir des formulaires de manière programmatique a été un facteur clé dans l'automatisation de nombreux processus métier, conduisant à des économies de temps significatives et à une réduction des erreurs dues à la saisie manuelle des données.

Filigrane

Ajouter des filigranes aux PDF est souvent nécessaire pour l'image de marque, la sécurité, ou l'indication de statut. IronPDF offre des fonctionnalités de filigrane flexibles que j'ai trouvées utiles dans de nombreux projets. Voici un exemple plus détaillé de comment j'utilise le filigrane :

using IronPdf;
using IronSoftware.Drawing;

string watermarkHtml = @"
<img style='width: 250px;' src='https://ironsoftware.com/img/products/ironpdf-logo-text-dotnet.svg'>
<h1>Iron Software</h1>";

ChromePdfRenderer renderer = new ChromePdfRenderer();
PdfDocument pdf = renderer.RenderHtmlAsPdf("<h1>Watermark</h1>");

// Apply watermark with 45 degrees rotation and 70% opacity
pdf.ApplyWatermark(watermarkHtml, rotation: 30, opacity: 90);
pdf.SaveAs("watermarkOpacity&amp;Rotation.pdf");
using IronPdf;
using IronSoftware.Drawing;

string watermarkHtml = @"
<img style='width: 250px;' src='https://ironsoftware.com/img/products/ironpdf-logo-text-dotnet.svg'>
<h1>Iron Software</h1>";

ChromePdfRenderer renderer = new ChromePdfRenderer();
PdfDocument pdf = renderer.RenderHtmlAsPdf("<h1>Watermark</h1>");

// Apply watermark with 45 degrees rotation and 70% opacity
pdf.ApplyWatermark(watermarkHtml, rotation: 30, opacity: 90);
pdf.SaveAs("watermarkOpacity&amp;Rotation.pdf");
Imports IronPdf
Imports IronSoftware.Drawing

Private watermarkHtml As String = "
<img style='width: 250px;' src='https://ironsoftware.com/img/products/ironpdf-logo-text-dotnet.svg'>
<h1>Iron Software</h1>"

Private renderer As New ChromePdfRenderer()
Private pdf As PdfDocument = renderer.RenderHtmlAsPdf("<h1>Watermark</h1>")

' Apply watermark with 45 degrees rotation and 70% opacity
pdf.ApplyWatermark(watermarkHtml, rotation:= 30, opacity:= 90)
pdf.SaveAs("watermarkOpacity&amp;Rotation.pdf")
$vbLabelText   $csharpLabel

Comparaison entre APITemplate io et IronPDF pour les bibliothèques PDF en C# : Figure 10

Fonctionnalités avancées d'APITemplate

Génération dynamique de modèles

La génération dynamique de modèles d'APITemplate est une fonctionnalité puissante qui permet la création de documents hautement personnalisables en utilisant des données JSON personnalisées. L'API d'APITemplate prend en charge les composants dynamiques. Vous pouvez obtenir à la fois des sorties PDF et image de votre code. Dans la console API, j'ai pu utiliser l'éditeur WYSIWYG pour générer facilement des documents PDF.

Explorons plus en profondeur comment j'ai utilisé cela dans mes projets.

using System;
using System.IO;
using System.Net.Http;
using System.Text.Json;
using System.Threading.Tasks;

namespace csharp
{
    class ReturnContent
    {
        public string download_url { get; set; }
        public string status { get; set; }
    }

    class Program
    {
        static async Task Main(string[] args)
        {
            var api_key = "a9e4MjA2NTg6MTc3Njk6Uk1ZSzVjTWs1T3d6VE9Mdw=";
            var template_id = "bf077b23b4a407ae";
            var url = $"https://rest.apitemplate.io/v2/create-pdf?template_id={template_id}";
            var data = new
            {
                date = "15/05/2022",
                invoice_no = "435568799",
                sender_address1 = "3244 Jurong Drive",
                sender_address2 = "Falmouth Maine 1703",
                sender_phone = "255-781-6789",
                sender_email = "dev@ironsoftware.com",
                rece_addess1 = "2354 Lakeside Drive",
                rece_addess2 = "New York 234562 ",
                rece_phone = "34333-84-223",
                rece_email = "info@ironsoftware.com",
                items = new[]
                {
                    new { item_name = "Oil", unit = 1, unit_price = 100, total = 100 },
                    new { item_name = "Rice", unit = 2, unit_price = 200, total = 400 },
                    new { item_name = "Orange", unit = 7, unit_price = 20, total = 1400 }
                },
                total = "total",
                footer_email = "info@ironsoftware.com"
            };
            var json_content = JsonSerializer.Serialize(data);
            var buffer = System.Text.Encoding.UTF8.GetBytes(json_content);
            var byteContent = new ByteArrayContent(buffer);
            Console.WriteLine(json_content);
            var client = new HttpClient();
            client.DefaultRequestHeaders.Add("X-API-KEY", api_key);
            var response = await client.PostAsync(url, byteContent);
            var ret = await response.Content.ReadAsStringAsync();
            var returnContent = JsonSerializer.Deserialize<ReturnContent>(ret);
            if (returnContent.status == "success")
            {
                Console.WriteLine($"Downloading {returnContent.download_url}...");
                var download_response = await client.GetAsync(returnContent.download_url);
                using (var stream = await download_response.Content.ReadAsStreamAsync())
                {
                    var fileInfo = new FileInfo(@"F:/generated_document.pdf");
                    using (var fileStream = fileInfo.OpenWrite())
                    {
                        await stream.CopyToAsync(fileStream);
                    }
                }
                Console.WriteLine("PDF file has been downloaded and saved as 'generated_document.pdf'");
            }
        }
    }
}
using System;
using System.IO;
using System.Net.Http;
using System.Text.Json;
using System.Threading.Tasks;

namespace csharp
{
    class ReturnContent
    {
        public string download_url { get; set; }
        public string status { get; set; }
    }

    class Program
    {
        static async Task Main(string[] args)
        {
            var api_key = "a9e4MjA2NTg6MTc3Njk6Uk1ZSzVjTWs1T3d6VE9Mdw=";
            var template_id = "bf077b23b4a407ae";
            var url = $"https://rest.apitemplate.io/v2/create-pdf?template_id={template_id}";
            var data = new
            {
                date = "15/05/2022",
                invoice_no = "435568799",
                sender_address1 = "3244 Jurong Drive",
                sender_address2 = "Falmouth Maine 1703",
                sender_phone = "255-781-6789",
                sender_email = "dev@ironsoftware.com",
                rece_addess1 = "2354 Lakeside Drive",
                rece_addess2 = "New York 234562 ",
                rece_phone = "34333-84-223",
                rece_email = "info@ironsoftware.com",
                items = new[]
                {
                    new { item_name = "Oil", unit = 1, unit_price = 100, total = 100 },
                    new { item_name = "Rice", unit = 2, unit_price = 200, total = 400 },
                    new { item_name = "Orange", unit = 7, unit_price = 20, total = 1400 }
                },
                total = "total",
                footer_email = "info@ironsoftware.com"
            };
            var json_content = JsonSerializer.Serialize(data);
            var buffer = System.Text.Encoding.UTF8.GetBytes(json_content);
            var byteContent = new ByteArrayContent(buffer);
            Console.WriteLine(json_content);
            var client = new HttpClient();
            client.DefaultRequestHeaders.Add("X-API-KEY", api_key);
            var response = await client.PostAsync(url, byteContent);
            var ret = await response.Content.ReadAsStringAsync();
            var returnContent = JsonSerializer.Deserialize<ReturnContent>(ret);
            if (returnContent.status == "success")
            {
                Console.WriteLine($"Downloading {returnContent.download_url}...");
                var download_response = await client.GetAsync(returnContent.download_url);
                using (var stream = await download_response.Content.ReadAsStreamAsync())
                {
                    var fileInfo = new FileInfo(@"F:/generated_document.pdf");
                    using (var fileStream = fileInfo.OpenWrite())
                    {
                        await stream.CopyToAsync(fileStream);
                    }
                }
                Console.WriteLine("PDF file has been downloaded and saved as 'generated_document.pdf'");
            }
        }
    }
}
Imports System
Imports System.IO
Imports System.Net.Http
Imports System.Text.Json
Imports System.Threading.Tasks

Namespace csharp
	Friend Class ReturnContent
		Public Property download_url() As String
		Public Property status() As String
	End Class

	Friend Class Program
		Shared Async Function Main(ByVal args() As String) As Task
			Dim api_key = "a9e4MjA2NTg6MTc3Njk6Uk1ZSzVjTWs1T3d6VE9Mdw="
			Dim template_id = "bf077b23b4a407ae"
			Dim url = $"https://rest.apitemplate.io/v2/create-pdf?template_id={template_id}"
			Dim data = New With {
				Key .date = "15/05/2022",
				Key .invoice_no = "435568799",
				Key .sender_address1 = "3244 Jurong Drive",
				Key .sender_address2 = "Falmouth Maine 1703",
				Key .sender_phone = "255-781-6789",
				Key .sender_email = "dev@ironsoftware.com",
				Key .rece_addess1 = "2354 Lakeside Drive",
				Key .rece_addess2 = "New York 234562 ",
				Key .rece_phone = "34333-84-223",
				Key .rece_email = "info@ironsoftware.com",
				Key .items = {
					New With {
						Key .item_name = "Oil",
						Key .unit = 1,
						Key .unit_price = 100,
						Key .total = 100
					},
					New With {
						Key .item_name = "Rice",
						Key .unit = 2,
						Key .unit_price = 200,
						Key .total = 400
					},
					New With {
						Key .item_name = "Orange",
						Key .unit = 7,
						Key .unit_price = 20,
						Key .total = 1400
					}
				},
				Key .total = "total",
				Key .footer_email = "info@ironsoftware.com"
			}
			Dim json_content = JsonSerializer.Serialize(data)
			Dim buffer = System.Text.Encoding.UTF8.GetBytes(json_content)
			Dim byteContent = New ByteArrayContent(buffer)
			Console.WriteLine(json_content)
			Dim client = New HttpClient()
			client.DefaultRequestHeaders.Add("X-API-KEY", api_key)
			Dim response = Await client.PostAsync(url, byteContent)
			Dim ret = Await response.Content.ReadAsStringAsync()
			Dim returnContent = JsonSerializer.Deserialize(Of ReturnContent)(ret)
			If returnContent.status = "success" Then
				Console.WriteLine($"Downloading {returnContent.download_url}...")
				Dim download_response = Await client.GetAsync(returnContent.download_url)
				Using stream = Await download_response.Content.ReadAsStreamAsync()
					Dim fileInfo As New FileInfo("F:/generated_document.pdf")
					Using fileStream = fileInfo.OpenWrite()
						Await stream.CopyToAsync(fileStream)
					End Using
				End Using
				Console.WriteLine("PDF file has been downloaded and saved as 'generated_document.pdf'")
			End If
		End Function
	End Class
End Namespace
$vbLabelText   $csharpLabel

Comparaison entre APITemplate io et IronPDF pour les bibliothèques PDF en C# : Figure 11

Ceci est le document PDF généré :

Comparaison entre APITemplate io et IronPDF pour les bibliothèques PDF en C# : Figure 12

Génération massive de PDF

La fonction de génération massive de PDF d'APITemplate est révolutionnaire quand il s'agit de créer plusieurs documents en un seul appel API. Voici un exemple plus détaillé de comment je l'ai utilisée :

using System;
using System.IO;
using System.Net.Http;
using System.Text.Json;
using System.Threading.Tasks;
using System.Collections.Generic;

namespace csharp
{
    class ReturnContent
    {
        public string download_url { get; set; }
        public string status { get; set; }
    }

    class Program
    {
        static async Task Main(string[] args)
        {
            var api_key = "a9e4MjA2NTg6MTc3Njk6Uk1ZSzVjTWs1T3d6VE9Mdw=";
            var template_id = "d4f77b23b4ab09fa";
            var url = $"https://rest.apitemplate.io/v2/create-pdf?template_id={template_id}";
            var membershipCards = new List<object>
            {
                new { name = "Iron Dev 1", email = "dev1@ironsoftware.com", membership_id = "M001", expiry_date = "2024-12-31" },
                new { name = "Iron Dev 2", email = "dev2@ironsoftware.com", membership_id = "M002", expiry_date = "2025-06-30" },
                new { name = "Iron Dev 3", email = "dev3@ironsoftware.com", membership_id = "M003", expiry_date = "2024-09-15" }
            };
            var client = new HttpClient();
            client.DefaultRequestHeaders.Add("X-API-KEY", api_key);
            for (int i = 0; i < membershipCards.Count; i++)
            {
                var json_content = JsonSerializer.Serialize(membershipCards[i]);
                var buffer = System.Text.Encoding.UTF8.GetBytes(json_content);
                var byteContent = new ByteArrayContent(buffer);
                Console.WriteLine($"Creating PDF for {((dynamic)membershipCards[i]).name}...");
                var response = await client.PostAsync(url, byteContent);
                var ret = await response.Content.ReadAsStringAsync();
                var returnContent = JsonSerializer.Deserialize<ReturnContent>(ret);
                if (returnContent.status == "success")
                {
                    Console.WriteLine($"Downloading {returnContent.download_url}...");
                    var download_response = await client.GetAsync(returnContent.download_url);
                    using (var stream = await download_response.Content.ReadAsStreamAsync())
                    {
                        var fileInfo = new FileInfo($"F:/membership_card_{i + 1}.pdf");
                        using (var fileStream = fileInfo.OpenWrite())
                        {
                            await stream.CopyToAsync(fileStream);
                        }
                    }
                    Console.WriteLine($"PDF file has been downloaded and saved as 'membership_card_{i + 1}.pdf'");
                }
                else
                {
                    Console.WriteLine($"Failed to create PDF for {((dynamic)membershipCards[i]).name}. Status: {returnContent.status}");
                }
            }
        }
    }
}
using System;
using System.IO;
using System.Net.Http;
using System.Text.Json;
using System.Threading.Tasks;
using System.Collections.Generic;

namespace csharp
{
    class ReturnContent
    {
        public string download_url { get; set; }
        public string status { get; set; }
    }

    class Program
    {
        static async Task Main(string[] args)
        {
            var api_key = "a9e4MjA2NTg6MTc3Njk6Uk1ZSzVjTWs1T3d6VE9Mdw=";
            var template_id = "d4f77b23b4ab09fa";
            var url = $"https://rest.apitemplate.io/v2/create-pdf?template_id={template_id}";
            var membershipCards = new List<object>
            {
                new { name = "Iron Dev 1", email = "dev1@ironsoftware.com", membership_id = "M001", expiry_date = "2024-12-31" },
                new { name = "Iron Dev 2", email = "dev2@ironsoftware.com", membership_id = "M002", expiry_date = "2025-06-30" },
                new { name = "Iron Dev 3", email = "dev3@ironsoftware.com", membership_id = "M003", expiry_date = "2024-09-15" }
            };
            var client = new HttpClient();
            client.DefaultRequestHeaders.Add("X-API-KEY", api_key);
            for (int i = 0; i < membershipCards.Count; i++)
            {
                var json_content = JsonSerializer.Serialize(membershipCards[i]);
                var buffer = System.Text.Encoding.UTF8.GetBytes(json_content);
                var byteContent = new ByteArrayContent(buffer);
                Console.WriteLine($"Creating PDF for {((dynamic)membershipCards[i]).name}...");
                var response = await client.PostAsync(url, byteContent);
                var ret = await response.Content.ReadAsStringAsync();
                var returnContent = JsonSerializer.Deserialize<ReturnContent>(ret);
                if (returnContent.status == "success")
                {
                    Console.WriteLine($"Downloading {returnContent.download_url}...");
                    var download_response = await client.GetAsync(returnContent.download_url);
                    using (var stream = await download_response.Content.ReadAsStreamAsync())
                    {
                        var fileInfo = new FileInfo($"F:/membership_card_{i + 1}.pdf");
                        using (var fileStream = fileInfo.OpenWrite())
                        {
                            await stream.CopyToAsync(fileStream);
                        }
                    }
                    Console.WriteLine($"PDF file has been downloaded and saved as 'membership_card_{i + 1}.pdf'");
                }
                else
                {
                    Console.WriteLine($"Failed to create PDF for {((dynamic)membershipCards[i]).name}. Status: {returnContent.status}");
                }
            }
        }
    }
}
'INSTANT VB NOTE: 'Option Strict Off' is used here since dynamic typing is used:
Option Strict Off

Imports System
Imports System.IO
Imports System.Net.Http
Imports System.Text.Json
Imports System.Threading.Tasks
Imports System.Collections.Generic

Namespace csharp
	Friend Class ReturnContent
		Public Property download_url() As String
		Public Property status() As String
	End Class

	Friend Class Program
		Shared Async Function Main(ByVal args() As String) As Task
			Dim api_key = "a9e4MjA2NTg6MTc3Njk6Uk1ZSzVjTWs1T3d6VE9Mdw="
			Dim template_id = "d4f77b23b4ab09fa"
			Dim url = $"https://rest.apitemplate.io/v2/create-pdf?template_id={template_id}"
			Dim membershipCards = New List(Of Object) From {
				New With {
					Key .name = "Iron Dev 1",
					Key .email = "dev1@ironsoftware.com",
					Key .membership_id = "M001",
					Key .expiry_date = "2024-12-31"
				},
				New With {
					Key .name = "Iron Dev 2",
					Key .email = "dev2@ironsoftware.com",
					Key .membership_id = "M002",
					Key .expiry_date = "2025-06-30"
				},
				New With {
					Key .name = "Iron Dev 3",
					Key .email = "dev3@ironsoftware.com",
					Key .membership_id = "M003",
					Key .expiry_date = "2024-09-15"
				}
			}
			Dim client = New HttpClient()
			client.DefaultRequestHeaders.Add("X-API-KEY", api_key)
			For i As Integer = 0 To membershipCards.Count - 1
				Dim json_content = JsonSerializer.Serialize(membershipCards(i))
				Dim buffer = System.Text.Encoding.UTF8.GetBytes(json_content)
				Dim byteContent = New ByteArrayContent(buffer)
'INSTANT VB NOTE: In the following line, Instant VB substituted 'Object' for 'dynamic' - this will work in VB with Option Strict Off:
				Console.WriteLine($"Creating PDF for {CType(membershipCards(i), Object).name}...")
				Dim response = Await client.PostAsync(url, byteContent)
				Dim ret = Await response.Content.ReadAsStringAsync()
				Dim returnContent = JsonSerializer.Deserialize(Of ReturnContent)(ret)
				If returnContent.status = "success" Then
					Console.WriteLine($"Downloading {returnContent.download_url}...")
					Dim download_response = Await client.GetAsync(returnContent.download_url)
					Using stream = Await download_response.Content.ReadAsStreamAsync()
						Dim fileInfo As New FileInfo($"F:/membership_card_{i + 1}.pdf")
						Using fileStream = fileInfo.OpenWrite()
							Await stream.CopyToAsync(fileStream)
						End Using
					End Using
					Console.WriteLine($"PDF file has been downloaded and saved as 'membership_card_{i + 1}.pdf'")
				Else
'INSTANT VB NOTE: In the following line, Instant VB substituted 'Object' for 'dynamic' - this will work in VB with Option Strict Off:
					Console.WriteLine($"Failed to create PDF for {CType(membershipCards(i), Object).name}. Status: {returnContent.status}")
				End If
			Next i
		End Function
	End Class
End Namespace
$vbLabelText   $csharpLabel

Ce code génère plusieurs cartes de membre en un seul appel API. Chaque carte est personnalisée avec les informations individuelles du membre. Voici une carte générée par ce code :

Comparaison entre APITemplate io et IronPDF pour les bibliothèques PDF en C# : Figure 13

Génération d'images

Bien que la génération de PDF soit le principal objectif d'APITemplate, ses capacités de génération d'images sont tout aussi impressionnantes. Vous pouvez générer des images sur les réseaux sociaux à l'aide de modèles d'image dans la console. Il propose également une découpe intelligente d'image responsive. L'API de génération de bannière est la même que l'API image. Voici un exemple plus complexe de comment je l'ai utilisée :

using System;
using System.IO;
using System.Net.Http;
using System.Text;
using System.Text.Json;
using System.Threading.Tasks;

namespace csharp
{
    class ReturnContent
    {
        public string download_url { get; set; }
        public string status { get; set; }
    }

    class Program
    {
        static async Task Main(string[] args)
        {
            var api_key = "a9e4MjA2NTg6MTc3Njk6Uk1ZSzVjTWs1T3d6VE9Mdw=";
            var template_id = "f4377b23b4aeeed0";
            var url = $"https://rest.apitemplate.io/v2/create-image?template_id={template_id}";
            var json_content = @"{
    ""overrides"": [
        {
            ""name"": ""rect_image_bg"",
            ""stroke"": ""grey"",
            ""src"": ""https://images.unsplash.com/photo-1542401886-65d6c61db217?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=MnwxOTc1MDZ8MHwxfHNlYXJjaHwzfHxkZXNlcnR8ZW58MHwwfHx8MTYyMTUxOTI2OA&ixlib=rb-1.2.1&q=80&w=1080""
        },
        {
            ""name"": ""rect_container"",
            ""stroke"": ""grey"",
            ""backgroundColor"": ""rgba(255, 255, 255, 0.62)""
        },
        {
            ""name"": ""text_quote"",
            ""text"": ""Just witnessed the most breathtaking sunset over the Sahara. The way the light dances on the dunes, painting the sky in shades of orange and purple, is truly magical. Nature's artistry at its finest!  #DesertAdventures #SaharaSkies"",
            ""textBackgroundColor"": ""rgba(246, 243, 243, 0)"",
            ""color"": ""#414141""
        },
        {
            ""name"": ""text_footer"",
            ""text"": ""2024-07-30 - Twitter - iPhone 16 Pro"",
            ""textBackgroundColor"": ""rgba(246, 243, 243, 0)"",
            ""color"": ""#666666""
        },
        {
            ""name"": ""circle_profile"",
            ""stroke"": ""grey"",
            ""src"": ""https://images.unsplash.com/photo-1520998116484-6eeb2f72b5b9?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=MnwxOTc1MDZ8MHwxfHNlYXJjaHw2Mnx8aGFwcHl8ZW58MHwwfHx8MTYyMTY5MjkwNw&ixlib=rb-1.2.1&q=80&w=1080""
        },
        {
            ""name"": ""text_name"",
            ""text"": ""Sarah Wanderlust"",
            ""textBackgroundColor"": ""rgba(246, 243, 243, 0)"",
            ""color"": ""#4E4E4E""
        },
        {
            ""name"": ""text_twitter"",
            ""text"": ""@sarahexplores"",
            ""textBackgroundColor"": ""rgba(246, 243, 243, 0)"",
            ""color"": ""#4E4E4E""
        }
    ]
}";
            var buffer = System.Text.Encoding.UTF8.GetBytes(json_content);
            var byteContent = new ByteArrayContent(buffer);
            Console.WriteLine(json_content);
            var client = new HttpClient();
            client.DefaultRequestHeaders.Add("X-API-KEY", api_key);
            var response = await client.PostAsync(url, byteContent);
            var ret = await response.Content.ReadAsStringAsync();
            var returnContent = JsonSerializer.Deserialize<ReturnContent>(ret);
            if (returnContent.status == "success")
            {
                Console.WriteLine($"Downloading {returnContent.download_url}...");
                var download_response = await client.GetAsync(returnContent.download_url);
                using (var stream = await download_response.Content.ReadAsStreamAsync())
                {
                    var fileInfo = new FileInfo("image.jpeg");
                    using (var fileStream = fileInfo.OpenWrite())
                    {
                        await stream.CopyToAsync(fileStream);
                    }
                }
            }
        }
    }
}
using System;
using System.IO;
using System.Net.Http;
using System.Text;
using System.Text.Json;
using System.Threading.Tasks;

namespace csharp
{
    class ReturnContent
    {
        public string download_url { get; set; }
        public string status { get; set; }
    }

    class Program
    {
        static async Task Main(string[] args)
        {
            var api_key = "a9e4MjA2NTg6MTc3Njk6Uk1ZSzVjTWs1T3d6VE9Mdw=";
            var template_id = "f4377b23b4aeeed0";
            var url = $"https://rest.apitemplate.io/v2/create-image?template_id={template_id}";
            var json_content = @"{
    ""overrides"": [
        {
            ""name"": ""rect_image_bg"",
            ""stroke"": ""grey"",
            ""src"": ""https://images.unsplash.com/photo-1542401886-65d6c61db217?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=MnwxOTc1MDZ8MHwxfHNlYXJjaHwzfHxkZXNlcnR8ZW58MHwwfHx8MTYyMTUxOTI2OA&ixlib=rb-1.2.1&q=80&w=1080""
        },
        {
            ""name"": ""rect_container"",
            ""stroke"": ""grey"",
            ""backgroundColor"": ""rgba(255, 255, 255, 0.62)""
        },
        {
            ""name"": ""text_quote"",
            ""text"": ""Just witnessed the most breathtaking sunset over the Sahara. The way the light dances on the dunes, painting the sky in shades of orange and purple, is truly magical. Nature's artistry at its finest!  #DesertAdventures #SaharaSkies"",
            ""textBackgroundColor"": ""rgba(246, 243, 243, 0)"",
            ""color"": ""#414141""
        },
        {
            ""name"": ""text_footer"",
            ""text"": ""2024-07-30 - Twitter - iPhone 16 Pro"",
            ""textBackgroundColor"": ""rgba(246, 243, 243, 0)"",
            ""color"": ""#666666""
        },
        {
            ""name"": ""circle_profile"",
            ""stroke"": ""grey"",
            ""src"": ""https://images.unsplash.com/photo-1520998116484-6eeb2f72b5b9?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=MnwxOTc1MDZ8MHwxfHNlYXJjaHw2Mnx8aGFwcHl8ZW58MHwwfHx8MTYyMTY5MjkwNw&ixlib=rb-1.2.1&q=80&w=1080""
        },
        {
            ""name"": ""text_name"",
            ""text"": ""Sarah Wanderlust"",
            ""textBackgroundColor"": ""rgba(246, 243, 243, 0)"",
            ""color"": ""#4E4E4E""
        },
        {
            ""name"": ""text_twitter"",
            ""text"": ""@sarahexplores"",
            ""textBackgroundColor"": ""rgba(246, 243, 243, 0)"",
            ""color"": ""#4E4E4E""
        }
    ]
}";
            var buffer = System.Text.Encoding.UTF8.GetBytes(json_content);
            var byteContent = new ByteArrayContent(buffer);
            Console.WriteLine(json_content);
            var client = new HttpClient();
            client.DefaultRequestHeaders.Add("X-API-KEY", api_key);
            var response = await client.PostAsync(url, byteContent);
            var ret = await response.Content.ReadAsStringAsync();
            var returnContent = JsonSerializer.Deserialize<ReturnContent>(ret);
            if (returnContent.status == "success")
            {
                Console.WriteLine($"Downloading {returnContent.download_url}...");
                var download_response = await client.GetAsync(returnContent.download_url);
                using (var stream = await download_response.Content.ReadAsStreamAsync())
                {
                    var fileInfo = new FileInfo("image.jpeg");
                    using (var fileStream = fileInfo.OpenWrite())
                    {
                        await stream.CopyToAsync(fileStream);
                    }
                }
            }
        }
    }
}
Imports System
Imports System.IO
Imports System.Net.Http
Imports System.Text
Imports System.Text.Json
Imports System.Threading.Tasks

Namespace csharp
	Friend Class ReturnContent
		Public Property download_url() As String
		Public Property status() As String
	End Class

	Friend Class Program
		Shared Async Function Main(ByVal args() As String) As Task
			Dim api_key = "a9e4MjA2NTg6MTc3Njk6Uk1ZSzVjTWs1T3d6VE9Mdw="
			Dim template_id = "f4377b23b4aeeed0"
			Dim url = $"https://rest.apitemplate.io/v2/create-image?template_id={template_id}"
			Dim json_content = "{
    ""overrides"": [
        {
            ""name"": ""rect_image_bg"",
            ""stroke"": ""grey"",
            ""src"": ""https://images.unsplash.com/photo-1542401886-65d6c61db217?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=MnwxOTc1MDZ8MHwxfHNlYXJjaHwzfHxkZXNlcnR8ZW58MHwwfHx8MTYyMTUxOTI2OA&ixlib=rb-1.2.1&q=80&w=1080""
        },
        {
            ""name"": ""rect_container"",
            ""stroke"": ""grey"",
            ""backgroundColor"": ""rgba(255, 255, 255, 0.62)""
        },
        {
            ""name"": ""text_quote"",
            ""text"": ""Just witnessed the most breathtaking sunset over the Sahara. The way the light dances on the dunes, painting the sky in shades of orange and purple, is truly magical. Nature's artistry at its finest!  #DesertAdventures #SaharaSkies"",
            ""textBackgroundColor"": ""rgba(246, 243, 243, 0)"",
            ""color"": ""#414141""
        },
        {
            ""name"": ""text_footer"",
            ""text"": ""2024-07-30 - Twitter - iPhone 16 Pro"",
            ""textBackgroundColor"": ""rgba(246, 243, 243, 0)"",
            ""color"": ""#666666""
        },
        {
            ""name"": ""circle_profile"",
            ""stroke"": ""grey"",
            ""src"": ""https://images.unsplash.com/photo-1520998116484-6eeb2f72b5b9?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=MnwxOTc1MDZ8MHwxfHNlYXJjaHw2Mnx8aGFwcHl8ZW58MHwwfHx8MTYyMTY5MjkwNw&ixlib=rb-1.2.1&q=80&w=1080""
        },
        {
            ""name"": ""text_name"",
            ""text"": ""Sarah Wanderlust"",
            ""textBackgroundColor"": ""rgba(246, 243, 243, 0)"",
            ""color"": ""#4E4E4E""
        },
        {
            ""name"": ""text_twitter"",
            ""text"": ""@sarahexplores"",
            ""textBackgroundColor"": ""rgba(246, 243, 243, 0)"",
            ""color"": ""#4E4E4E""
        }
    ]
}"
			Dim buffer = System.Text.Encoding.UTF8.GetBytes(json_content)
			Dim byteContent = New ByteArrayContent(buffer)
			Console.WriteLine(json_content)
			Dim client = New HttpClient()
			client.DefaultRequestHeaders.Add("X-API-KEY", api_key)
			Dim response = Await client.PostAsync(url, byteContent)
			Dim ret = Await response.Content.ReadAsStringAsync()
			Dim returnContent = JsonSerializer.Deserialize(Of ReturnContent)(ret)
			If returnContent.status = "success" Then
				Console.WriteLine($"Downloading {returnContent.download_url}...")
				Dim download_response = Await client.GetAsync(returnContent.download_url)
				Using stream = Await download_response.Content.ReadAsStreamAsync()
					Dim fileInfo As New FileInfo("image.jpeg")
					Using fileStream = fileInfo.OpenWrite()
						Await stream.CopyToAsync(fileStream)
					End Using
				End Using
			End If
		End Function
	End Class
End Namespace
$vbLabelText   $csharpLabel

Comparaison entre APITemplate io et IronPDF pour les bibliothèques PDF en C# : Figure 14

Cet exemple génère une image promotionnelle de produit avec un contenu dynamique, une couleur de fond personnalisée, et une image de produit intégrée.

Génération de QR Code

La fonction intégrée de génération de QR Code d'APITemplate a considérablement ajouté à plusieurs de mes projets. Vous pouvez mettre des URLs de données à la place du contenu pour les codes QR. Voici un exemple plus complexe de comment je l'ai utilisée :

using System;
using System.IO;
using System.Net.Http;
using System.Text;
using System.Text.Json;
using System.Threading.Tasks;

namespace csharp
{
    class ReturnContent
    {
        public string download_url { get; set; }
        public string status { get; set; }
    }

    class Program
    {
        static async Task Main(string[] args)
        {
            var api_key = "API-Key";
            var template_id = "Template-Key";
            var url = $"https://rest.apitemplate.io/v2/create-image?template_id={template_id}";
            var json_content = @"{
    ""overrides"": [
        {
            ""name"": ""background-color"",
            ""stroke"": ""grey"",
            ""backgroundColor"": ""#FFFFFF""
        },
        {
            ""name"": ""qr_1"",
            ""content"": ""http://ironpdf.com/"",
            ""backgroundColor"": ""white"",
            ""color"": ""#000000""
        }
    ]
}";
            var buffer = System.Text.Encoding.UTF8.GetBytes(json_content);
            var byteContent = new ByteArrayContent(buffer);
            //Console.WriteLine(json_content);
            var client = new HttpClient();
            client.DefaultRequestHeaders.Add("X-API-KEY", api_key);
            var response = await client.PostAsync(url, byteContent);
            var ret = await response.Content.ReadAsStringAsync();
            var returnContent = JsonSerializer.Deserialize<ReturnContent>(ret);
            Console.WriteLine(returnContent.status);
            if (returnContent.status == "success")
            {
                Console.WriteLine($"Downloading {returnContent.download_url}...");
                var download_response = await client.GetAsync(returnContent.download_url);
                using (var stream = await download_response.Content.ReadAsStreamAsync())
                {
                    var fileInfo = new FileInfo(@"F:/QRimage.jpeg");
                    using (var fileStream = fileInfo.OpenWrite())
                    {
                        await stream.CopyToAsync(fileStream);
                    }
                }
            }
        }
    }
}
using System;
using System.IO;
using System.Net.Http;
using System.Text;
using System.Text.Json;
using System.Threading.Tasks;

namespace csharp
{
    class ReturnContent
    {
        public string download_url { get; set; }
        public string status { get; set; }
    }

    class Program
    {
        static async Task Main(string[] args)
        {
            var api_key = "API-Key";
            var template_id = "Template-Key";
            var url = $"https://rest.apitemplate.io/v2/create-image?template_id={template_id}";
            var json_content = @"{
    ""overrides"": [
        {
            ""name"": ""background-color"",
            ""stroke"": ""grey"",
            ""backgroundColor"": ""#FFFFFF""
        },
        {
            ""name"": ""qr_1"",
            ""content"": ""http://ironpdf.com/"",
            ""backgroundColor"": ""white"",
            ""color"": ""#000000""
        }
    ]
}";
            var buffer = System.Text.Encoding.UTF8.GetBytes(json_content);
            var byteContent = new ByteArrayContent(buffer);
            //Console.WriteLine(json_content);
            var client = new HttpClient();
            client.DefaultRequestHeaders.Add("X-API-KEY", api_key);
            var response = await client.PostAsync(url, byteContent);
            var ret = await response.Content.ReadAsStringAsync();
            var returnContent = JsonSerializer.Deserialize<ReturnContent>(ret);
            Console.WriteLine(returnContent.status);
            if (returnContent.status == "success")
            {
                Console.WriteLine($"Downloading {returnContent.download_url}...");
                var download_response = await client.GetAsync(returnContent.download_url);
                using (var stream = await download_response.Content.ReadAsStreamAsync())
                {
                    var fileInfo = new FileInfo(@"F:/QRimage.jpeg");
                    using (var fileStream = fileInfo.OpenWrite())
                    {
                        await stream.CopyToAsync(fileStream);
                    }
                }
            }
        }
    }
}
Imports System
Imports System.IO
Imports System.Net.Http
Imports System.Text
Imports System.Text.Json
Imports System.Threading.Tasks

Namespace csharp
	Friend Class ReturnContent
		Public Property download_url() As String
		Public Property status() As String
	End Class

	Friend Class Program
		Shared Async Function Main(ByVal args() As String) As Task
			Dim api_key = "API-Key"
			Dim template_id = "Template-Key"
			Dim url = $"https://rest.apitemplate.io/v2/create-image?template_id={template_id}"
			Dim json_content = "{
    ""overrides"": [
        {
            ""name"": ""background-color"",
            ""stroke"": ""grey"",
            ""backgroundColor"": ""#FFFFFF""
        },
        {
            ""name"": ""qr_1"",
            ""content"": ""http://ironpdf.com/"",
            ""backgroundColor"": ""white"",
            ""color"": ""#000000""
        }
    ]
}"
			Dim buffer = System.Text.Encoding.UTF8.GetBytes(json_content)
			Dim byteContent = New ByteArrayContent(buffer)
			'Console.WriteLine(json_content);
			Dim client = New HttpClient()
			client.DefaultRequestHeaders.Add("X-API-KEY", api_key)
			Dim response = Await client.PostAsync(url, byteContent)
			Dim ret = Await response.Content.ReadAsStringAsync()
			Dim returnContent = JsonSerializer.Deserialize(Of ReturnContent)(ret)
			Console.WriteLine(returnContent.status)
			If returnContent.status = "success" Then
				Console.WriteLine($"Downloading {returnContent.download_url}...")
				Dim download_response = Await client.GetAsync(returnContent.download_url)
				Using stream = Await download_response.Content.ReadAsStreamAsync()
					Dim fileInfo As New FileInfo("F:/QRimage.jpeg")
					Using fileStream = fileInfo.OpenWrite()
						Await stream.CopyToAsync(fileStream)
					End Using
				End Using
			End If
		End Function
	End Class
End Namespace
$vbLabelText   $csharpLabel

Comparaison entre APITemplate io et IronPDF pour les bibliothèques PDF en C# : Figure 15

Documentation et support

En tant que développeur C# qui travaille fréquemment avec la génération et la manipulation de PDF, j'ai constaté que la qualité de la documentation et du support peut faire ou défaire un projet. Voyons mes expériences avec la documentation et le support pour IronPDF et APITemplate.

IronPDF

Documentation

La documentation d'IronPDF est complète et bien structurée, ce qui a été d'une aide significative dans mes projets. Voici un aperçu détaillé de mon expérience : La documentation d'IronPDF est disponible sur https://ironpdf.com/docs/, et elle est assez exhaustive. Voici certains aspects clés que j'ai appréciés :

  1. Guide de démarrage : La documentation commence par un guide clair, étape par étape, sur comment installer IronPDF via NuGet et créer votre premier PDF. Cela m'a aidé à me mettre rapidement en route dans mes projets initiaux.

  2. Référence API : La référence API est complète, couvrant toutes les classes et méthodes. Chaque entrée inclut des exemples C#, que j'ai trouvés inestimables lors de l'implémentation de fonctionnalités spécifiques.

  3. Exemples de code : Tout au long de la documentation, il y a de nombreux extraits de code et des exemples complets. Ceux-ci ont été particulièrement utiles lorsque j'avais besoin d'implémenter des opérations PDF plus complexes.

  4. Tutoriels et guides pratiques : IronPDF fournit des tutoriels détaillés pour les tâches courantes comme créer des PDF à partir de HTML, ajouter des filigranes, ou travailler avec des formulaires. Ces guides m'ont accompagné dans les cas d'utilisation plus avancés.

  5. Section dépannage : La documentation inclut une section de dépannage qui adresse les problèmes courants. Cela m'a fait gagner du temps lorsque j'ai rencontré des erreurs ou des comportements inattendus.

Support

Le support d'IronPDF a été réactif et les canaux de support ont été extrêmement utiles dans mon expérience :

  1. Support par email : Lorsque j'ai eu des problèmes complexes, j'ai utilisé leur support email. Les temps de réponse ont généralement été de 24 heures, et l'équipe de support a été compétente sur le produit.

  2. Forum communautaire : IronPDF maintient un forum communautaire où les développeurs peuvent poser des questions et partager des solutions. J'ai trouvé des réponses à mes questions et contribué des solutions basées sur mes expériences.

  3. Stack Overflow : L'équipe IronPDF surveille activement le [ironpdf] tag sur Stack Overflow. J'ai reçu des réponses utiles aux questions que j'y ai postées.

  4. Mises à jour régulières : IronPDF publie fréquemment des mises à jour avec des correctifs et de nouvelles fonctionnalités. Le journal des modifications est détaillé, m'aidant à comprendre ce qui est nouveau ou modifié dans chaque version.

  5. Guides de migration : Quand il y a eu des changements majeurs entre les versions, IronPDF a fourni des guides de migration. Ceux-ci ont été cruciaux pour mettre à jour mes projets vers de nouvelles versions de la bibliothèque.

APITemplate

La structure de documentation et de support d'APITemplate est différente de celle d'IronPDF, en raison de sa nature de service basé sur le cloud. Voici mon expérience :

Documentation

La documentation d'APITemplate est disponible sur https://docs.apitemplate.io/reference/api-reference.html, et elle est axée sur l'utilisation de l'API. Voici les points clés :

  1. Référence API : La documentation fournit une référence API claire, détaillant tous les points d'accès disponibles, les paramètres requis, et les formats de réponse. Cela a été ma ressource de référence lorsque j'intégrais APITemplate dans mes applications C#.

  2. Authentification : Il y a une section dédiée à l'authentification, qui explique clairement comment utiliser les clés API. Cela a été crucial lorsque j'ai commencé à utiliser le service.

Support

La structure de support d'APITemplate est plus axée sur le support par email :

  1. Support par email : Lorsque j'ai eu des problèmes ou des questions, j'ai utilisé leur support par email. Les délais de réponse ont généralement été de 1-2 jours ouvrables.

  2. Section FAQ : La documentation inclut une section FAQ qui répond aux questions courantes. Ceci a souvent été mon premier arrêt lorsque j'ai rencontré des problèmes.

Utilisation de Bootstrap 5 avec IronPDF pour les tableaux de bord analytiques

Le moteur de rendu Chrome V8 d'IronPDF excelle à rendre les mises en page modernes Bootstrap 5, le rendant idéal pour générer des rapports PDF avec des métriques commerciales et des visualisations de données. Contrairement à l'approche basée sur l'API d'APITemplate, IronPDF traite directement le HTML avec un support CSS3 complet incluant flexbox, CSS Grid, et propriétés personnalisées.

using IronPdf;

var renderer = new ChromePdfRenderer();

string analyticsDashboard = @"
<!DOCTYPE html>
<html>
<head>
    <meta charset='utf-8'>
    <meta name='viewport' content='width=device-width, initial-scale=1'>
    <link href='https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css' rel='stylesheet'>
    <style>
        .metric-card {
            transition: transform 0.2s;
            border-left: 4px solid #0d6efd;
        }
        .metric-card:hover { transform: translateY(-5px); }
        .trend-up { color: #198754; }
        .trend-down { color: #dc3545; }
        @media print {
            .metric-card { page-break-inside: avoid; }
        }
    </style>
</head>
<body class='bg-light'>
    <div class='container py-5'>
        <div class='row mb-4'>
            <div class='col-12'>
                <div class='card shadow-sm'>
                    <div class='card-body'>
                        <h1 class='display-6 mb-0'>Performance Dashboard</h1>
                        <p class='text-muted mb-0'>Q4 2024 Analytics Overview</p>
                    </div>
                </div>
            </div>
        </div>

        <div class='row g-4 mb-4'>
            <div class='col-md-3'>
                <div class='card metric-card shadow-sm h-100'>
                    <div class='card-body'>
                        <h6 class='text-muted text-uppercase mb-2'>Total Revenue</h6>
                        <h2 class='display-6 mb-3'>$2.4M</h2>
                        <div class='progress' style='height: 6px;'>
                            <div class='progress-bar bg-success' style='width: 85%'></div>
                        </div>
                        <small class='trend-up'>↑ 18% from last quarter</small>
                    </div>
                </div>
            </div>
            <div class='col-md-3'>
                <div class='card metric-card shadow-sm h-100'>
                    <div class='card-body'>
                        <h6 class='text-muted text-uppercase mb-2'>Active Users</h6>
                        <h2 class='display-6 mb-3'>48,592</h2>
                        <div class='progress' style='height: 6px;'>
                            <div class='progress-bar bg-primary' style='width: 72%'></div>
                        </div>
                        <small class='trend-up'>↑ 12% growth rate</small>
                    </div>
                </div>
            </div>
            <div class='col-md-3'>
                <div class='card metric-card shadow-sm h-100'>
                    <div class='card-body'>
                        <h6 class='text-muted text-uppercase mb-2'>Conversion Rate</h6>
                        <h2 class='display-6 mb-3'>3.8%</h2>
                        <div class='progress' style='height: 6px;'>
                            <div class='progress-bar bg-warning' style='width: 38%'></div>
                        </div>
                        <small class='trend-down'>↓ 2% needs attention</small>
                    </div>
                </div>
            </div>
            <div class='col-md-3'>
                <div class='card metric-card shadow-sm h-100'>
                    <div class='card-body'>
                        <h6 class='text-muted text-uppercase mb-2'>Satisfaction</h6>
                        <h2 class='display-6 mb-3'>4.7/5</h2>
                        <div class='progress' style='height: 6px;'>
                            <div class='progress-bar bg-success' style='width: 94%'></div>
                        </div>
                        <small class='trend-up'>↑ Excellent rating</small>
                    </div>
                </div>
            </div>
        </div>

        <div class='card shadow-sm'>
            <div class='card-body'>
                <h5 class='card-title mb-3'>Top Performing Products</h5>
                <div class='table-responsive'>
                    <table class='table table-hover'>
                        <thead class='table-light'>
                            <tr>
                                <th>Product</th>
                                <th>Revenue</th>
                                <th>Units</th>
                                <th>Trend</th>
                            </tr>
                        </thead>
                        <tbody>
                            <tr>
                                <td><strong>Enterprise Suite</strong></td>
                                <td>$1,240,000</td>
                                <td>2,150</td>
                                <td><span class='badge bg-success'>+22%</span></td>
                            </tr>
                            <tr>
                                <td><strong>Professional Plan</strong></td>
                                <td>$820,000</td>
                                <td>4,890</td>
                                <td><span class='badge bg-success'>+15%</span></td>
                            </tr>
                            <tr>
                                <td><strong>Starter Package</strong></td>
                                <td>$340,000</td>
                                <td>8,240</td>
                                <td><span class='badge bg-warning'>+5%</span></td>
                            </tr>
                        </tbody>
                    </table>
                </div>
            </div>
        </div>
    </div>
</body>
</html>";

var pdf = renderer.RenderHtmlAsPdf(analyticsDashboard);
pdf.SaveAs("analytics-dashboard.pdf");
using IronPdf;

var renderer = new ChromePdfRenderer();

string analyticsDashboard = @"
<!DOCTYPE html>
<html>
<head>
    <meta charset='utf-8'>
    <meta name='viewport' content='width=device-width, initial-scale=1'>
    <link href='https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css' rel='stylesheet'>
    <style>
        .metric-card {
            transition: transform 0.2s;
            border-left: 4px solid #0d6efd;
        }
        .metric-card:hover { transform: translateY(-5px); }
        .trend-up { color: #198754; }
        .trend-down { color: #dc3545; }
        @media print {
            .metric-card { page-break-inside: avoid; }
        }
    </style>
</head>
<body class='bg-light'>
    <div class='container py-5'>
        <div class='row mb-4'>
            <div class='col-12'>
                <div class='card shadow-sm'>
                    <div class='card-body'>
                        <h1 class='display-6 mb-0'>Performance Dashboard</h1>
                        <p class='text-muted mb-0'>Q4 2024 Analytics Overview</p>
                    </div>
                </div>
            </div>
        </div>

        <div class='row g-4 mb-4'>
            <div class='col-md-3'>
                <div class='card metric-card shadow-sm h-100'>
                    <div class='card-body'>
                        <h6 class='text-muted text-uppercase mb-2'>Total Revenue</h6>
                        <h2 class='display-6 mb-3'>$2.4M</h2>
                        <div class='progress' style='height: 6px;'>
                            <div class='progress-bar bg-success' style='width: 85%'></div>
                        </div>
                        <small class='trend-up'>↑ 18% from last quarter</small>
                    </div>
                </div>
            </div>
            <div class='col-md-3'>
                <div class='card metric-card shadow-sm h-100'>
                    <div class='card-body'>
                        <h6 class='text-muted text-uppercase mb-2'>Active Users</h6>
                        <h2 class='display-6 mb-3'>48,592</h2>
                        <div class='progress' style='height: 6px;'>
                            <div class='progress-bar bg-primary' style='width: 72%'></div>
                        </div>
                        <small class='trend-up'>↑ 12% growth rate</small>
                    </div>
                </div>
            </div>
            <div class='col-md-3'>
                <div class='card metric-card shadow-sm h-100'>
                    <div class='card-body'>
                        <h6 class='text-muted text-uppercase mb-2'>Conversion Rate</h6>
                        <h2 class='display-6 mb-3'>3.8%</h2>
                        <div class='progress' style='height: 6px;'>
                            <div class='progress-bar bg-warning' style='width: 38%'></div>
                        </div>
                        <small class='trend-down'>↓ 2% needs attention</small>
                    </div>
                </div>
            </div>
            <div class='col-md-3'>
                <div class='card metric-card shadow-sm h-100'>
                    <div class='card-body'>
                        <h6 class='text-muted text-uppercase mb-2'>Satisfaction</h6>
                        <h2 class='display-6 mb-3'>4.7/5</h2>
                        <div class='progress' style='height: 6px;'>
                            <div class='progress-bar bg-success' style='width: 94%'></div>
                        </div>
                        <small class='trend-up'>↑ Excellent rating</small>
                    </div>
                </div>
            </div>
        </div>

        <div class='card shadow-sm'>
            <div class='card-body'>
                <h5 class='card-title mb-3'>Top Performing Products</h5>
                <div class='table-responsive'>
                    <table class='table table-hover'>
                        <thead class='table-light'>
                            <tr>
                                <th>Product</th>
                                <th>Revenue</th>
                                <th>Units</th>
                                <th>Trend</th>
                            </tr>
                        </thead>
                        <tbody>
                            <tr>
                                <td><strong>Enterprise Suite</strong></td>
                                <td>$1,240,000</td>
                                <td>2,150</td>
                                <td><span class='badge bg-success'>+22%</span></td>
                            </tr>
                            <tr>
                                <td><strong>Professional Plan</strong></td>
                                <td>$820,000</td>
                                <td>4,890</td>
                                <td><span class='badge bg-success'>+15%</span></td>
                            </tr>
                            <tr>
                                <td><strong>Starter Package</strong></td>
                                <td>$340,000</td>
                                <td>8,240</td>
                                <td><span class='badge bg-warning'>+5%</span></td>
                            </tr>
                        </tbody>
                    </table>
                </div>
            </div>
        </div>
    </div>
</body>
</html>";

var pdf = renderer.RenderHtmlAsPdf(analyticsDashboard);
pdf.SaveAs("analytics-dashboard.pdf");
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Ce code génère un PDF de tableau de bord analytique professionnel avec des cartes métriques, barres de progression, et tableaux responsives. Le moteur Chrome d'IronPDF rend parfaitement les mises en page flexbox, ombres, et effets hover de Bootstrap - des fonctionnalités qui nécessitent un travail personnalisé important avec des services basés sur API comme APITemplate.

Principaux avantages par rapport à APITemplate :

  • Rendu HTML direct avec un support Bootstrap complet
  • Aucun appel d'API ou configuration de modèle nécessaire
  • Compatibilité CSS3 totale y compris les animations
  • Traitement hors ligne sans dépendances externes

Pour plus d'informations sur la génération de PDF Bootstrap, consultez le Guide HTML vers PDF Bootstrap.

Licences

Tarification et licences d'IronPDF

Comparaison entre APITemplate io et IronPDF pour les bibliothèques PDF en C# : Figure 16

IronPDF offre divers niveaux de tarification pour répondre à différents besoins :

  1. Lite : Tarifé à $799, ce niveau convient pour un seul développeur travaillant sur un seul projet. C'est des frais uniques, ce qui en fait une option abordable pour de petits projets ou développeurs individuels.
  2. Professionnel : À $1,199, cette option prend en charge jusqu'à 10 développeurs, 10 emplacements, et 10 projets. Ce niveau inclut également des frais uniques et offre plus de flexibilité pour les petites à moyennes équipes.
  3. Illimité : Pour $2,399, ce niveau permet un nombre illimité de développeurs, emplacements, et projets. C'est idéal pour les grandes équipes et entreprises ayant besoin d'une utilisation extensive sans restrictions.

IronPDF propose aussi des licences d'entreprise et de redistribution OEM pour les grandes organisations et ceux ayant besoin d'intégrer des fonctionnalités PDF dans des produits commerciaux. Il offre également un essai gratuit pour tester.

Tarification et licences d'APITemplate

APITemplate offre une approche différente avec son service de génération de PDF basé sur API. La tarification est généralement basée sur le nombre d'appels d'API, la rendant plus flexible pour des modèles d'utilisation variés :

  1. Plan de base : Commence souvent à un point de prix inférieur avec un nombre limité d'appels d'API par mois. Cela convient pour de petits projets ou entreprises ayant peu de besoins en génération de PDF.
  2. Plan standard : Ce plan inclut plus d'appels d'API et des fonctionnalités supplémentaires, s'adressant aux entreprises de taille moyenne.
  3. Plan entreprise : Adapté pour les utilisateurs à haut volume, ce plan fournit le plus d'appels d'API et des fonctionnalités prémium comme le support prioritaire et les intégrations personnalisées.

La licence d'APITemplate est simple, typiquement liée à un modèle d'abonnement mensuel ou annuel.

Principales différences

  1. Modèle de tarification : IronPDF utilise un modèle de frais unique, qui peut être rentable à long terme, surtout pour une utilisation continue et intensive. APITemplate, d'autre part, utilise un modèle basé sur l'abonnement, qui peut être plus flexible et évolutif avec l'utilisation.
  2. Support et mises à jour : IronPDF inclut un an de support et de mises à jour avec son achat, avec des options pour prolonger cette période. Les plans d'abonnement d'APITemplate incluent généralement un support et des mises à jour continus dans le cadre du forfait.

Pourquoi devriez-vous choisir IronPDF?

IronPDF et APITemplate offrent tous deux la capacité de générer des PDF à partir de contenu HTML, mais la mise en œuvre d'IronPDF est plus robuste et flexible. Voici une comparaison :

IronPDF

using IronPdf;

var renderer = new ChromePdfRenderer();
var html = @"
<html>
<head>
    <style>
        body { font-family: Arial, sans-serif; }
        .header { color: #0066cc; font-size: 24px; }
        .content { margin-top: 20px; }
    </style>
</head>
<body>
    <div class='header'>Dynamic Report</div>
    <div class='content'>
        <p>This report was generated on: <script>document.write(new Date().toLocaleString());</script></p>
        <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>
    </div>
</body>
</html>";
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("IronPDF_report.pdf");
using IronPdf;

var renderer = new ChromePdfRenderer();
var html = @"
<html>
<head>
    <style>
        body { font-family: Arial, sans-serif; }
        .header { color: #0066cc; font-size: 24px; }
        .content { margin-top: 20px; }
    </style>
</head>
<body>
    <div class='header'>Dynamic Report</div>
    <div class='content'>
        <p>This report was generated on: <script>document.write(new Date().toLocaleString());</script></p>
        <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>
    </div>
</body>
</html>";
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("IronPDF_report.pdf");
Imports IronPdf

Private renderer = New ChromePdfRenderer()
Private html = "
<html>
<head>
    <style>
        body { font-family: Arial, sans-serif; }
        .header { color: #0066cc; font-size: 24px; }
        .content { margin-top: 20px; }
    </style>
</head>
<body>
    <div class='header'>Dynamic Report</div>
    <div class='content'>
        <p>This report was generated on: <script>document.write(new Date().toLocaleString());</script></p>
        <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>
    </div>
</body>
</html>"
Private pdf = renderer.RenderHtmlAsPdf(html)
pdf.SaveAs("IronPDF_report.pdf")
$vbLabelText   $csharpLabel

APITemplate

using System.Net.Http;
using System.Text.Json;

var apiKey = "your_api_key";
var templateId = "your_template_id";
var url = $"https://rest.apitemplate.io/v2/create-pdf?template_id={templateId}";
var data = new
{
    header = "Dynamic Report",
    content = "Lorem ipsum dolor sit amet, consectetur adipiscing elit.",
    date = DateTime.Now.ToShortDateString()
};
var json = JsonSerializer.Serialize(data);
var content = new StringContent(json, System.Text.Encoding.UTF8, "application/json");
using var client = new HttpClient();
client.DefaultRequestHeaders.Add("X-API-KEY", apiKey);
var response = await client.PostAsync(url, content);
var pdfBytes = await response.Content.ReadAsByteArrayAsync();
File.WriteAllBytes("APITemplate_report.pdf", pdfBytes);
using System.Net.Http;
using System.Text.Json;

var apiKey = "your_api_key";
var templateId = "your_template_id";
var url = $"https://rest.apitemplate.io/v2/create-pdf?template_id={templateId}";
var data = new
{
    header = "Dynamic Report",
    content = "Lorem ipsum dolor sit amet, consectetur adipiscing elit.",
    date = DateTime.Now.ToShortDateString()
};
var json = JsonSerializer.Serialize(data);
var content = new StringContent(json, System.Text.Encoding.UTF8, "application/json");
using var client = new HttpClient();
client.DefaultRequestHeaders.Add("X-API-KEY", apiKey);
var response = await client.PostAsync(url, content);
var pdfBytes = await response.Content.ReadAsByteArrayAsync();
File.WriteAllBytes("APITemplate_report.pdf", pdfBytes);
Imports System.Net.Http
Imports System.Text.Json

Private apiKey = "your_api_key"
Private templateId = "your_template_id"
Private url = $"https://rest.apitemplate.io/v2/create-pdf?template_id={templateId}"
Private data = New With {
	Key .header = "Dynamic Report",
	Key .content = "Lorem ipsum dolor sit amet, consectetur adipiscing elit.",
	Key .date = DateTime.Now.ToShortDateString()
}
Private json = JsonSerializer.Serialize(data)
Private content = New StringContent(json, System.Text.Encoding.UTF8, "application/json")
Private client = New HttpClient()
client.DefaultRequestHeaders.Add("X-API-KEY", apiKey)
Dim response = Await client.PostAsync(url, content)
Dim pdfBytes = Await response.Content.ReadAsByteArrayAsync()
File.WriteAllBytes("APITemplate_report.pdf", pdfBytes)
$vbLabelText   $csharpLabel

Principales différences

  1. Support JavaScript : IronPDF prend en charge l'exécution complète de JavaScript dans le HTML, permettant la génération de contenu dynamique (comme la date actuelle dans l'exemple). APITemplate exige généralement que toutes les données soient fournies à l'avance.
  2. Flexibilité CSS : Avec IronPDF, vous avez le plein contrôle sur le style CSS directement dans votre HTML. APITemplate requiert souvent des modèles prédéfinis avec des options de personnalisation limitées.
  3. Performance : IronPDF traite le HTML localement, résultant en une génération de PDF plus rapide, surtout pour les documents complexes. L'approche basée sur le cloud d'APITemplate peut introduire une latence.
  4. Capacité hors ligne : IronPDF fonctionne hors ligne, ce qui est utile pour des applications avec une connectivité Internet limitée ou des exigences de haute sécurité. APITemplate nécessite toujours une connexion Internet.
  5. Contenu dynamique : IronPDF permet une génération plus dynamique de contenu à la volée, tandis qu'APITemplate requiert généralement une structure de modèle prédéfinie.
  6. Personnalisation : IronPDF offre un contrôle plus fin sur le processus de génération de PDF, y compris les options pour la taille de la page, les marges, et d'autres réglages spécifiques au PDF.
  7. Cohérence : IronPDF garantit un rendu cohérent dans différents environnements, car il utilise son propre moteur de rendu. La sortie d'APITemplate peut varier en fonction de leur configuration de serveur.

Conclusion

Après avoir travaillé intensivement avec IronPDF et APITemplate dans divers projets C#, j'ai appris à apprécier les forces uniques de chaque outil. Cependant, pour la plupart de mes tâches liées aux PDF, IronPDF s'est révélé être le choix supérieur de manière constante. Bien que APITemplate ait ses mérites, en particulier pour la génération de documents simples basés sur des modèles, j'ai trouvé que la polyvalence de IronPDF lui permet de gérer ces tâches tout aussi efficacement, tout en fournissant la puissance nécessaire pour s'attaquer à des opérations PDF plus complexes si nécessaire.

En conclusion, bien que les deux outils aient leur place, IronPDF s'est constamment révélé être la solution la plus puissante, flexible et économique pour la manipulation de PDF dans le développement C#. Son ensemble de fonctionnalités robuste, ses performances excellentes et son support complet en font mon choix privilégié pour toute tâche liée aux PDF, de la génération de documents la plus simple aux manipulations PDF les plus complexes.

[{i : (APITemplate est une marque déposée de son propriétaire respectif. Ce site n'est pas affilié, approuvé ou parrainé par APITemplate. 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

Quelles sont les principales différences entre les outils de génération de PDF basés sur le cloud et ceux basés sur une bibliothèque?

Les outils basés sur le cloud comme APITemplate offrent la génération de PDF via des appels API et nécessitent une connexion internet. En revanche, les outils basés sur une bibliothèque tels qu'IronPDF sont intégrés dans votre application C#, permettant la manipulation de PDF hors ligne et offrant un meilleur contrôle sur la création et la personnalisation des PDF.

Comment IronPDF gère-t-il les conversions de HTML en PDF dans les applications C#?

IronPDF permet des conversions de HTML en PDF fluides en utilisant des méthodes comme RenderHtmlAsPdf. Il supporte pleinement les standards web modernes, y compris CSS et JavaScript, garantissant un rendu de haute qualité du contenu web en PDF.

Puis-je utiliser IronPDF pour la génération de contenu dynamique dans les PDF?

Oui, IronPDF prend en charge l'exécution de JavaScript, ce qui permet la génération de contenu dynamique dans les PDF. Cela est particulièrement utile pour créer des PDF interactifs directement à partir de pages web avec des données dynamiques.

Quels sont les avantages d'utiliser IronPDF par rapport à un service basé sur abonnement?

IronPDF propose des licences à paiement unique, offrant une solution rentable pour une utilisation à long terme. Il permet un fonctionnement hors ligne et fournit des fonctionnalités de manipulation étendues des PDF, qui peuvent être plus flexibles et robustes comparées aux services basés sur abonnement comme APITemplate.

Quel support est disponible pour les développeurs utilisant IronPDF?

IronPDF offre un support complet à travers une documentation détaillée, incluant des guides, des références API et des exemples de code. Les développeurs peuvent également demander de l'aide via le support par email, les forums communautaires, et la surveillance sur des plateformes comme Stack Overflow.

IronPDF prend-il en charge le développement multiplateforme?

Oui, IronPDF est compatible avec .NET Standard, qui supporte le développement multiplateforme. Cela garantit que les développeurs peuvent intégrer IronPDF dans des projets fonctionnant sur différents systèmes d'exploitation sans interruption.

Comment IronPDF garantit-il la sécurité des PDF générés?

IronPDF inclut des fonctionnalités pour le chiffrement et le déchiffrement des PDF, permettant aux développeurs de sécuriser les documents avec des mots de passe et des signatures numériques. Ces fonctionnalités aident à maintenir la confidentialité et l'intégrité des documents PDF.

Quels sont quelques conseils de dépannage courants pour l'utilisation d'IronPDF?

Lors de problèmes avec IronPDF, assurez-vous que toutes les dépendances sont correctement installées et mises à jour. Consultez la documentation pour la compatibilité et les paramètres de configuration, et examinez le code d'exemple pour vérifier les pratiques d'implémentation. Si les problèmes persistent, l'équipe de support est disponible pour assister.

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