Passer au contenu du pied de page
COMPARAISONS DE PRODUITS

IronPDF vs Accusoft PDF Viewer : quelle bibliothèque C# est la meilleure pour convertir du HTML en PDF ?

IronPDF et Accusoft PDF Viewer convertissent tous deux le HTML en PDF sous .NET. IronPDF propose une syntaxe simple, un traitement local sans dépendance au cloud et des conversions illimitées à partir de 699 $. À l'inverse, Accusoft nécessite une connexion internet et facture par transaction.

Comparez IronPDF à Accusoft PDF Viewer

  • Convertir HTML en PDF
  • Définir l'en-tête et le pied de page des PDF
  • Convertir un PDF en fichier image
  • Comparez les licences, les options d'essai gratuit, etc

Vue d'ensemble

Qu'est-ce qu'IronPDF et comment ça fonctionne ?

IronPDF est une bibliothèque C# HTML vers PDF qui permet aux développeurs de créer des fichiers PDF à partir de sources telles que des chaînes HTML , des pages Web et des URL . Il permet également de définir des propriétés telles que le filigrane , le signet , l'en-tête et le pied de page . De plus, les développeurs peuvent fusionner plusieurs fichiers PDF en un seul ou convertir des pages PDF en images , et vice versa, en utilisant la conversion d'images en PDF .

IronPDF est gratuit pour le développement et offre une période d'essai de 30 jours pour le déploiement sur des projets en production. Il fournit une documentation complète, des exemples de code et une référence API pour aider les développeurs à démarrer rapidement.

Developers can download a file project from this link.

What Is Accusoft `PrizmDoc` Viewer and How Does It Work?

PrizmDoc Viewer est une API REST qui fonctionne avec les fichiers PDF et les convertit à distance en d'autres formats. PrizmDoc peut convertir plus de 100 formats de fichiers différents en PDF et des PDF en PNG, JPG , TIFF et SVG. Elle offre également diverses options de signature électronique pour les applications.

How Do IronPDF and `PrizmDoc` Viewer Compare?

IronPDF `PrizmDoc` Viewer
Work with [PDF files programmatically](/how-to/csharp-parse-pdf/). Travailler avec des fichiers PDF de manière programmatique.
Supports [.NET Core](/docs/) with [Windows](/get-started/windows/), [Mac](/get-started/macos/), or [Linux](/get-started/linux/). Prend en charge .NET Core en utilisant Windows, Mac ou Linux.
[Works Locally](/get-started/installation-overview/) Sends Documents to a [remote server](/get-started/ironpdfengine/).
Work with or without [Asynchronous Programming](/how-to/async/). Must use Asynchronous Programming with `System.Threading.Tasks`.
Works offline once [installed](/get-started/installation-overview/). Requires internet connection for `PrizmDoc` server requests.
Provides many [predefined functions](/features/). Fournit quelques fonctions prédéfinies.
Often requires [minimal lines of code](/tutorials/html-to-pdf/). La traduction nécessite souvent de nombreuses lignes de code.
[Illimité conversions](/licensing/) per project in each license. Transactions limitées pour les licences hébergées dans le cloud.
[Free for development](/get-started/quickstart/) without time limits. Seulement 300 transactions avec essai.

Installons les deux bibliothèques et comparons le code.


Étape 1 : Installation

Comment installer IronPDF dans mon projet .NET ?

Il existe deux façons d' installer IronPDF dans un projet, sans différence entre les deux approches. IronPDF prend en charge différents environnements, notamment le déploiement Azure , AWS Lambda , les conteneurs Docker et les applications Blazor .

Quelles sont les différentes façons de télécharger IronPDF ?

Téléchargez IronPDF.dll et ajoutez sa référence au projet. Les développeurs peuvent également utiliser Windows Installer pour une installation à l'échelle du système. Après cela, l'espace de noms IronPdf devient accessible via :

using IronPdf;
using IronPdf;
$vbLabelText   $csharpLabel

Désormais, les développeurs peuvent facilement accéder aux fonctions et classes fournies par IronPDF, notamment ChromePdfRenderer pour le rendu, la manipulation de documents PDF et les fonctionnalités de sécurité .

Comment installer IronPDF via le gestionnaire de packages NuGet ?


How Do I Install `PrizmDoc` Viewer from Accusoft?

PrizmDoc Viewer comporte deux parties : le composant côté serveur appelé PrizmDoc Server qui se comporte comme une API RESTful, et le projet client qui envoie des requêtes à l'API et reçoit les réponses. Contrairement à IronPDF qui fonctionne localement sans dépendances externes , PrizmDoc nécessite une connexion réseau pour les opérations basées sur le cloud.

How Can I Access the `PrizmDoc` Server?

PrizmDoc Server est une application côté serveur qui reçoit des informations de base sous forme de documents (entrées) et convertit ces documents en fichiers PDF , puis renvoie les fichiers PDF convertis en tant que réponses (sorties). Il constitue le cœur technique du produit : un moteur de traitement et de conversion de documents. Les développeurs peuvent l'utiliser de deux manières différentes, toutes deux reposant sur la même structure et les mêmes techniques de programmation :

  1. Auto-hébergé :

    Cette option nécessite la mise en place d'un serveur. Téléchargez PrizmDoc Server puis installez-le. Pour en savoir plus sur l'installation PrizmDoc Server sous Windows, cliquez ici.

    Remarque : Il nécessite au minimum 32 Go de RAM et un processeur à 4 cœurs pour des performances optimales. En revanche, les exigences système d'IronPDF sont beaucoup plus modestes.

  2. Hébergé sur Cloud:

    Ce service basé sur le cloud élimine le besoin de mettre en place un serveur. Pour utiliser cette option, créez un compte et copiez la API key depuis le menu API Key de la page d'accueil.

Tout d'abord, examinons la structure de base pour utiliser PrizmDoc Viewer afin de convertir des documents en fichiers PDF en interagissant directement avec Accusoft server à l'aide de WebClient() dans une application console C#.

Remarque : L'exemple suivant illustre le fonctionnement conceptuel des fichiers PDF PrizmDoc . Il est long, vous pouvez donc sauter cet exemple et passer directement à la comparaison .

Comment fonctionne la structure de travail d'Accusoft ?

Cet exemple convertit myWebpage.html en sample.pdf . Contrairement à la conversion HTML vers PDF simple d'IronPDF , PrizmDoc nécessite plusieurs appels API.

Remarque : La bibliothèque Newtonsoft.Json doit être installée et référencée dans le projet.

Commencez par ajouter les bibliothèques suivantes au projet :

using System;
using System.IO;
using System.Net;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json.Linq; // Install Newtonsoft.Json via NuGet Package Manager
using System;
using System.IO;
using System.Net;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json.Linq; // Install Newtonsoft.Json via NuGet Package Manager
$vbLabelText   $csharpLabel

Créez ensuite une variable publique Accusoft API Key et collez-y la clé API :

static string ApiKey = "Your-API-KEY";
static string ApiKey = "Your-API-KEY";
$vbLabelText   $csharpLabel

Il existe 3 étapes pour traiter les fichiers PDF avec PrizmDoc Viewer :

  1. Téléversez un fichier sur le serveur PrizmDoc .
  2. Convertissez le fichier téléchargé.
  3. Téléchargez le fichier converti depuis le serveur PrizmDoc .

Chaque étape est gérée par une fonction distincte :

