Una Comparación entre IronPDF e iText7
Una herramienta decente y simple para manipular PDF puede agilizar muchas tareas y procesos involucrados en la creación y edición de documentos PDF. En el ecosistema .NET, hay dos bibliotecas populares – IronPDF y iText – que permiten la generación de PDF sin ninguna dependencia de Adobe. Ambas ofrecen una variedad de características como crear, editar, convertir, etc., pero este artículo se centrará en comparar estas bibliotecas basándose en tres criterios: las características que ofrecen, la calidad de la documentación proporcionada por ellas y las políticas de precios adoptadas por estas empresas para el uso de sus productos.
Descripción general de IronPDF e iText
IronPDF es una destacada biblioteca de PDF para .NET que permite a los programadores crear, modificar e interactuar fácilmente con documentos PDF. Se puede usar en diferentes entornos .NET, incluidos Core, 8, 7, 6 y Framework, lo que lo hace altamente flexible para varios requisitos de desarrollo. La característica clave de IronPDF es su amplio conjunto de funciones, como la conversión de HTML a PDF, la capacidad de fusionar PDF, el cifrado de PDF y la aplicación de firmas digitales, entre otras. La documentación está escrita de manera que los usuarios puedan entender sin dificultades, mientras que la biblioteca en sí tiene un fuerte soporte técnico.
iText es una de las bibliotecas de PDF más populares disponibles para Java, así como para .NET (C#). iText Core 8 ofrece una solución programable a nivel empresarial para crear y manipular archivos PDF. iText proporciona soporte para muchas funciones diferentes y se publica bajo ambas licencias de código abierto (AGPL) y licencias comerciales. Esto significa que puede cubrir una amplia gama de casos de uso durante los proyectos de transformación digital gracias a su versatilidad.
Compatibilidad multiplataforma
IronPDF e iText son compatibles con varias plataformas; pueden procesar PDF en muchos sistemas diferentes y dentro del framework .NET. A continuación, compararemos los frameworks y plataformas compatibles para cada producto.
HierroPDF:
Descripción general de las plataformas compatibles con IronPDF admite una amplia gama de plataformas y entornos, asegurando una integración e implementación sin problemas en varios sistemas:
Versiones de .NET:
- .NET Core (8, 7, 6, 5, y 3.1+)
- .NET Standard (2.0+)
- .NET Framework (4.6.2+)
Entornos de aplicación: IronPDF funciona en entornos de aplicación que incluyen Windows, Linux, Mac, Docker, Azure y AWS.
IDEs: Funciona con IDEs como Microsoft Visual Studio, JetBrains Rider y ReSharper.
- Sistemas Operativos y Procesadores: Soporta varios sistemas operativos y procesadores, incluidos Windows, Mac, Linux, x64, x86, ARM.
iText
Versiones de .NET:
- .NET Core (2.x, 3.x)
- .NET Framework (4.6.1+)
- .NET 5+
Entornos de aplicación: iText admite una gama de entornos de aplicación, gracias a su soporte tanto para Java como para .NET (C#), incluidos Windows, Mac, Linux y Docker.
- Sistema Operativo: Funciona en sistemas operativos Windows, macOS y Linux.
Comparación de características clave: IronPDF frente a iText
Lista de características clave de IronPDF e iText ofrecen una gama de características y herramientas para trabajar con archivos PDF. El enfoque de esta siguiente sección será examinar algunas de estas características más de cerca y ver cómo se comparan las dos bibliotecas en cuanto a llevar a cabo diferentes tareas relacionadas con PDF.
HierroPDF
Conversión de HTML a PDF: Soporta HTML, CSS, JavaScript e imágenes.
Manipulación de archivos PDF: Dividir y fusionar documentos, cambiar el formato y editar documentos PDF existentes.
Seguridad: Cifrado y descifrado de PDF.
Edición: Agregar anotaciones, marcadores e índices.
Plantillas: Aplicar encabezados, pies de página y números de página.
Marcas de agua: Aplicar fácilmente marcas de agua de texto e imagen a archivos PDF; toma el control completo usando HTML/CSS.
- Estampado de PDF: Estampe imágenes y texto en sus documentos PDF utilizando IronPDF.
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.
iText
Creación de PDF: Soporta la creación de documentos PDF desde cero.
Formularios: Crear y editar formularios PDF.
Firmas digitales: Firmar documentos PDF.
Compresión: Optimizar tamaños de archivos PDF.
Extracción de contenido: Extraer texto e imágenes de archivos PDF.
Código abierto: Disponible bajo licencia AGPL.
- Personalización: Alto nivel de personalización para casos de uso avanzado.
Comparación de las características funcionales de PDF entre IronPDF e iText
Conversión de HTML a PDF
Convertir contenido HTML en PDF usando IronPDF es una tarea que se realiza en muchas oficinas y espacios de trabajo diferentes. A continuación, se presentan ejemplos de código que comparan cómo IronPDF e iText abordan este proceso.
IronPDF
using IronPdf;
// Configure security settings
Installation.EnableWebSecurity = true;
// Instantiate Renderer
var renderer = new ChromePdfRenderer();
// Create a PDF from an HTML string using C#
var pdf = renderer.RenderHtmlAsPdf("<h1>Hello World</h1>");
pdf.SaveAs("output.pdf");
// Advanced Example with HTML Assets
// Load external HTML assets: images, CSS and JavaScript.
var myAdvancedPdf = renderer.RenderHtmlAsPdf("<img src='icons/iron.png'>", @"C:\site\assets\");
myAdvancedPdf.SaveAs("html-with-assets.pdf");using IronPdf;
// Configure security settings
Installation.EnableWebSecurity = true;
// Instantiate Renderer
var renderer = new ChromePdfRenderer();
// Create a PDF from an HTML string using C#
var pdf = renderer.RenderHtmlAsPdf("<h1>Hello World</h1>");
pdf.SaveAs("output.pdf");
// Advanced Example with HTML Assets
// Load external HTML assets: images, CSS and JavaScript.
var myAdvancedPdf = renderer.RenderHtmlAsPdf("<img src='icons/iron.png'>", @"C:\site\assets\");
myAdvancedPdf.SaveAs("html-with-assets.pdf");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);
}
}Al convertir HTML a PDF, IronPDF proporciona una herramienta concisa y conveniente para esta tarea. Utilizando el ChromePdfRenderer para convertir contenido HTML en PDF, IronPDF se destaca en proporcionar a los usuarios documentos PDF perfectos pixel a pixel. Los usuarios pueden crear PDF directamente desde cadenas HTML o incluir recursos externos como imágenes con un camino base opcional, como se demuestra en el ejemplo avanzado. iText, por otro lado, adopta un enfoque básico utilizando su clase HtmlConverter para crear documentos PDF a partir de un archivo HTML.
Encriptar archivos PDF
Cifrar archivos PDF con IronPDF y la des-cifrado son vitales en muchos lugares de trabajo. A continuación, veremos cómo iText e IronPDF abordan el cifrado de PDF.
IronPDF
using IronPdf;
using System;
// Open an Encrypted File, alternatively create a new PDF from HTML
var pdf = PdfDocument.FromFile("encrypted.pdf", "password");
// Edit file metadata
pdf.MetaData.Author = "Satoshi Nakamoto";
pdf.MetaData.Keywords = "SEO, Friendly";
pdf.MetaData.ModifiedDate = DateTime.Now;
// Edit file security settings
pdf.SecuritySettings.RemovePasswordsAndEncryption();
pdf.SecuritySettings.MakePdfDocumentReadOnly("secret-key");
pdf.SecuritySettings.AllowUserAnnotations = false;
pdf.SecuritySettings.AllowUserCopyPasteContent = false;
pdf.SecuritySettings.AllowUserFormData = false;
pdf.SecuritySettings.AllowUserPrinting = IronPdf.Security.PdfPrintSecurity.FullPrintRights;
// Change or set the document encryption password
pdf.Password = "my-password";
pdf.SaveAs("secured.pdf");using IronPdf;
using System;
// Open an Encrypted File, alternatively create a new PDF from HTML
var pdf = PdfDocument.FromFile("encrypted.pdf", "password");
// Edit file metadata
pdf.MetaData.Author = "Satoshi Nakamoto";
pdf.MetaData.Keywords = "SEO, Friendly";
pdf.MetaData.ModifiedDate = DateTime.Now;
// Edit file security settings
pdf.SecuritySettings.RemovePasswordsAndEncryption();
pdf.SecuritySettings.MakePdfDocumentReadOnly("secret-key");
pdf.SecuritySettings.AllowUserAnnotations = false;
pdf.SecuritySettings.AllowUserCopyPasteContent = false;
pdf.SecuritySettings.AllowUserFormData = false;
pdf.SecuritySettings.AllowUserPrinting = IronPdf.Security.PdfPrintSecurity.FullPrintRights;
// Change or set the document encryption password
pdf.Password = "my-password";
pdf.SaveAs("secured.pdf");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();
}
}IronPDF ofrece a los usuarios una forma sencilla de cifrar archivos PDF, otorgando además mucho control, como editar metadatos y ajustar configuraciones de seguridad, como hacer que los documentos sean de solo lectura o restringir acciones del usuario, como copiar y pegar. Por otro lado, iText emplea un método de nivel más bajo y más largo, donde el cifrado de PDF se aplica durante la creación del documento, especificando contraseñas de propietario y usuario junto con permisos como derechos de impresión utilizando estándares de cifrado como AES-128.
Redactar contenido PDF
Ocasionalmente, al manejar información confidencial o privada, puede ser necesario redactar texto en PDF con IronPDF partes de un archivo PDF. Los ejemplos de código a continuación demostrarán cómo puede redactar texto usando IronPDF en comparación con 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");iText
using System;
using System.IO;
using iText.Kernel.Pdf;
using iText.Layout;
using iText.Layout.Element;
using iText.Layout.Properties;
using iText.Kernel.Colors;
string src = "input.pdf";
string dest = "output_redacted.pdf";
using (PdfReader reader = new PdfReader(src))
using (PdfWriter writer = new PdfWriter(dest))
using (PdfDocument pdfDoc = new PdfDocument(reader, writer))
{
// Iterate through each page
for (int pageNum = 1; pageNum <= pdfDoc.GetNumberOfPages(); pageNum++)
{
PdfPage page = pdfDoc.GetPage(pageNum);
PdfCanvas canvas = new PdfCanvas(page);
Rectangle[] rectanglesToRedact = { new Rectangle(100, 100, 200, 50) }; // Define rectangles to redact
// Overlay black rectangles to simulate redaction
foreach (Rectangle rect in rectanglesToRedact)
{
canvas.SetFillColor(ColorConstants.BLACK)
.Rectangle(rect.GetX(), rect.GetY(), rect.GetWidth(), rect.GetHeight())
.Fill();
}
}
}using System;
using System.IO;
using iText.Kernel.Pdf;
using iText.Layout;
using iText.Layout.Element;
using iText.Layout.Properties;
using iText.Kernel.Colors;
string src = "input.pdf";
string dest = "output_redacted.pdf";
using (PdfReader reader = new PdfReader(src))
using (PdfWriter writer = new PdfWriter(dest))
using (PdfDocument pdfDoc = new PdfDocument(reader, writer))
{
// Iterate through each page
for (int pageNum = 1; pageNum <= pdfDoc.GetNumberOfPages(); pageNum++)
{
PdfPage page = pdfDoc.GetPage(pageNum);
PdfCanvas canvas = new PdfCanvas(page);
Rectangle[] rectanglesToRedact = { new Rectangle(100, 100, 200, 50) }; // Define rectangles to redact
// Overlay black rectangles to simulate redaction
foreach (Rectangle rect in rectanglesToRedact)
{
canvas.SetFillColor(ColorConstants.BLACK)
.Rectangle(rect.GetX(), rect.GetY(), rect.GetWidth(), rect.GetHeight())
.Fill();
}
}
}La herramienta de redacción de IronPDF es concisa y fácil de usar, necesitando solo unas pocas líneas de código para agilizar el proceso de redacción. Esto ayuda a aumentar la eficiencia en torno a las tareas de redacción de PDF y proporciona a los usuarios una forma fácil de mantener su información sensible y privada segura. iText, por otro lado, no ofrece una herramienta de redacción incorporada en el mismo sentido que IronPDF. Sin embargo, todavía puede cubrir datos sensibles utilizando el método que se muestra arriba para sobrescribir el contenido que los usuarios desean redactar. Esto puede llevar a problemas potenciales, ya que estos rectángulos no eliminan o redactan propiamente el texto, lo que significa que otras personas podrían potencialmente copiar y pegar los datos que están siendo redactados.
Firma de documentos PDF
Poder firmar digitalmente documentos PDF con IronPDF puede ahorrar tiempo, especialmente al hacer de ello un proceso automatizado. Aquí hay algunos fragmentos de código comparando cómo IronPDF difiere de iText en términos de llevar a cabo el firmado digital de documentos.
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");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}");
}
}
}Cuando se aplican firmas a archivos PDF digitalmente, IronPDF presenta una herramienta concisa pero poderosa para completar este proceso. Su simplicidad permite que el proceso se realice rápidamente, ahorrando tiempo a cualquier desarrollador que lo implemente para sus necesidades de firmado. iText requiere un proceso más largo y complejo para aplicar firmas digitales a archivos PDF. Si bien su capacidad para utilizar diferentes opciones de interfaz y claves ofrece más control al usuario, la complejidad de cómo esta herramienta lleva a cabo esta tarea podría dificultar su uso.
Aplicación de marcas de agua a documentos PDF
La capacidad de agregar y personalizar marcas de agua en PDF con IronPDF puede ayudar enormemente con la confidencialidad, la protección de derechos de autor, la marca u cualquier tarea que implique información sensible. La siguiente es una comparación de cómo IronPDF e iText aplican marcas de agua a archivos 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");iText
using iText.IO.Font;
using iText.IO.Font.Constants;
using iText.Kernel.Colors;
using iText.Kernel.Font;
using iText.Kernel.Pdf;
using iText.Kernel.Pdf.Canvas;
using iText.Kernel.Pdf.Extgstate;
using iText.Layout;
using iText.Layout.Element;
using iText.Layout.Properties;
public class TransparentWatermark
{
public static readonly String DEST = "results/sandbox/stamper/transparent_watermark.pdf";
public static readonly String SRC = "../../../resources/pdfs/hero.pdf";
public static void Main(String[] args)
{
FileInfo file = new FileInfo(DEST);
file.Directory.Create();
new TransparentWatermark().ManipulatePdf(DEST);
}
protected void ManipulatePdf(String dest)
{
PdfDocument pdfDoc = new PdfDocument(new PdfReader(SRC), new PdfWriter(dest));
PdfCanvas under = new PdfCanvas(pdfDoc.GetFirstPage().NewContentStreamBefore(), new PdfResources(), pdfDoc);
PdfFont font = PdfFontFactory.CreateFont(FontProgramFactory.CreateFont(StandardFonts.HELVETICA));
Paragraph paragraph = new Paragraph("This watermark is added UNDER the existing content")
.SetFont(font)
.SetFontSize(15);
Canvas canvasWatermark1 = new Canvas(under, pdfDoc.GetDefaultPageSize())
.ShowTextAligned(paragraph, 297, 550, 1, TextAlignment.CENTER, VerticalAlignment.TOP, 0);
canvasWatermark1.Close();
PdfCanvas over = new PdfCanvas(pdfDoc.GetFirstPage());
over.SetFillColor(ColorConstants.BLACK);
paragraph = new Paragraph("This watermark is added ON TOP OF the existing content")
.SetFont(font)
.SetFontSize(15);
Canvas canvasWatermark2 = new Canvas(over, pdfDoc.GetDefaultPageSize())
.ShowTextAligned(paragraph, 297, 500, 1, TextAlignment.CENTER, VerticalAlignment.TOP, 0);
canvasWatermark2.Close();
paragraph = new Paragraph("This TRANSPARENT watermark is added ON TOP OF the existing content")
.SetFont(font)
.SetFontSize(15);
over.SaveState();
PdfExtGState gs1 = new PdfExtGState();
gs1.SetFillOpacity(0.5f);
over.SetExtGState(gs1);
Canvas canvasWatermark3 = new Canvas(over, pdfDoc.GetDefaultPageSize())
.ShowTextAligned(paragraph, 297, 450, 1, TextAlignment.CENTER, VerticalAlignment.TOP, 0);
canvasWatermark3.Close();
over.RestoreState();
pdfDoc.Close();
}
}using iText.IO.Font;
using iText.IO.Font.Constants;
using iText.Kernel.Colors;
using iText.Kernel.Font;
using iText.Kernel.Pdf;
using iText.Kernel.Pdf.Canvas;
using iText.Kernel.Pdf.Extgstate;
using iText.Layout;
using iText.Layout.Element;
using iText.Layout.Properties;
public class TransparentWatermark
{
public static readonly String DEST = "results/sandbox/stamper/transparent_watermark.pdf";
public static readonly String SRC = "../../../resources/pdfs/hero.pdf";
public static void Main(String[] args)
{
FileInfo file = new FileInfo(DEST);
file.Directory.Create();
new TransparentWatermark().ManipulatePdf(DEST);
}
protected void ManipulatePdf(String dest)
{
PdfDocument pdfDoc = new PdfDocument(new PdfReader(SRC), new PdfWriter(dest));
PdfCanvas under = new PdfCanvas(pdfDoc.GetFirstPage().NewContentStreamBefore(), new PdfResources(), pdfDoc);
PdfFont font = PdfFontFactory.CreateFont(FontProgramFactory.CreateFont(StandardFonts.HELVETICA));
Paragraph paragraph = new Paragraph("This watermark is added UNDER the existing content")
.SetFont(font)
.SetFontSize(15);
Canvas canvasWatermark1 = new Canvas(under, pdfDoc.GetDefaultPageSize())
.ShowTextAligned(paragraph, 297, 550, 1, TextAlignment.CENTER, VerticalAlignment.TOP, 0);
canvasWatermark1.Close();
PdfCanvas over = new PdfCanvas(pdfDoc.GetFirstPage());
over.SetFillColor(ColorConstants.BLACK);
paragraph = new Paragraph("This watermark is added ON TOP OF the existing content")
.SetFont(font)
.SetFontSize(15);
Canvas canvasWatermark2 = new Canvas(over, pdfDoc.GetDefaultPageSize())
.ShowTextAligned(paragraph, 297, 500, 1, TextAlignment.CENTER, VerticalAlignment.TOP, 0);
canvasWatermark2.Close();
paragraph = new Paragraph("This TRANSPARENT watermark is added ON TOP OF the existing content")
.SetFont(font)
.SetFontSize(15);
over.SaveState();
PdfExtGState gs1 = new PdfExtGState();
gs1.SetFillOpacity(0.5f);
over.SetExtGState(gs1);
Canvas canvasWatermark3 = new Canvas(over, pdfDoc.GetDefaultPageSize())
.ShowTextAligned(paragraph, 297, 450, 1, TextAlignment.CENTER, VerticalAlignment.TOP, 0);
canvasWatermark3.Close();
over.RestoreState();
pdfDoc.Close();
}
}El API fácil e intuitivo de IronPDF permite a los usuarios aplicar marcas de agua personalizadas a sus archivos PDF rápidamente, otorgando control total sobre el proceso. Su uso de HTML/CSS simplifica aún más el proceso sin perder ningún control de personalización. El enfoque de iText para agregar marcas de agua a los PDF requiere más trabajo manual, lo que puede ralentizar potencialmente el proceso.
Imprimir imágenes y texto en un PDF
Hay ocasiones en las que las páginas PDF necesitan ser estampadas con texto o imágenes en un PDF, de manera similar a cómo uno podría necesitar aplicar marcas de agua a sus archivos PDF. Ahora compararemos cómo IronPDF e iText realizan el estampado de contenido en un documento 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");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();
}IronPDF puede ayudarte a agregar texto o imágenes a los PDF de una manera versátil y personalizable, ofreciendo control total. Su API es fácil de entender y de trabajar, especialmente para desarrolladores familiarizados con HTML/CSS. iText utiliza sus herramientas de estampado de imagen y texto para ofrecer a los usuarios más control sobre el contenido mostrado en sus archivos PDF, aunque el proceso puede resultar más manual.
Convertir DOCX a PDF
A veces, es posible que tengas que convertir PDF de un formato a otro. En este caso, estamos viendo la conversión de DOCX a PDF con IronPDF y cómo IronPDF e iText manejan este proceso de manera diferente.
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");iText
iText, por sí solo, no puede manejar la conversión de DOCX a PDF; en su lugar, confía en bibliotecas externas como DocX o Aspose.Words.
IronPDF proporciona a los desarrolladores una herramienta sencilla y concisa para manejar tareas de conversión de DOCX a PDF, haciendo fácil convertir archivos DOCX a formato PDF sin necesidad de bibliotecas externas. iText, por otro lado, depende de bibliotecas externas para llevar a cabo esta tarea.
Resumen de la comparación de ejemplos de código

