COMPARAISON DES PRODUITS

Comparaison entre IronPDF et iText7

Publié août 11, 2024
Partager:

Introduction

Un outil convenable et simple pour manipuler des PDF peut rationaliser de nombreuses tâches et processus impliqués dans la création et l'édition de documents PDF. Dans l'écosystème .NET, il y a deux bibliothèques populaires – IronPDF et iText – qui permettent la génération de PDF sans dépendances Adobe. Ils disposent tous deux d'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 : la capacité des fonctionnalités qu'elles offrent, la qualité de la documentation fournie par elles, la politique de tarification adoptée par ces entreprises pour l'utilisation de leurs produits.

Aperçu de IronPDF et iText

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

iText est l'une des bibliothèques PDF les plus populaires disponibles pour Java ainsi que .NET (C#). iText Core 8 offre une solution programmable de niveau entreprise pour la création et la manipulation de fichiers PDF. iText offre un support pour de nombreuses fonctionnalités différentes et est publié sous licence open-source (AGPL) licences et licences commerciales. Cela signifie qu'il peut couvrir un large éventail de cas d'utilisation lors des 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 ainsi qu'au sein du framework .NET. Pour cette raison, nous comparerons les frameworks et les plateformes pris en charge pour chaque produit ci-dessous.

IronPDF :

IronPDF prend en charge un large éventail de plateformes et d'environnements, assurant une intégration et un déploiement transparents dans divers systèmes :

  • Versions .NET :

    • (C#, VB.NET, F#)

    • .NET Core (8, 7, 6, 5 et 3.1+)

    • standard .NET (2.0+)
  • framework .NET (4.6.2+)
  • Environnements d'application : IronPDF fonctionne dans des environnements d'application comprenant Windows, Linux, Mac, Docker, Azure et AWS
  • IDEs : Fonctionne avec des IDEs tels que Microsoft Visual Studio et JetBrains Rider & 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)

    • framework .NET (4.6.1+)
  • .NET 5+
  • Environnements d'application : iText prend en charge une gamme d'environnements d'application, grâce à sa prise en charge à la fois de Java et de .NET (C#), celles-ci incluent ; Windows, Mac, Linux, et Docker.

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

Comparaison des principales fonctionnalités : IronPDF vs. iText

IronPDF et iText offrent tous deux une gamme de fonctionnalités et d'outils pouvant être utilisés pour travailler avec des fichiers PDF; L’accent de cette prochaine section sera mis sur un examen plus approfondi de certaines de ces fonctionnalités et sur la comparaison des deux bibliothèques en ce qui concerne l'exécution de diverses tâches liées aux PDF.

IronPDF

  • Conversion de HTML en PDF : Prend en charge HTML, CSS, JavaScript et les images.
  • Manipulation de fichiers PDF : Diviser puis fusionner des documents, modifier la mise en forme et éditer des documents PDF existants
  • Sécurité : chiffrement et déchiffrement des PDF.
  • Édition: Ajoutez des annotations, des signets et des contours.
  • Modèles : Appliquer des en-têtes, pieds de page et numéros de page.
  • Filigrane : Appliquez facilement des filigranes texte et image aux fichiers PDF; profitez de son utilisation de HTML/CSS pour obtenir un contrôle total sur le processus.

  • PDF Stamping : Appliquez des images et du texte sur vos documents PDF en utilisant IronPDF.

    Pour plus d'informations sur l'ensemble des fonctionnalités offertes par IronPDF, visitez le Page des fonctionnalités d'IronPDF.

iText

  • Création de PDF : Prend en charge la création de documents PDF à partir de zéro.
  • Formulaires : Créez et modifiez des formulaires PDF.
  • Signatures numériques : Signez des documents PDF.
  • Compression : Optimisez les tailles de fichier PDF.
  • Extraction de contenu : Extraire du texte et des images des PDFs.
  • Open Source: Disponible sous licence AGPL.

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

Comparaison des fonctionnalités PDF entre IronPDF et iText

Conversion de HTML en PDF

Conversion Contenu HTML en PDF est une tâche très simple qui est effectuée dans de nombreux bureaux et espaces de travail différents. Vous trouverez ci-dessous des exemples de code comparant la façon dont IronPDF et iText abordent ce processus.

IronPDF

using IronPdf;
// Disable local disk access or cross-origin requests
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.
// An optional BasePath 'C:\site\assets\' is set as the file location to load assets from
var myAdvancedPdf = renderer.RenderHtmlAsPdf("<img src='icons/iron.png'>", @"C:\site\assets\");
myAdvancedPdf.SaveAs("html-with-assets.pdf");
using IronPdf;
// Disable local disk access or cross-origin requests
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.
// An optional BasePath 'C:\site\assets\' is set as the file location to load assets from
var myAdvancedPdf = renderer.RenderHtmlAsPdf("<img src='icons/iron.png'>", @"C:\site\assets\");
myAdvancedPdf.SaveAs("html-with-assets.pdf");
IRON VB CONVERTER ERROR developers@ironsoftware.com
VB   C#

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);
    }
  }