static void Main(string[] args)
{
    //---Upload file to Server---
    JObject uploadResults = UploadToServer("myWebpage.html").Result;
    string fileID = (string)uploadResults.SelectToken("fileId");
    string affinityToken = (string)uploadResults.SelectToken("affinityToken");

    //---Convert the uploaded file to PDF---
    JObject convertResults = Convert(affinityToken, fileID).Result;
    string processId = (string)convertResults.SelectToken("processId");
    affinityToken = (string)convertResults.SelectToken("affinityToken");

    //---Check the status that conversion is completed---
    JObject convertStatusResults = ConvertStatus(processId, affinityToken).Result;
    string convertStatus = (string)convertStatusResults.SelectToken("state");

    //---Continuously checking whether conversion completed---
    while (!(convertStatus.Equals("complete")))
    {
        System.Threading.Thread.Sleep(30000);
        convertStatusResults = ConvertStatus(processId, affinityToken).Result;
        convertStatus = (string)convertStatusResults.SelectToken("state");
    }

    //---Download the converted file from server---
    string newFileID = (string)convertStatusResults.SelectToken("output.results[0].fileId");
    DownloadFromServer(affinityToken, newFileID, "sample.pdf").Wait();

    Console.WriteLine("PDF file created successfully...!");
    Console.ReadKey();
}
static void Main(string[] args)
{
    //---Upload file to Server---
    JObject uploadResults = UploadToServer("myWebpage.html").Result;
    string fileID = (string)uploadResults.SelectToken("fileId");
    string affinityToken = (string)uploadResults.SelectToken("affinityToken");

    //---Convert the uploaded file to PDF---
    JObject convertResults = Convert(affinityToken, fileID).Result;
    string processId = (string)convertResults.SelectToken("processId");
    affinityToken = (string)convertResults.SelectToken("affinityToken");

    //---Check the status that conversion is completed---
    JObject convertStatusResults = ConvertStatus(processId, affinityToken).Result;
    string convertStatus = (string)convertStatusResults.SelectToken("state");

    //---Continuously checking whether conversion completed---
    while (!(convertStatus.Equals("complete")))
    {
        System.Threading.Thread.Sleep(30000);
        convertStatusResults = ConvertStatus(processId, affinityToken).Result;
        convertStatus = (string)convertStatusResults.SelectToken("state");
    }

    //---Download the converted file from server---
    string newFileID = (string)convertStatusResults.SelectToken("output.results[0].fileId");
    DownloadFromServer(affinityToken, newFileID, "sample.pdf").Wait();

    Console.WriteLine("PDF file created successfully...!");
    Console.ReadKey();
}
$vbLabelText   $csharpLabel

1. Télécharger le fichier sur le serveur:

public static async Task<JObject> UploadToServer(string fileToUpload)
{
    FileInfo input = new FileInfo(fileToUpload);
    if (input == null)
    {
        throw new ArgumentException("Missing parameter input", nameof(input));
    }
    var fileName = input.Name;
    var endpoint = new Uri("___PROTECTED_URL_123___");
    using (var client = new WebClient())
    {
        client.Headers.Add("acs-api-key", ApiKey);
        client.Headers.Add("Content-Type", "application/octet-stream");
        using (var reader = new BinaryReader(input.OpenRead()))
        {
            var data = reader.ReadBytes((int)reader.BaseStream.Length);
            var results = await client.UploadDataTaskAsync(endpoint, "POST", data);
            string getResult = Encoding.ASCII.GetString(results);
            return JObject.Parse(getResult);
        }
    }
}
public static async Task<JObject> UploadToServer(string fileToUpload)
{
    FileInfo input = new FileInfo(fileToUpload);
    if (input == null)
    {
        throw new ArgumentException("Missing parameter input", nameof(input));
    }
    var fileName = input.Name;
    var endpoint = new Uri("___PROTECTED_URL_123___");
    using (var client = new WebClient())
    {
        client.Headers.Add("acs-api-key", ApiKey);
        client.Headers.Add("Content-Type", "application/octet-stream");
        using (var reader = new BinaryReader(input.OpenRead()))
        {
            var data = reader.ReadBytes((int)reader.BaseStream.Length);
            var results = await client.UploadDataTaskAsync(endpoint, "POST", data);
            string getResult = Encoding.ASCII.GetString(results);
            return JObject.Parse(getResult);
        }
    }
}
$vbLabelText   $csharpLabel

2. convertir le fichier téléchargé en PDF:

public static async Task<JObject> Convert(string affinityToken, string fileID)
{
    var endpoint = new Uri("___PROTECTED_URL_124___");
    using (var client = new WebClient())
    {
        client.Headers.Add("Content-Type", "application/json");
        client.Headers.Add("acs-api-key", ApiKey);
        client.Headers.Add("Accusoft-Affinity-Token", affinityToken);
        JObject myJson =
            new JObject(
                new JProperty("input",
                    new JObject(
                        new JProperty("sources",
                            new JArray(
                                new JObject(
                                    new JProperty("fileId", fileID)
                                )
                            )
                        ),
                        new JProperty("dest",
                            new JObject(
                                new JProperty("format", "pdf")
                            )
                        )
                    )
                )
            );
        string results = await client.UploadStringTaskAsync(endpoint, "POST", myJson.ToString());
        return JObject.Parse(results);
    }
}
public static async Task<JObject> Convert(string affinityToken, string fileID)
{
    var endpoint = new Uri("___PROTECTED_URL_124___");
    using (var client = new WebClient())
    {
        client.Headers.Add("Content-Type", "application/json");
        client.Headers.Add("acs-api-key", ApiKey);
        client.Headers.Add("Accusoft-Affinity-Token", affinityToken);
        JObject myJson =
            new JObject(
                new JProperty("input",
                    new JObject(
                        new JProperty("sources",
                            new JArray(
                                new JObject(
                                    new JProperty("fileId", fileID)
                                )
                            )
                        ),
                        new JProperty("dest",
                            new JObject(
                                new JProperty("format", "pdf")
                            )
                        )
                    )
                )
            );
        string results = await client.UploadStringTaskAsync(endpoint, "POST", myJson.ToString());
        return JObject.Parse(results);
    }
}
$vbLabelText   $csharpLabel

Le JSON suivant est la valeur résultante de l'objet myJson :

{
  "input": {
    "sources": 
    [
      {"fileId": "Auto Generated FileId Value"}
    ],
    "dest": {
      "format": "pdf"
    }
  }
}

Vérifier si la conversion est terminée ou non

public static async Task<JObject> ConvertStatus(string processId, string affinityToken)
{
    string endpoint = "___PROTECTED_URL_125___" + processId;
    using (var client = new WebClient())
    {
        client.BaseAddress = endpoint;
        client.Headers.Add("acs-api-key", ApiKey);
        client.Headers.Add("Accusoft-Affinity-Token", affinityToken);
        string results = await client.DownloadStringTaskAsync(endpoint);
        return JObject.Parse(results);
    }
}
public static async Task<JObject> ConvertStatus(string processId, string affinityToken)
{
    string endpoint = "___PROTECTED_URL_125___" + processId;
    using (var client = new WebClient())
    {
        client.BaseAddress = endpoint;
        client.Headers.Add("acs-api-key", ApiKey);
        client.Headers.Add("Accusoft-Affinity-Token", affinityToken);
        string results = await client.DownloadStringTaskAsync(endpoint);
        return JObject.Parse(results);
    }
}
$vbLabelText   $csharpLabel

<Téléchargez le fichier converti à partir du serveur

public static async Task DownloadFromServer(string affinityToken, string fileId, string outfile)
{
    var endpoint = new Uri("___PROTECTED_URL_126___" + fileId);

    using (var client = new WebClient())
    {
        client.Headers.Add("acs-api-key", ApiKey);
        client.Headers.Add("Accusoft-Affinity-Token", affinityToken);
        FileInfo output = new FileInfo(outfile);

        using (var writeStream = output.Create())
        {
            var results = await client.DownloadDataTaskAsync(endpoint);
            await writeStream.WriteAsync(results, 0, results.Length);
        }
    }
}
public static async Task DownloadFromServer(string affinityToken, string fileId, string outfile)
{
    var endpoint = new Uri("___PROTECTED_URL_126___" + fileId);

    using (var client = new WebClient())
    {
        client.Headers.Add("acs-api-key", ApiKey);
        client.Headers.Add("Accusoft-Affinity-Token", affinityToken);
        FileInfo output = new FileInfo(outfile);

        using (var writeStream = output.Create())
        {
            var results = await client.DownloadDataTaskAsync(endpoint);
            await writeStream.WriteAsync(results, 0, results.Length);
        }
    }
}
$vbLabelText   $csharpLabel

L'exemple ci-dessus exige un effort considérable. Pour minimiser la charge de travail, Accusoft a introduit une bibliothèque .NET nommée Accusoft.PrizmDocServerSDK , un wrapper autour de l'API REST du serveur PrizmDoc . Examinons comment installer et utiliser cette bibliothèque dans les projets .NET.

How Do I Install Accusoft.`PrizmDocServer`SDK?

Il existe deux façons d'installer le wrapper.

  • Console du gestionnaire de paquets :

    Si vous utilisez la console du gestionnaire de packages, exécutez la commande suivante :

    _CODEBLOCK_10 _

  • Gérer les paquets pour la solution :

    Si vous utilisez l'interface graphique du gestionnaire de packages NuGet, recherchez Accusoft.PrizmDocServerSDK dans la barre de recherche et installez-le.