Para ejemplos más detallados, visita Ejemplos de IronPDF de Creación de PDF a partir de HTML.
Soporte para Bootstrap y modernos frameworks CSS
Una consideración crítica que a menudo surge durante el desarrollo en el mundo real es cómo maneja cada biblioteca los frameworks CSS modernos. Con Bootstrap, Tailwind CSS y Foundation formando la base de la mayoría de las aplicaciones web contemporáneas, la compatibilidad del framework puede impactar significativamente en tu flujo de trabajo de desarrollo y calidad de salida.
HierroPDF: Compatibilidad total con marcos de trabajo modernos
El motor de renderizado de Chrome de IronPDF proporciona un soporte completo y listo para producción para todos los frameworks CSS modernos:
- Bootstrap 5: compatibilidad nativa con flexbox y CSS Grid para todos los diseños
- Tailwind CSS: Soporte completo para frameworks que priorizan la utilidad
- CSS3 moderno: transformaciones, animaciones, propiedades personalizadas y selectores avanzados
- Validación del marco: Representa correctamente la página de inicio y las plantillas de Bootstrap
Ejemplo de código: Indicadores de progreso de Bootstrap
using IronPdf;
var renderer = new ChromePdfRenderer();
string bootstrap ProgressBars = @"
<!DOCTYPE html>
<html>
<head>
<link href='https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css' rel='stylesheet'>
</head>
<body>
<div class='container my-5'>
<h2 class='mb-4'>Project Progress Dashboard</h2>
<div class='mb-4'>
<div class='d-flex justify-content-between mb-1'>
<span>Backend Development</span>
<span class='text-success fw-bold'>85%</span>
</div>
<div class='progress' style='height: 25px;'>
<div class='progress-bar progress-bar-striped bg-success' role='progressbar'
style='width: 85%' aria-valuenow='85' aria-valuemin='0' aria-valuemax='100'>
</div>
</div>
</div>
<div class='mb-4'>
<div class='d-flex justify-content-between mb-1'>
<span>Frontend UI</span>
<span class='text-warning fw-bold'>60%</span>
</div>
<div class='progress' style='height: 25px;'>
<div class='progress-bar progress-bar-animated bg-warning' role='progressbar'
style='width: 60%' aria-valuenow='60' aria-valuemin='0' aria-valuemax='100'>
</div>
</div>
</div>
<div class='mb-4'>
<div class='d-flex justify-content-between mb-1'>
<span>Testing & QA</span>
<span class='text-info fw-bold'>40%</span>
</div>
<div class='progress' style='height: 25px;'>
<div class='progress-bar bg-info' role='progressbar'
style='width: 40%' aria-valuenow='40' aria-valuemin='0' aria-valuemax='100'>
</div>
</div>
</div>
</div>
</body>
</html>";
var pdf = renderer.RenderHtmlAsPdf(bootstrapProgressBars);
pdf.SaveAs("project-progress.pdf");using IronPdf;
var renderer = new ChromePdfRenderer();
string bootstrap ProgressBars = @"
<!DOCTYPE html>
<html>
<head>
<link href='https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css' rel='stylesheet'>
</head>
<body>
<div class='container my-5'>
<h2 class='mb-4'>Project Progress Dashboard</h2>
<div class='mb-4'>
<div class='d-flex justify-content-between mb-1'>
<span>Backend Development</span>
<span class='text-success fw-bold'>85%</span>
</div>
<div class='progress' style='height: 25px;'>
<div class='progress-bar progress-bar-striped bg-success' role='progressbar'
style='width: 85%' aria-valuenow='85' aria-valuemin='0' aria-valuemax='100'>
</div>
</div>
</div>
<div class='mb-4'>
<div class='d-flex justify-content-between mb-1'>
<span>Frontend UI</span>
<span class='text-warning fw-bold'>60%</span>
</div>
<div class='progress' style='height: 25px;'>
<div class='progress-bar progress-bar-animated bg-warning' role='progressbar'
style='width: 60%' aria-valuenow='60' aria-valuemin='0' aria-valuemax='100'>
</div>
</div>
</div>
<div class='mb-4'>
<div class='d-flex justify-content-between mb-1'>
<span>Testing & QA</span>
<span class='text-info fw-bold'>40%</span>
</div>
<div class='progress' style='height: 25px;'>
<div class='progress-bar bg-info' role='progressbar'
style='width: 40%' aria-valuenow='40' aria-valuemin='0' aria-valuemax='100'>
</div>
</div>
</div>
</div>
</body>
</html>";
var pdf = renderer.RenderHtmlAsPdf(bootstrapProgressBars);
pdf.SaveAs("project-progress.pdf");iText7: compatibilidad limitada con frameworks
iText7 utiliza un convertidor HTML a PDF personalizado (pdfHTML) con limitaciones significativas para los frameworks CSS modernos:
- No se puede ejecutar JavaScript: no se pueden manejar componentes Bootstrap dinámicos
- Compatibilidad limitada con flexbox: los diseños de Bootstrap 4+ a menudo no se representan correctamente (v7.1.15 tiene compatibilidad parcial)
- CSS Grid no compatible: los diseños modernos basados en cuadrícula no funcionarán
- Requiere preprocesamiento manual: los diseños complejos necesitan herramientas externas como Selenium o Puppeteer
Según la documentación oficial de iText, se aconseja a los desarrolladores que:
- Eviten diseños CSS complejos, incluido flexbox
- Utilicen diseños basados en tablas en lugar de sistemas de grid modernos
- Simplifiquen los componentes de Bootstrap al HTML básico
- Pruebas exhaustivas; compatibilidad limitada con el framework.
Impacto en el mundo real: si su aplicación utiliza Bootstrap para su interfaz de usuario y necesita exportaciones de PDF que coincidan con su diseño web, iText7 requiere un rediseño significativo de HTML/CSS para la generación de PDF o una integración con herramientas de automatización de navegadores externos, lo que aumenta sustancialmente la complejidad y el tiempo de desarrollo.
Para información detallada sobre la compatibilidad con frameworks CSS, consulta la Guía de CSS Boostrap y Flexbox.
Precios y licencias: IronPDF frente a iText Library
Precios y licencias de IronPDF
Opciones de licenciamiento de IronPDF ofrecen varios niveles y características adicionales para la compra de una licencia. Los desarrolladores también pueden comprar [Iron Suite](Iron Suite), que proporciona acceso a todos los productos de Iron Software al precio de dos. Si no estás listo para comprar una licencia, IronPDF ofrece una versión de prueba gratuita que dura 30 días.
Licencias perpetuas: Ofrecen una gama de licencias perpetuas según el tamaño de tu equipo, las necesidades del proyecto y el número de ubicaciones. Cada tipo de licencia viene con soporte por correo electrónico.
Licencia Lite: Esta licencia soporta un desarrollador, una ubicación y un proyecto.
Licencia Plus: Soporta tres desarrolladores, tres ubicaciones y tres proyectos, y cuesta $1,199. La licencia Plus ofrece soporte por chat, teléfono y correo electrónico.
Licencia Profesional: Adecuada para equipos más grandes, soportando 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: Accede a actualizaciones continuas de productos, mejoras de características de seguridad y soporte de parte de su equipo de ingeniería por $1,199/año o una compra única de $2,399 para una cobertura de 5 años.
- Iron Suite: Por $1,498, obtienes acceso a todos los productos de Iron Software, incluidos IronPDF, IronOCR, IronWord, IronXL, IronBarcode, IronQR, IronZIP, IronPrint y IronWebScraper.

