COMPARACIóN DE PRODUCTOS

Comparación entre IronPDF e iText7

Actualizado 31 de agosto, 2022
Compartir:

*Convierte tus páginas web en documentos PDF de forma rápida y sencilla utilizando la librería IronPDF para C# y Java. IronPDF admite todas las formas de contenido HTML y las renderiza con una precisión de píxeles perfecta. Sin complicaciones. Sin estrés. Esta biblioteca simplemente funciona.

Continúe leyendo para saber cómo IronPDF para C# se compara con iText7 PDF Library para .NET. Para la comparación entre la versión Java de ambas bibliotecas, consulte este enlace entrada del blog. Nota: Este artículo comparativo se redactó el 1 de septiembre de 2022. Es posible que su contenido no refleje con exactitud las versiones actuales de ambas bibliotecas.


La necesidad de generar archivos PDF en C# es algo que surge con bastante frecuencia. Sin embargo, no hay nada en C# o .NET Core que pueda generar PDFs para usted de forma nativa. Además, muchas bibliotecas de terceros carecen a menudo de las características esenciales necesarias para llevar a cabo esta tarea de forma satisfactoria.

Este artículo comparará dos bibliotecas supuestamente capaces de convertir contenidos HTML en PDF.

IronPDF e iText 7 son dos bibliotecas que pueden utilizarse en aplicaciones .NET de Microsoft para crear, leer y editar documentos PDF, ya estén en línea o en un escritorio con mejores estructuras internas de PDF.

Este artículo examinará las dos bibliotecas para ver cuál es la más adecuada para trabajar con documentos PDF en casos concretos, comparando sus características mediante ejemplos de código.

Cómo utilizar iText7 en C# (Tutorial de ejemplo)

  1. Instalar la biblioteca iText7 para editar archivos PDF en C#
  2. Convertir HTML a PDF utilizando HtmlConverter clase
  3. Utilice PDFReader clase to read and extract PDF content
  4. Firmar documento en iText7 con RótuloIndependiente método
  5. Exportar el archivo PDF finalizado a la ubicación deseada

¿Qué es IronPDF?

IronPDF es una herramienta PDF muy eficaz y un conversor PDF capaz de hacer prácticamente cualquier cosa que pueda hacer un navegador. Se trata de una biblioteca PDF para programadores que facilita la creación, lectura y manipulación de archivos PDF utilizando funciones de programación de bajo nivel. IronPDF convierte HTML a PDF utilizando el motor de Chrome. IronPDF es compatible con formularios Windows, HTML, ASPX, Razor HTML, .NET Core, ASP.NET, Windows Forms, WPF, Xamarin, Blazor, Unity y aplicaciones HoloLense, entre otros componentes web. IronPDF es compatible con aplicaciones Microsoft.NET y .NET Core (tanto aplicaciones web ASP.NET como aplicaciones Windows tradicionales) para crear sus propias aplicaciones. IronPDF también puede utilizarse para crear PDF visualmente atractivos.

IronPDF puede convertir HTML5, JavaScript, CSS e imágenes en documentos PDF, y crear escenarios PDF personalizados. También se puede incluir un encabezado y un pie de página en los archivos. También puede facilitarnos la visualización de archivos PDF. IronPDF incluye un potente conversor de HTML a PDF que funciona con archivos PDF. También cuenta con un potente motor de conversión de PDF. Además, no tiene dependencias externas. IronPDF muestra más ventajas que puede aportar el PDF.