Désormais, les développeurs peuvent facilement accéder à l'espace de noms Accusoft.PrizmDocServer et l'utiliser :

using Accusoft.PrizmDocServer;
using Accusoft.PrizmDocServer;
$vbLabelText   $csharpLabel

Tutoriels pratiques

Comment IronPDF et PrizmDoc Viewer se comparent-ils dans des exemples de code ?

Après avoir passé en revue l'introduction et l'installation des deux composants, il est temps de les utiliser. Les cas d'utilisation suivants illustrent la mise en œuvre à l'aide des deux composants afin de mieux comprendre les structures de programmation et de déterminer celui qui correspond le mieux aux exigences du projet.


Comment convertir du HTML en PDF avec IronPDF ou PrizmDoc Viewer ?

Pour cette comparaison, convertissons une page web nommée myWebPage.html en fichier PDF et enregistrons-la à l'emplacement cible. Le moteur de rendu Chrome d'IronPDF offre une conversion au pixel près avec une prise en charge complète des CSS , JavaScript et des polices Web .

Comment IronPDF convertit-il le HTML en PDF ?

using IronPdf;

static void Main(string[] args)
{
    // Create rendering converter
    var converter = new ChromePdfRenderer();
    // Render HTML file to PDF
    using var PDF = converter.RenderHTMLFileAsPdf("myWebPage.html");
    // Save to target location
    PDF.SaveAs("sample.pdf");
}
using IronPdf;

static void Main(string[] args)
{
    // Create rendering converter
    var converter = new ChromePdfRenderer();
    // Render HTML file to PDF
    using var PDF = converter.RenderHTMLFileAsPdf("myWebPage.html");
    // Save to target location
    PDF.SaveAs("sample.pdf");
}
$vbLabelText   $csharpLabel

Le code ci-dessus crée un fichier sample.pdf et l'enregistre dans le dossier bin&gt;debug du projet. IronPDF prend également en charge les chaînes HTML , les URL et même les fichiers ZIP contenant du HTML comme sources d'entrée.

Les développeurs peuvent également spécifier n'importe quel chemin comme ceci : PDF.SaveAs(&quot;E:/sample.pdf&quot;); ou enregistrer dans un flux en mémoire pour les déploiements dans le cloud.

Pour en savoir plus sur l'utilisation d'IronPDF pour la gestion des fichiers PDF, consultez la documentation.

À présent, effectuons la même tâche en utilisant PrizmDoc Viewer à des fins de comparaison.

Comment PrizmDoc Viewer convertit-il le HTML en PDF ?

Dans la section consacrée à l'installation PrizmDoc Viewer, l'obtention de la Accusoft API Key a été abordée. Voici comment l'utiliser.

Tout d'abord, envoyez une requête au serveur PrizmDoc et recevez une réponse. Ce processus prend du temps et nécessite une programmation asynchrone . IronPDF prend également en charge les méthodes asynchrones pour des performances améliorées.

Remarque : Assurez-vous que le système est connecté à Internet lors de la création de fichiers PDF à l'aide des services cloud de PrizmDoc Viewer.

using Accusoft.PrizmDocServer;
using Accusoft.PrizmDocServer.Conversion;

static void Main(string[] args)
{
    ChromePdfRenderer().GetAwaiter().GetResult();
}

private static async Task ChromePdfRenderer()
{
    // Instantiate PrizmDocServerClient object
    var prizmDocServer = new PrizmDocServerClient("___PROTECTED_URL_127___", "Your-API-KEY");
    // Specify HTML file and convert it to a PDF.
    ConversionResult result = await prizmDocServer.ConvertToPdfAsync("myWebPage.html");
    // Save PDF file to the target location
    await result.RemoteWorkFile.SaveAsync("sample.pdf");
}
using Accusoft.PrizmDocServer;
using Accusoft.PrizmDocServer.Conversion;

static void Main(string[] args)
{
    ChromePdfRenderer().GetAwaiter().GetResult();
}

private static async Task ChromePdfRenderer()
{
    // Instantiate PrizmDocServerClient object
    var prizmDocServer = new PrizmDocServerClient("___PROTECTED_URL_127___", "Your-API-KEY");
    // Specify HTML file and convert it to a PDF.
    ConversionResult result = await prizmDocServer.ConvertToPdfAsync("myWebPage.html");
    // Save PDF file to the target location
    await result.RemoteWorkFile.SaveAsync("sample.pdf");
}
$vbLabelText   $csharpLabel

Pour en savoir plus sur l'utilisation de PrizmDoc Viewer, consultez la documentation.

Quelle bibliothèque offre la conversion HTML vers PDF la plus simple ?

Ces exemples démontrent qu'IronPDF offre une approche plus simple et plus rapide pour la création de fichiers PDF. IronPDF propose également des options de rendu permettant d'affiner le résultat, notamment des formats de papier personnalisés , des marges et des paramètres d'affichage .


Comment convertir des images en PDF avec IronPDF plutôt qu'avec PrizmDoc Viewer ?

Cette comparaison montre comment créer un fichier PDF à partir d'une image située dans le dossier debug du projet. Les développeurs commencent avec IronPDF.

Comment IronPDF convertit-il les images en PDF ?

using IronPdf;

static void Main(string[] args)
{
    // Specify the image to be converted
    using var converted = ImageToPdfConverter.ImageToPdf("google.png");
    // Save PDF file to the target location
    converted.SaveAs("sample.pdf");
}
using IronPdf;

static void Main(string[] args)
{
    // Specify the image to be converted
    using var converted = ImageToPdfConverter.ImageToPdf("google.png");
    // Save PDF file to the target location
    converted.SaveAs("sample.pdf");
}
$vbLabelText   $csharpLabel

IronPDF prend également en charge la conversion TIFF multi-images , l'intégration d'images provenant d'Azure Blob Storage et l'intégration d'images Base64 .

Sortie :

Cette capture d'écran montre le fichier PDF sample.pdf nouvellement créé à l'aide du code ci-dessus :

Document PDF affichant le logo Google centré sur un fond blanc, illustrant les capacités de conversion d'images en PDF d'IronPDF

Créer un fichier PDF à partir d'une image avec IronPDF est simple. À présent, effectuons la même tâche à l'aide de PrizmDoc Viewer et examinons le fichier PDF généré.

Comment PrizmDoc Viewer convertit-il les images en PDF ?

using Accusoft.PrizmDocServer;
using Accusoft.PrizmDocServer.Conversion;

static void Main(string[] args)
{
    ImageToPDF().GetAwaiter().GetResult();
}

private static async Task ImageToPDF()
{
    // Instantiate PrizmDocServerClient object
    var prizmDocServer = new PrizmDocServerClient("___PROTECTED_URL_128___", "Your-API-KEY");
    // Specify the image to be converted
    ConversionResult results = await prizmDocServer.ConvertToPdfAsync("google.png");
    // Save PDF file to the target location
    await results.RemoteWorkFile.SaveAsync("sample.pdf");
}
using Accusoft.PrizmDocServer;
using Accusoft.PrizmDocServer.Conversion;

static void Main(string[] args)
{
    ImageToPDF().GetAwaiter().GetResult();
}

private static async Task ImageToPDF()
{
    // Instantiate PrizmDocServerClient object
    var prizmDocServer = new PrizmDocServerClient("___PROTECTED_URL_128___", "Your-API-KEY");
    // Specify the image to be converted
    ConversionResult results = await prizmDocServer.ConvertToPdfAsync("google.png");
    // Save PDF file to the target location
    await results.RemoteWorkFile.SaveAsync("sample.pdf");
}
$vbLabelText   $csharpLabel

Résultat : Cette capture d'écran montre le fichier PDF sample.pdf nouvellement créé à partir du code ci-dessus :

PDF viewer displaying the Google logo on a gray background, showing `PrizmDoc`'s image conversion result

Quelle bibliothèque nécessite le moins de code pour la conversion d'images en PDF ?

IronPDF ne nécessite que deux lignes de code. En revanche, l'utilisation du serveur PrizmDoc implique davantage de lignes de code avec une programmation asynchrone. Le fichier de sortie d'IronPDF génère également automatiquement un document pleine page utilisable. IronPDF offre des options supplémentaires pour le positionnement des images et les conversions d'images multiples .


Comment fusionner plusieurs fichiers PDF avec IronPDF plutôt qu'avec PrizmDoc Viewer ?