Licencias de iText
Licencia AGPL: La biblioteca iText Core es de código abierto y está disponible para los usuarios de forma gratuita. Para usar iText bajo este modelo de licenciamiento, los usuarios deben cumplir con sus términos, y cualquier modificación hecha a iText bajo esta licencia también debe ser liberada bajo el modelo de licenciamiento AGPL.
- Licencia comercial: iText ofrece un modelo de licenciamiento comercial para desarrolladores cuyos proyectos no cumplen con los términos de AGPL, y el precio se basa en cotizaciones.
Documentación y soporte: IronPDF frente a iText
HierroPDF
Documentación Completa: Documentación amplia y fácil de usar que abarca todas las características.
Soporte 24/5: Soporte activo de ingenieros disponible.
Tutoriales en Video: Guías paso a paso en video disponibles en YouTube.
Foro Comunitario: Comunidad comprometida para soporte adicional.
- Actualizaciones regulares: Actualizaciones mensuales de productos con las últimas características y parches de seguridad.
iText
Documentación: Documentación detallada que cubre las características del software iText.
Ejemplos y tutoriales: Tutoriales y ejemplos de código para varias características.
GitHub: Los desarrolladores pueden presentar cualquier problema o error al repositorio GitHub de iText y comunicarse con el grupo de iText.
- Actualizaciones: iText ofrece actualizaciones y mejoras regulares.
Para más detalles sobre la documentación y el soporte de IronPDF, visita Documentación de IronPDF y el Canal de YouTube de Iron Software.
Conclusión
En el ámbito de las herramientas de manipulación de PDF para .NET, tanto IronPDF como iText ofrecen capacidades robustas adaptadas a diversas necesidades de desarrollo. IronPDF destaca por su integración sencilla en plataformas como .NET Core, Framework y Standard, junto con características de conversión de HTML a PDF y opciones de seguridad avanzadas. Por otro lado, iText, reconocido por su herencia en Java, proporciona potentes herramientas de generación y manipulación de PDF bajo licencias de código abierto y comerciales, enfatizando la versatilidad y la personalización.
Elegir entre estas herramientas depende en última instancia de los requisitos del proyecto, las preferencias de licenciamiento y el nivel de soporte técnico necesario. Ya sea optando por la simplicidad y flexibilidad de IronPDF o por el extenso conjunto de características del librería de PDF de código abierto que es iText, los desarrolladores tienen amplios recursos para agilizar los flujos de trabajo de PDF de manera efectiva en sus aplicaciones.
Puede probar la prueba gratuita de 30 días para comprobar sus funciones disponibles.
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.
¿Cuáles son las principales diferencias entre IronPDF e iText?
IronPDF es elogiado por su facilidad de uso, documentación completa y sólido soporte técnico, lo que lo convierte en una opción fácil de usar para los desarrolladores. iText, aunque robusto, a menudo requiere más esfuerzo manual y está disponible bajo licencias de código abierto (AGPL) y comerciales.
¿Qué opciones de licencia están disponibles para las bibliotecas PDF?
IronPDF ofrece varias licencias perpetuas y una opción libre de regalías, mientras que iText proporciona una licencia AGPL gratuita con una opción comercial para proyectos que no cumplen con AGPL.
¿Qué biblioteca PDF ofrece mejor soporte para los desarrolladores?
IronPDF ofrece documentación completa, soporte ingeniero 24/5 y un foro comunitario activo, asegurando que los desarrolladores tengan acceso a recursos y asistencia actualizados.
¿Es IronPDF compatible con diferentes entornos .NET?
Sí, IronPDF es compatible con .NET Core, .NET Standard y .NET Framework, y funciona en entornos como Windows, Linux, Mac, Docker, Azure y AWS.
¿Cómo maneja IronPDF el cifrado de PDF?
IronPDF ofrece una API sencilla para cifrar PDFs, permitiendo a los usuarios editar metadatos y ajustar configuraciones de seguridad fácilmente, asegurando la seguridad y el cumplimiento del documento.
¿Puede IronPDF realizar la conversión de DOCX a PDF?
Sí, IronPDF sobresale en la conversión de DOCX a PDF, ofreciendo un proceso directo y eficiente sin necesidad de bibliotecas externas, agilizando las tareas de conversión de documentos dentro de las aplicaciones.
¿Qué características hacen destacar a IronPDF para la conversión de HTML a PDF?
IronPDF utiliza un ChromePdfRenderer para la conversión de HTML a PDF, permitiendo la integración fácil de HTML, CSS y JavaScript, asegurando una representación precisa del contenido web en PDFs.
¿Cómo se comparan IronPDF e iText en términos de compatibilidad multiplataforma?
Ambas bibliotecas admiten múltiples sistemas operativos y entornos, pero IronPDF ofrece una experiencia más simplificada para tareas como la conversión de HTML a PDF y el cifrado de PDF.
¿Cuáles son las características clave que ofrece IronPDF?
IronPDF ofrece características como conversión de HTML a PDF, manipulación de archivos PDF, cifrado y descifrado, capacidades de edición, marca de agua, estampado de PDF y firma digital.