Características de IronPDF

  • Las fuentes que se pueden utilizar para crear un documento PDF incluyen HTML, HTML5, ASPX y Razor/MVC View utilizando IronPDF como mejor motor de documentos. No solo podemos convertir archivos HTML a PDF, sino también archivos de imagen.
  • Permite crear y editar documentos PDF interactivos, rellenar y enviar formularios interactivos, combinar y dividir documentos PDF, extraer texto e imágenes de documentos PDF, sustituir texto en documentos PDF, rasterizar páginas PDF en imágenes, convertir documentos PDF y mucho más.
  • Como punto de partida, cree un documento utilizando el enlace. También admite credenciales de inicio de sesión de red personalizadas, agentes de usuario, proxies, cookies, cabeceras HTTP y variables de formulario para el inicio de sesión detrás de formularios de inicio de sesión HTML.
  • Especificando nombres de usuario y contraseñas, IronPDF nos permite abrir documentos protegidos.
  • IronPDF es un programa que lee y rellena los espacios en blanco de los documentos PDF existentes, incluso para aquellos con capacidades de programación de bajo nivel.
  • Puede extraer imágenes de documentos.
  • Nos permite añadir encabezados y pies de página a los documentos, así como texto, imágenes, marcadores, marcas de agua y mucho más.
  • Nos ofrece la posibilidad de dividir y combinar páginas en un documento nuevo o existente.
  • Sin utilizar Acrobat Reader, podemos convertir documentos en objetos PDF.
  • Un archivo CSS puede convertirse en un documento PDF.
  • Los archivos multimedia del tipo CSS pueden convertirse en documentos.
  • Rellene formularios PDF existentes y añada otros nuevos.

Qué es iText 7

iText 7 Suite es un completo SDK de PDF que incluye la biblioteca PDF de código abierto iText 7 Core, así como complementos opcionales para satisfacer sus necesidades específicas. La biblioteca iText 7 Core PDF es una revisión del popular motor iText 5 con una estructura de código modular y funcionalidad de bajo nivel, que permite futuros avances y ampliaciones, así como una codificación simplificada.

El desarrollo de iText 7 se basó en casi una década de lecciones aprendidas durante el desarrollo de iText 5 (y iTextSharp). Un complemento a la vez, es una biblioteca más sencilla, con mayor rendimiento y extensible que está preparada para gestionar las complejidades adicionales de los procesos documentales actuales.

Características de iText 7

  • Creación masiva de PDF, incluidos los PDF etiquetados con metadatos que describen la estructura del documento y el orden de sus elementos. (por ejemplo, títulos, bloques de texto, columnas e imágenes)
  • Conversión de imágenes a PDF
  • Conversión de HTML a PDF (con el complemento pdfHTML iText)
  • iText 7 es único en el sentido de que es compatible con una amplia gama de idiomas, incluidos los idiomas índicos, tailandés, jemer, árabe, hebreo, chino, japonés, coreano y cirílico, entre otros. (con el complemento pdfCalligraph iText)

Instalación de iText

Vaya a Archivo > Nuevo > Proyecto en Visual Studio.

Seleccionar aplicación de consola (.NET Framework) y asigne un nombre al proyecto en la ventana "Nuevo proyecto".

Selección de la aplicación de consola (.NET Framework)

Seleccione "Gestionar paquetes NuGet" en el menú contextual al hacer clic con el botón derecho en el nombre del proyecto.

Selección de paquetes NuGet

Seleccione "Examinar" y escriba itext7 en el cuadro de búsqueda. Selecciona itext7 de los resultados e instálalo

Seleccionar itext7

ASP clásico.

Instalación de IronPDF

Existen cuatro formas de obtener e instalar la biblioteca IronPDF.

Son las siguientes:

Mediante el gestor de paquetes NuGet de Visual Studio, Visual Studio es un programa que te ofrece la posibilidad de crear y editar documentos.

  • Uso de la línea de comandos en Visual Studio.
  • Descargar directamente desde el sitio web de NuGet.
  • Descárguelo directamente desde el sitio web de IronPDF.

Uso de Visual Studio

La siguiente captura de pantalla muestra cómo utilizar el gestor de paquetes NuGet.

Busque la palabra clave "IronPDF" en el gestor de paquetes, como se muestra en la siguiente captura de pantalla:

Uso de la línea de comandos en Visual Studio