Pour cette comparaison, supposons qu'il existe trois fichiers PDF nommés A.pdf , B.pdf et C.pdf . La tâche consiste à les fusionner en un seul fichier PDF . Les deux composants peuvent effectuer cette tâche. Tout d'abord, l'exemple montre comment réaliser cette opération en utilisant IronPDF.

Comment IronPDF fusionne-t-il les fichiers PDF ?

using IronPdf;
using System.Collections.Generic;

static void Main(string[] args)
{
    // Create rendering converter  
    var Renderer = new IronPdf.ChromePdfRenderer();
    // Create a list of pdf files
    var PDFs = new List<PdfDocument>();
    PDFs.Add(PdfDocument.FromFile("A.pdf"));
    PDFs.Add(PdfDocument.FromFile("B.pdf"));
    PDFs.Add(PdfDocument.FromFile("C.pdf"));
    // Merge the list of pdf file
    using PdfDocument PDF = PdfDocument.Merge(PDFs);
    // Save merged file to the target location
    PDF.SaveAs("sample.pdf");

    foreach(var pdf in PDFs)
    {
        pdf.Dispose();
    }
}
using IronPdf;
using System.Collections.Generic;

static void Main(string[] args)
{
    // Create rendering converter  
    var Renderer = new IronPdf.ChromePdfRenderer();
    // Create a list of pdf files
    var PDFs = new List<PdfDocument>();
    PDFs.Add(PdfDocument.FromFile("A.pdf"));
    PDFs.Add(PdfDocument.FromFile("B.pdf"));
    PDFs.Add(PdfDocument.FromFile("C.pdf"));
    // Merge the list of pdf file
    using PdfDocument PDF = PdfDocument.Merge(PDFs);
    // Save merged file to the target location
    PDF.SaveAs("sample.pdf");

    foreach(var pdf in PDFs)
    {
        pdf.Dispose();
    }
}
$vbLabelText   $csharpLabel

Le code ci-dessus crée un fichier sample.pdf , qui combine A.pdf , B.pdf et C.pdf . IronPDF prend également en charge l'ajout et la copie de pages entre les fichiers PDF ainsi que la division des fichiers PDF .

À présent, effectuons la même tâche en utilisant PrizmDoc Viewer.

Comment PrizmDoc Viewer fusionne-t-il les fichiers PDF ?

using System.Threading.Tasks;
using Accusoft.PrizmDocServer;
using Accusoft.PrizmDocServer.Conversion;

static void Main(string[] args)
{
    PdfMerge().GetAwaiter().GetResult();
}

private static async Task PdfMerge()
{
    // Instantiate PrizmDocServerClient object
    var prizmDocServer = new PrizmDocServerClient("___PROTECTED_URL_129___", "Your-API-KEY");
    // Pass the list of pdf files to PrizmDoc Server
    ConversionResult result = await prizmDocServer.CombineToPdfAsync(
        new []
        {
            new ConversionSourceDocument("A.pdf"),
            new ConversionSourceDocument("B.pdf"),
            new ConversionSourceDocument("C.pdf"),
        });
    // Save merged file to the target location
    await result.RemoteWorkFile.SaveAsync("sample.pdf");
}
using System.Threading.Tasks;
using Accusoft.PrizmDocServer;
using Accusoft.PrizmDocServer.Conversion;

static void Main(string[] args)
{
    PdfMerge().GetAwaiter().GetResult();
}

private static async Task PdfMerge()
{
    // Instantiate PrizmDocServerClient object
    var prizmDocServer = new PrizmDocServerClient("___PROTECTED_URL_129___", "Your-API-KEY");
    // Pass the list of pdf files to PrizmDoc Server
    ConversionResult result = await prizmDocServer.CombineToPdfAsync(
        new []
        {
            new ConversionSourceDocument("A.pdf"),
            new ConversionSourceDocument("B.pdf"),
            new ConversionSourceDocument("C.pdf"),
        });
    // Save merged file to the target location
    await result.RemoteWorkFile.SaveAsync("sample.pdf");
}
$vbLabelText   $csharpLabel

Le code ci-dessus crée également un fichier sample.pdf , qui combine les fichiers A.pdf , B.pdf et C.pdf .


Comment ajouter des en-têtes et des pieds de page à un PDF avec IronPDF plutôt qu'avec PrizmDoc Viewer ?

Pour cette comparaison, supposons qu'il existe une simple WebPage nommée myWebPage.html avec le code HTML et CSS suivant :

<html>
<head>
    <style>
        li {
            font-size: x-large;
            color: rgba(156, 89, 13, 0.897);
            list-style: square;
        }
    </style>
</head>
<body>
    <h1 style="text-align: center;">Hello World..!</h1>
    <h1>Main Menu</h1>
    <ul>
        <li>SubMenu 1</li>
        <li>SubMenu 2</li>
        <li>SubMenu 3</li>
        <li>SubMenu 4</li>
        <li>SubMenu 5</li>
    </ul>
</body>
</html>
<html>
<head>
    <style>
        li {
            font-size: x-large;
            color: rgba(156, 89, 13, 0.897);
            list-style: square;
        }
    </style>
</head>
<body>
    <h1 style="text-align: center;">Hello World..!</h1>
    <h1>Main Menu</h1>
    <ul>
        <li>SubMenu 1</li>
        <li>SubMenu 2</li>
        <li>SubMenu 3</li>
        <li>SubMenu 4</li>
        <li>SubMenu 5</li>
    </ul>
</body>
</html>
HTML

L'objectif est de convertir cette WebPage en un fichier PDF avec les propriétés d'en-tête et de pied de page suivantes :

  • Page Title à gauche de l'en-tête
  • DateTime sur le côté droit de l'en-tête
  • Page Number of Total Pages indiqué à droite du pied de page

Tout d'abord, examinons comment IronPDF gère les en-têtes et les pieds de page.

Comment IronPDF gère-t-il les en-têtes et pieds de page des fichiers PDF ?

Pour gérer les en-têtes et les pieds de page des fichiers PDF, IronPDF fournit une propriété sur la classe ChromePdfRenderer nommée RenderingOptions qui peut être utilisée comme suit :

  • Pour l'en-tête:

    _CODEBLOCK_19 _

  • Pour le pied de page:

    _CODEBLOCK_20 _

Les propriétés suivantes peuvent être définies lors de l'initialisation TextHeaderFooter() :

  • CenterText pour imprimer du texte au centre de l'en-tête ou du pied de page
  • LeftText permet d'imprimer du texte à gauche de l'en-tête ou du pied de page.
  • RightText permet d'imprimer du texte à droite de l'en-tête ou du pied de page.
  • DrawDividerLine trace une ligne séparant le contenu de la page de l'en-tête ou du pied de page.
  • FontFamily pour spécifier la famille de polices de l'en-tête ou du pied de page
  • FontSize pour spécifier la taille de la police de l'en-tête ou du pied de page
  • L'espacement ajuste l'espace entre le contenu de la page et l'en-tête ou le pied de page.

Les attributs prédéfinis suivants permettent de définir le contenu de l'en-tête ou du pied de page. Elles sont écrites entre accolades { } :

  • {page} affiche le numéro de la page actuelle dans l'en-tête ou le pied de page.
  • {total-pages} affiche le nombre total de pages dans l'en-tête ou le pied de page.
  • {url} affiche l'URL de la page rendue
  • {date} affiche la date actuelle dans l'en-tête ou le pied de page
  • {time} affiche l'heure actuelle dans l'en-tête ou le pied de page
  • {html-title} affiche le titre de la page web rendue dans l'en-tête ou le pied de page.
  • {pdf-title} imprime le titre du document dans l'en-tête ou le pied de page

Pour en savoir plus sur l'utilisation des en-têtes et des pieds de page avec IronPDF, consultez la documentation. IronPDF prend également en charge les en-têtes et pieds de page HTML pour les mises en page plus complexes.

L'exemple suivant illustre la mise en œuvre du cas d'utilisation et démontre comment utiliser les propriétés ci-dessus :

using IronPdf;