IRON VB CONVERTER ERROR developers@ironsoftware.com
VB   C#

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

Chiffrement des fichiers PDF

Cryptage et le déchiffrement des documents PDF sont essentiels dans de nombreux lieux de travail. Pour gérer cette tâche facilement, il est nécessaire d'avoir un outil qui peut le faire de manière pratique. Dans le code ci-dessous, nous verrons 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
// The following code makes a PDF read only and will disallow copy & paste and printing
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
// The following code makes a PDF read only and will disallow copy & paste and printing
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");
IRON VB CONVERTER ERROR developers@ironsoftware.com
VB   C#

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();
        }
    }
IRON VB CONVERTER ERROR developers@ironsoftware.com
VB   C#

IronPDF offre aux utilisateurs un moyen simple de crypter des fichiers PDF tout en leur donnant beaucoup de contrôle sur le processus, y compris l'édition des métadonnées et le réglage des paramètres de sécurité, tels que rendre les documents en lecture seule ou restreindre des actions utilisateur comme le copier-coller. D'autre part, iText utilise une méthode plus basique et plus longue où le cryptage 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 cryptage telles que l'AES-128.

Rédiger le contenu PDF

Parfois, lorsqu'on manipule des informations confidentielles ou privées, il peut être nécessaire de rédiger portions d'un fichier PDF. Les exemples de code ci-dessous démontreront comment vous pouvez censurer du texte 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");
IRON VB CONVERTER ERROR developers@ironsoftware.com
VB   C#

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) }; // Example: 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) }; // Example: 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();
                            }
                        }
                    }
                }
IRON VB CONVERTER ERROR developers@ironsoftware.com
VB   C#

L'outil de rédaction d'IronPDF est concis et facile à utiliser, nécessitant seulement quelques lignes de code pour simplifier le processus de rédaction. Cela aide à améliorer l'efficacité des tâches de rédaction de PDF et offre aux utilisateurs un moyen facile de protéger leurs données sensibles et privées.

iText, en revanche, n'offre pas d'outil d'occultation intégré au même titre qu'IronPDF. Cependant, il peut encore couvrir les données sensibles en utilisant la méthode montrée ci-dessus pour dessiner sur le contenu que les utilisateurs souhaitent censurer. Cela peut entraîner des problèmes, cependant, car ces rectangles ne suppriment ni ne caviardent réellement le texte, ce qui signifie que d'autres personnes pourraient potentiellement copier et coller les données censées être caviardées.

Signature de documents PDF

Être capable de signe les documents numériques tels que les fichiers PDF, puis en faisant un processus automatisé, cela pourrait faire gagner du temps. Voici quelques morceaux de code qui permettront de comparer comment IronPDF diffère de iText en termes de signature numérique des 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")
VB   C#

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
VB   C#

Lors de l'application de signatures numériques aux fichiers PDF, IronPDF présente un outil compact mais puissant pour compléter ce processus. Sa simplicité permet de mener le processus rapidement, économisant ainsi 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 aux fichiers PDF, et bien que leur capacité à utiliser différentes options d'interface et clés offre un meilleur contrôle à l'utilisateur, la complexité avec laquelle cet outil effectue cette tâche pourrait l'entraver.

Application de filigranes aux documents PDF

La capacité d'ajouter et de personnaliser filigranes sur les PDF via un logiciel peut grandement aider à la confidentialité, à la protection des droits d'auteur, à la marque ou à toute autre tâche impliquant des informations sensibles. Ce qui suit est une comparaison de la façon dont 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");
IRON VB CONVERTER ERROR developers@ironsoftware.com
VB   C#

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();
            // Creating a dictionary that maps resource names to graphics state parameter dictionaries
            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();
            // Creating a dictionary that maps resource names to graphics state parameter dictionaries
            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()
			' Creating a dictionary that maps resource names to graphics state parameter dictionaries
			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
VB   C#

L'API facile et intuitive de IronPDF permet aux utilisateurs d'appliquer rapidement des filigranes personnalisés à leurs fichiers PDF, tout en leur donnant un contrôle total sur le processus. Son utilisation de HTML/CSS simplifie davantage le processus sans perdre aucun contrôle sur la personnalisation. L'approche de iText pour ajouter des filigranes aux PDFs nécessite plus de travail manuel pour effectuer la tâche, ce qui peut ralentir le processus.

Ajouter des images et du texte à un PDF

Il y a des moments où les pages PDF ont besoin d'être tamponné avec du contenu, similaire à la manière dont on pourrait avoir besoin d'appliquer des filigranes à leurs fichiers PDF. Nous allons maintenant comparer les performances de l'ajout de contenu par IronPDF et iText 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");
IRON VB CONVERTER ERROR developers@ironsoftware.com
VB   C#

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
VB   C#