Vaya a Herramientas > Gestor de paquetes NuGet > Consola del gestor de paquetes en Visual Studio.

En la pestaña de la consola del gestor de paquetes, escriba la siguiente línea.

Install-Package IronPdf

Crear documentos PDF mejorados a partir de URL

Ambas bibliotecas PDF nos ayudan a convertir páginas HTML en atractivos PDF.

Uso de IronPDF

IronPDF facilita la creación de un documento PDF generando un archivo HTML a partir de una URL y convirtiéndolo en un documento PDF. La cadena HTML se descargará utilizando el navegador Chrome integrado en IronPDF.

Los pasos que se indican a continuación facilitan la creación de documentos PDF:

IronPdf.ChromePdfRenderer Renderer = new IronPdf.ChromePdfRenderer();
var Pdf = Renderer.RenderUrlAsPdf("https://www.google.co.in/");
Pdf.SaveAs("result.pdf");
IronPdf.ChromePdfRenderer Renderer = new IronPdf.ChromePdfRenderer();
var Pdf = Renderer.RenderUrlAsPdf("https://www.google.co.in/");
Pdf.SaveAs("result.pdf");
Dim Renderer As New IronPdf.ChromePdfRenderer()
Dim Pdf = Renderer.RenderUrlAsPdf("https://www.google.co.in/")
Pdf.SaveAs("result.pdf")
VB   C#

Uso de iText 7

El ejemplo createPdf() método tiene una implementación muy sencilla. Su cuerpo está formado por una sola línea:

public void createPdf(string html, string dest)
{
    HtmlConverter.ConvertToPdf(html, new FileStream(dest, FileMode.Create));
}
public void createPdf(string html, string dest)
{
    HtmlConverter.ConvertToPdf(html, new FileStream(dest, FileMode.Create));
}
Public Sub createPdf(ByVal html As String, ByVal dest As String)
	HtmlConverter.ConvertToPdf(html, New FileStream(dest, FileMode.Create))
End Sub
VB   C#

El objeto HtmlConverter proporciona varios métodos de conversión de PDF, cada uno de los cuales toma un conjunto diferente de parámetros en función del caso de uso. El primer parámetro HTML en el primer ejemplo es una cadena con el siguiente valor:

public static String HTML = "<h1>Test</h1><p>Hello World</p>";
public static String HTML = "<h1>Test</h1><p>Hello World</p>";
Public Shared HTML As String = "<h1>Test</h1><p>Hello World</p>"
VB   C#

Lectura de documentos PDF

IronPDF e iText 7 también pueden extraer contenido de texto de los PDF. Para extraer el texto, podemos utilizar uno de estos dos enfoques. La primera consiste en obtener una única cadena que contenga todos los datos de la página. La segunda consiste en obtener los datos página por página.

Extraer texto de un PDF con IronPDF

IronPDF nos permite leer un archivo PDF que ya existe. A continuación se proporciona el código fuente de ejemplo para leer PDF existentes utilizando IronPDF.

El primer método consiste en recuperar todos los datos en forma de cadena, como se muestra a continuación.

var pdfDocument = IronPdf.PdfDocument.FromFile("result.pdf");
string AllText = pdfDocument.ExtractAllText();
var pdfDocument = IronPdf.PdfDocument.FromFile("result.pdf");
string AllText = pdfDocument.ExtractAllText();
Dim pdfDocument = IronPdf.PdfDocument.FromFile("result.pdf")
Dim AllText As String = pdfDocument.ExtractAllText()
VB   C#

El método Fromfile se utiliza para leer el PDF de un archivo existente y transformarlo en un objeto PdfDocument en el código de ejemplo anterior. Este objeto tiene un método llamado ExtractAllText, que devuelve el contenido de texto de un documento PDF en forma de cadena.

A continuación se muestra el segundo método para obtener el texto de una página o de varias páginas:

