Saltar al pie de página
COMPARACIONES DE PRODUCTOS

Una Comparación entre IronPDF y ITextPDF

Para los desarrolladores que trabajan con PDFs, tener una biblioteca confiable para la generación y manipulación de PDF es esencial. In the .NET ecosystem, two popular PDF libraries stand out – IronPDF and iTextPdf – each offering powerful tools to create, edit, and manage PDF documents. Este artículo proporciona una comparación detallada de estas bibliotecas basada en capacidades de características, calidad de la documentación y políticas de precios.

Resumen de IronPDF e iTextPdf

IronPDF

IronPDF es una robusta biblioteca .NET para la gestión de PDF, compatible con varios entornos .NET (Core 8, 7, 6, Framework, y más). Ofrece un conjunto completo de características, incluida la conversión de HTML a PDF, combinación de PDFs, cifrado y firmas digitales. La documentación de IronPDF es clara y los usuarios tienen acceso a soporte técnico confiable. Los desarrolladores a menudo encuentran soluciones a problemas comunes con discusiones en Stack Overflow y otras plataformas de intercambio de código fuente.

iTextPdf

iTextPdf es una biblioteca PDF avanzada para Java y .NET (C#) de la biblioteca iText, con un enfoque en el procesamiento de documentos a nivel empresarial. Está disponible bajo licencias AGPL y comerciales, lo que proporciona flexibilidad para una variedad de proyectos. El software iText, como iTextPdf, es altamente personalizable, lo que lo hace ideal para tareas complejas de PDF, como el cifrado de documentos, firma digital y creación de formularios.

Compatibilidad Multiplataforma

Tanto IronPDF como iTextPdf soportan funcionalidad multiplataforma, haciéndolos versátiles para varias necesidades de aplicaciones dentro de .NET. Aquí hay un desglose de la compatibilidad de cada biblioteca.

IronPDF

  • Versiones .NET: Compatible con .NET Core (8, 7, 6, 5, 3.1+), .NET Standard (2.0+), y .NET Framework (4.6.2+).
  • Entornos de App: Funciona perfectamente en entornos Windows, Linux, Mac, Docker, Azure, y AWS.
  • IDEs Soportados: Funciona bien con Microsoft Visual Studio y JetBrains Rider & ReSharper.
  • Sistemas Operativos y Procesadores: Soporta Windows, Mac, Linux, x64, x86, ARM.

iTextPdf

  • Versiones .NET: Soporta .NET Core (2.x, 3.x), .NET Framework (4.6.1+), y .NET 5+.
  • Entornos de App: Compatible con Windows, macOS, Linux, y Docker.

Comparación de Características Clave: IronPDF vs. iTextPdf

A continuación se presenta una comparación detallada de las características clave proporcionadas por cada biblioteca.

IronPDF

  • Conversión de HTML a PDF: Soporta HTML, CSS, JavaScript, e imágenes.
  • Manipulación de PDF: Dividir, combinar y editar documentos PDF.
  • Seguridad: Capacidades de cifrado y descifrado de PDF.
  • Edición: Permite anotaciones, favoritos y esquemas.
  • Plantillas: Aplicar encabezados, pies de página, y números de página.
  • Marcado de Agua: Soporta marcas de agua de texto e imagen usando HTML/CSS para control.
  • Estampado de PDF: Agregar imágenes y textos de sellos en archivos PDF.

Para obtener más información sobre el conjunto extenso de características que IronPDF tiene para ofrecer, visite la página de características de IronPDF.

iTextPdf

  • Creación de PDF: Soporta la creación de documentos PDF desde cero.
  • Formularios: Ofrece creación y edición de formularios PDF.
  • Firmas Digitales: Firmar documentos PDF.
  • Compresión: Optimiza el tamaño de los archivos PDF.
  • Extracción de Contenido: Extrae texto e imágenes de PDFs.
  • Personalización: Alta personalización para proyectos complejos.

Comparación de Funcionalidad PDF: IronPDF vs. iTextPdf

Conversión de HTML a PDF

Ambas bibliotecas soportan la conversión de HTML a PDF, aunque difieren en el enfoque y facilidad de uso.

IronPDF

using IronPdf;

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

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

// Advanced example with external assets
var myAdvancedPdf = renderer.RenderHtmlAsPdf("<img src='icons/iron.png'>", @"C:\site\assets\");
myAdvancedPdf.SaveAs("html-with-assets.pdf");
using IronPdf;

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

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

// Advanced example with external assets
var myAdvancedPdf = renderer.RenderHtmlAsPdf("<img src='icons/iron.png'>", @"C:\site\assets\");
myAdvancedPdf.SaveAs("html-with-assets.pdf");
Imports IronPdf

' Instantiate the renderer
Private renderer = New ChromePdfRenderer()

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

' Advanced example with external assets
Dim myAdvancedPdf = renderer.RenderHtmlAsPdf("<img src='icons/iron.png'>", "C:\site\assets\")
myAdvancedPdf.SaveAs("html-with-assets.pdf")
$vbLabelText   $csharpLabel

iTextPdf

using iText.Html2pdf;
using System.IO;

public class HtmlToPdf
{
    public static void ConvertHtmlToPdf()
    {
        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;
using System.IO;

public class HtmlToPdf
{
    public static void ConvertHtmlToPdf()
    {
        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
Imports System.IO

Public Class HtmlToPdf
	Public Shared Sub ConvertHtmlToPdf()
		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
End Class
$vbLabelText   $csharpLabel

IronPDF proporciona un enfoque sencillo para la conversión de HTML a PDF, incluida la compatibilidad con HTML, CSS y JavaScript. Permite a los usuarios convertir directamente desde cadenas HTML o incluir recursos con una ruta base opcional. iTextPdf, aunque efectivo, requiere un poco más de configuración, enfocándose más en la conversión basada en archivos.

Encriptación de Archivos PDF

El cifrado es esencial en escenarios donde la seguridad es primordial. Aquí está cómo cada biblioteca lo maneja.

IronPDF

using IronPdf;

// Load an encrypted PDF or create a new one
var pdf = PdfDocument.FromFile("encrypted.pdf", "password");

// Set document security settings
pdf.SecuritySettings.MakePdfDocumentReadOnly("secret-key");
pdf.SecuritySettings.AllowUserCopyPasteContent = false;
pdf.Password = "my-password";
pdf.SaveAs("secured.pdf");
using IronPdf;

// Load an encrypted PDF or create a new one
var pdf = PdfDocument.FromFile("encrypted.pdf", "password");

// Set document security settings
pdf.SecuritySettings.MakePdfDocumentReadOnly("secret-key");
pdf.SecuritySettings.AllowUserCopyPasteContent = false;
pdf.Password = "my-password";
pdf.SaveAs("secured.pdf");
Imports IronPdf

' Load an encrypted PDF or create a new one
Private pdf = PdfDocument.FromFile("encrypted.pdf", "password")

' Set document security settings
pdf.SecuritySettings.MakePdfDocumentReadOnly("secret-key")
pdf.SecuritySettings.AllowUserCopyPasteContent = False
pdf.Password = "my-password"
pdf.SaveAs("secured.pdf")
$vbLabelText   $csharpLabel

iTextPdf

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

public class EncryptPdf
{
    public static readonly string DEST = "encrypt_pdf.pdf";
    public static readonly string OWNER_PASSWORD = "World";
    public static readonly string USER_PASSWORD = "Hello";

    protected void ManipulatePdf(string dest)
    {
        PdfDocument document = new PdfDocument(new PdfReader("input.pdf"), new PdfWriter(dest,
            new WriterProperties().SetStandardEncryption(
                Encoding.UTF8.GetBytes(USER_PASSWORD),
                Encoding.UTF8.GetBytes(OWNER_PASSWORD),
                EncryptionConstants.ALLOW_PRINTING,
                EncryptionConstants.ENCRYPTION_AES_128)));
        document.Close();
    }
}
using iText.Kernel.Pdf;
using System.Text;

public class EncryptPdf
{
    public static readonly string DEST = "encrypt_pdf.pdf";
    public static readonly string OWNER_PASSWORD = "World";
    public static readonly string USER_PASSWORD = "Hello";

    protected void ManipulatePdf(string dest)
    {
        PdfDocument document = new PdfDocument(new PdfReader("input.pdf"), new PdfWriter(dest,
            new WriterProperties().SetStandardEncryption(
                Encoding.UTF8.GetBytes(USER_PASSWORD),
                Encoding.UTF8.GetBytes(OWNER_PASSWORD),
                EncryptionConstants.ALLOW_PRINTING,
                EncryptionConstants.ENCRYPTION_AES_128)));
        document.Close();
    }
}
Imports iText.Kernel.Pdf
Imports System.Text

Public Class EncryptPdf
	Public Shared ReadOnly DEST As String = "encrypt_pdf.pdf"
	Public Shared ReadOnly OWNER_PASSWORD As String = "World"
	Public Shared ReadOnly USER_PASSWORD As String = "Hello"

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

El método de IronPDF es más amigable para el usuario, proporcionando cifrado sencillo y control sobre los permisos del documento. iTextPdf, aunque efectivo, requiere una configuración detallada con un enfoque en los estándares de cifrado.

Redactar contenido de PDF

Redactar información en archivos PDF es esencial para la privacidad y la seguridad. Aquí está cómo cada biblioteca soporta esta función.

IronPDF

using IronPdf;

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

// Redact 'are' from all pages
pdf.RedactTextOnAllPages("are");
pdf.SaveAs("redacted.pdf");
using IronPdf;

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

// Redact 'are' from all pages
pdf.RedactTextOnAllPages("are");
pdf.SaveAs("redacted.pdf");
Imports IronPdf

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

' Redact 'are' from all pages
pdf.RedactTextOnAllPages("are")
pdf.SaveAs("redacted.pdf")
$vbLabelText   $csharpLabel

iTextPdf

using iText.Kernel.Pdf;
using iText.Kernel.Colors;

// Define areas to redact on each page
Rectangle[] rectanglesToRedact = { new Rectangle(100, 100, 200, 50) };

// Draw black rectangles to cover sensitive areas
using (PdfDocument pdfDoc = new PdfDocument(new PdfReader("input.pdf"), new PdfWriter("output_redacted.pdf")))
{
    for (int pageNum = 1; pageNum <= pdfDoc.GetNumberOfPages(); pageNum++)
    {
        PdfPage page = pdfDoc.GetPage(pageNum);
        PdfCanvas canvas = new PdfCanvas(page);
        foreach (Rectangle rect in rectanglesToRedact)
        {
            canvas.SetFillColor(ColorConstants.BLACK)
                  .Rectangle(rect.GetX(), rect.GetY(), rect.GetWidth(), rect.GetHeight())
                  .Fill();
        }
    }
}
using iText.Kernel.Pdf;
using iText.Kernel.Colors;

// Define areas to redact on each page
Rectangle[] rectanglesToRedact = { new Rectangle(100, 100, 200, 50) };

// Draw black rectangles to cover sensitive areas
using (PdfDocument pdfDoc = new PdfDocument(new PdfReader("input.pdf"), new PdfWriter("output_redacted.pdf")))
{
    for (int pageNum = 1; pageNum <= pdfDoc.GetNumberOfPages(); pageNum++)
    {
        PdfPage page = pdfDoc.GetPage(pageNum);
        PdfCanvas canvas = new PdfCanvas(page);
        foreach (Rectangle rect in rectanglesToRedact)
        {
            canvas.SetFillColor(ColorConstants.BLACK)
                  .Rectangle(rect.GetX(), rect.GetY(), rect.GetWidth(), rect.GetHeight())
                  .Fill();
        }
    }
}
Imports iText.Kernel.Pdf
Imports iText.Kernel.Colors

' Define areas to redact on each page
Private rectanglesToRedact() As Rectangle = { New Rectangle(100, 100, 200, 50) }

' Draw black rectangles to cover sensitive areas
Using pdfDoc As New PdfDocument(New PdfReader("input.pdf"), New PdfWriter("output_redacted.pdf"))
	Dim pageNum As Integer = 1
	Do While pageNum <= pdfDoc.GetNumberOfPages()
		Dim page As PdfPage = pdfDoc.GetPage(pageNum)
		Dim canvas As New PdfCanvas(page)
		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
$vbLabelText   $csharpLabel

IronPDF ofrece una herramienta de redacción conveniente que oculta fácilmente el texto sensible en todas las páginas. En contraste, iTextPdf requiere que los usuarios definan y apliquen manualmente rectángulos negros para cubrir áreas sensibles.

Firmar documentos PDF

Automatizar la firma de documentos PDF puede ahorrar significativamente tiempo. Aquí hay una comparación lado a lado de cómo IronPDF e iTextPdf manejan la firma digital.

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

iTextPdf

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

Cuando se trata de aplicar firmas digitales a archivos PDF, IronPDF proporciona una forma sencilla y eficiente de lograr esto con certificados X509. Su API simplifica el proceso, haciendo fácil de integrar en un flujo de trabajo sin sacrificar el control sobre la seguridad de la firma. En comparación, el proceso de iTextPDF para firmar documentos es una configuración más compleja pero ofrece opciones de personalización adicionales. Los desarrolladores tienen un control más detallado, aunque pueden enfrentar una curva de aprendizaje más pronunciada al navegar por la configuración de firmas y manejo de certificados de iTextPDF.

Aplicando marcas de agua a documentos PDF

El marcado de agua de PDFs puede ser esencial para la marca, la confidencialidad y la protección de derechos de autor. Aquí está cómo IronPDF e iTextPDF aplican marcas de agua a documentos 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

iTextPdf

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

La API de IronPDF permite una aplicación de marcas de agua rápida e intuitiva con la flexibilidad de usar HTML y CSS para la personalización. Este enfoque es fácil de usar y facilita la creación de marcas de agua visualmente distintivas sin una configuración extensa. iTextPDF, por otro lado, permite una colocación de marcas de agua altamente personalizable a través de sus opciones de configuración más detalladas, aunque requiere un esfuerzo de codificación más extenso.

Estampado de imágenes y texto en un PDF

Estampar contenido en los PDFs es similar a aplicar marcas de agua, pero se centra más en agregar elementos específicos, como imágenes o texto, para fines de etiquetado o marca. Aquí está cómo IronPDF e iTextPDF realizan esta tarea.

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

iTextPdf

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

Los métodos de estampado de imagen y texto de IronPDF son versátiles y simplificados, permitiendo a los desarrolladores agregar fácilmente contenido de marca o etiquetas a las páginas PDF. La API utiliza elementos de estilo HTML/CSS familiares, haciendo la personalización sencilla. iTextPDF también ofrece características de estampado de imagen y texto, aunque su configuración requiere una configuración más manual y un conocimiento práctico de la estructura de diseño de PDF. La capacidad de manipular y diseñar contenido directamente en la página PDF proporciona a los desarrolladores herramientas de estampado robustas, aunque la configuración de iTextPDF puede requerir un poco más de esfuerzo.

Convertir DOCX a PDF

En algunos proyectos, es necesario convertir archivos DOCX a formato PDF. A continuación se presenta una comparación de cómo IronPDF e iText manejan esta tarea, destacando sus diferencias.

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

iTextPDF

A diferencia de IronPDF, iTextPDF no tiene soporte integrado para convertir DOCX a PDF. Para realizar esta conversión, los desarrolladores deben confiar en bibliotecas de terceros como DocX o Aspose.Words para primero convertir el archivo DOCX a un formato compatible con PDF, que luego puede ser procesado o modificado usando iTextPDF.

IronPDF proporciona una solución integrada y sencilla para la conversión de DOCX a PDF, eliminando la necesidad de bibliotecas adicionales. Esto lo hace altamente adecuado para desarrolladores que necesitan un enfoque rápido e integrado. En contraste, iTextPDF depende de bibliotecas externas para convertir archivos DOCX, requiriendo configuración adicional y dependencias, lo que puede aumentar la complejidad del proyecto.

Soporte de Bootstrap y Frameworks de CSS Modernos

Al generar PDFs desde aplicaciones web estilizadas con Bootstrap, el soporte completo del marco garantiza la consistencia del diseño sin requerir archivos CSS paralelos o modificaciones de diseño.

IronPDF: Soporte Completo para el Marco Bootstrap

El motor Chromium de IronPDF proporciona soporte completo para:

  • Bootstrap 5: Diseños flexibles completos, cuadrícula CSS, clases de utilidad, todos los componentes
  • Bootstrap 4: Sistemas de tarjetas completos, navegación, utilidades flexibles, diseño adaptable
  • Tailwind CSS: Todas las clases de utilidad con renderizado preciso en el navegador
  • Foundation: Sistema de red completo y biblioteca de componentes
  • CSS3 Moderno: Flexbox, cuadrícula CSS, propiedades personalizadas, animaciones, transiciones

Real-world validation: IronPDF renders the Bootstrap homepage and all official examples with pixel-perfect accuracy.

iTextPDF: Soporte Bootstrap Limitado

iTextPDF usa pdfHTML con soporte CSS3 selectivo:

  • Soporte flexbox limitado: Agregado en la versión 7.1.15 pero incompleto
  • Sin CSS Grid: Diseño basado en grillas Bootstrap no soportado
  • Limitaciones Bootstrap 3: Los componentes modernos de Bootstrap 4/5 requieren soluciones alternativas
  • Conversión de diseño manual: Los diseños complejos suelen necesitar código específico para PDF

La documentación de iTextPDF establece explícitamente que las características avanzadas de CSS pueden no renderizarse como se espera, requiriendo a los desarrolladores probar cada componente Bootstrap y a menudo crear diseños simplificados.

Impacto en el desarrollo: Los equipos deben mantener código de diseño separado para la generación de PDF o probar extenso y modificar componentes Bootstrap, aumentando el tiempo de desarrollo y reduciendo la consistencia del diseño.

Para una guía completa del marco Bootstrap y capacidades de renderizado CSS3, ve la Guía de Bootstrap y Flexbox CSS.

Resumen de la Comparación de Ejemplos de Código

Imagen comparativa IronPDF vs iTextPDF

Para ejemplos más detallados, visite Ejemplos de IronPDF.

Precios y Licencias: Biblioteca IronPDF vs. iTextPdf

  • No se requieren llamadas API ni configuración de plantillas

IronPDF tiene diferentes niveles y características adicionales para la compra de una licencia. Los desarrolladores también pueden comprar el Iron Suite, que da acceso a todos los productos de IronSoftware al precio de dos. Si no está listo para comprar una licencia, IronPDF ofrece un prueba gratuita.

  • Licencias perpetuas: Ofrece una gama de licencias perpetuas dependiendo del tamaño de su equipo, las necesidades de su proyecto y el número de ubicaciones. Cada tipo de licencia viene con soporte por correo electrónico.
  • Licencia Lite: Esta licencia cuesta $799 y apoya a un desarrollador, un lugar, y un proyecto.
  • Licencia Plus: Apoyando a tres desarrolladores, tres ubicaciones y tres proyectos, este es el siguiente paso desde la licencia lite y cuesta $1,199. La licencia Plus ofrece soporte por chat y soporte telefónico además del soporte básico por correo electrónico.
  • Licencia Profesional: Esta licencia es adecuada para equipos más grandes, apoyando a diez desarrolladores, diez ubicaciones y diez proyectos por $2,399. Ofrece los mismos canales de soporte de contacto que los niveles anteriores pero también ofrece soporte de compartir pantalla.
  • Redistribución sin regalías: La licencia de IronPDF también ofrece cobertura de redistribución sin regalías por un costo adicional de $2,399.
  • Soporte de producto ininterrumpido: IronPDF ofrece acceso a actualizaciones continuas de producto, mejoras de características de seguridad, y soporte de su equipo de ingeniería por $999/año o una compra única de $1,999 por una cobertura de 5 años.
  • Iron Suite: Por $1,498, obtiene acceso a todos los productos de Iron Software incluyendo IronPDF, IronOCR, IronWord, IronXL, IronBarcode, IronQR, IronZIP, IronPrint, e IronWebScraper.

Imagen comparativa de precios IronPDF vs iTextPDF

Licencias iTextPDF

  • Licencia AGPL: La biblioteca iTextPDF Core es de código abierto bajo la licencia AGPL, que es gratuita para su uso bajo condiciones. Los desarrolladores deben liberar cualquier modificación bajo la misma licencia.
  • Licencia Comercial: Para desarrolladores que no cumplan con las condiciones AGPL, iTextPDF ofrece licencias comerciales a través de un modelo basado en cotización.

Documentación y Soporte: IronPDF vs. iTextPdf

IronPDF

  • Documentación Completa: Documentación extensa y fácil de usar que cubre todas las características que tiene para ofrecer.
  • Soporte 24/5: Soporte activo de ingenieros disponible.
  • Tutoriales en Video: Guías paso a paso en video están disponibles en YouTube.
  • Foro Comunitario: Comunidad comprometida para soporte adicional.
  • Actualizaciones Regulares: Actualizaciones mensuales de producto para asegurar las últimas características y parches de seguridad.

iTextPDF

iTextPDF ofrece documentación robusta y soporte para su extenso conjunto de características.

  • Documentación: La documentación de iText PDF cubre exhaustivamente las características disponibles.
  • Ejemplos y Tutoriales: Los ejemplos de código y tutoriales ayudan a los desarrolladores a comenzar.
  • Comunidad GitHub: Los desarrolladores pueden reportar problemas, enviar solicitudes de pull, e interactuar con el equipo iTextPDF.
  • Actualizaciones Regulares: iTextPDF proporciona actualizaciones y mejoras frecuentes.

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

Conclusión

En el ámbito de las herramientas de manipulación de PDF para .NET, tanto IronPDF como iTextPDF ofrecen soluciones sólidas para los desarrolladores. IronPDF se destaca por su sencilla integración a través de plataformas .NET y características fáciles de usar como la conversión de DOCX a PDF sin dependencias externas. En contraste, iTextPDF, conocido por su versatilidad y rico conjunto de características, sigue siendo una opción poderosa, especialmente cuando se combina con otras herramientas, aunque requiere dependencias adicionales para la conversión de DOCX.

En última instancia, elegir entre IronPDF y iTextPDF dependerá de las necesidades específicas de su proyecto, las preferencias de licencia y el nivel de soporte necesario. Ambas bibliotecas proporcionan formas confiables para optimizar los flujos de trabajo de PDF en aplicaciones .NET.

Por favor notaiTextPDF es una marca registrada de su respectivo propietario. Este sitio no está afiliado, autorizado, ni patrocinado por iTextPDF. Todos los nombres de producto, logotipos y marcas son propiedad de sus respectivos dueños. Las comparaciones son solo para fines informativos y reflejan información públicamente disponible en el momento de la redacción.

Preguntas Frecuentes

¿Cómo puedo convertir HTML a PDF en C#?

Puedes usar el método RenderHtmlAsPdf de IronPDF para convertir cadenas de HTML en PDFs. También puedes convertir archivos HTML a PDFs usando RenderHtmlFileAsPdf.

¿Qué funciones ofrece IronPDF para la creación y manipulación de PDF?

IronPDF proporciona funciones como conversión de HTML a PDF, fusión de PDF, encriptación, firmas digitales, marcas de agua y conversión de DOCX a PDF.

¿Cómo simplifica IronPDF la firma de PDF?

IronPDF te permite aplicar firmas digitales a archivos PDF usando certificados X509, proporcionando un método sencillo para asegurar tus documentos.

¿Puede usarse IronPDF en diferentes sistemas operativos?

Sí, IronPDF admite compatibilidad multiplataforma. Funciona sin problemas en Windows, Linux y Mac, y es compatible con .NET Core, .NET Standard y .NET Framework.

¿En qué se diferencia iTextPDF de IronPDF en términos de encriptación de documentos?

Mientras que iTextPDF proporciona una configuración detallada para los estándares de encriptación, IronPDF simplifica el proceso con métodos de encriptación integrados que son fáciles de implementar.

¿Qué recursos de soporte están disponibles para los usuarios de IronPDF?

IronPDF ofrece soporte extenso a través de documentación completa, tutoriales en video, un foro comunitario y soporte técnico 24/5.

¿Cómo maneja IronPDF la conversión de DOCX a PDF?

IronPDF incluye capacidades nativas de conversión de DOCX a PDF, permitiendo una integración fluida sin necesidad de bibliotecas adicionales.

¿Qué opciones de licencia están disponibles para IronPDF?

IronPDF ofrece licencias perpetuas con diferentes niveles como Lite, Plus y Professional, junto con opciones para redistribución sin regalías y soporte continuo del producto.

¿Cómo puedo aplicar marcas de agua a PDFs usando IronPDF?

IronPDF te permite aplicar marcas de agua con facilidad usando HTML y CSS, permitiéndote añadir marcas de agua de texto o imagen rápidamente y personalizarlas según sea necesario.

¿Qué hace a IronPDF adecuado para desarrolladores que trabajan con aplicaciones .NET?

IronPDF está diseñado para ser fácil de usar con una API simplificada, lo que lo hace eficiente para tareas como la conversión de HTML a PDF, encriptación y firma digital, ideal para desarrolladores .NET.

Curtis Chau
Escritor Técnico

Curtis Chau tiene una licenciatura en Ciencias de la Computación (Carleton University) y se especializa en el desarrollo front-end con experiencia en Node.js, TypeScript, JavaScript y React. Apasionado por crear interfaces de usuario intuitivas y estéticamente agradables, disfruta trabajando con frameworks modernos y creando manuales bien ...

Leer más