Pruebas en un entorno real
Pruebe en producción sin marcas de agua.
Funciona donde lo necesites.
*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.
HtmlConverter
clasePDFReader
clase to read and extract PDF contentRótuloIndependiente
métodoIronPDF 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.
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.
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".
Seleccione "Gestionar paquetes NuGet" en el menú contextual al hacer clic con el botón derecho en el nombre del proyecto.
Seleccione "Examinar" y escriba itext7 en el cuadro de búsqueda. Selecciona itext7 de los resultados e instálalo
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.
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:
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
Ambas bibliotecas PDF nos ayudan a convertir páginas HTML en atractivos PDF.
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")
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
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>"
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.
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()
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 })
Para leer un archivo PDF con iText, siga los pasos que se indican a continuación.
PDFReader
y envuélvelo en un PDFDocument
.getNumberOfPages
para averiguar cuántas páginas hay en el PDF que deben leerse.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
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
/*
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
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.
9 productos API .NET para sus documentos de oficina