var pdfDocument =IronPdf.PdfDocument.FromFile("result.pdf");
string onePageText = pdfDocument.ExtractTextFromPage(0);
string pagesText = pdfDocument.ExtractTextFromPages(new [] { 1, 2 });
var pdfDocument =IronPdf.PdfDocument.FromFile("result.pdf");
string onePageText = pdfDocument.ExtractTextFromPage(0);
string pagesText = pdfDocument.ExtractTextFromPages(new [] { 1, 2 });
Dim pdfDocument =IronPdf.PdfDocument.FromFile("result.pdf")
Dim onePageText As String = pdfDocument.ExtractTextFromPage(0)
Dim pagesText As String = pdfDocument.ExtractTextFromPages( { 1, 2 })
VB   C#

Extraer texto de un PDF con iText 7

Para leer un archivo PDF con iText, siga los pasos que se indican a continuación.

  • Crea un objeto PDFReader y envuélvelo en un PDFDocument.
  • Utilice la función getNumberOfPages para averiguar cuántas páginas hay en el PDF que deben leerse.
  • Usando PdfTextExtractor, itera a través de las páginas y extrae el contenido de cada una.
import java.io.IOException;
import com.itextpdf.kernel.pdf.PdfDocument;
import com.itextpdf.kernel.pdf.PdfReader;
import com.itextpdf.kernel.pdf.canvas.parser.PdfTextExtractor;

public class ReadPDF {
  public static final String READ_PDF = "F://knpcode//result//List.pdf";
  public static void main(String [] args) {
  try {
    //  PDFReader
    PdfReader reader = new PdfReader(READ_PDF);
    PdfDocument pdfDoc = new PdfDocument(reader);
    //  obtener el número de páginas de un PDF
    int noOfPages = pdfDoc.getNumberOfPages();
    System.out.println("Extracted content of PDF---- ");
    for(int i = 1; i <= noOfPages; i++) {
      //  Extraer el contenido de cada página
      String contentOfPage = PdfTextExtractor.getTextFromPage(pdfDoc.getPage(i));
      System.out.println(contentOfPage );
    }
    pdfDoc.close();
    }catch (IOException e) {
      System.out.println("Exception occurred " + e.getMessage());
    }
  }
}
import java.io.IOException;
import com.itextpdf.kernel.pdf.PdfDocument;
import com.itextpdf.kernel.pdf.PdfReader;
import com.itextpdf.kernel.pdf.canvas.parser.PdfTextExtractor;

public class ReadPDF {
  public static final String READ_PDF = "F://knpcode//result//List.pdf";
  public static void main(String [] args) {
  try {
    //  PDFReader
    PdfReader reader = new PdfReader(READ_PDF);
    PdfDocument pdfDoc = new PdfDocument(reader);
    //  obtener el número de páginas de un PDF
    int noOfPages = pdfDoc.getNumberOfPages();
    System.out.println("Extracted content of PDF---- ");
    for(int i = 1; i <= noOfPages; i++) {
      //  Extraer el contenido de cada página
      String contentOfPage = PdfTextExtractor.getTextFromPage(pdfDoc.getPage(i));
      System.out.println(contentOfPage );
    }
    pdfDoc.close();
    }catch (IOException e) {
      System.out.println("Exception occurred " + e.getMessage());
    }
  }
}
Private java As import
Private com As import
Private com As import
Private com As import

Public Class ReadPDF
  Public Shared String As final
  Public Shared Sub main(ByVal args() As String)
  Try
	'  PDFReader
	Dim reader As New PdfReader(READ_PDF)
	Dim pdfDoc As New PdfDocument(reader)
	'  obtener el número de páginas de un PDF
	Dim noOfPages As Integer = pdfDoc.getNumberOfPages()
	System.out.println("Extracted content of PDF---- ")
	For i As Integer = 1 To noOfPages
	  '  Extraer el contenido de cada página
	  Dim contentOfPage As String = PdfTextExtractor.getTextFromPage(pdfDoc.getPage(i))
	  System.out.println(contentOfPage)
	Next i
	pdfDoc.close()
	Catch e As IOException
	  System.out.println("Exception occurred " & e.getMessage())
	End Try
  End Sub