static void Main(string[] args)
{
    // Create rendering converter
    var converter = new ChromePdfRenderer();
    // Setting Header properties
    converter.RenderingOptions.TextHeader = new TextHeaderFooter()
    {
        DrawDividerLine = true,
        LeftText = "Page Title",
        RightText = "{date} {time}",
        FontSize = 13
    };
    // Setting footer properties
    converter.RenderingOptions.TextFooter = new TextHeaderFooter()
    {
        RightText = "Page {page} of {total-pages}",
        FontSize = 12
    };
    // Specify the file to be converted
    using var PDF = converter.RenderHTMLFileAsPdf("myWebPage.html");
    // Save to target location
    PDF.SaveAs("sample.pdf");
}
using IronPdf;

static void Main(string[] args)
{
    // Create rendering converter
    var converter = new ChromePdfRenderer();
    // Setting Header properties
    converter.RenderingOptions.TextHeader = new TextHeaderFooter()
    {
        DrawDividerLine = true,
        LeftText = "Page Title",
        RightText = "{date} {time}",
        FontSize = 13
    };
    // Setting footer properties
    converter.RenderingOptions.TextFooter = new TextHeaderFooter()
    {
        RightText = "Page {page} of {total-pages}",
        FontSize = 12
    };
    // Specify the file to be converted
    using var PDF = converter.RenderHTMLFileAsPdf("myWebPage.html");
    // Save to target location
    PDF.SaveAs("sample.pdf");
}
$vbLabelText   $csharpLabel

Sortie: La capture d'écran du fichier PDF nouvellement créé sample.pdf par le code ci-dessus :

Document PDF avec en-tête personnalisé affichant le titre de la page et la date/l'heure, illustrant les fonctionnalités d'en-tête et de pied de page d'IronPDF

L'utilisation d'IronPDF pour la gestion des en-têtes et des pieds de page implique un langage intuitif lors de la création de fichiers PDF. L'exemple suivant montre comment PrizmDoc Viewer gère les en-têtes et les pieds de page.

Comment PrizmDoc Viewer gère-t-il les en-têtes et pieds de page des fichiers PDF ?

PrizmDoc Viewer fournit la classe HeaderFooterOptions pour gérer les en-têtes et les pieds de page, avec les propriétés suivantes :

  • Lines spécifie la ou les lignes d'en-tête et de pied de page, chaque ligne ayant les propriétés suivantes : Gauche affiche le texte à gauche de la ligne d'en-tête ou de pied de page Centrer imprime le texte au centre de la ligne d'en-tête ou de pied de page Right * imprime le texte à droite de la ligne d'en-tête ou de pied de page
  • FontFamily pour spécifier la famille de polices du texte d'en-tête ou de pied de page
  • FontSize pour spécifier la taille de la police du texte d'en-tête ou de pied de page
  • Couleur pour spécifier la couleur du texte d'en-tête ou de pied de page

Pour en savoir plus sur la configuration des en-têtes et pieds de page PDF à l'aide du serveur PrizmDoc , consultez la documentation.

L'exemple montre comment mettre en œuvre le cas d'utilisation en utilisant les propriétés ci-dessus :

using System.Threading.Tasks;
using System.Collections.Generic;
using Accusoft.PrizmDocServer;
using Accusoft.PrizmDocServer.Conversion;

static void Main(string[] args)
{
    SetHeaderFooter().GetAwaiter().GetResult();
}

private static async Task SetHeaderFooter()
{
    // Instantiate PrizmDocServerClient object with Header and footer properties
    var prizmDocServer = new PrizmDocServerClient("___PROTECTED_URL_130___", "Your-API-KEY");

    ConversionResult result = await prizmDocServer.ConvertToPdfAsync(
        "myWebPage.html",
        header: new HeaderFooterOptions
        {
            Lines = new List<HeaderFooterLine>
            {
                new HeaderFooterLine { Left = "Page Title", Right = DateTime.Now.ToString() }
            },
        },
        footer: new HeaderFooterOptions
        {
            Lines = new List<HeaderFooterLine>
            {
                new HeaderFooterLine { Right = "Page {{pageNumber}} of {{pageCount}}" },
            },
        });

    // Save to the target location
    await result.RemoteWorkFile.SaveAsync("sample.pdf");
}
using System.Threading.Tasks;
using System.Collections.Generic;
using Accusoft.PrizmDocServer;
using Accusoft.PrizmDocServer.Conversion;

static void Main(string[] args)
{
    SetHeaderFooter().GetAwaiter().GetResult();
}

private static async Task SetHeaderFooter()
{
    // Instantiate PrizmDocServerClient object with Header and footer properties
    var prizmDocServer = new PrizmDocServerClient("___PROTECTED_URL_130___", "Your-API-KEY");

    ConversionResult result = await prizmDocServer.ConvertToPdfAsync(
        "myWebPage.html",
        header: new HeaderFooterOptions
        {
            Lines = new List<HeaderFooterLine>
            {
                new HeaderFooterLine { Left = "Page Title", Right = DateTime.Now.ToString() }
            },
        },
        footer: new HeaderFooterOptions
        {
            Lines = new List<HeaderFooterLine>
            {
                new HeaderFooterLine { Right = "Page {{pageNumber}} of {{pageCount}}" },
            },
        });

    // Save to the target location
    await result.RemoteWorkFile.SaveAsync("sample.pdf");
}
$vbLabelText   $csharpLabel

Sortie :

Capture d'écran du fichier PDF nouvellement créé par le code ci-dessus :

PDF with header showing 'Page Title' and timestamp, comparing `PrizmDoc`'s header/footer implementation

Quelle bibliothèque offre le plus de flexibilité pour les en-têtes et les pieds de page ?

IronPDF offre davantage de fonctions pour définir les propriétés d'en-tête et de pied de page grâce à une structure de programmation simple, comparé à PrizmDoc Viewer. Le fichier PDF généré par IronPDF est plus lisible et plus esthétique que celui généré PrizmDoc Viewer. IronPDF prend également en charge la numérotation et les sauts de page pour une meilleure gestion du document.


## Comment convertir des pages PDF en images avec IronPDF plutôt qu'avec PrizmDoc Viewer ?

Pour cette comparaison, supposons que vous ayez un simple fichier PDF nommé Sample_PDF.pdf comportant deux pages.

Page 1 Page 2
Visionneuse PDF affichant la page 1 d'un exemple de PDF avec du texte Lorem ipsum et les commandes standard d'une visionneuse
Visionneuse PDF affichant la page 2 d'un exemple de PDF avec du texte Lorem ipsum et des commandes de navigation

La tâche consiste à créer une image de chaque page . Tout d'abord, l'exemple montrera comment réaliser cela en utilisant IronPDF.

Comment IronPDF convertit-il les pages PDF en images ?

using IronPdf;

static void Main(string[] args)
{
    // Specify file to be converted
    var pdf = PdfDocument.FromFile("Sample_PDF.pdf");
    // Save images to the target location
    pdf.RasterizeToImageFiles("image_*.png");
}
using IronPdf;

static void Main(string[] args)
{
    // Specify file to be converted
    var pdf = PdfDocument.FromFile("Sample_PDF.pdf");
    // Save images to the target location
    pdf.RasterizeToImageFiles("image_*.png");
}
$vbLabelText   $csharpLabel

IronPDF prend également en charge l'enregistrement des images dans un flux de mémoire et différents formats d'image, notamment JPEG, TIFF, et bien d'autres.

Sortie :

Le code ci-dessus crée les deux images .png suivantes :

Page 1 Image Page 2 Image
Image PNG générée à partir de la page 1 du PDF montrant le contenu du tutoriel Virtual Mechanics avec un rendu de texte clair.
Image PNG générée à partir de la page 2 du PDF montrant la suite du texte avec la qualité de rastérisation d'IronPDF

Créer des images de pages PDF avec IronPDF est simple. À présent, effectuons la même tâche en utilisant PrizmDoc Viewer.

Comment PrizmDoc Viewer convertit-il les pages PDF en images ?

using System.Linq;
using System.Collections.Generic;
using System.Threading.Tasks;
using Accusoft.PrizmDocServer;
using Accusoft.PrizmDocServer.Conversion;

static void Main(string[] args)
{
    PdfToImage().GetAwaiter().GetResult();
}

private static async Task PdfToImage()
{
    // Instantiate PrizmDocServerClient object
    var prizmDocServer = new PrizmDocServerClient("___PROTECTED_URL_131___", "Your-API-KEY");
    // Convert PDF file to images
    IEnumerable<ConversionResult> results = await prizmDocServer.ConvertAsync("Sample_PDF.pdf", DestinationFileFormat.Png);

    // Save each image.
    for (int i = 0; i < results.Count(); i++)
    {
        await results.ElementAt(i).RemoteWorkFile.SaveAsync($"page-{i + 1}.png");
    }
}
using System.Linq;
using System.Collections.Generic;
using System.Threading.Tasks;
using Accusoft.PrizmDocServer;
using Accusoft.PrizmDocServer.Conversion;