IronPDF peut vous aider à ajouter du texte ou des images sur des PDF de manière très polyvalente et personnalisable. cela vous permet de prendre le contrôle complet. Il est facile de comprendre et de travailler avec l'API, surtout pour les développeurs familiers avec HTML/CSS. iText utilise ses outils de estampillage d'images et de texte pour donner aux utilisateurs plus de contrôle sur le contenu affiché dans leurs fichiers PDF, bien que le processus puisse finir par être plus manuel.

Convertir DOCX en PDF

Parfois, vous devrez peut-être convertir des PDF d'un format à un autre. Dans ce cas, nous regardons Conversion de DOCX en PDF et comparer comment IronPDF et iText gèrent 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");
IRON VB CONVERTER ERROR developers@ironsoftware.com
VB   C#

iText

iText, à lui seul, ne peut pas gérer la conversion de DOCX en PDF; à la place, 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 de DOCX en PDF, facilitant ainsi la conversion des fichiers DOCX en format PDF sans avoir besoin de bibliothèques externes. iText, en revanche, s'appuie sur des bibliothèques externes pour accomplir cette tâche.

Résumé de la comparaison des exemples de code

Pour des exemples plus détaillés, veuillez visiter Exemples IronPDF.

Tarification et Licence : IronPDF vs. Bibliothèque iText

Prix et licences d'IronPDF

IronPDF a différents niveaux et fonctionnalités supplémentaires pour l'achat d'une licence. Les développeurs peuvent également acheter IronSuite ce qui vous donne accès à tous les produits d'IronSoftware au prix de deux. Si vous n'êtes pas prêt à acheter une licence, IronPDF propose un essai gratuit qui dure 30 jours.

  • Licences perpétuelles : Offre une gamme de licences perpétuelles en fonction de la taille de votre équipe, de vos besoins de projet et du nombre de sites. Chaque type de licence inclut le support par email.
  • Lite License : Cette licence coûte 749 $ et prend en charge un développeur, un site et un projet.
  • Plus License : Supportant trois développeurs, trois emplacements et trois projets, c'est l'étape suivante par rapport à la licence Lite et coûte 1 499 $. La licence Plus offre une assistance par chat et par téléphone en plus de l'assistance par e-mail de base.
  • Professional License : Cette licence convient aux équipes plus importantes, supportant dix développeurs, dix emplacements et dix projets pour 2 999 $. Elle offre les mêmes canaux de support que les niveaux précédents mais propose également un support par partage d'écran.
  • Redistribution libre de droits : La licence d'IronPDF offre également une couverture de redistribution libre de droits pour un supplément de 1 999 $.
  • Assistance produit ininterrompue : IronPDF offre un accès aux mises à jour continues du produit, aux améliorations des fonctionnalités de sécurité et au support de leur équipe d'ingénieurs pour 999 $/an ou un achat unique de 1 999 $ pour une couverture de 5 ans.

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

Licences iText

  • Licence AGPL : La bibliothèque iText Core est open source et disponible gratuitement pour les utilisateurs. Pour utiliser iText sous ce modèle de licence, les utilisateurs doivent se conformer à ses termes et toute modification apportée à iText sous cette licence doit également être publiée 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 respectent pas les termes de l'AGPL, avec des prix établis sur la base d'une estimation.

Documentation et support : IronPDF vs. iText

IronPDF

  • Documentation complète: Documentation exhaustive et conviviale couvrant toutes les fonctionnalités qu'elle a à offrir.
  • Support 24/5: Le support actif des ingénieurs est disponible.
  • Tutoriels Vidéo : Des guides vidéo pas à pas sont disponibles sur YouTube.
  • Forum Communautaire : Une communauté engagée pour un support supplémentaire.

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

iText

  • Documentation : Documentation approfondie couvrant les fonctionnalités offertes par le logiciel iText.
  • Exemples et tutoriels: Contient des tutoriels expliquant comment utiliser ses diverses fonctionnalités avec des exemples de code.
  • GitHub : Les développeurs peuvent facilement soumettre tout problème ou bug qu'ils rencontrent au dépôt GitHub iText et communiquer avec le groupe iText.
  • Mises à jour : iText propose des mises à jour et des améliorations régulières.

    Pour plus de détails sur la documentation et le support d'IronPDF, visitez Documentation IronPDF et le Chaîne YouTube IronSoftware.

Conclusion

Dans le domaine des outils de manipulation de PDF pour .NET, IronPDF et iText offrent tous deux des capacités robustes adaptées à divers besoins de développement. IronPDF se distingue par son intégration simple sur un large éventail de plateformes, y compris .NET Core, Framework et Standard, avec des fonctionnalités complètes telles que la conversion de HTML en PDF et des options de sécurité avancées. D'autre part, iText, réputé pour son héritage Java, offre 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.

Le choix 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é de IronPDF ou pour l'ensemble de fonctionnalités étendu de la bibliothèque PDF open-source qu'est iText, les développeurs disposent de ressources suffisantes pour rationaliser les flux de travail PDF efficacement dans leurs applications.

< PRÉCÉDENT
Comparaison entre IronPDF et Textcontrol
SUIVANT >
Comparaison entre IronPDF et la bibliothèque PDF de Winnovative pour .NET