End Class
VB   C#

Firmas digitales

Creación de firmas digitales con IronPDF

El siguiente ejemplo de código crea un formulario de Windows en C# que permite a los usuarios firmar un PDF de su elección con una clave .pfx predefinida.

using System.Drawing;
using System.Windows.Forms;
using IronPdf;
namespace digitalsign
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent(); 
        }
        private void button1_Click(object sender, System.EventArgs e)
        {
            //seleccione el archivo pdf deseado
            if (openFileDialog1.ShowDialog() == DialogResult.OK)
            {
                textBox1.Text = openFileDialog1.FileName;
            }
        }
        private void button2_Click(object sender, System.EventArgs e)
        {
            //Aquí hemos llamado a un método PDFSignature para firmar digitalmente el PDF existente
            new PdfSignature("Ironpdf.pfx", "123456").SignPdfFile(textBox1.Text);
            //Se utiliza como confirmación
            label3.Text = "Completed !";
            label3.BackColor = Color.LightGreen;
            label3.ForeColor = Color.Black;
        }
    }
}
using System.Drawing;
using System.Windows.Forms;
using IronPdf;
namespace digitalsign
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent(); 
        }
        private void button1_Click(object sender, System.EventArgs e)
        {
            //seleccione el archivo pdf deseado
            if (openFileDialog1.ShowDialog() == DialogResult.OK)
            {
                textBox1.Text = openFileDialog1.FileName;
            }
        }
        private void button2_Click(object sender, System.EventArgs e)
        {
            //Aquí hemos llamado a un método PDFSignature para firmar digitalmente el PDF existente
            new PdfSignature("Ironpdf.pfx", "123456").SignPdfFile(textBox1.Text);
            //Se utiliza como confirmación
            label3.Text = "Completed !";
            label3.BackColor = Color.LightGreen;
            label3.ForeColor = Color.Black;
        }
    }
}
Imports System.Drawing
Imports System.Windows.Forms
Imports IronPdf
Namespace digitalsign
	Partial Public Class Form1
		Inherits Form

		Public Sub New()
			InitializeComponent()
		End Sub
		Private Sub button1_Click(ByVal sender As Object, ByVal e As System.EventArgs)
			'seleccione el archivo pdf deseado
			If openFileDialog1.ShowDialog() = System.Windows.Forms.DialogResult.OK Then
				textBox1.Text = openFileDialog1.FileName
			End If
		End Sub
		Private Sub button2_Click(ByVal sender As Object, ByVal e As System.EventArgs)
			'Aquí hemos llamado a un método PDFSignature para firmar digitalmente el PDF existente
			Call (New PdfSignature("Ironpdf.pfx", "123456")).SignPdfFile(textBox1.Text)
			'Se utiliza como confirmación
			label3.Text = "Completed !"
			label3.BackColor = Color.LightGreen
			label3.ForeColor = Color.Black
		End Sub
	End Class
End Namespace
VB   C#

Creación de firmas digitales con iText 7

/*

This file is part of the iText (R) project.
Copyright (c) 1998-2019 iText Group NV

*/
/*
* This class is part of the white paper entitled
* "Digital Signatures for PDF documents"
* written by Bruno Lowagie
*
* For more info, go to: http://itextpdf.com/aprender
*/

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

namespace iText.Samples.Signatures.Chapter02
{
    public class C2_01_SignHelloWorld
    {
        public static readonly string DEST = "../../results/signatures/chapter02/";

        public static readonly string KEYSTORE = "../../resources/encryption/ks";
        public static readonly string SRC = "../../resources/pdfs/hello.pdf";

        public static readonly char [] PASSWORD = "password".ToCharArray();

