Passer au contenu du pied de page
COMPARAISONS DE PRODUITS
Une comparaison entre HTML en PDF dans IronPDF vs iText7

Une Comparaison entre IronPDF & iText7

Un outil décent et simple pour manipuler les PDF peut simplifier de nombreuses tâches et processus impliqués dans la création et l'édition de documents PDF. Dans l'écosystème .NET, il existe deux bibliothèques populaires – IronPDF et iText – qui permettent la génération de PDF sans dépendances à Adobe. Elles offrent toutes deux une variété de fonctionnalités telles que la création, l'édition, la conversion, etc., mais cet article se concentrera sur la comparaison de ces bibliothèques selon trois critères : les fonctionnalités qu'elles offrent, la qualité de la documentation fournie par elles, et les politiques tarifaires adoptées par ces entreprises pour l'utilisation de leurs produits.

Vue d'ensemble d'IronPDF et iText

IronPDF est une bibliothèque .NET PDF bien connue qui permet aux programmeurs de créer, modifier et interagir facilement avec les documents PDF. Elle peut être utilisée dans différents environnements .NET, y compris Core, 8, 7, 6, et Framework, ce qui la rend très flexible pour diverses exigences de développement. La fonctionnalité clé de IronPDF est son ensemble de fonctionnalités riches, telles que la conversion HTML en PDF, la capacité de fusionner des PDF, le chiffrement PDF et l'application de signatures numériques, entre autres. La documentation est rédigée de manière à ce que les utilisateurs puissent comprendre sans difficultés, tandis que la bibliothèque elle-même bénéficie d'un support technique solide.

iText est l'une des bibliothèques PDF les plus populaires disponibles pour Java ainsi que pour .NET (C#). iText Core 8 offre une solution programmable de niveau entreprise pour la création et la manipulation de fichiers PDF. iText prend en charge de nombreuses fonctionnalités différentes et est publié sous les licences open source (AGPL) et commerciale. Cela signifie qu'il peut couvrir un large éventail de cas d'utilisation lors de projets de transformation numérique grâce à sa polyvalence.

Compatibilité multiplateforme

IronPDF et iText sont compatibles avec diverses plateformes; ils peuvent traiter des PDF sur de nombreux systèmes différents et au sein du cadre .NET. Nous comparerons ci-dessous les frameworks et plateformes pris en charge pour chaque produit.

IronPDF :

Vue d'ensemble des plateformes prises en charge par IronPDF prend en charge un large éventail de plateformes et d'environnements, garantissant une intégration et un déploiement fluides dans divers systèmes :

  • Versions .NET :

    • .NET Core (8, 7, 6, 5, et 3.1+)
    • .NET Standard (2.0+)
    • .NET Framework (4.6.2+)
  • Environnements d'application : IronPDF fonctionne dans des environnements d'application incluant Windows, Linux, Mac, Docker, Azure et AWS.

  • IDEs : Fonctionne avec des IDE tels que Microsoft Visual Studio, JetBrains Rider et ReSharper.

  • Systèmes d'exploitation et processeurs : Prend en charge plusieurs systèmes d'exploitation et processeurs différents, y compris Windows, Mac, Linux, x64, x86, ARM.

iText

  • Versions .NET :
  • .NET Core (2.x, 3.x)
  • .NET Framework (4.6.1+)
  • .NET 5+

  • Environnements d'application : iText prend en charge une gamme d'environnements d'application, grâce à son support pour Java et .NET (C#), notamment Windows, Mac, Linux et Docker.

  • Systèmes d'exploitation : Fonctionne sur les systèmes d'exploitation Windows, macOS et Linux.

Comparaison des fonctionnalités clés : IronPDF vs. iText

Liste des fonctionnalités clés d'IronPDF et iText offrent toutes deux un éventail de fonctionnalités et d'outils pour travailler avec des fichiers PDF. L'accent de cette prochaine section sera de examiner certaines de ces fonctionnalités de plus près et de voir comment les deux bibliothèques se comparent en ce qui concerne la réalisation de différentes tâches liées aux PDF.

IronPDF

  • Conversion HTML en PDF : Prend en charge HTML, CSS, JavaScript et images.

  • Manipulation de fichiers PDF : Disjoindre et fusionner des documents, changer de format et éditer des documents PDF existants.

  • Sécurité : Chiffrement et déchiffrement PDF.

  • Édition : Ajouter des annotations, des signets, et des contours.

  • Modèles : Appliquer des en-têtes, des pieds de page, et des numéros de page.

  • Filigrane : Appliquez facilement des filigranes de texte et d'image sur des fichiers PDF ; obtenez un contrôle total en utilisant HTML/CSS.

  • Tamponnage de PDF : Tamponnez des images et textes sur vos documents PDF en utilisant IronPDF.

Pour plus d'informations sur l'ensemble complet des fonctionnalités qu'offre IronPDF, visitez la page des fonctionnalités d'IronPDF.

iText

  • Création de PDF : Prise en charge de la création de documents PDF à partir de zéro.

  • Formulaires : Création et édition de formulaires PDF.

  • Signatures numériques : Signer des documents PDF.

  • Compression : Optimiser les tailles de fichier PDF.

  • Extraction de contenu : Extraire du texte et des images des PDF.

  • Open Source : Disponible sous licence AGPL.

  • Personnalisabilité : Niveau élevé de personnalisation pour des cas d'utilisation avancés.

Comparaison des fonctionnalités PDF entre IronPDF et iText

Conversion HTML en PDF

La conversion de contenu HTML en PDF avec IronPDF est une tâche effectuée dans de nombreux bureaux et espaces de travail. Ci-dessous sont des exemples de code comparant la façon dont IronPDF et iText abordent ce processus.

IronPDF

using IronPdf;

// Configure security settings
Installation.EnableWebSecurity = true;

// Instantiate Renderer
var renderer = new ChromePdfRenderer();

// Create a PDF from an HTML string using C#
var pdf = renderer.RenderHtmlAsPdf("<h1>Hello World</h1>");
pdf.SaveAs("output.pdf");