static void Main(string[] args)
{
    PdfToImage().GetAwaiter().GetResult();
}

private static async Task PdfToImage()
{
    // Instantiate PrizmDocServerClient object
    var prizmDocServer = new PrizmDocServerClient("___PROTECTED_URL_131___", "Your-API-KEY");
    // Convert PDF file to images
    IEnumerable<ConversionResult> results = await prizmDocServer.ConvertAsync("Sample_PDF.pdf", DestinationFileFormat.Png);

    // Save each image.
    for (int i = 0; i < results.Count(); i++)
    {
        await results.ElementAt(i).RemoteWorkFile.SaveAsync($"page-{i + 1}.png");
    }
}
$vbLabelText   $csharpLabel

Sortie :

Le code ci-dessus crée également les deux images .png suivantes :

Page 1 Page 2
PNG image generated from PDF page 1 using `PrizmDoc`'s conversion service with sample text content
PNG image generated from PDF page 2 showing `PrizmDoc`'s image conversion output quality

Quelle bibliothèque facilite la conversion de PDF en image ?

Comparé à PrizmDoc Viewer, IronPDF permet aux développeurs de créer facilement des images de chaque page avec un minimum de lignes de code, même sans parcourir les pages.


Puis-je utiliser les tableaux de données Bootstrap 5 avec IronPDF ?

Le moteur de rendu Chrome V8 d'IronPDF offre une excellente prise en charge des tableaux de données Bootstrap 5 , permettant aux développeurs de générer des rapports PDF professionnels avec des mises en page tabulaires complexes. Cet exemple illustre les en-têtes en dégradé, les badges d'état, les contrôles de pagination et les indicateurs de synthèse - des fonctionnalités qui mettent en évidence l'avantage d'IronPDF par rapport aux visionneuses PDF traditionnelles comme PrizmDoc . IronPDF prend entièrement en charge les fonctionnalités CSS modernes, notamment les mises en page flexbox , les dégradés et la conception réactive .

using IronPdf;

var renderer = new ChromePdfRenderer();