        public static readonly String [] RESULT_FILES =
        {
            "hello_signed1.pdf",
            "hello_signed2.pdf",
            "hello_signed3.pdf",
            "hello_signed4.pdf"
        };

        public void Sign(String src, String dest, X509Certificate [] chain, ICipherParameters pk,
            String digestAlgorithm, PdfSigner.CryptoStandard subfilter, String reason, String location)
        {
            PdfReader reader = new PdfReader(src);
            PdfSigner signer = new PdfSigner(reader, new FileStream(dest, FileMode.Create), new StampingProperties());

            //  Crear el aspecto de la firma
            Rectangle rect = new Rectangle(36, 648, 200, 100);
            PdfSignatureAppearance appearance = signer.GetSignatureAppearance();
            appearance
                .SetReason(reason)
                .SetLocation(location)

                //  Especifique si se utilizará la apariencia antes de firmar el campo
                //  como fondo para el campo firmado. El valor "false" es el valor por defecto.
                .SetReuseAppearance(false)
                .SetPageRect(rect)
                .SetPageNumber(1);
            signer.SetFieldName("sig");

            IExternalSignature pks = new PrivateKeySignature(pk, digestAlgorithm);

            //  Firme el documento utilizando el modo desvinculado, CMS o equivalente CAdES.
            signer.SignDetached(pks, chain, null, null, null, 0, subfilter);
        }

        public static void Main(String [] args)
        {
            DirectoryInfo directory = new DirectoryInfo(DEST);
            directory.Create();

            Pkcs12Store pk12 = new Pkcs12Store(new FileStream(KEYSTORE, FileMode.Open, FileAccess.Read), PASSWORD);
            string alias = null;
            foreach (var a in pk12.Aliases)
            {
                alias = ((string) a);
                if (pk12.IsKeyEntry(alias))
                    break;
            }

            ICipherParameters pk = pk12.GetKey(alias).Key;
            X509CertificateEntry [] ce = pk12.GetCertificateChain(alias);
            X509Certificate [] chain = new X509Certificate [ce.Length];
            for (int k = 0; k < ce.Length; ++k)
            {
                chain [k] = ce [k].Certificate;
            }

            C2_01_SignHelloWorld app = new C2_01_SignHelloWorld();
            app.Sign(SRC, DEST + RESULT_FILES [0], chain, pk, DigestAlgorithms.SHA256,
                PdfSigner.CryptoStandard.CMS, "Test 1", "Ghent");
            app.Sign(SRC, DEST + RESULT_FILES [1], chain, pk, DigestAlgorithms.SHA512,
                PdfSigner.CryptoStandard.CMS, "Test 2", "Ghent");
            app.Sign(SRC, DEST + RESULT_FILES [2], chain, pk, DigestAlgorithms.SHA256,
                PdfSigner.CryptoStandard.CADES, "Test 3", "Ghent");
            app.Sign(SRC, DEST + RESULT_FILES [3], chain, pk, DigestAlgorithms.RIPEMD160,
                PdfSigner.CryptoStandard.CADES, "Test 4", "Ghent");
        }
    }
}
/*

This file is part of the iText (R) project.
Copyright (c) 1998-2019 iText Group NV

*/
/*
* This class is part of the white paper entitled
* "Digital Signatures for PDF documents"
* written by Bruno Lowagie
*
* For more info, go to: http://itextpdf.com/aprender
*/

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

namespace iText.Samples.Signatures.Chapter02
{
    public class C2_01_SignHelloWorld
    {
        public static readonly string DEST = "../../results/signatures/chapter02/";

        public static readonly string KEYSTORE = "../../resources/encryption/ks";
        public static readonly string SRC = "../../resources/pdfs/hello.pdf";

        public static readonly char [] PASSWORD = "password".ToCharArray();

        public static readonly String [] RESULT_FILES =
        {
            "hello_signed1.pdf",
            "hello_signed2.pdf",
            "hello_signed3.pdf",
            "hello_signed4.pdf"
        };