// Advanced Example with HTML Assets
// Load external HTML assets: images, CSS and JavaScript.
var myAdvancedPdf = renderer.RenderHtmlAsPdf("<img src='icons/iron.png'>", @"C:\site\assets\");
myAdvancedPdf.SaveAs("html-with-assets.pdf");
using IronPdf;

// Configure security settings
Installation.EnableWebSecurity = true;

// Instantiate Renderer
var renderer = new ChromePdfRenderer();

// Create a PDF from an HTML string using C#
var pdf = renderer.RenderHtmlAsPdf("<h1>Hello World</h1>");
pdf.SaveAs("output.pdf");

// Advanced Example with HTML Assets
// Load external HTML assets: images, CSS and JavaScript.
var myAdvancedPdf = renderer.RenderHtmlAsPdf("<img src='icons/iron.png'>", @"C:\site\assets\");
myAdvancedPdf.SaveAs("html-with-assets.pdf");
Imports IronPdf

' Configure security settings
Installation.EnableWebSecurity = True

' Instantiate Renderer
Dim renderer = New ChromePdfRenderer()

' Create a PDF from an HTML string using C#
Dim pdf = renderer.RenderHtmlAsPdf("<h1>Hello World</h1>")
pdf.SaveAs("output.pdf")

' Advanced Example with HTML Assets
' Load external HTML assets: images, CSS and JavaScript.
Dim myAdvancedPdf = renderer.RenderHtmlAsPdf("<img src='icons/iron.png'>", "C:\site\assets\")
myAdvancedPdf.SaveAs("html-with-assets.pdf")
$vbLabelText   $csharpLabel

iText

using iText.Html2pdf;

static void Main(string[] args)
{
    using (FileStream htmlSource = File.Open("input.html", FileMode.Open))
    using (FileStream pdfDest = File.Open("output.pdf", FileMode.Create))
    {
        ConverterProperties converterProperties = new ConverterProperties();
        HtmlConverter.ConvertToPdf(htmlSource, pdfDest, converterProperties);
    }
}
using iText.Html2pdf;

static void Main(string[] args)
{
    using (FileStream htmlSource = File.Open("input.html", FileMode.Open))
    using (FileStream pdfDest = File.Open("output.pdf", FileMode.Create))
    {
        ConverterProperties converterProperties = new ConverterProperties();
        HtmlConverter.ConvertToPdf(htmlSource, pdfDest, converterProperties);
    }
}
Imports iText.Html2pdf

Shared Sub Main(ByVal args() As String)
	Using htmlSource As FileStream = File.Open("input.html", FileMode.Open)
	Using pdfDest As FileStream = File.Open("output.pdf", FileMode.Create)
		Dim converterProperties As New ConverterProperties()
		HtmlConverter.ConvertToPdf(htmlSource, pdfDest, converterProperties)
	End Using
	End Using
End Sub
$vbLabelText   $csharpLabel

Lors de la conversion de HTML en PDF, IronPDF offre un outil concis et pratique pour cette tâche. Utilisant le ChromePdfRenderer pour convertir du contenu HTML en PDF, IronPDF excelle en fournissant aux utilisateurs des documents PDF au pixel près. Les utilisateurs peuvent créer des PDF directement à partir de chaînes HTML ou inclure des ressources externes telles que des images avec un chemin de base optionnel, comme démontré dans l'exemple avancé. iText, quant à lui, utilise une approche basique en utilisant sa classe HtmlConverter pour créer des documents PDF à partir d'un fichier HTML.

Cryptage des fichiers PDF

Le chiffrement de fichiers PDF avec IronPDF et le déchiffrement sont vitaux dans de nombreux lieux de travail. Nous verrons ci-dessous comment iText et IronPDF abordent le chiffrement des PDF.

IronPDF

using IronPdf;
using System;

// Open an Encrypted File, alternatively create a new PDF from HTML
var pdf = PdfDocument.FromFile("encrypted.pdf", "password");

// Edit file metadata
pdf.MetaData.Author = "Satoshi Nakamoto";
pdf.MetaData.Keywords = "SEO, Friendly";
pdf.MetaData.ModifiedDate = DateTime.Now;

// Edit file security settings
pdf.SecuritySettings.RemovePasswordsAndEncryption();
pdf.SecuritySettings.MakePdfDocumentReadOnly("secret-key");
pdf.SecuritySettings.AllowUserAnnotations = false;
pdf.SecuritySettings.AllowUserCopyPasteContent = false;
pdf.SecuritySettings.AllowUserFormData = false;
pdf.SecuritySettings.AllowUserPrinting = IronPdf.Security.PdfPrintSecurity.FullPrintRights;

// Change or set the document encryption password
pdf.Password = "my-password";
pdf.SaveAs("secured.pdf");
using IronPdf;
using System;

// Open an Encrypted File, alternatively create a new PDF from HTML
var pdf = PdfDocument.FromFile("encrypted.pdf", "password");

// Edit file metadata
pdf.MetaData.Author = "Satoshi Nakamoto";
pdf.MetaData.Keywords = "SEO, Friendly";
pdf.MetaData.ModifiedDate = DateTime.Now;

// Edit file security settings
pdf.SecuritySettings.RemovePasswordsAndEncryption();
pdf.SecuritySettings.MakePdfDocumentReadOnly("secret-key");
pdf.SecuritySettings.AllowUserAnnotations = false;
pdf.SecuritySettings.AllowUserCopyPasteContent = false;
pdf.SecuritySettings.AllowUserFormData = false;
pdf.SecuritySettings.AllowUserPrinting = IronPdf.Security.PdfPrintSecurity.FullPrintRights;

// Change or set the document encryption password
pdf.Password = "my-password";
pdf.SaveAs("secured.pdf");
Imports IronPdf
Imports System

' Open an Encrypted File, alternatively create a new PDF from HTML
Private pdf = PdfDocument.FromFile("encrypted.pdf", "password")

' Edit file metadata
pdf.MetaData.Author = "Satoshi Nakamoto"
pdf.MetaData.Keywords = "SEO, Friendly"
pdf.MetaData.ModifiedDate = DateTime.Now

' Edit file security settings
pdf.SecuritySettings.RemovePasswordsAndEncryption()
pdf.SecuritySettings.MakePdfDocumentReadOnly("secret-key")
pdf.SecuritySettings.AllowUserAnnotations = False
pdf.SecuritySettings.AllowUserCopyPasteContent = False
pdf.SecuritySettings.AllowUserFormData = False
pdf.SecuritySettings.AllowUserPrinting = IronPdf.Security.PdfPrintSecurity.FullPrintRights

' Change or set the document encryption password
pdf.Password = "my-password"
pdf.SaveAs("secured.pdf")
$vbLabelText   $csharpLabel

iText

using System;
using System.IO;
using System.Text;
using iText.Kernel.Pdf;

public class EncryptPdf
{
    public static readonly String DEST = "results/sandbox/security/encrypt_pdf.pdf";
    public static readonly String SRC = "../../../resources/pdfs/hello.pdf";

    public static readonly String OWNER_PASSWORD = "World";
    public static readonly String USER_PASSWORD = "Hello";

    public static void Main(String[] args)
    {
        FileInfo file = new FileInfo(DEST);
        file.Directory.Create();

        new EncryptPdf().ManipulatePdf(DEST);
    }

    protected void ManipulatePdf(String dest)
    {
        PdfDocument document = new PdfDocument(new PdfReader(SRC), new PdfWriter(dest,
            new WriterProperties().SetStandardEncryption(
                Encoding.UTF8.GetBytes(USER_PASSWORD),
                Encoding.UTF8.GetBytes(OWNER_PASSWORD),
                EncryptionConstants.ALLOW_PRINTING,
                EncryptionConstants.ENCRYPTION_AES_128 | EncryptionConstants.DO_NOT_ENCRYPT_METADATA
            )));
        document.Close();
    }
}
using System;
using System.IO;
using System.Text;
using iText.Kernel.Pdf;

public class EncryptPdf
{
    public static readonly String DEST = "results/sandbox/security/encrypt_pdf.pdf";
    public static readonly String SRC = "../../../resources/pdfs/hello.pdf";

    public static readonly String OWNER_PASSWORD = "World";
    public static readonly String USER_PASSWORD = "Hello";

    public static void Main(String[] args)
    {
        FileInfo file = new FileInfo(DEST);
        file.Directory.Create();

        new EncryptPdf().ManipulatePdf(DEST);
    }

    protected void ManipulatePdf(String dest)
    {
        PdfDocument document = new PdfDocument(new PdfReader(SRC), new PdfWriter(dest,
            new WriterProperties().SetStandardEncryption(
                Encoding.UTF8.GetBytes(USER_PASSWORD),
                Encoding.UTF8.GetBytes(OWNER_PASSWORD),
                EncryptionConstants.ALLOW_PRINTING,
                EncryptionConstants.ENCRYPTION_AES_128 | EncryptionConstants.DO_NOT_ENCRYPT_METADATA
            )));
        document.Close();
    }
}
Imports System
Imports System.IO
Imports System.Text
Imports iText.Kernel.Pdf

Public Class EncryptPdf
	Public Shared ReadOnly DEST As String = "results/sandbox/security/encrypt_pdf.pdf"
	Public Shared ReadOnly SRC As String = "../../../resources/pdfs/hello.pdf"

	Public Shared ReadOnly OWNER_PASSWORD As String = "World"
	Public Shared ReadOnly USER_PASSWORD As String = "Hello"

	Public Shared Sub Main(ByVal args() As String)
		Dim file As New FileInfo(DEST)
		file.Directory.Create()

		Call (New EncryptPdf()).ManipulatePdf(DEST)
	End Sub

	Protected Sub ManipulatePdf(ByVal dest As String)
		Dim document As New PdfDocument(New PdfReader(SRC), New PdfWriter(dest, (New WriterProperties()).SetStandardEncryption(Encoding.UTF8.GetBytes(USER_PASSWORD), Encoding.UTF8.GetBytes(OWNER_PASSWORD), EncryptionConstants.ALLOW_PRINTING, EncryptionConstants.ENCRYPTION_AES_128 Or EncryptionConstants.DO_NOT_ENCRYPT_METADATA)))
		document.Close()
	End Sub
End Class
$vbLabelText   $csharpLabel

IronPDF offre aux utilisateurs un moyen simple d'encrypter des fichiers PDF tout en leur donnant beaucoup de contrôle, comme l'édition des métadonnées et l'ajustement des paramètres de sécurité comme faire des documents en lecture seule ou restreindre les actions des utilisateurs telles que copier et coller. D'un autre côté, iText utilise une méthode plus bas et plus longue où le chiffrement PDF est appliqué lors de la création du document, en spécifiant les mots de passe propriétaire et utilisateur ainsi que les autorisations comme les droits d'impression en utilisant des normes de chiffrement comme AES-128.

Rendre un document PDF confidentiel

Parfois, en manipulant des informations confidentielles ou privées, il peut être nécessaire de rendre du texte confidentiel dans un PDF avec IronPDF des portions d'un fichier PDF. Les exemples de code ci-dessous vont démontrer comment vous pouvez rendre du texte confidentiel en utilisant IronPDF en comparaison avec iText.

IronPDF

using IronPdf;

PdfDocument pdf = PdfDocument.FromFile("novel.pdf");

// Redact 'are' phrase from all pages
pdf.RedactTextOnAllPages("are");

pdf.SaveAs("redacted.pdf");
using IronPdf;

PdfDocument pdf = PdfDocument.FromFile("novel.pdf");

// Redact 'are' phrase from all pages
pdf.RedactTextOnAllPages("are");

pdf.SaveAs("redacted.pdf");
Imports IronPdf

Private pdf As PdfDocument = PdfDocument.FromFile("novel.pdf")

' Redact 'are' phrase from all pages
pdf.RedactTextOnAllPages("are")

pdf.SaveAs("redacted.pdf")
$vbLabelText   $csharpLabel

iText

using System;
using System.IO;
using iText.Kernel.Pdf;
using iText.Layout;
using iText.Layout.Element;
using iText.Layout.Properties;
using iText.Kernel.Colors;

string src = "input.pdf";
string dest = "output_redacted.pdf";

using (PdfReader reader = new PdfReader(src))
using (PdfWriter writer = new PdfWriter(dest))
using (PdfDocument pdfDoc = new PdfDocument(reader, writer))
{
    // Iterate through each page
    for (int pageNum = 1; pageNum <= pdfDoc.GetNumberOfPages(); pageNum++)
    {
        PdfPage page = pdfDoc.GetPage(pageNum);
        PdfCanvas canvas = new PdfCanvas(page);
        Rectangle[] rectanglesToRedact = { new Rectangle(100, 100, 200, 50) }; // Define rectangles to redact

        // Overlay black rectangles to simulate redaction
        foreach (Rectangle rect in rectanglesToRedact)
        {
            canvas.SetFillColor(ColorConstants.BLACK)
                .Rectangle(rect.GetX(), rect.GetY(), rect.GetWidth(), rect.GetHeight())
                .Fill();
        }
    }
}
using System;
using System.IO;
using iText.Kernel.Pdf;
using iText.Layout;
using iText.Layout.Element;
using iText.Layout.Properties;
using iText.Kernel.Colors;

string src = "input.pdf";
string dest = "output_redacted.pdf";

using (PdfReader reader = new PdfReader(src))
using (PdfWriter writer = new PdfWriter(dest))
using (PdfDocument pdfDoc = new PdfDocument(reader, writer))
{
    // Iterate through each page
    for (int pageNum = 1; pageNum <= pdfDoc.GetNumberOfPages(); pageNum++)
    {
        PdfPage page = pdfDoc.GetPage(pageNum);
        PdfCanvas canvas = new PdfCanvas(page);
        Rectangle[] rectanglesToRedact = { new Rectangle(100, 100, 200, 50) }; // Define rectangles to redact

        // Overlay black rectangles to simulate redaction
        foreach (Rectangle rect in rectanglesToRedact)
        {
            canvas.SetFillColor(ColorConstants.BLACK)
                .Rectangle(rect.GetX(), rect.GetY(), rect.GetWidth(), rect.GetHeight())
                .Fill();
        }
    }
}
Imports System
Imports System.IO
Imports iText.Kernel.Pdf
Imports iText.Layout
Imports iText.Layout.Element
Imports iText.Layout.Properties
Imports iText.Kernel.Colors

Private src As String = "input.pdf"
Private dest As String = "output_redacted.pdf"

Using reader As New PdfReader(src)
Using writer As New PdfWriter(dest)
Using pdfDoc As New PdfDocument(reader, writer)
	' Iterate through each page
	Dim pageNum As Integer = 1
	Do While pageNum <= pdfDoc.GetNumberOfPages()
		Dim page As PdfPage = pdfDoc.GetPage(pageNum)
		Dim canvas As New PdfCanvas(page)
		Dim rectanglesToRedact() As Rectangle = { New Rectangle(100, 100, 200, 50) } ' Define rectangles to redact

		' Overlay black rectangles to simulate redaction
		For Each rect As Rectangle In rectanglesToRedact
			canvas.SetFillColor(ColorConstants.BLACK).Rectangle(rect.GetX(), rect.GetY(), rect.GetWidth(), rect.GetHeight()).Fill()
		Next rect
		pageNum += 1
	Loop
End Using
End Using
End Using
$vbLabelText   $csharpLabel

L'outil de redaction d'IronPDF est concis et facile à utiliser, nécessitant seulement quelques lignes de code pour simplifier le processus de redaction. Cela aide à améliorer l'efficacité autour des tâches de redaction PDF et donne aux utilisateurs un moyen facile de garder leurs données sensibles et privées à l'abri. iText, cependant, n'offre pas d'outil de redaction intégré de la même manière qu'IronPDF. Cependant, il peut toujours couvrir les données sensibles en utilisant la méthode montrée ci-dessus pour dessiner sur le contenu que les utilisateurs souhaitent rendre confidentiel. Cela peut entraîner des problèmes potentiels, car ces rectangles ne suppriment pas ou ne masquent pas correctement le texte, ce qui signifie que d'autres personnes pourraient potentiellement copier et coller les données en train d'être rendues confidentielles.

Signer des documents PDF

Pouvoir signer numériquement des documents PDF avec IronPDF peut être un gain de temps, surtout lorsque cela devient un processus automatisé. Voici quelques extraits de code comparant comment IronPDF diffère de iText en termes de réalisation de la signature numérique de documents.

IronPDF

using IronPdf;
using IronPdf.Signing;
using System.Security.Cryptography.X509Certificates;

// Create X509Certificate2 object with X509KeyStorageFlags set to Exportable
X509Certificate2 cert = new X509Certificate2("IronSoftware.pfx", "123456", X509KeyStorageFlags.Exportable);

// Create PdfSignature object
var sig = new PdfSignature(cert);

// Sign PDF document
PdfDocument pdf = PdfDocument.FromFile("document.pdf");
pdf.Sign(sig);
pdf.SaveAs("signed.pdf");
using IronPdf;
using IronPdf.Signing;
using System.Security.Cryptography.X509Certificates;

// Create X509Certificate2 object with X509KeyStorageFlags set to Exportable
X509Certificate2 cert = new X509Certificate2("IronSoftware.pfx", "123456", X509KeyStorageFlags.Exportable);

// Create PdfSignature object
var sig = new PdfSignature(cert);

// Sign PDF document
PdfDocument pdf = PdfDocument.FromFile("document.pdf");
pdf.Sign(sig);
pdf.SaveAs("signed.pdf");
Imports IronPdf
Imports IronPdf.Signing
Imports System.Security.Cryptography.X509Certificates

' Create X509Certificate2 object with X509KeyStorageFlags set to Exportable
Private cert As New X509Certificate2("IronSoftware.pfx", "123456", X509KeyStorageFlags.Exportable)

' Create PdfSignature object
Private sig = New PdfSignature(cert)

' Sign PDF document
Private pdf As PdfDocument = PdfDocument.FromFile("document.pdf")
pdf.Sign(sig)
pdf.SaveAs("signed.pdf")
$vbLabelText   $csharpLabel

iText

using System;
using System.IO;
using iText.Kernel.Pdf;
using iText.Signatures;
using Org.BouncyCastle.Crypto;
using Org.BouncyCastle.Pkcs;
using Org.BouncyCastle.X509;

class Program
{
    static void Main(string[] args)
    {
        string src = "input.pdf";
        string dest = "output_signed.pdf";
        string pfxFile = "your_certificate.pfx";
        string pfxPassword = "your_password";

        try
        {
            // Load your certificate
            Pkcs12Store ks = new Pkcs12Store(new FileStream(pfxFile, FileMode.Open), pfxPassword.ToCharArray());
            string alias = null;
            foreach (string al in ks.Aliases)
            {
                if (ks.IsKeyEntry(al))
                {
                    alias = al;
                    break;
                }
            }
            ICipherParameters pk = ks.GetKey(alias).Key;
            X509CertificateEntry[] chain = ks.GetCertificateChain(alias);
            X509Certificate2 cert = new X509Certificate2(chain[0].Certificate.GetEncoded());

            // Create output PDF with signed content
            using (PdfReader reader = new PdfReader(src))
            using (PdfWriter writer = new PdfWriter(dest))
            using (PdfDocument pdfDoc = new PdfDocument(reader, writer))
            {
                // Create the signer
                PdfSigner signer = new PdfSigner(pdfDoc, writer, new StampingProperties().UseAppendMode());

                // Configure signature appearance
                PdfSignatureAppearance appearance = signer.GetSignatureAppearance();
                appearance.SetReason("Digital Signature");
                appearance.SetLocation("Your Location");
                appearance.SetContact("Your Contact");

                // Create signature
                IExternalSignature pks = new PrivateKeySignature(pk, "SHA-256");
                signer.SignDetached(pks, chain, null, null, null, 0, PdfSigner.CryptoStandard.CMS);
            }

            Console.WriteLine($"PDF digitally signed successfully: {dest}");
        }
        catch (Exception ex)
        {
            Console.WriteLine($"Error signing PDF: {ex.Message}");
        }
    }
}
using System;
using System.IO;
using iText.Kernel.Pdf;
using iText.Signatures;
using Org.BouncyCastle.Crypto;
using Org.BouncyCastle.Pkcs;
using Org.BouncyCastle.X509;

class Program
{
    static void Main(string[] args)
    {
        string src = "input.pdf";
        string dest = "output_signed.pdf";
        string pfxFile = "your_certificate.pfx";
        string pfxPassword = "your_password";

        try
        {
            // Load your certificate
            Pkcs12Store ks = new Pkcs12Store(new FileStream(pfxFile, FileMode.Open), pfxPassword.ToCharArray());
            string alias = null;
            foreach (string al in ks.Aliases)
            {
                if (ks.IsKeyEntry(al))
                {
                    alias = al;
                    break;
                }
            }
            ICipherParameters pk = ks.GetKey(alias).Key;
            X509CertificateEntry[] chain = ks.GetCertificateChain(alias);
            X509Certificate2 cert = new X509Certificate2(chain[0].Certificate.GetEncoded());

            // Create output PDF with signed content
            using (PdfReader reader = new PdfReader(src))
            using (PdfWriter writer = new PdfWriter(dest))
            using (PdfDocument pdfDoc = new PdfDocument(reader, writer))
            {
                // Create the signer
                PdfSigner signer = new PdfSigner(pdfDoc, writer, new StampingProperties().UseAppendMode());

                // Configure signature appearance
                PdfSignatureAppearance appearance = signer.GetSignatureAppearance();
                appearance.SetReason("Digital Signature");
                appearance.SetLocation("Your Location");
                appearance.SetContact("Your Contact");

                // Create signature
                IExternalSignature pks = new PrivateKeySignature(pk, "SHA-256");
                signer.SignDetached(pks, chain, null, null, null, 0, PdfSigner.CryptoStandard.CMS);
            }

            Console.WriteLine($"PDF digitally signed successfully: {dest}");
        }
        catch (Exception ex)
        {
            Console.WriteLine($"Error signing PDF: {ex.Message}");
        }
    }
}
Imports System
Imports System.IO
Imports iText.Kernel.Pdf
Imports iText.Signatures
Imports Org.BouncyCastle.Crypto
Imports Org.BouncyCastle.Pkcs
Imports Org.BouncyCastle.X509

Friend Class Program
	Shared Sub Main(ByVal args() As String)
		Dim src As String = "input.pdf"
		Dim dest As String = "output_signed.pdf"
		Dim pfxFile As String = "your_certificate.pfx"
		Dim pfxPassword As String = "your_password"

		Try
			' Load your certificate
			Dim ks As New Pkcs12Store(New FileStream(pfxFile, FileMode.Open), pfxPassword.ToCharArray())
			Dim [alias] As String = Nothing
			For Each al As String In ks.Aliases
				If ks.IsKeyEntry(al) Then
					[alias] = al
					Exit For
				End If
			Next al
			Dim pk As ICipherParameters = ks.GetKey([alias]).Key
			Dim chain() As X509CertificateEntry = ks.GetCertificateChain([alias])
			Dim cert As New X509Certificate2(chain(0).Certificate.GetEncoded())

			' Create output PDF with signed content
			Using reader As New PdfReader(src)
			Using writer As New PdfWriter(dest)
			Using pdfDoc As New PdfDocument(reader, writer)
				' Create the signer
				Dim signer As New PdfSigner(pdfDoc, writer, (New StampingProperties()).UseAppendMode())

				' Configure signature appearance
				Dim appearance As PdfSignatureAppearance = signer.GetSignatureAppearance()
				appearance.SetReason("Digital Signature")
				appearance.SetLocation("Your Location")
				appearance.SetContact("Your Contact")

				' Create signature
				Dim pks As IExternalSignature = New PrivateKeySignature(pk, "SHA-256")
				signer.SignDetached(pks, chain, Nothing, Nothing, Nothing, 0, PdfSigner.CryptoStandard.CMS)
			End Using
			End Using
			End Using

			Console.WriteLine($"PDF digitally signed successfully: {dest}")
		Catch ex As Exception
			Console.WriteLine($"Error signing PDF: {ex.Message}")
		End Try
	End Sub
End Class
$vbLabelText   $csharpLabel

Lors de l'application des signatures aux fichiers PDF numériquement, IronPDF présente un outil concis mais puissant pour compléter ce processus. Sa simplicité permet au processus d'être effectué rapidement, économisant du temps pour tout développeur qui l'implémente pour ses besoins de signature. iText nécessite un processus plus long et plus complexe pour appliquer des signatures numériques à des fichiers PDF. Bien que leur capacité à utiliser différentes options d'interface et de clés offre plus de contrôle à l'utilisateur, la complexité de la façon dont cet outil réalise cette tâche pourrait entraver son utilisation.

Appliquer des filigranes à des documents PDF

La capacité à ajouter et personnaliser des filigranes sur des PDF avec IronPDF peut grandement aider à la confidentialité, la protection des droits d'auteur, le branding, ou toute tâche impliquant des informations sensibles. La comparaison suivante montre comment IronPDF et iText appliquent des filigranes aux fichiers PDF.

IronPDF

using IronPdf;

// Stamps a Watermark onto a new or existing PDF
var renderer = new ChromePdfRenderer();

var pdf = renderer.RenderUrlAsPdf("https://www.nuget.org/packages/IronPdf");
pdf.ApplyWatermark("<h2 style='color:red'>SAMPLE</h2>", 30, IronPdf.Editing.VerticalAlignment.Middle, IronPdf.Editing.HorizontalAlignment.Center);
pdf.SaveAs(@"C:\Path\To\Watermarked.pdf");
using IronPdf;

// Stamps a Watermark onto a new or existing PDF
var renderer = new ChromePdfRenderer();

var pdf = renderer.RenderUrlAsPdf("https://www.nuget.org/packages/IronPdf");
pdf.ApplyWatermark("<h2 style='color:red'>SAMPLE</h2>", 30, IronPdf.Editing.VerticalAlignment.Middle, IronPdf.Editing.HorizontalAlignment.Center);
pdf.SaveAs(@"C:\Path\To\Watermarked.pdf");
Imports IronPdf

' Stamps a Watermark onto a new or existing PDF
Private renderer = New ChromePdfRenderer()

Private pdf = renderer.RenderUrlAsPdf("https://www.nuget.org/packages/IronPdf")
pdf.ApplyWatermark("<h2 style='color:red'>SAMPLE</h2>", 30, IronPdf.Editing.VerticalAlignment.Middle, IronPdf.Editing.HorizontalAlignment.Center)
pdf.SaveAs("C:\Path\To\Watermarked.pdf")
$vbLabelText   $csharpLabel

iText

using iText.IO.Font;
using iText.IO.Font.Constants;
using iText.Kernel.Colors;
using iText.Kernel.Font;
using iText.Kernel.Pdf;
using iText.Kernel.Pdf.Canvas;
using iText.Kernel.Pdf.Extgstate;
using iText.Layout;
using iText.Layout.Element;
using iText.Layout.Properties;

public class TransparentWatermark 
{
    public static readonly String DEST = "results/sandbox/stamper/transparent_watermark.pdf";
    public static readonly String SRC = "../../../resources/pdfs/hero.pdf";

    public static void Main(String[] args) 
    {
        FileInfo file = new FileInfo(DEST);
        file.Directory.Create();

        new TransparentWatermark().ManipulatePdf(DEST);
    }

    protected void ManipulatePdf(String dest) 
    {
        PdfDocument pdfDoc = new PdfDocument(new PdfReader(SRC), new PdfWriter(dest));
        PdfCanvas under = new PdfCanvas(pdfDoc.GetFirstPage().NewContentStreamBefore(), new PdfResources(), pdfDoc);
        PdfFont font = PdfFontFactory.CreateFont(FontProgramFactory.CreateFont(StandardFonts.HELVETICA));
        Paragraph paragraph = new Paragraph("This watermark is added UNDER the existing content")
                .SetFont(font)
                .SetFontSize(15);

        Canvas canvasWatermark1 = new Canvas(under, pdfDoc.GetDefaultPageSize())
                .ShowTextAligned(paragraph, 297, 550, 1, TextAlignment.CENTER, VerticalAlignment.TOP, 0);
        canvasWatermark1.Close();
        PdfCanvas over = new PdfCanvas(pdfDoc.GetFirstPage());
        over.SetFillColor(ColorConstants.BLACK);
        paragraph = new Paragraph("This watermark is added ON TOP OF the existing content")
                .SetFont(font)
                .SetFontSize(15);

        Canvas canvasWatermark2 = new Canvas(over, pdfDoc.GetDefaultPageSize())
                .ShowTextAligned(paragraph, 297, 500, 1, TextAlignment.CENTER, VerticalAlignment.TOP, 0);
        canvasWatermark2.Close();
        paragraph = new Paragraph("This TRANSPARENT watermark is added ON TOP OF the existing content")
                .SetFont(font)
                .SetFontSize(15);
        over.SaveState();

        PdfExtGState gs1 = new PdfExtGState();
        gs1.SetFillOpacity(0.5f);
        over.SetExtGState(gs1);
        Canvas canvasWatermark3 = new Canvas(over, pdfDoc.GetDefaultPageSize())
                .ShowTextAligned(paragraph, 297, 450, 1, TextAlignment.CENTER, VerticalAlignment.TOP, 0);
        canvasWatermark3.Close();
        over.RestoreState();

        pdfDoc.Close();
    }
}
using iText.IO.Font;
using iText.IO.Font.Constants;
using iText.Kernel.Colors;
using iText.Kernel.Font;
using iText.Kernel.Pdf;
using iText.Kernel.Pdf.Canvas;
using iText.Kernel.Pdf.Extgstate;
using iText.Layout;
using iText.Layout.Element;
using iText.Layout.Properties;

public class TransparentWatermark 
{
    public static readonly String DEST = "results/sandbox/stamper/transparent_watermark.pdf";
    public static readonly String SRC = "../../../resources/pdfs/hero.pdf";

    public static void Main(String[] args) 
    {
        FileInfo file = new FileInfo(DEST);
        file.Directory.Create();

        new TransparentWatermark().ManipulatePdf(DEST);
    }

    protected void ManipulatePdf(String dest) 
    {
        PdfDocument pdfDoc = new PdfDocument(new PdfReader(SRC), new PdfWriter(dest));
        PdfCanvas under = new PdfCanvas(pdfDoc.GetFirstPage().NewContentStreamBefore(), new PdfResources(), pdfDoc);
        PdfFont font = PdfFontFactory.CreateFont(FontProgramFactory.CreateFont(StandardFonts.HELVETICA));
        Paragraph paragraph = new Paragraph("This watermark is added UNDER the existing content")
                .SetFont(font)
                .SetFontSize(15);

        Canvas canvasWatermark1 = new Canvas(under, pdfDoc.GetDefaultPageSize())
                .ShowTextAligned(paragraph, 297, 550, 1, TextAlignment.CENTER, VerticalAlignment.TOP, 0);
        canvasWatermark1.Close();
        PdfCanvas over = new PdfCanvas(pdfDoc.GetFirstPage());
        over.SetFillColor(ColorConstants.BLACK);
        paragraph = new Paragraph("This watermark is added ON TOP OF the existing content")
                .SetFont(font)
                .SetFontSize(15);

        Canvas canvasWatermark2 = new Canvas(over, pdfDoc.GetDefaultPageSize())
                .ShowTextAligned(paragraph, 297, 500, 1, TextAlignment.CENTER, VerticalAlignment.TOP, 0);
        canvasWatermark2.Close();
        paragraph = new Paragraph("This TRANSPARENT watermark is added ON TOP OF the existing content")
                .SetFont(font)
                .SetFontSize(15);
        over.SaveState();

        PdfExtGState gs1 = new PdfExtGState();
        gs1.SetFillOpacity(0.5f);
        over.SetExtGState(gs1);
        Canvas canvasWatermark3 = new Canvas(over, pdfDoc.GetDefaultPageSize())
                .ShowTextAligned(paragraph, 297, 450, 1, TextAlignment.CENTER, VerticalAlignment.TOP, 0);
        canvasWatermark3.Close();
        over.RestoreState();

        pdfDoc.Close();
    }
}
Imports iText.IO.Font
Imports iText.IO.Font.Constants
Imports iText.Kernel.Colors
Imports iText.Kernel.Font
Imports iText.Kernel.Pdf
Imports iText.Kernel.Pdf.Canvas
Imports iText.Kernel.Pdf.Extgstate
Imports iText.Layout
Imports iText.Layout.Element
Imports iText.Layout.Properties

Public Class TransparentWatermark
	Public Shared ReadOnly DEST As String = "results/sandbox/stamper/transparent_watermark.pdf"
	Public Shared ReadOnly SRC As String = "../../../resources/pdfs/hero.pdf"

	Public Shared Sub Main(ByVal args() As String)
		Dim file As New FileInfo(DEST)
		file.Directory.Create()

		Call (New TransparentWatermark()).ManipulatePdf(DEST)
	End Sub

	Protected Sub ManipulatePdf(ByVal dest As String)
		Dim pdfDoc As New PdfDocument(New PdfReader(SRC), New PdfWriter(dest))
		Dim under As New PdfCanvas(pdfDoc.GetFirstPage().NewContentStreamBefore(), New PdfResources(), pdfDoc)
		Dim font As PdfFont = PdfFontFactory.CreateFont(FontProgramFactory.CreateFont(StandardFonts.HELVETICA))
		Dim paragraph As Paragraph = (New Paragraph("This watermark is added UNDER the existing content")).SetFont(font).SetFontSize(15)

		Dim canvasWatermark1 As Canvas = (New Canvas(under, pdfDoc.GetDefaultPageSize())).ShowTextAligned(paragraph, 297, 550, 1, TextAlignment.CENTER, VerticalAlignment.TOP, 0)
		canvasWatermark1.Close()
		Dim over As New PdfCanvas(pdfDoc.GetFirstPage())
		over.SetFillColor(ColorConstants.BLACK)
		paragraph = (New Paragraph("This watermark is added ON TOP OF the existing content")).SetFont(font).SetFontSize(15)

		Dim canvasWatermark2 As Canvas = (New Canvas(over, pdfDoc.GetDefaultPageSize())).ShowTextAligned(paragraph, 297, 500, 1, TextAlignment.CENTER, VerticalAlignment.TOP, 0)
		canvasWatermark2.Close()
		paragraph = (New Paragraph("This TRANSPARENT watermark is added ON TOP OF the existing content")).SetFont(font).SetFontSize(15)
		over.SaveState()

		Dim gs1 As New PdfExtGState()
		gs1.SetFillOpacity(0.5F)
		over.SetExtGState(gs1)
		Dim canvasWatermark3 As Canvas = (New Canvas(over, pdfDoc.GetDefaultPageSize())).ShowTextAligned(paragraph, 297, 450, 1, TextAlignment.CENTER, VerticalAlignment.TOP, 0)
		canvasWatermark3.Close()
		over.RestoreState()

		pdfDoc.Close()
	End Sub
End Class
$vbLabelText   $csharpLabel

L'API facile et intuitive d'IronPDF permet aux utilisateurs d'appliquer rapidement des filigranes personnalisés à leurs fichiers PDF, accordant un contrôle total sur le processus. Son utilisation de HTML/CSS simplifie encore le processus sans perdre aucun contrôle de personnalisation. L'approche d'iText pour ajouter des filigranes aux PDF nécessite plus de travail manuel, ralentissant potentiellement le processus.

Tamponner des images et du texte sur un PDF

Il y a des moments où les pages PDF doivent être tamponnées avec du texte ou des images sur un PDF, de la même manière qu'une personne pourrait avoir besoin d'appliquer des filigranes à ses fichiers PDF. Nous allons maintenant comparer comment IronPDF et iText effectuent le tamponnage de contenu sur un document PDF.

IronPDF

using IronPdf;
using IronPdf.Editing;

ChromePdfRenderer renderer = new ChromePdfRenderer();

PdfDocument pdf = renderer.RenderHtmlAsPdf("<h1>Example HTML Document!</h1>");

// Create text stamper
TextStamper textStamper = new TextStamper()
{
    Text = "Text Stamper!",
    FontFamily = "Bungee Spice",
    UseGoogleFont = true,
    FontSize = 30,
    IsBold = true,
    IsItalic = true,
    VerticalAlignment = VerticalAlignment.Top,
};

// Stamp the text stamper
pdf.ApplyStamp(textStamper);
pdf.SaveAs("stampText.pdf");

// Create image stamper
ImageStamper imageStamper = new ImageStamper(new Uri("https://ironpdf.com/img/svgs/iron-pdf-logo.svg"))
{
    VerticalAlignment = VerticalAlignment.Top,
};

// Stamp the image stamper
pdf.ApplyStamp(imageStamper, 0);
pdf.SaveAs("stampImage.pdf");
using IronPdf;
using IronPdf.Editing;

ChromePdfRenderer renderer = new ChromePdfRenderer();

PdfDocument pdf = renderer.RenderHtmlAsPdf("<h1>Example HTML Document!</h1>");

// Create text stamper
TextStamper textStamper = new TextStamper()
{
    Text = "Text Stamper!",
    FontFamily = "Bungee Spice",
    UseGoogleFont = true,
    FontSize = 30,
    IsBold = true,
    IsItalic = true,
    VerticalAlignment = VerticalAlignment.Top,
};

// Stamp the text stamper
pdf.ApplyStamp(textStamper);
pdf.SaveAs("stampText.pdf");

// Create image stamper
ImageStamper imageStamper = new ImageStamper(new Uri("https://ironpdf.com/img/svgs/iron-pdf-logo.svg"))
{
    VerticalAlignment = VerticalAlignment.Top,
};

// Stamp the image stamper
pdf.ApplyStamp(imageStamper, 0);
pdf.SaveAs("stampImage.pdf");
Imports IronPdf
Imports IronPdf.Editing

Private renderer As New ChromePdfRenderer()

Private pdf As PdfDocument = renderer.RenderHtmlAsPdf("<h1>Example HTML Document!</h1>")

' Create text stamper
Private textStamper As New TextStamper() With {
	.Text = "Text Stamper!",
	.FontFamily = "Bungee Spice",
	.UseGoogleFont = True,
	.FontSize = 30,
	.IsBold = True,
	.IsItalic = True,
	.VerticalAlignment = VerticalAlignment.Top
}

' Stamp the text stamper
pdf.ApplyStamp(textStamper)
pdf.SaveAs("stampText.pdf")

' Create image stamper
Dim imageStamper As New ImageStamper(New Uri("https://ironpdf.com/img/svgs/iron-pdf-logo.svg")) With {.VerticalAlignment = VerticalAlignment.Top}

' Stamp the image stamper
pdf.ApplyStamp(imageStamper, 0)
pdf.SaveAs("stampImage.pdf")
$vbLabelText   $csharpLabel

iText

using iText.Kernel.Pdf;
using iText.Layout;
using iText.Layout.Element;

public void StampPDF(string inputPdfPath, string outputPdfPath, string stampText)
{
    PdfDocument pdfDoc = new PdfDocument(new PdfReader(inputPdfPath), new PdfWriter(outputPdfPath));

    Document doc = new Document(pdfDoc);

    // Add stamp (text) to each page
    int numPages = pdfDoc.GetNumberOfPages();
    for (int i = 1; i <= numPages; i++)
    {
        doc.ShowTextAligned(new Paragraph(stampText),
                            36, 36, i, iText.Layout.Properties.TextAlignment.LEFT,
                            iText.Layout.Properties.VerticalAlignment.TOP, 0);
    }

    doc.Close();
}
using iText.Kernel.Pdf;
using iText.Layout;
using iText.Layout.Element;

public void StampPDF(string inputPdfPath, string outputPdfPath, string stampText)
{
    PdfDocument pdfDoc = new PdfDocument(new PdfReader(inputPdfPath), new PdfWriter(outputPdfPath));

    Document doc = new Document(pdfDoc);

    // Add stamp (text) to each page
    int numPages = pdfDoc.GetNumberOfPages();
    for (int i = 1; i <= numPages; i++)
    {
        doc.ShowTextAligned(new Paragraph(stampText),
                            36, 36, i, iText.Layout.Properties.TextAlignment.LEFT,
                            iText.Layout.Properties.VerticalAlignment.TOP, 0);
    }

    doc.Close();
}
Imports iText.Kernel.Pdf
Imports iText.Layout
Imports iText.Layout.Element

Public Sub StampPDF(ByVal inputPdfPath As String, ByVal outputPdfPath As String, ByVal stampText As String)
	Dim pdfDoc As New PdfDocument(New PdfReader(inputPdfPath), New PdfWriter(outputPdfPath))

	Dim doc As New Document(pdfDoc)

	' Add stamp (text) to each page
	Dim numPages As Integer = pdfDoc.GetNumberOfPages()
	For i As Integer = 1 To numPages
		doc.ShowTextAligned(New Paragraph(stampText), 36, 36, i, iText.Layout.Properties.TextAlignment.LEFT, iText.Layout.Properties.VerticalAlignment.TOP, 0)
	Next i

	doc.Close()
End Sub
$vbLabelText   $csharpLabel

IronPDF peut vous aider à ajouter du texte ou des images sur des PDF de manière polyvalente et personnalisable, offrant un contrôle total. Son API est facile à comprendre et à utiliser, surtout pour les développeurs familiers avec HTML/CSS. iText utilise ses outils de tamponnage d'image et de texte pour donner aux utilisateurs plus de contrôle sur le contenu affiché sur leurs fichiers PDF, bien que le processus puisse finir par être plus manuel.

Convertir DOCX en PDF

Parfois, vous pourriez devoir convertir des PDF d'un format à un autre. Dans ce cas, nous examinons la conversion DOCX en PDF avec IronPDF et comment IronPDF et iText traitent ce processus différemment.

IronPDF

using IronPdf;

// Instantiate Renderer
DocxToPdfRenderer renderer = new DocxToPdfRenderer();

// Render from DOCX file
PdfDocument pdf = renderer.RenderDocxAsPdf("Modern-chronological-resume.docx");

// Save the PDF
pdf.SaveAs("pdfFromDocx.pdf");
using IronPdf;

// Instantiate Renderer
DocxToPdfRenderer renderer = new DocxToPdfRenderer();

// Render from DOCX file
PdfDocument pdf = renderer.RenderDocxAsPdf("Modern-chronological-resume.docx");

// Save the PDF
pdf.SaveAs("pdfFromDocx.pdf");
Imports IronPdf

' Instantiate Renderer
Private renderer As New DocxToPdfRenderer()

' Render from DOCX file
Private pdf As PdfDocument = renderer.RenderDocxAsPdf("Modern-chronological-resume.docx")

' Save the PDF
pdf.SaveAs("pdfFromDocx.pdf")
$vbLabelText   $csharpLabel

iText

iText, en soi, ne peut pas gérer la conversion DOCX en PDF ; au lieu de cela, il s'appuie sur des bibliothèques externes telles que DocX ou Aspose.Words.

IronPDF fournit aux développeurs un outil simple et concis pour gérer les tâches de conversion DOCX en PDF, facilitant la conversion de fichiers DOCX en format PDF sans besoin de bibliothèques externes. iText, par contre, s'appuie sur des bibliothèques externes pour réaliser cette tâche.

Résumé de la comparaison des exemples de code

Alternatives iText C# HTML en PDF

Pour des exemples plus détaillés, visitez Exemples d'IronPDF pour créer des PDF à partir de HTML.

Support de Bootstrap et des frameworks CSS modernes

Une considération critique qui émerge souvent lors du développement réel est la façon dont chaque bibliothèque gère les frameworks CSS modernes. Avec Bootstrap, Tailwind CSS et Foundation formant la base de la plupart des applications web contemporaines, la compatibilité des frameworks peut avoir un impact significatif sur votre flux de travail de développement et la qualité de la production.

IronPDF : Support complet des frameworks modernes

Le moteur de rendu Chrome d'IronPDF offre un support complet et prêt pour la production pour tous les frameworks CSS modernes :

  • Bootstrap 5 : Prise en charge native de flexbox et CSS Grid pour toutes les mises en page
  • Tailwind CSS : Support complet des frameworks basés sur l'utilitaire
  • CSS3 moderne : Transformations, animations, propriétés personnalisées et sélecteurs avancés
  • Framework validation: Successfully renders the Bootstrap homepage and Bootstrap templates

Exemple de code : Indicateurs de progression Bootstrap

using IronPdf;

var renderer = new ChromePdfRenderer();

string bootstrap ProgressBars = @"
<!DOCTYPE html>
<html>
<head>
    <link href='https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css' rel='stylesheet'>
</head>
<body>
    <div class='container my-5'>
        <h2 class='mb-4'>Project Progress Dashboard</h2>

        <div class='mb-4'>
            <div class='d-flex justify-content-between mb-1'>
                <span>Backend Development</span>
                <span class='text-success fw-bold'>85%</span>
            </div>
            <div class='progress' style='height: 25px;'>
                <div class='progress-bar progress-bar-striped bg-success' role='progressbar'
                     style='width: 85%' aria-valuenow='85' aria-valuemin='0' aria-valuemax='100'>
                </div>
            </div>
        </div>

        <div class='mb-4'>
            <div class='d-flex justify-content-between mb-1'>
                <span>Frontend UI</span>
                <span class='text-warning fw-bold'>60%</span>
            </div>
            <div class='progress' style='height: 25px;'>
                <div class='progress-bar progress-bar-animated bg-warning' role='progressbar'
                     style='width: 60%' aria-valuenow='60' aria-valuemin='0' aria-valuemax='100'>
                </div>
            </div>
        </div>

        <div class='mb-4'>
            <div class='d-flex justify-content-between mb-1'>
                <span>Testing & QA</span>
                <span class='text-info fw-bold'>40%</span>
            </div>
            <div class='progress' style='height: 25px;'>
                <div class='progress-bar bg-info' role='progressbar'
                     style='width: 40%' aria-valuenow='40' aria-valuemin='0' aria-valuemax='100'>
                </div>
            </div>
        </div>
    </div>
</body>
</html>";

var pdf = renderer.RenderHtmlAsPdf(bootstrapProgressBars);
pdf.SaveAs("project-progress.pdf");
using IronPdf;

var renderer = new ChromePdfRenderer();

string bootstrap ProgressBars = @"
<!DOCTYPE html>
<html>
<head>
    <link href='https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css' rel='stylesheet'>
</head>
<body>
    <div class='container my-5'>
        <h2 class='mb-4'>Project Progress Dashboard</h2>

        <div class='mb-4'>
            <div class='d-flex justify-content-between mb-1'>
                <span>Backend Development</span>
                <span class='text-success fw-bold'>85%</span>
            </div>
            <div class='progress' style='height: 25px;'>
                <div class='progress-bar progress-bar-striped bg-success' role='progressbar'
                     style='width: 85%' aria-valuenow='85' aria-valuemin='0' aria-valuemax='100'>
                </div>
            </div>
        </div>

        <div class='mb-4'>
            <div class='d-flex justify-content-between mb-1'>
                <span>Frontend UI</span>
                <span class='text-warning fw-bold'>60%</span>
            </div>
            <div class='progress' style='height: 25px;'>
                <div class='progress-bar progress-bar-animated bg-warning' role='progressbar'
                     style='width: 60%' aria-valuenow='60' aria-valuemin='0' aria-valuemax='100'>
                </div>
            </div>
        </div>

        <div class='mb-4'>
            <div class='d-flex justify-content-between mb-1'>
                <span>Testing & QA</span>
                <span class='text-info fw-bold'>40%</span>
            </div>
            <div class='progress' style='height: 25px;'>
                <div class='progress-bar bg-info' role='progressbar'
                     style='width: 40%' aria-valuenow='40' aria-valuemin='0' aria-valuemax='100'>
                </div>
            </div>
        </div>
    </div>
</body>
</html>";

var pdf = renderer.RenderHtmlAsPdf(bootstrapProgressBars);
pdf.SaveAs("project-progress.pdf");
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

iText7 : Support limité des frameworks

iText7 utilise un convertisseur HTML en PDF personnalisé (pdfHTML) avec des limitations significatives pour les frameworks CSS modernes :

  • Aucune exécution JavaScript : Ne peut pas gérer les composants Bootstrap dynamiques
  • Support flexbox limité : Les mises en page Bootstrap 4+ ne s'affichent souvent pas correctement (v7.1.15 offre une prise en charge partielle)
  • CSS Grid non pris en charge : Les mises en page modernes basées sur la grille ne fonctionneront pas
  • Prétraitement manuel requis : Les mises en page complexes nécessitent des outils externes comme Selenium ou Puppeteer

Selon la documentation officielle d'iText, il est conseillé aux développeurs de :

  1. Éviter les mises en page CSS complexes incluant le flexbox
  2. Utiliser des mises en page basées sur tables plutôt que des systèmes de grille modernes
  3. Simplifier les composants Bootstrap en HTML de base
  4. Tester minutieusement car la compatibilité du framework est limitée

Impact réel : Si votre application utilise Bootstrap pour son interface utilisateur et que vous avez besoin d'exportations PDF qui correspondent à votre conception web, iText7 nécessite soit une refonte significative de HTML/CSS pour la génération de PDF, soit une intégration avec des outils externes d'automatisation du navigateur, augmentant considérablement la complexité et le temps de développement.

Pour des informations complètes sur la compatibilité des frameworks CSS, consultez le Guide Bootstrap & Flexbox CSS.

Tarification et licences : IronPDF contre la bibliothèque iText

Tarification et licences d'IronPDF

Options de licence IronPDF offrent divers niveaux et fonctionnalités supplémentaires pour l'achat d'une licence. Les développeurs peuvent également acheter Iron Suite, donnant accès à tous les produits d'Iron Software au prix de deux. Si vous n'êtes pas prêt à acheter une licence, IronPDF propose une version d'essai gratuite qui dure 30 jours.

  • Licences perpétuelles : Offre une gamme de licences perpétuelles en fonction de la taille de votre équipe, des besoins du projet et du nombre de lieux. Chaque type de licence est accompagné d'un support par courrier électronique.

  • Licence Lite : Cette licence prend en charge un développeur, un lieu et un projet.

  • Licence Plus : Prise en charge de trois développeurs, trois lieux et trois projets, cela coûte $1,199. La licence Plus offre un support par chat, téléphone et email.

  • Licence Professionnelle : Convient aux équipes plus importantes, prenant en charge dix développeurs, dix lieux et dix projets pour $2,399. Elle offre les mêmes canaux de support de contact que les niveaux précédents mais offre également un support par partage d'écran.

  • Redistribution sans redevance : La licence d'IronPDF offre également une couverture de redistribution sans redevance pour un coût supplémentaire de $2,399.

  • Support produit ininterrompu : Accédez aux mises à jour continues du produit, aux mises à niveau des fonctionnalités de sécurité, et au support de leur équipe d'ingénierie pour $1,199/an ou un achat unique de $2,399 pour une couverture de 5 ans.

  • Iron Suite : Pour $1,498, obtenez l'accès à tous les produits Iron Software y compris IronPDF, IronOCR, IronWord, IronXL, IronBarcode, IronQR, IronZIP, IronPrint, et IronWebScraper.

Comparaison des licences IronPDF

Licence iText

  • Licence AGPL : La bibliothèque iText Core est open source et disponible pour les utilisateurs gratuitement. Pour utiliser iText sous ce modèle de licence, les utilisateurs doivent se conformer à ses termes, et toutes les modifications apportées à iText sous cette licence doivent également être publiées sous le modèle de licence AGPL.

  • Licence commerciale : iText propose un modèle de licence commerciale pour les développeurs dont les projets ne sont pas conformes aux termes AGPL, et les prix sont basés sur des devis.

Documentation et support : IronPDF vs. iText

IronPDF

  • Documentation complète : Documentation extensive et conviviale couvrant toutes les fonctionnalités.

  • Support 24/5 : Support actif des ingénieurs disponible.

  • Tutoriels Vidéo : Guides vidéo étape par étape disponibles sur YouTube.

  • Forum Communautaire : Communauté engagée pour un support supplémentaire.

  • Mises à jour régulières : Mises à jour mensuelles du produit avec les dernières fonctionnalités et correctifs de sécurité.

iText

  • Documentation : Documentation détaillée couvrant les fonctionnalités du logiciel iText.

  • Exemples et tutoriels : Tutoriels et exemples de code pour diverses fonctionnalités.

  • GitHub : Les développeurs peuvent soumettre des problèmes ou des bogues au dépôt GitHub d'iText et communiquer avec le groupe iText.

  • Mises à jour : iText offre des mises à jour et des améliorations régulières.

For more details on IronPDF documentation and support, visit IronPDF Documentation and the Iron Software YouTube Channel.

Conclusion

Dans le domaine des outils de manipulation PDF pour .NET, à la fois IronPDF et iText offrent des capacités robustes adaptées à divers besoins de développement. IronPDF se distingue par son intégration directe sur des plateformes telles que .NET Core, Framework et Standard, aux côtés de fonctionnalités complètes comme la conversion HTML en PDF et les options de sécurité avancées. D'un autre côté, iText, connu pour son héritage Java, fournit de puissants outils de génération et de manipulation de PDF sous licences open source et commerciales, mettant l'accent sur la polyvalence et la personnalisation.

Choisir entre ces outils dépend finalement des exigences du projet, des préférences en matière de licence et du niveau de support technique nécessaire. Que ce soit en optant pour la simplicité et la flexibilité d'IronPDF ou l'ensemble de fonctionnalités étendu de la bibliothèque PDF open source qu'est iText, les développeurs disposent de nombreuses ressources pour rationaliser efficacement les flux de travail PDF dans leurs applications.

Vous pouvez essayer l'essai gratuit de 30 jours pour découvrir leurs fonctionnalités disponibles.

Veuillez noteriText est une marque déposée de son propriétaire respectif. Ce site n'est pas affilié, approuvé par ou sponsorisé par iText. 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

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.

Quelles sont les principales différences entre IronPDF et iText ?

IronPDF est apprécié pour sa facilité d'utilisation, sa documentation complète et son solide support technique, ce qui en fait une option conviviale pour les développeurs. iText, bien que robuste, nécessite souvent plus d'efforts manuels et est disponible sous licences open source (AGPL) et commerciales.

Quelles options de licence sont disponibles pour les bibliothèques PDF ?

IronPDF propose diverses licences perpétuelles et une option sans redevances, tandis qu'iText fournit une licence AGPL gratuite avec une option commerciale pour les projets qui ne sont pas conformes à l'AGPL.

Quelle bibliothèque PDF offre un meilleur support pour les développeurs ?

IronPDF fournit une documentation complète, un support d'ingénierie 24h/5 et un forum communautaire actif, garantissant aux développeurs un accès à des ressources et une assistance à jour.

IronPDF est-il compatible avec différents environnements .NET ?

Oui, IronPDF est compatible avec .NET Core, .NET Standard et .NET Framework, et fonctionne dans des environnements tels que Windows, Linux, Mac, Docker, Azure et AWS.

Comment IronPDF gère-t-il le cryptage des PDF ?

IronPDF propose une API simple pour crypter les PDF, permettant aux utilisateurs de modifier les métadonnées et d'ajuster facilement les paramètres de sécurité, garantissant la sécurité et la conformité du document.

IronPDF peut-il effectuer la conversion de DOCX en PDF ?

Oui, IronPDF excelle dans la conversion de DOCX en PDF, offrant un processus direct et efficace sans besoin de bibliothèques externes, rationalisant les tâches de conversion de documents au sein des applications.

Quelles caractéristiques distinguent IronPDF pour la conversion de HTML en PDF ?

IronPDF utilise un ChromePdfRenderer pour la conversion de HTML en PDF, permettant une intégration facile de HTML, CSS et JavaScript, assurant la conversion précise du contenu web en PDFs.

Comment IronPDF et iText se comparent-ils en termes de compatibilité multiplateforme ?

Les deux bibliothèques prennent en charge plusieurs systèmes d'exploitation et environnements, mais IronPDF offre une expérience plus rationalisée pour des tâches telles que la conversion HTML en PDF et le cryptage PDF.

Quelles sont les caractéristiques clés offertes par IronPDF ?

IronPDF offre des fonctionnalités telles que la conversion HTML en PDF, la manipulation de fichiers PDF, le cryptage et le décryptage, les capacités d'édition, le filigranage, le tamponnage PDF et la signature numérique.

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