string dataTableReport = @"
<!DOCTYPE html>
<html>
<head>
    <meta charset='utf-8'>
    <link href='___PROTECTED_URL_132___ rel='stylesheet'>
    <style>
        .table-header {
            background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
            color: white;
            padding: 30px;
            border-radius: 10px 10px 0 0;
        }
        .table-container {
            background: white;
            border-radius: 0 0 10px 10px;
            box-shadow: 0 10px 30px rgba(0,0,0,0.1);
            overflow: hidden;
        }
        .table th {
            background: #f8f9fa;
            font-weight: 600;
            text-transform: uppercase;
            font-size: 0.85rem;
            letter-spacing: 0.5px;
        }
        .status-badge {
            padding: 0.35em 0.65em;
            border-radius: 0.25rem;
            font-weight: 600;
            font-size: 0.75rem;
        }
        .trend-positive { color: #198754; font-weight: 700; }
        .trend-negative { color: #dc3545; font-weight: 700; }
        @media print {
            .table-container { page-break-inside: avoid; }
        }
    </style>
</head>
<body class='bg-light'>
    <div class='container py-5'>
        <div class='table-container'>
            <div class='table-header'>
                <div class='row align-items-center'>
                    <div class='col-md-8'>
                        <h2 class='mb-2'>Sales Performance Report</h2>
                        <p class='mb-0 opacity-75'>Q4 2024 Regional Analysis</p>
                    </div>
                    <div class='col-md-4 text-end'>
                        <div class='btn-group btn-group-sm'>
                            <button class='btn btn-light'>Export</button>
                            <button class='btn btn-light'>Filter</button>
                            <button class='btn btn-light'>Sort</button>
                        </div>
                    </div>
                </div>
            </div>

            <div class='p-4'>
                <div class='row mb-3'>
                    <div class='col-md-4'>
                        <input type='text' class='form-control form-control-sm' placeholder='Search regions...'>
                    </div>
                    <div class='col-md-8 text-end'>
                        <span class='text-muted small'>Showing 1-10 of 48 results</span>
                    </div>
                </div>

                <div class='table-responsive'>
                    <table class='table table-hover align-middle'>
                        <thead>
                            <tr>
                                <th>Region</th>
                                <th>Revenue</th>
                                <th>Units Sold</th>
                                <th>Growth</th>
                                <th>Status</th>
                                <th>Action</th>
                            </tr>
                        </thead>
                        <tbody>
                            <tr>
                                <td>
                                    <strong>North America</strong><br>
                                    <small class='text-muted'>USA, Canada, Mexico</small>
                                </td>
                                <td>$4,280,000</td>
                                <td>12,450</td>
                                <td><span class='trend-positive'>↑ 18.5%</span></td>
                                <td><span class='status-badge bg-success text-white'>Exceeding</span></td>
                                <td><button class='btn btn-sm btn-outline-primary'>Details</button></td>
                            </tr>
                            <tr>
                                <td>
                                    <strong>Europe</strong><br>
                                    <small class='text-muted'>EU, UK, Switzerland</small>
                                </td>
                                <td>$3,650 000</td>
                                <td>10,890</td>
                                <td><span class='trend-positive'>↑ 12.3%</span></td>
                                <td><span class='status-badge bg-success text-white'>On Track</span></td>
                                <td><button class='btn btn-sm btn-outline-primary'>Details</button></td>
                            </tr>
                            <tr>
                                <td>
                                    <strong>Asia Pacific</strong><br>
                                    <small class='text-muted'>Japan, Australia, Singapore</small>
                                </td>
                                <td>$2,940,000</td>
                                <td>8,320</td>
                                <td><span class='trend-positive'>↑ 24.7%</span></td>
                                <td><span class='status-badge bg-primary text-white'>Growing</span></td>
                                <td><button class='btn btn-sm btn-outline-primary'>Details</button></td>
                            </tr>
                            <tr>
                                <td>
                                    <strong>Latin America</strong><br>
                                    <small class='text-muted'>Brazil, Argentina, Chile</small>
                                </td>
                                <td>$1,580,000</td>
                                <td>4,670</td>
                                <td><span class='trend-positive'>↑ 8.9%</span></td>
                                <td><span class='status-badge bg-info text-white'>Stable</span></td>
                                <td><button class='btn btn-sm btn-outline-primary'>Details</button></td>
                            </tr>
                            <tr>
                                <td>
                                    <strong>Middle East</strong><br>
                                    <small class='text-muted'>UAE, Saudi Arabia, Israel</small>
                                </td>
                                <td>$980,000</td>
                                <td>2,890</td>
                                <td><span class='trend-negative'>↓ 3.2%</span></td>
                                <td><span class='status-badge bg-warning text-dark'>Review</span></td>
                                <td><button class='btn btn-sm btn-outline-primary'>Details</button></td>
                            </tr>
                        </tbody>
                        <tfoot class='table-light'>
                            <tr>
                                <td><strong>Total</strong></td>
                                <td><strong>$13,430,000</strong></td>
                                <td><strong>39,220</strong></td>
                                <td><strong class='trend-positive'>↑ 14.8%</strong></td>
                                <td colspan='2'></td>
                            </tr>
                        </tfoot>
                    </table>
                </div>

                <div class='d-flex justify-content-between align-items-center mt-4'>
                    <div>
                        <select class='form-select form-select-sm' style='width: auto; display: inline-block;'>
                            <option>10 per page</option>
                            <option>25 per page</option>
                            <option>50 per page</option>
                        </select>
                    </div>
                    <nav>
                        <ul class='pagination pagination-sm mb-0'>
                            <li class='page-item disabled'><a class='page-link' href='#'>Previous</a></li>
                            <li class='page-item active'><a class='page-link' href='#'>1</a></li>
                            <li class='page-item'><a class='page-link' href='#'>2</a></li>
                            <li class='page-item'><a class='page-link' href='#'>3</a></li>
                            <li class='page-item'><a class='page-link' href='#'>Next</a></li>
                        </ul>
                    </nav>
                </div>
            </div>
        </div>

        <div class='row g-3 mt-4'>
            <div class='col-md-3'>
                <div class='card text-center'>
                    <div class='card-body'>
                        <h3 class='text-primary mb-1'>$13.4M</h3>
                        <small class='text-muted'>Total Revenue</small>
                    </div>
                </div>
            </div>
            <div class='col-md-3'>
                <div class='card text-center'>
                    <div class='card-body'>
                        <h3 class='text-success mb-1'>39,220</h3>
                        <small class='text-muted'>Units Sold</small>
                    </div>
                </div>
            </div>
            <div class='col-md-3'>
                <div class='card text-center'>
                    <div class='card-body'>
                        <h3 class='text-info mb-1'>14.8%</h3>
                        <small class='text-muted'>Growth Rate</small>
                    </div>
                </div>
            </div>
            <div class='col-md-3'>
                <div class='card text-center'>
                    <div class='card-body'>
                        <h3 class='text-warning mb-1'>5</h3>
                        <small class='text-muted'>Active Regions</small>
                    </div>
                </div>
            </div>
        </div>
    </div>
</body>
</html>";

var pdf = renderer.RenderHtmlAsPdf(dataTableReport);
pdf.SaveAs("data-table-report.pdf");
using IronPdf;

var renderer = new ChromePdfRenderer();

string dataTableReport = @"
<!DOCTYPE html>
<html>
<head>
    <meta charset='utf-8'>
    <link href='___PROTECTED_URL_132___ rel='stylesheet'>
    <style>
        .table-header {
            background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
            color: white;
            padding: 30px;
            border-radius: 10px 10px 0 0;
        }
        .table-container {
            background: white;
            border-radius: 0 0 10px 10px;
            box-shadow: 0 10px 30px rgba(0,0,0,0.1);
            overflow: hidden;
        }
        .table th {
            background: #f8f9fa;
            font-weight: 600;
            text-transform: uppercase;
            font-size: 0.85rem;
            letter-spacing: 0.5px;
        }
        .status-badge {
            padding: 0.35em 0.65em;
            border-radius: 0.25rem;
            font-weight: 600;
            font-size: 0.75rem;
        }
        .trend-positive { color: #198754; font-weight: 700; }
        .trend-negative { color: #dc3545; font-weight: 700; }
        @media print {
            .table-container { page-break-inside: avoid; }
        }
    </style>
</head>
<body class='bg-light'>
    <div class='container py-5'>
        <div class='table-container'>
            <div class='table-header'>
                <div class='row align-items-center'>
                    <div class='col-md-8'>
                        <h2 class='mb-2'>Sales Performance Report</h2>
                        <p class='mb-0 opacity-75'>Q4 2024 Regional Analysis</p>
                    </div>
                    <div class='col-md-4 text-end'>
                        <div class='btn-group btn-group-sm'>
                            <button class='btn btn-light'>Export</button>
                            <button class='btn btn-light'>Filter</button>
                            <button class='btn btn-light'>Sort</button>
                        </div>
                    </div>
                </div>
            </div>

            <div class='p-4'>
                <div class='row mb-3'>
                    <div class='col-md-4'>
                        <input type='text' class='form-control form-control-sm' placeholder='Search regions...'>
                    </div>
                    <div class='col-md-8 text-end'>
                        <span class='text-muted small'>Showing 1-10 of 48 results</span>
                    </div>
                </div>

                <div class='table-responsive'>
                    <table class='table table-hover align-middle'>
                        <thead>
                            <tr>
                                <th>Region</th>
                                <th>Revenue</th>
                                <th>Units Sold</th>
                                <th>Growth</th>
                                <th>Status</th>
                                <th>Action</th>
                            </tr>
                        </thead>
                        <tbody>
                            <tr>
                                <td>
                                    <strong>North America</strong><br>
                                    <small class='text-muted'>USA, Canada, Mexico</small>
                                </td>
                                <td>$4,280,000</td>
                                <td>12,450</td>
                                <td><span class='trend-positive'>↑ 18.5%</span></td>
                                <td><span class='status-badge bg-success text-white'>Exceeding</span></td>
                                <td><button class='btn btn-sm btn-outline-primary'>Details</button></td>
                            </tr>
                            <tr>
                                <td>
                                    <strong>Europe</strong><br>
                                    <small class='text-muted'>EU, UK, Switzerland</small>
                                </td>
                                <td>$3,650 000</td>
                                <td>10,890</td>
                                <td><span class='trend-positive'>↑ 12.3%</span></td>
                                <td><span class='status-badge bg-success text-white'>On Track</span></td>
                                <td><button class='btn btn-sm btn-outline-primary'>Details</button></td>
                            </tr>
                            <tr>
                                <td>
                                    <strong>Asia Pacific</strong><br>
                                    <small class='text-muted'>Japan, Australia, Singapore</small>
                                </td>
                                <td>$2,940,000</td>
                                <td>8,320</td>
                                <td><span class='trend-positive'>↑ 24.7%</span></td>
                                <td><span class='status-badge bg-primary text-white'>Growing</span></td>
                                <td><button class='btn btn-sm btn-outline-primary'>Details</button></td>
                            </tr>
                            <tr>
                                <td>
                                    <strong>Latin America</strong><br>
                                    <small class='text-muted'>Brazil, Argentina, Chile</small>
                                </td>
                                <td>$1,580,000</td>
                                <td>4,670</td>
                                <td><span class='trend-positive'>↑ 8.9%</span></td>
                                <td><span class='status-badge bg-info text-white'>Stable</span></td>
                                <td><button class='btn btn-sm btn-outline-primary'>Details</button></td>
                            </tr>
                            <tr>
                                <td>
                                    <strong>Middle East</strong><br>
                                    <small class='text-muted'>UAE, Saudi Arabia, Israel</small>
                                </td>
                                <td>$980,000</td>
                                <td>2,890</td>
                                <td><span class='trend-negative'>↓ 3.2%</span></td>
                                <td><span class='status-badge bg-warning text-dark'>Review</span></td>
                                <td><button class='btn btn-sm btn-outline-primary'>Details</button></td>
                            </tr>
                        </tbody>
                        <tfoot class='table-light'>
                            <tr>
                                <td><strong>Total</strong></td>
                                <td><strong>$13,430,000</strong></td>
                                <td><strong>39,220</strong></td>
                                <td><strong class='trend-positive'>↑ 14.8%</strong></td>
                                <td colspan='2'></td>
                            </tr>
                        </tfoot>
                    </table>
                </div>

                <div class='d-flex justify-content-between align-items-center mt-4'>
                    <div>
                        <select class='form-select form-select-sm' style='width: auto; display: inline-block;'>
                            <option>10 per page</option>
                            <option>25 per page</option>
                            <option>50 per page</option>
                        </select>
                    </div>
                    <nav>
                        <ul class='pagination pagination-sm mb-0'>
                            <li class='page-item disabled'><a class='page-link' href='#'>Previous</a></li>
                            <li class='page-item active'><a class='page-link' href='#'>1</a></li>
                            <li class='page-item'><a class='page-link' href='#'>2</a></li>
                            <li class='page-item'><a class='page-link' href='#'>3</a></li>
                            <li class='page-item'><a class='page-link' href='#'>Next</a></li>
                        </ul>
                    </nav>
                </div>
            </div>
        </div>

        <div class='row g-3 mt-4'>
            <div class='col-md-3'>
                <div class='card text-center'>
                    <div class='card-body'>
                        <h3 class='text-primary mb-1'>$13.4M</h3>
                        <small class='text-muted'>Total Revenue</small>
                    </div>
                </div>
            </div>
            <div class='col-md-3'>
                <div class='card text-center'>
                    <div class='card-body'>
                        <h3 class='text-success mb-1'>39,220</h3>
                        <small class='text-muted'>Units Sold</small>
                    </div>
                </div>
            </div>
            <div class='col-md-3'>
                <div class='card text-center'>
                    <div class='card-body'>
                        <h3 class='text-info mb-1'>14.8%</h3>
                        <small class='text-muted'>Growth Rate</small>
                    </div>
                </div>
            </div>
            <div class='col-md-3'>
                <div class='card text-center'>
                    <div class='card-body'>
                        <h3 class='text-warning mb-1'>5</h3>
                        <small class='text-muted'>Active Regions</small>
                    </div>
                </div>
            </div>
        </div>
    </div>
</body>
</html>";

var pdf = renderer.RenderHtmlAsPdf(dataTableReport);
pdf.SaveAs("data-table-report.pdf");
$vbLabelText   $csharpLabel

Ce code génère un rapport de tableau de données sophistiqué avec des en-têtes en dégradé, des tableaux réactifs, des badges d'état et des métriques récapitulatives. Le moteur de rendu Chrome d'IronPDF préserve l'intégralité du style Bootstrap, y compris les effets de survol des tableaux, les couleurs des badges et les commandes de pagination — des fonctionnalités qui vont au-delà des visionneuses PDF traditionnelles. Le moteur prend également en charge le rendu JavaScript pour le contenu dynamique, les polices personnalisées et les caractères internationaux UTF-8 .

Principaux avantages par rapport à PrizmDoc Viewer :

Pour plus de détails sur la génération de PDF Bootstrap, consultez la documentation complète sur le rendu . Les développeurs peuvent également explorer la conversion Angular vers PDF et la prise en charge d'autres frameworks JavaScript . ## Comment les coûts de licence se comparent-ils entre IronPDF et PrizmDoc Viewer ?

Après avoir examiné la structure technique et les fonctions disponibles des deux composants, voici le détail des tarifs de licence. Ceci est crucial car les développeurs cherchent à répondre aux exigences tout en respectant les contraintes budgétaires.

Quelles sont les options de licence d'IronPDF ?

Les licences IronPDF sont disponibles à partir de $699 pour un projet unique avec un seul développeur. IronPDF propose des options de licence flexibles, notamment des licences de développement, des licences de déploiement et des options d'extension pour un support et des mises à jour continus.

Pour les développeurs travaillant dans des entreprises ou des agences desservant plusieurs clients, les licences commencent également à 699 $ et peuvent être ajustées en fonction de la taille de l'équipe et du nombre de projets. IronPDF propose des options de mise à niveau de licence en fonction de l'évolution des besoins.

Les licences suivantes nécessitent un paiement unique :

Nombre de développeurs Prix
1-5 $699
6-10 $799
11-20 $899
21-50 $1,199
Illimité $1,199
  • Pour les entreprises multi-sites, les licences sont disponibles à partir de 1199 $.
  • Pour les services SaaS, les licences sont disponibles à partir de 1099 $.
  • Pour la redistribution OEM sans redevance, les licences sont disponibles à partir de 1599 $.

Remarque : Tous les forfaits de licence ci-dessus incluent 1 an de support et de mises à jour .

Pour en savoir plus sur tous les forfaits de licence disponibles pour IronPDF, cliquez ici. Les développeurs peuvent également appliquer les clés de licence de différentes manières, notamment via le fichier Web.config et les variables d'environnement.

Quelles sont les options de licence de PrizmDoc Viewer ?

What Is the Cost of Self-Hosted `PrizmDoc`?

Pour les serveurs autogérés, le prix de la licence est de 7 900 $ par an avec assistance standard.

Pour en savoir plus sur tous les forfaits disponibles pour PrizmDoc Viewer, cliquez ici.

How Much Does Cloud-Based `PrizmDoc` Cost?

Cette licence couvre les services cloud de PrizmDoc Viewer, dimensionnés en fonction du nombre de transactions.

Terminologies :

Transaction consiste à envoyer une requête au serveur PrizmDoc Viewer et à recevoir le résultat (document résultant).

Seaux prépayés permettent de payer une seule fois et de bénéficier de transactions qui n'expirent pas.

Nombre de transactions Seaux prépayés Mensuel Chaque année
200 $18
1 000 $89
2 000 $119
6 000 $254 $169 1 859 $ (6 000 transactions/mois)
12 000 $434 $289 3 179 $ (12 000 transactions/mois)
25 000 $699 $499 5 459 $ (25 000 transactions/mois)
50 000 $1,199 $799 8 789 $ (50 000 transactions/mois)
100 000 $1,199 $1,199 10 989 $ (100 000 transactions/mois)
200 000 $2,549 $1,699 19 188 $ (200 000 transactions/mois)
300 000 $3,299 $2,199 25 188 $ (300 000 transactions/mois)
400 000 $4,049 $2,699 31 188 $ (400 000 transactions/mois)
500 000 $4,799 $3,199 37 188 $ (500 000 transactions/mois)

Accès rapide au tutoriel

Html To Pdf `icon related to Accès rapide au tutoriel

Obtenir le manuel de démarrage rapide d'IronPDF C#

Un guide de ressources PDF gratuit qui simplifie le développement de PDF pour .NET, avec des explications détaillées des fonctions courantes et des exemples pour manipuler, modifier, générer et enregistrer des PDF en C# et VB.NET pour les projets.

Télécharger le guide

Explorer la référence de l'API IronPDF

Explorez la documentation de référence de l'API pour la bibliothèque IronPDF C#, qui comprend des détails sur toutes les fonctionnalités, classes, champs de méthode, espaces de noms et énumérations d'IronPDF.

Voir la référence API
`documentation related to Accès rapide au tutoriel

Veuillez noter PrizmDoc Viewer d'Accusoft est une marque déposée de son propriétaire respectif. Ce site n'est ni affilié à, ni approuvé par, ni sponsorisé par PrizmDoc Viewer d'Accusoft. Tous les noms de produits, logos et marques sont la propriété de leurs propriétaires respectifs. Les comparaisons sont faites à titre d'information uniquement et reflètent les informations publiquement disponibles au moment de la rédaction.

Questions Fréquemment Posées

Comment puis-je convertir HTML en PDF en C# ?

Vous pouvez utiliser la méthode RenderHtmlAsPdf d'IronPDF pour convertir des chaînes HTML en PDFs. Vous pouvez également convertir des fichiers HTML en PDFs en utilisant RenderHtmlFileAsPdf.

Quels sont les avantages d'utiliser IronPDF par rapport à PrizmDoc Viewer pour la conversion de PDF ?

IronPDF offre une solution de rendu PDF locale simple, prenant en charge le travail hors ligne sans nécessiter de programmation asynchrone. En contraste, PrizmDoc Viewer fonctionne via une API REST, nécessitant une connectivité Internet pour interagir avec le serveur distant.

Puis-je fusionner plusieurs documents PDF en utilisant une bibliothèque PDF ?

Oui, avec IronPDF, vous pouvez fusionner plusieurs PDFs en utilisant la méthode MergePdf, vous permettant de combiner des documents en toute transparence.

Comment IronPDF gère-t-il la conversion de PDF en images ?

IronPDF vous permet de convertir facilement des pages PDF en images en utilisant ses méthodes intégrées, offrant une approche simplifiée par rapport à d'autres logiciels.

Quelles sont les options de personnalisation d'en-tête et de pied de page dans IronPDF ?

IronPDF fournit des fonctions étendues pour définir les propriétés d'en-tête et de pied de page avec une structure de programmation simple, ce qui facilite la personnalisation de vos documents.

IronPDF est-il adapté au traitement de PDF hors ligne ?

Oui, IronPDF permet le traitement de PDF hors ligne, ce qui signifie que vous pouvez travailler sans connectivité Internet, contrairement à certaines autres solutions qui nécessitent une interaction avec un serveur distant.

Quelle est la structure tarifaire des licences IronPDF ?

Les licences IronPDF commencent à 699 $ pour un seul projet avec un développeur, avec des options évolutives pour les entreprises et les services SaaS, offrant une solution de paiement unique et économique.

Puis-je développer avec IronPDF gratuitement ?

Oui, IronPDF est gratuit pour le développement sans limite de temps et offre un essai de déploiement de 30 jours pour mettre en production votre projet.

Comment PrizmDoc Viewer gère-t-il la conversion HTML en PDF ?

PrizmDoc Viewer utilise une API REST pour la conversion de HTML en PDF, nécessitant une programmation asynchrone et une connectivité Internet pour interagir avec un serveur distant.

Quelles sont les exigences système pour héberger un serveur PrizmDoc ?

L'auto-hébergement du serveur PrizmDoc nécessite un minimum de 32 Go de RAM et un processeur 4 Cœurs, pour répondre à ses besoins de traitement.

IronPDF est-il entièrement compatible avec .NET 10 ?

Oui. IronPDF est compatible avec .NET 10 (ainsi qu'avec .NET 9, 8, 7, 6, .NET Core, .NET Standard et .NET Framework). Il s'installe via NuGet, fonctionne sous Windows, Linux et macOS, et utilise son moteur de rendu natif basé sur Chrome pour une conversion HTML vers PDF d'une précision optimale dans les applications .NET 10.

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