        public void Sign(String src, String dest, X509Certificate [] chain, ICipherParameters pk,
            String digestAlgorithm, PdfSigner.CryptoStandard subfilter, String reason, String location)
        {
            PdfReader reader = new PdfReader(src);
            PdfSigner signer = new PdfSigner(reader, new FileStream(dest, FileMode.Create), new StampingProperties());

            //  Crear el aspecto de la firma
            Rectangle rect = new Rectangle(36, 648, 200, 100);
            PdfSignatureAppearance appearance = signer.GetSignatureAppearance();
            appearance
                .SetReason(reason)
                .SetLocation(location)

                //  Especifique si se utilizará la apariencia antes de firmar el campo
                //  como fondo para el campo firmado. El valor "false" es el valor por defecto.
                .SetReuseAppearance(false)
                .SetPageRect(rect)
                .SetPageNumber(1);
            signer.SetFieldName("sig");

            IExternalSignature pks = new PrivateKeySignature(pk, digestAlgorithm);

            //  Firme el documento utilizando el modo desvinculado, CMS o equivalente CAdES.
            signer.SignDetached(pks, chain, null, null, null, 0, subfilter);
        }

        public static void Main(String [] args)
        {
            DirectoryInfo directory = new DirectoryInfo(DEST);
            directory.Create();

            Pkcs12Store pk12 = new Pkcs12Store(new FileStream(KEYSTORE, FileMode.Open, FileAccess.Read), PASSWORD);
            string alias = null;
            foreach (var a in pk12.Aliases)
            {
                alias = ((string) a);
                if (pk12.IsKeyEntry(alias))
                    break;
            }

            ICipherParameters pk = pk12.GetKey(alias).Key;
            X509CertificateEntry [] ce = pk12.GetCertificateChain(alias);
            X509Certificate [] chain = new X509Certificate [ce.Length];
            for (int k = 0; k < ce.Length; ++k)
            {
                chain [k] = ce [k].Certificate;
            }

            C2_01_SignHelloWorld app = new C2_01_SignHelloWorld();
            app.Sign(SRC, DEST + RESULT_FILES [0], chain, pk, DigestAlgorithms.SHA256,
                PdfSigner.CryptoStandard.CMS, "Test 1", "Ghent");
            app.Sign(SRC, DEST + RESULT_FILES [1], chain, pk, DigestAlgorithms.SHA512,
                PdfSigner.CryptoStandard.CMS, "Test 2", "Ghent");
            app.Sign(SRC, DEST + RESULT_FILES [2], chain, pk, DigestAlgorithms.SHA256,
                PdfSigner.CryptoStandard.CADES, "Test 3", "Ghent");
            app.Sign(SRC, DEST + RESULT_FILES [3], chain, pk, DigestAlgorithms.RIPEMD160,
                PdfSigner.CryptoStandard.CADES, "Test 4", "Ghent");
        }
    }
}
'
'
'This file is part of the iText (R) project.
'Copyright (c) 1998-2019 iText Group NV
'
'
'
'* This class is part of the white paper entitled
'* "Digital Signatures for PDF documents"
'* written by Bruno Lowagie
'*
'* For more info, go to: http://itextpdf.com/aprender
'

Imports System
Imports System.IO
Imports Org.BouncyCastle.Crypto
Imports Org.BouncyCastle.X509
Imports iText.Kernel.Geom
Imports iText.Kernel.Pdf
Imports iText.Signatures
Imports Org.BouncyCastle.Pkcs

