Pruebas en un entorno real
Pruebe en producción sin marcas de agua.
Funciona donde lo necesites.
Una herramienta decente y sencilla para manipular PDF puede agilizar muchas tareas y procesos que intervienen en la creación y edición de documentos PDF. En el ecosistema .NET, hay dos bibliotecas populares - IronPDF e iText- que permiten generar PDF sin dependencias de Adobe. Ambas tienen una gran variedad de funciones como crear, editar, convertir, etc., pero este artículo se centrará en comparar estas bibliotecas basándose en tres criterios: la capacidad de las funciones que ofrecen, la calidad de la documentación que proporcionan y la política de precios adoptada por estas empresas para utilizar sus productos.
IronPDF es una destacada biblioteca PDF .NET que permite a los programadores crear, modificar e interactuar fácilmente con documentos PDF. Puede utilizarse en diferentes entornos .NET, incluidos Core, 8, 7, 6 y Framework, lo que lo hace muy flexible para diversos requisitos de desarrollo. La característica clave de IronPDF es su rico conjunto de funciones, como la conversión de HTML a PDF, la posibilidad de fusionar PDF, el cifrado de PDF y la aplicación de firmas digitales, entre otras. La documentación está redactada de forma que los usuarios puedan entenderla sin dificultades, mientras que la propia biblioteca cuenta con un sólido soporte técnico.
iText es una de las bibliotecas PDF más populares disponibles para Java y .NET (C#). iText Core 8 ofrece una solución programable de nivel empresarial para crear y manipular archivos PDF. iText es compatible con numerosas funciones y se publica en código abierto (AGPL) licencias y licencias comerciales. Esto significa que es capaz de cubrir una amplia gama de casos de uso durante los proyectos de transformación digital gracias a su versatilidad.
IronPDF e iText son compatibles con varias plataformas; pueden procesar PDF en muchos sistemas diferentes, así como en el marco .NET. Por ello, a continuación compararemos los marcos y plataformas compatibles con cada producto.
IronPDF es compatible con una amplia gama de plataformas y entornos, lo que garantiza una integración e implantación perfectas en diversos sistemas:
Versiones .NET:
(C#, VB.NET, F#)
.NET Core (8, 7, 6, 5 y 3.1+.)
.NET Standard (2.0+)
Entornos de aplicación: IronPDF funciona en entornos de aplicación como Windows, Linux, Mac, Docker, Azure y AWS
**Trabaja con IDEs como Microsoft Visual Studio y JetBrains Rider & ReSharper
Versiones .NET:
.NET Core (2.x, 3.x)
.NET Framework (4.6.1+)
Entornos de aplicación: iText es compatible con una amplia gama de entornos de aplicación, gracias a su compatibilidad con Java y .NET (C#)entre ellos; Windows, Mac, Linux y Docker.
IronPDF e iText ofrecen una serie de funciones y herramientas que pueden utilizarse para trabajar con archivos PDF; el objetivo de la siguiente sección será examinar más de cerca algunas de estas características y comparar las dos bibliotecas a la hora de realizar diferentes tareas relacionadas con PDF.
Conversión de HTML a PDF: Admite HTML, CSS, JavaScript e imágenes.
Manipulación de archivos PDF: Divida y luego fusione documentos, cambie el formato y edite documentos PDF existentes
Seguridad: Cifrado y descifrado de PDF.
Edición: Añade anotaciones, marcadores y esquemas.
Plantillas: Aplique encabezados, pies de página y números de página.
Marcas de agua: Aplique fácilmente marcas de agua de texto e imagen a archivos PDF; aproveche su uso de HTML/CSS para obtener un control total sobre el proceso.
Estampado PDF: Estampe imágenes y texto en sus documentos PDF con IronPDF.
Para obtener más información sobre el amplio conjunto de funciones que ofrece IronPDF, visite la página Página de características de IronPDF.
Creación de PDF: Admite la creación de documentos PDF desde cero.
Formularios: Cree y edite formularios PDF.
Firmas digitales: Firma documentos PDF.
Compresión: Optimiza el tamaño de los archivos PDF.
Extracción de contenido: Extraiga texto e imágenes de archivos PDF.
Código abierto: Disponible bajo licencia AGPL.
Conversión Contenido HTML en PDF es una tarea muy sencilla que se realiza en muchas oficinas y espacios de trabajo diferentes. A continuación se muestran los ejemplos de código que comparan cómo IronPDF e iText abordan este proceso.
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
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
A la hora de convertir HTML a PDF, IronPDF ofrece una herramienta concisa y cómoda para llevar a cabo esta tarea. Utilizando el ChromePdfRenderer para convertir contenido HTML en PDF, IronPDF destaca por proporcionar a los usuarios documentos PDF perfectos como píxeles. Los usuarios pueden crear PDF directamente a partir de cadenas HTML, como se muestra en el primer ejemplo, o incluir activos externos como imágenes con una ruta base opcional, como se demuestra en el ejemplo avanzado. iText, adopta un enfoque básico, utilizando su clase HtmlConverter para crear documentos PDF a partir de un archivo HTML.
Cifrado y descifrado de documentos PDF son vitales en muchos lugares de trabajo. Para manejar esta tarea con facilidad es necesario contar con una herramienta que pueda hacerlo cómodamente. En el código siguiente, veremos cómo iText e IronPDF abordan el cifrado de los 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
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
IronPDF ofrece a los usuarios una forma sencilla de cifrar archivos PDF, a la vez que les permite controlar el proceso en gran medida, incluida la edición de metadatos y el ajuste de la configuración de seguridad, como hacer que los documentos sean de sólo lectura o restringir acciones del usuario como copiar y pegar. Por otro lado, iText emplea un método de menor nivel y más largo en el que el cifrado de PDF se aplica durante la creación del documento, especificando contraseñas de propietario y usuario junto con permisos como los derechos de impresión utilizando estándares de cifrado como AES-128.
Ocasionalmente, al manejar información confidencial o privada, puede ser necesario redactar partes de un archivo PDF. Los ejemplos de código a continuación demostrarán cómo puede redactar texto utilizando 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");
IRON VB CONVERTER ERROR developers@ironsoftware.com
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
la herramienta de redacción de IronPDF** es concisa y fácil de usar, y sólo necesita unas pocas líneas de código para agilizar el proceso de redacción. Esto ayuda a aumentar la eficacia de las tareas de redacción de PDF y ofrece a los usuarios una forma sencilla de mantener a salvo sus datos confidenciales y privados.
por otra parte, iText** no ofrece una herramienta de redacción integrada en el mismo sentido que IronPDF. Sin embargo, puede seguir cubriendo datos sensibles utilizando el método mostrado anteriormente para dibujar sobre el contenido que los usuarios desean redactar. Sin embargo, esto puede dar lugar a problemas, ya que estos rectángulos en realidad no eliminan ni redactan correctamente el texto, lo que significa que otras personas podrían copiar y pegar los datos que se intentan redactar.
Ser capaz de firmar documentos digitales como archivos PDF y convertirlo en un proceso automatizado podría ahorrar tiempo. He aquí algunos fragmentos de código que permiten comparar en qué se diferencia IronPDF de iText a la hora de llevar a cabo la firma 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");
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")
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
Al aplicar firmas a archivos PDF digitalmente, IronPDF presenta una herramienta compacta pero potente para completar este proceso. Su sencillez permite realizar el proceso con rapidez, ahorrando tiempo a cualquier desarrollador que lo implemente para sus necesidades de firma. iText requiere un proceso más largo y complejo para aplicar firmas digitales a archivos PDF, y aunque 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 impedirlo.
La posibilidad de añadir y personalizar marcas de agua en PDF mediante software puede ser de gran ayuda para la confidencialidad, la protección de los derechos de autor, la creación de marcas o cualquier otra tarea que implique información sensible. A continuación se muestra una comparación de cómo IronPDF e iText aplican marcas de agua a los 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");
IRON VB CONVERTER ERROR developers@ironsoftware.com
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
la API fácil e intuitiva de IronPDF permite a los usuarios aplicar marcas de agua personalizadas a sus archivos PDF rápidamente, al tiempo que les da un control total sobre el proceso. Su uso de HTML/CSS simplifica aún más el proceso sin perder ningún control sobre la personalización. el enfoque de iText para añadir marcas de agua a los PDF requiere más trabajo manual para llevar a cabo la tarea, lo que puede ralentizar el proceso.
Hay momentos en los que las páginas PDF necesitan estampado con contenido, de forma similar a como uno podría necesitar aplicar marcas de agua a sus archivos PDF. A continuación 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");
IRON VB CONVERTER ERROR developers@ironsoftware.com
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
IronPDF puede ayudarte a añadir texto o imágenes a los PDF de una forma realmente versátil y personalizable; te permite hacerte cargo por completo. Es fácil entender y trabajar con la API, especialmente para los desarrolladores familiarizados con HTML/CSS. iText hace uso de sus herramientas de estampado de imágenes y texto para dar a los usuarios más control sobre el contenido mostrado en sus archivos PDF, aunque el proceso puede acabar siendo más manual.
A veces, puede que tengas que convertir PDF de un formato a otro. En este caso, nos fijamos en Conversión de DOCX a PDF y comparando cómo IronPDF e iText manejan este proceso de forma 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");
IRON VB CONVERTER ERROR developers@ironsoftware.com
iText
iText, por sí solo, no puede gestionar la conversión de DOCX a PDF; en su lugar, depende de bibliotecas externas como DocX o Aspose.Words
IronPDF proporciona a los desarrolladores una herramienta directa y concisa para gestionar las tareas de conversión de DOCX a PDF, facilitando la conversión de archivos DOCX a formato PDF sin necesidad de bibliotecas externas. en cambio, iText** depende de bibliotecas externas para realizar esta tarea.
Para ver ejemplos más detallados, visite Ejemplos de IronPDF.
IronPDF tiene diferentes niveles y funciones adicionales por la compra de una licencia. Los promotores también pueden comprar IronSuite que, le da acceso a todos los productos de IronSoftware al precio de dos. Si no está preparado para comprar una licencia, IronPDF le ofrece una prueba gratuita que dura 30 días.
Licencias perpetuas: Ofrece una gama de licencias perpetuas en función del tamaño de su equipo, las necesidades de su proyecto y el número de ubicaciones. Cada tipo de licencia incluye asistencia por correo electrónico.
Licencia Lite: Esta licencia cuesta 749 $ y admite un desarrollador, una ubicación y un proyecto.
Licencia Plus: Con soporte para tres desarrolladores, tres ubicaciones y tres proyectos, este es el siguiente paso desde la licencia Lite y cuesta $1,499. La Licencia Plus ofrece soporte por chat y teléfono, además de soporte básico por correo electrónico.
Licencia profesional: Esta licencia es adecuada para equipos más grandes, con soporte para diez desarrolladores, diez ubicaciones y diez proyectos por 2.999 dólares. Ofrece los mismos canales de asistencia de contacto que los niveles anteriores, pero también ofrece asistencia de pantalla compartida.
Redistribución sin derechos de autor: La licencia de IronPDF también ofrece cobertura de redistribución sin derechos de autor por 1.999 dólares más
Soporte ininterrumpido del producto: IronPDF ofrece acceso a actualizaciones continuas del producto, mejoras de las funciones de seguridad y soporte de su equipo de ingenieros por 999 $ al año o por una única compra de 1.999 $ para una cobertura de 5 años.
IronSuite: Por 1.498 dólares, tendrá acceso a todos los productos de Iron Software, incluidos IronPDF, IronOCR, IronWord, IronXL, IronBarcode, IronQR, IronZIP, IronPrint e IronWebScraper.
Licencia AGPL: La biblioteca iText Core es de código abierto y está a disposición de los usuarios de forma gratuita. Para utilizar iText bajo este modelo de licencia, los usuarios deben cumplir sus términos y cualquier modificación que se haga a iText bajo esta licencia debe publicarse también bajo el modelo de licencia AGPL.
Documentación completa: Documentación extensa y fácil de usar que cubre todas las funciones que ofrece.
Asistencia 24/5 horas: Asistencia técnica activa disponible.
Videotutoriales: En YouTube hay disponibles guías de vídeo paso a paso.
Foro comunitario: Comunidad comprometida para apoyo adicional.
Documentación: Documentación exhaustiva que cubre las funciones que ofrece el software iText.
Ejemplos y tutoriales: Tiene tutoriales de cómo utilizar sus diversas características junto con ejemplos de código.
GitHub: Los desarrolladores pueden enviar fácilmente cualquier problema o error que encuentren al repositorio iText GitHub y comunicarse con el grupo iText
Actualizaciones: iText ofrece actualizaciones y mejoras periódicas.
Para obtener más información sobre la documentación y la asistencia de IronPDF, visite Documentación de IronPDF y el Canal YouTube de IronSoftware.
En el ámbito de las herramientas de manipulación de PDF para .NET, tanto IronPDF como iText ofrecen sólidas capacidades adaptadas a diversas necesidades de desarrollo. IronPDF destaca por su sencilla integración en una amplia gama de plataformas, incluidas .NET Core, Framework y Standard, junto con funciones completas como la conversión de HTML a PDF y opciones de seguridad avanzadas. Por otro lado, iText, conocido por su herencia de Java, ofrece potentes herramientas de generación y manipulación de PDF con licencias comerciales y de código abierto, haciendo hincapié en la versatilidad y la personalización.
La elección entre estas herramientas depende en última instancia de los requisitos del proyecto, las preferencias de licencias y el nivel de asistencia técnica necesario. Tanto si optan por la sencillez y flexibilidad de IronPDF como por el amplio conjunto de funciones de la biblioteca PDF de código abierto que es iText, los desarrolladores disponen de amplios recursos para agilizar eficazmente los flujos de trabajo PDF en sus aplicaciones.
9 productos API .NET para sus documentos de oficina