Namespace iText.Samples.Signatures.Chapter02
	Public Class C2_01_SignHelloWorld
		Public Shared ReadOnly DEST As String = "../../results/signatures/chapter02/"

		Public Shared ReadOnly KEYSTORE As String = "../../resources/encryption/ks"
		Public Shared ReadOnly SRC As String = "../../resources/pdfs/hello.pdf"

		Public Shared ReadOnly PASSWORD() As Char = "password".ToCharArray()

		Public Shared ReadOnly RESULT_FILES() As String = { "hello_signed1.pdf", "hello_signed2.pdf", "hello_signed3.pdf", "hello_signed4.pdf" }

		Public Sub Sign(ByVal src As String, ByVal dest As String, ByVal chain() As X509Certificate, ByVal pk As ICipherParameters, ByVal digestAlgorithm As String, ByVal subfilter As PdfSigner.CryptoStandard, ByVal reason As String, ByVal location As String)
			Dim reader As New PdfReader(src)
			Dim signer As New PdfSigner(reader, New FileStream(dest, FileMode.Create), New StampingProperties())

			'  Crear el aspecto de la firma
			Dim rect As New Rectangle(36, 648, 200, 100)
			Dim appearance As PdfSignatureAppearance = signer.GetSignatureAppearance()
			appearance.SetReason(reason).SetLocation(location).SetReuseAppearance(False).SetPageRect(rect).SetPageNumber(1)
			signer.SetFieldName("sig")

			Dim pks As IExternalSignature = New PrivateKeySignature(pk, digestAlgorithm)

			'  Firme el documento utilizando el modo desvinculado, CMS o equivalente CAdES.
			signer.SignDetached(pks, chain, Nothing, Nothing, Nothing, 0, subfilter)
		End Sub

		Public Shared Sub Main(ByVal args() As String)
			Dim directory As New DirectoryInfo(DEST)
			directory.Create()

			Dim pk12 As New Pkcs12Store(New FileStream(KEYSTORE, FileMode.Open, FileAccess.Read), PASSWORD)
			Dim [alias] As String = Nothing
			For Each a In pk12.Aliases
				[alias] = (CStr(a))
				If pk12.IsKeyEntry([alias]) Then
					Exit For
				End If
			Next a

			Dim pk As ICipherParameters = pk12.GetKey([alias]).Key
			Dim ce() As X509CertificateEntry = pk12.GetCertificateChain([alias])
			Dim chain(ce.Length - 1) As X509Certificate
			For k As Integer = 0 To ce.Length - 1
				chain (k) = ce (k).Certificate
			Next k

			Dim app As New C2_01_SignHelloWorld()
			app.Sign(SRC, DEST & RESULT_FILES (0), chain, pk, DigestAlgorithms.SHA256, PdfSigner.CryptoStandard.CMS, "Test 1", "Ghent")
			app.Sign(SRC, DEST & RESULT_FILES (1), chain, pk, DigestAlgorithms.SHA512, PdfSigner.CryptoStandard.CMS, "Test 2", "Ghent")
			app.Sign(SRC, DEST & RESULT_FILES (2), chain, pk, DigestAlgorithms.SHA256, PdfSigner.CryptoStandard.CADES, "Test 3", "Ghent")
			app.Sign(SRC, DEST & RESULT_FILES (3), chain, pk, DigestAlgorithms.RIPEMD160, PdfSigner.CryptoStandard.CADES, "Test 4", "Ghent")
		End Sub
	End Class
End Namespace
VB   C#

Precios y licencias

iText utiliza un modelo de doble licencia. Por ello, ofrece licencias comerciales y AGPL.

IronPDF ofrece precios transparentes con licencias de $749con muchas opciones personalizables.

IronPDF es de uso gratuito en entornos de desarrollo, pero requiere una licencia comercial para su uso en producción. Obtener una licencia de prueba para utilizar IronPDF en producción de forma gratuita durante 30 días. Navegando por las licencias de IronPDF, podrá encontrar una que se adapte tanto a sus necesidades como a su presupuesto.

< ANTERIOR
Comparación entre IronPDF y Textcontrol
SIGUIENTE >
Comparación entre IronPDF y Winnovative PDF Library para .NET

¿Listo para empezar? Versión: 2024.6 recién publicada

Comenzar prueba gratuita Descargas totales: 9,661,997
Ver licencias >