COMPARACIóN DE PRODUCTOS

Comparación entre IronPDF y Apitron PDF Kit

Publicado en 11 de diciembre, 2022
Compartir:

En C#, trabajar con archivos PDF puede suponer un reto para los desarrolladores. Hay que tener en cuenta muchos factores a la hora de crear contenidos para este tipo de archivos, y más aún al convertir contenidos de distintos formatos a PDF. La automatización es ahora la clave de los procesos de desarrollo de software. Estos problemas se han resuelto ahora con la construcción de bibliotecas diseñadas para ayudar a leer, escribir, crear y modificar documentos PDF, así como para editar sus atributos y convertirlos desde otros formatos.

En esta entrada del blog se compararán dos bibliotecas PDF para .NET y .NET Core. Estas dos bibliotecas son:

  • La biblioteca IronPDF
  • El kit Apitron PDF

    IronPDF y Apitron PDF Kit son dos bibliotecas que proporcionan funciones de manipulación de PDF para .NET y .NET Core. Ambos pueden utilizarse para tareas de conversión y manipulación de campos de documentos. Ambos también pueden crear marcadores. La siguiente cuestión es decidir qué biblioteca PDF .NET de C# es la mejor para nuestros proyectos .NET. Este artículo comparativo le ayudará a decidir entre estas dos bibliotecas PDF.

    En primer lugar, echemos un vistazo a lo que ofrecen las dos bibliotecas y, a continuación, pasemos a la comparación propiamente dicha.

La biblioteca Apitron PDF Kit y sus características

Apitron PDF Kit es un componente .NET que le permite manipular o convertir archivos PDF de la forma que desee. Puedes añadir imágenes, dibujos y textos, firmar documentos y mucho más. También puede editar los contenidos existentes. El componente Apitron PDF Kit .NET se puede utilizar para crear aplicaciones móviles, de escritorio, web, Windows y Cloud en múltiples plataformas.

Con este SDK de PDF, podrá:

  • Extraer, modificar y añadir gráficos(texto, imágenes, dibujos)
  • Dividir o fusionar documentos PDF
  • Rellene o cree formularios PDF protegidos por contraseña, compatibilidad con FDF
  • Cree documentos PDF multicapa con grupos de contenido opcionales( OCG)
  • Añadir o eliminar campos del documento
  • Utilice texto de derecha a izquierda o bidireccional para crear el contenido de la página
  • Examinar los recursos de un documento: fuentes definidas, archivos incrustados
  • Firme digitalmente y compruebe las firmas existentes en documentos PDF

Principales características de IronPDF

Los desarrolladores, especialmente los programadores de C#, adorarán la biblioteca IronPDF .NET. Con esta asombrosa herramienta, puede crear fácilmente una aplicación de procesamiento de PDF .NET Core.

IronPDF utiliza el motor .NET Chromium para modificar las páginas HTML(en código o en forma de URL) a archivos PDF. No es necesario utilizar API complejas para colocar objetos de navegación ni para diseñar PDF a partir de HTML. IronPDF admite documentos web estándar, incluidos HTML, ASPX, JS, CSS e imágenes.

IronPDF puede crearse utilizando HTML5, CSS, JS e imágenes. Un PDF se puede editar, sellar y añadir fácilmente encabezados y pies de página. También facilita la lectura de texto en PDF y la extracción de gráficos.

Entre las características más destacadas de IronPDF se incluyen:

  • Creación de documentos PDF mediante HTML4/5, CSS y JavaScript
  • Carga de URL con credenciales de inicio de sesión de red personalizadas, agentes de usuario, proxies, cookies, cabeceras HTTP y variables de formulario.(habilitar el inicio de sesión tras formularios de inicio de sesión HTML)
  • Lectura y cumplimentación de campos de formularios PDF
  • Extracción de texto y gráficos de PDF
  • Actualizar páginas PDF con nuevo contenido HTML
  • Creación de encabezados y pies de página basados en texto o HTML
  • Fusión y separación del contenido de documentos PDF
  • Conversión de formularios web ASP.NET en PDF imprimibles
  • Imprimir archivos PDF sin el software Adobe Acrobat

    IronPDF está disponible en casi todos los sistemas operativos y frameworks compatibles con C#, incluidos los siguientes:

  • .NET Core 2.1, 3.0, 3.1, .NET 6 y 5
  • Cumplimiento de la norma .NET 2.0 para una compatibilidad universal
  • Azure, AWS, Docker, Linux, Windows

    El resto del artículo es el siguiente:

  1. Instalación de IronPDF

  2. Instalación del kit Apitron PDF

  3. Crear un documento PDF

  4. Crear encabezado y pie de página en PDF

  5. Firma digital PDF

  6. Precios y licencias

  7. Conclusión

1. Instalación de IronPDF

Existen cuatro métodos para descargar e instalar la biblioteca IronPDF. Son las siguientes:

  1. Uso del gestor de paquetes NuGet

  2. Símbolo del sistema para desarrolladores

  3. Descargue directamente el paquete NuGet

  4. Descargar la biblioteca .DLL de IronPDF

1.1. Uso del gestor de paquetes NuGet

Para instalar IronPDF, simplemente haga clic con el botón derecho en su proyecto en el Explorador de soluciones. Se abrirá el Gestor de paquetes NuGet.

Una comparación de IronPDF con Apitron PDF SDK .NET - Figura 1: Accediendo al Administrador de Paquetes NuGet usando el Explorador de Soluciones

Acceso al Gestor de paquetes NuGet mediante el Explorador de soluciones

Una vez seleccionado, busque el paquete IronPDF e instálelo, como se muestra en la siguiente captura de pantalla.

Una comparación de IronPDF con Apitron PDF SDK .NET - Figura 2: Instalación de la biblioteca IronPDF usando el Administrador de Paquetes NuGet

Instalación de la biblioteca IronPDF mediante el gestor de paquetes NuGet

1.2. Uso del símbolo del sistema para desarrolladores

También puede instalar IronPDF a través del símbolo del sistema para desarrolladores.

  • Abra el Instructor de comandos para desarrolladores --- normalmente se encuentra en la carpeta Visual Studio
  • Escribe el siguiente comando:
Install-Package IronPdf
  • Pulse Intro
  • Esto descargará e instalará el paquete
  • Recarga tu proyecto y empieza a utilizarlo

1.3. Descargue directamente el paquete NuGet

IronPDF también puede instalarse visitando la página webPaquete NuGet IronPDF sitio web directamente y descargando el paquete. Los pasos son:

  • Vaya aPaquete NuGet IronPDF
  • Seleccione Descargar paquete
  • Haga doble clic en el paquete descargado
  • El paquete se instalará
  • Recarga tu proyecto de Visual Studio y empieza a utilizarlo

    IronPDF se ha descargado y está listo para usarse. Sin embargo, antes debemos instalar la biblioteca Apitron PDF.

2. Instalación del kit Apitron PDF

Para las aplicaciones .NET Core, podemos instalar Apitron utilizando NuGet Package Manager, o podemos descargar e instalar Apitron desde la página webApitron PDF Kit NuGet sitio web directamente.

  • Abra los paquetes NuGet en Visual Studio como hicimos en IronPDF.
  • Buscar Apitron.PDF.Kit.
  • Haga clic en instalar en su proyecto actual.
    Una comparación de IronPDF con Apitron PDF SDK .NET - Figura 3: Búsqueda en Apitron PDF Kit

    Apitron PDF Kit Búsqueda

    También puede utilizar la consola del gestor de paquetes NuGet para instalar Apitron. Siga el paso "Use Developer Command Prompt" como se menciona en IronPDF y escriba el siguiente comando:

Install-Package Apitron.PDF.Kit

Pulse ENTER. Descargará e instalará Apitron.PDF.Kit.

Añade los siguientes espacios de nombres:

using Apitron.PDF.Kit;
using Apitron.PDF.Kit.FixedLayout.Resources;
using Apitron.PDF.Kit.FixedLayout.Resources.Fonts;
using Apitron.PDF.Kit.FlowLayout.Content;
using Apitron.PDF.Kit.Styles;
using Apitron.PDF.Kit.Styles.Appearance;
using Font = Apitron.PDF.Kit.Styles.Text.Font;
using Apitron.PDF.Kit;
using Apitron.PDF.Kit.FixedLayout.Resources;
using Apitron.PDF.Kit.FixedLayout.Resources.Fonts;
using Apitron.PDF.Kit.FlowLayout.Content;
using Apitron.PDF.Kit.Styles;
using Apitron.PDF.Kit.Styles.Appearance;
using Font = Apitron.PDF.Kit.Styles.Text.Font;
Imports Apitron.PDF.Kit
Imports Apitron.PDF.Kit.FixedLayout.Resources
Imports Apitron.PDF.Kit.FixedLayout.Resources.Fonts
Imports Apitron.PDF.Kit.FlowLayout.Content
Imports Apitron.PDF.Kit.Styles
Imports Apitron.PDF.Kit.Styles.Appearance
Imports Font = Apitron.PDF.Kit.Styles.Text.Font
VB   C#

Pasemos ahora a la comparación entre IronPDF y Apitron PDF.

3. Creación de un documento PDF

3.1. Utilización de IronPDF

IronPDF dispone de varios métodos para crear archivos PDF. Veamos dos importantes.

URL existente a PDF

IronPDF facilita la conversión de cualquier URL a PDF. El siguiente código ayuda a convertir URL a PDF.

IronPdf.ChromePdfRenderer Renderer = new IronPdf.ChromePdfRenderer();
using var Pdf = Renderer.RenderUrlAsPdf("https://ironpdf.com/");
Pdf.SaveAs("url.pdf");
IronPdf.ChromePdfRenderer Renderer = new IronPdf.ChromePdfRenderer();
using var Pdf = Renderer.RenderUrlAsPdf("https://ironpdf.com/");
Pdf.SaveAs("url.pdf");
Dim Renderer As New IronPdf.ChromePdfRenderer()
Dim Pdf = Renderer.RenderUrlAsPdf("https://ironpdf.com/")
Pdf.SaveAs("url.pdf")
VB   C#

Cadena de entrada HTML a PDF

El siguiente código explica cómo generar un documento PDF a partir de una cadena HTML. Puede utilizar sólo HTML o combinarlo con CSS, imágenes y JavaScript.

var Renderer = new IronPdf.ChromePdfRenderer();
using var PDF = Renderer.RenderHtmlAsPdf("<h1>Html with CSS and Images</h1>");
PDF.SaveAs("pixel-perfect.pdf");

// Load external HTML assets: images, CSS and JavaScript.
// An optional BasePath 'C:\site\assets\' is set as the file location to load assets from
using var AdvancedPDF = Renderer.RenderHtmlAsPdf("<img src='logo.png'><h1>Sample Text</h1>", @"C:\site\assets\");
AdvancedPDF.SaveAs("html-with-assets.pdf");
var Renderer = new IronPdf.ChromePdfRenderer();
using var PDF = Renderer.RenderHtmlAsPdf("<h1>Html with CSS and Images</h1>");
PDF.SaveAs("pixel-perfect.pdf");

// Load external HTML assets: images, CSS and JavaScript.
// An optional BasePath 'C:\site\assets\' is set as the file location to load assets from
using var AdvancedPDF = Renderer.RenderHtmlAsPdf("<img src='logo.png'><h1>Sample Text</h1>", @"C:\site\assets\");
AdvancedPDF.SaveAs("html-with-assets.pdf");
Dim Renderer = New IronPdf.ChromePdfRenderer()
Dim PDF = Renderer.RenderHtmlAsPdf("<h1>Html with CSS and Images</h1>")
PDF.SaveAs("pixel-perfect.pdf")

' Load external HTML assets: images, CSS and JavaScript.
' An optional BasePath 'C:\site\assets\' is set as the file location to load assets from
Dim AdvancedPDF = Renderer.RenderHtmlAsPdf("<img src='logo.png'><h1>Sample Text</h1>", "C:\site\assets\")
AdvancedPDF.SaveAs("html-with-assets.pdf")
VB   C#

El resultado es el siguiente:

Una comparación de IronPDF con Apitron PDF SDK .NET - Figura 4: IronPDF genera PDF desde URL y cadena HTML CSS

IronPDF Generar PDF desde URL y cadena CSS HTML

3.2. Uso de Apitron PDF Kit

Apitron PDF no ofrece la posibilidad de convertir una URL o HTML a PDF. Permite convertir PDF a HTML. Sin embargo, también convierte archivos XML a PDF. El archivo XML utilizado es:

<?xml version="1.0" encoding="utf-8"?>
<FlowDocument xmlns="Apitron.PDF.Kit.FlowLayout.v1">
  <Resources>
    <Image resourceId="logo" fileName="../../images/logo.png" />
  </Resources>
  <Styles>
    <Style selector="flowdocument">
      <Color value="Black" />
    </Style>
    <Style selector="grid">
      <InnerBorder thickness="1" />
      <InnerBorderColor value="Black" />
    </Style>
  </Styles>
  <Elements>
    <Image>
      <Properties>
        <Class value="logo" />
        <ResourceId value="logo" />
      </Properties>
    </Image>
    <TextBlock>
      <Properties>
        <Class value="header" />
        <Text value="Sample Interview Questions for Candidates" />
      </Properties>
    </TextBlock>
    <Br />
    <TextBlock>
      <Properties>
        <Class value="headerNote" />
        <Text value="To help facilitate the interview process, the Human Resources Department has compiled a list of questions that might be used during the phone and/or on-campus interviews. Some of the questions deal with the same content, but are phrased differently while other questions may not pertain to a specific discipline; however all of the questions are unbiased and appropriate to ask. We hope you'll find this helpful." />
      </Properties>
    </TextBlock>
  </Elements>
  <Properties>
    <Margin value="30,20,30,20" />
  </Properties>
</FlowDocument>
XML

El código para convertir esta plantilla XML a PDF es el siguiente:

using (Stream stream = File.OpenRead("C:\\PLACE YOUR EXACT PATH HERE\\template.xml"), outputStream = File.Create("fromTemplate.pdf"))
{
    ResourceManager resourceManager = new ResourceManager();

    FlowDocument doc = FlowDocument.LoadFromXml(stream, resourceManager);

    doc.Write(outputStream, resourceManager);
}
using (Stream stream = File.OpenRead("C:\\PLACE YOUR EXACT PATH HERE\\template.xml"), outputStream = File.Create("fromTemplate.pdf"))
{
    ResourceManager resourceManager = new ResourceManager();

    FlowDocument doc = FlowDocument.LoadFromXml(stream, resourceManager);

    doc.Write(outputStream, resourceManager);
}
Using stream As Stream = File.OpenRead("C:\PLACE YOUR EXACT PATH HERE\template.xml"), outputStream As Stream = File.Create("fromTemplate.pdf")
	Dim resourceManager As New ResourceManager()

	Dim doc As FlowDocument = FlowDocument.LoadFromXml(stream, resourceManager)

	doc.Write(outputStream, resourceManager)
End Using
VB   C#

El resultado es el siguiente:

Una Comparación de IronPDF con Apitron PDF SDK .NET - Figura 5: Documento PDF de Apitron

Apitron Documento PDF

Si comparamos la salida de IronPDF y Apitron, podemos ver claramente que IronPDF crea documentos impresionantes utilizando el renderizado HTML y sin siquiera escalar el tamaño de la imagen. Por otro lado, Apitron ofrece un resultado similar al de IronPDF, pero sólo si el archivo XML tiene estilos registrados.

4. Añadir encabezados y pies de página a documentos PDF

4.1. Utilización de IronPDF

Añadir encabezados y pies de página es bastante fácil con IronPDF. IronPDF permite añadir números y saltos de página, adjuntar una portada, márgenes, etc.

A continuación se muestra el código para añadir encabezados y pies de página:

var Renderer = new ChromePdfRenderer();

// Add a header
Renderer.RenderingOptions.FirstPageNumber = 1; // use 2 if a cover page  will be appended
Renderer.RenderingOptions.TextHeader.DrawDividerLine = true;
Renderer.RenderingOptions.TextHeader.CenterText = "This is the header text";
Renderer.RenderingOptions.TextHeader.Font = IronPdf.Font.FontTypes.Helvetica;
Renderer.RenderingOptions.TextHeader.FontSize = 12;
Renderer.RenderingOptions.MarginTop = 25; //create 25mm space for header

// Add a footer too
Renderer.RenderingOptions.TextFooter.DrawDividerLine = true;
Renderer.RenderingOptions.TextFooter.Font = IronPdf.Font.FontTypes.Arial;
Renderer.RenderingOptions.TextFooter.FontSize = 12;
Renderer.RenderingOptions.TextFooter.LeftText = "{date} {time}";
Renderer.RenderingOptions.TextFooter.RightText = "{page} of {total-pages}";
Renderer.RenderingOptions.MarginTop = 25; //create 25mm space for footer

using var AdvancedPDF = Renderer.RenderHtmlAsPdf("<img src='logo.png'><h1>This is header and footer generated pdf file</h1>", @"C:\site\assets\");
AdvancedPDF.SaveAs("html-with-assets.pdf");
var Renderer = new ChromePdfRenderer();

// Add a header
Renderer.RenderingOptions.FirstPageNumber = 1; // use 2 if a cover page  will be appended
Renderer.RenderingOptions.TextHeader.DrawDividerLine = true;
Renderer.RenderingOptions.TextHeader.CenterText = "This is the header text";
Renderer.RenderingOptions.TextHeader.Font = IronPdf.Font.FontTypes.Helvetica;
Renderer.RenderingOptions.TextHeader.FontSize = 12;
Renderer.RenderingOptions.MarginTop = 25; //create 25mm space for header

// Add a footer too
Renderer.RenderingOptions.TextFooter.DrawDividerLine = true;
Renderer.RenderingOptions.TextFooter.Font = IronPdf.Font.FontTypes.Arial;
Renderer.RenderingOptions.TextFooter.FontSize = 12;
Renderer.RenderingOptions.TextFooter.LeftText = "{date} {time}";
Renderer.RenderingOptions.TextFooter.RightText = "{page} of {total-pages}";
Renderer.RenderingOptions.MarginTop = 25; //create 25mm space for footer

using var AdvancedPDF = Renderer.RenderHtmlAsPdf("<img src='logo.png'><h1>This is header and footer generated pdf file</h1>", @"C:\site\assets\");
AdvancedPDF.SaveAs("html-with-assets.pdf");
Dim Renderer = New ChromePdfRenderer()

' Add a header
Renderer.RenderingOptions.FirstPageNumber = 1 ' use 2 if a cover page  will be appended
Renderer.RenderingOptions.TextHeader.DrawDividerLine = True
Renderer.RenderingOptions.TextHeader.CenterText = "This is the header text"
Renderer.RenderingOptions.TextHeader.Font = IronPdf.Font.FontTypes.Helvetica
Renderer.RenderingOptions.TextHeader.FontSize = 12
Renderer.RenderingOptions.MarginTop = 25 'create 25mm space for header

' Add a footer too
Renderer.RenderingOptions.TextFooter.DrawDividerLine = True
Renderer.RenderingOptions.TextFooter.Font = IronPdf.Font.FontTypes.Arial
Renderer.RenderingOptions.TextFooter.FontSize = 12
Renderer.RenderingOptions.TextFooter.LeftText = "{date} {time}"
Renderer.RenderingOptions.TextFooter.RightText = "{page} of {total-pages}"
Renderer.RenderingOptions.MarginTop = 25 'create 25mm space for footer

Dim AdvancedPDF = Renderer.RenderHtmlAsPdf("<img src='logo.png'><h1>This is header and footer generated pdf file</h1>", "C:\site\assets\")
AdvancedPDF.SaveAs("html-with-assets.pdf")
VB   C#

El resultado es el siguiente:

Una Comparación de IronPDF con Apitron PDF SDK .NET - Figura 6: Encabezado y Pie de Página de IronPDF

Encabezado y pie de página de IronPDF

4.2. Uso de Apitron PDF Kit

Apitron PDF Kit crea PDF convirtiendo el contenido en un formato de estructura XML en un PDF. En Apitron PDF Fit, se pueden añadir encabezados y pies de página mediante las propiedades PageHeader y PageFooter. El código para hacerlo es el siguiente:

// register doc's resources first
ResourceManager resourceManager = new ResourceManager();
resourceManager.RegisterResource(new Apitron.PDF.Kit.FixedLayout.Resources.XObjects.Image("logo","../../data/logo.png"));

// create document
FlowDocument doc = new FlowDocument(){Margin = new Thickness(10)};

// register styles
doc.StyleManager.RegisterStyle(".pageHeader",new Style(){Font = new Font(StandardFonts.TimesBold, 20)});
doc.StyleManager.RegisterStyle(".pageFooter",new Style(){Align = Align.Right});
doc.StyleManager.RegisterStyle("hr",new Style(){Height = 2, Margin = new Thickness(0,5,0,5)});
doc.StyleManager.RegisterStyle(".content",new Style(){Align = Align.Left, Display = Display.InlineBlock});

// fill the header section
doc.PageHeader.Class = "pageHeader";
doc.PageHeader.Add(new Image("logo"){Width = 100, Height = 50});
doc.PageHeader.Add(new TextBlock("This document is intended for internal use only"){TextIndent = 20});
doc.PageHeader.Add(new Hr());

// fill the footer section
doc.PageFooter.Class = "pageFooter";
doc.PageFooter.Add(new Hr());
doc.PageFooter.Add(new TextBlock((ctx)=>string.Format("Page {0} from&nbsp;",ctx.CurrentPage+1)));
doc.PageFooter.Add(new PageCount(3){Display = Display.Inline});

// add pages
for (int i = 0; i < 2; ++i)
{
    doc.Add(new TextBlock("This is header and footer generation pdf file.") {Class = "content"});
    doc.Add(new PageBreak());
}

// generate PDF
using (Stream stream = File.Create("out.pdf"))
{
    doc.Write(stream, resourceManager);
}

Process.Start("out.pdf");
// register doc's resources first
ResourceManager resourceManager = new ResourceManager();
resourceManager.RegisterResource(new Apitron.PDF.Kit.FixedLayout.Resources.XObjects.Image("logo","../../data/logo.png"));

// create document
FlowDocument doc = new FlowDocument(){Margin = new Thickness(10)};

// register styles
doc.StyleManager.RegisterStyle(".pageHeader",new Style(){Font = new Font(StandardFonts.TimesBold, 20)});
doc.StyleManager.RegisterStyle(".pageFooter",new Style(){Align = Align.Right});
doc.StyleManager.RegisterStyle("hr",new Style(){Height = 2, Margin = new Thickness(0,5,0,5)});
doc.StyleManager.RegisterStyle(".content",new Style(){Align = Align.Left, Display = Display.InlineBlock});

// fill the header section
doc.PageHeader.Class = "pageHeader";
doc.PageHeader.Add(new Image("logo"){Width = 100, Height = 50});
doc.PageHeader.Add(new TextBlock("This document is intended for internal use only"){TextIndent = 20});
doc.PageHeader.Add(new Hr());

// fill the footer section
doc.PageFooter.Class = "pageFooter";
doc.PageFooter.Add(new Hr());
doc.PageFooter.Add(new TextBlock((ctx)=>string.Format("Page {0} from&nbsp;",ctx.CurrentPage+1)));
doc.PageFooter.Add(new PageCount(3){Display = Display.Inline});

// add pages
for (int i = 0; i < 2; ++i)
{
    doc.Add(new TextBlock("This is header and footer generation pdf file.") {Class = "content"});
    doc.Add(new PageBreak());
}

// generate PDF
using (Stream stream = File.Create("out.pdf"))
{
    doc.Write(stream, resourceManager);
}

Process.Start("out.pdf");
' register doc's resources first
Dim resourceManager As New ResourceManager()
resourceManager.RegisterResource(New Apitron.PDF.Kit.FixedLayout.Resources.XObjects.Image("logo","../../data/logo.png"))

' create document
Dim doc As New FlowDocument() With {.Margin = New Thickness(10)}

' register styles
doc.StyleManager.RegisterStyle(".pageHeader",New Style() With {.Font = New Font(StandardFonts.TimesBold, 20)})
doc.StyleManager.RegisterStyle(".pageFooter",New Style() With {.Align = Align.Right})
doc.StyleManager.RegisterStyle("hr",New Style() With {
	.Height = 2,
	.Margin = New Thickness(0,5,0,5)
})
doc.StyleManager.RegisterStyle(".content",New Style() With {
	.Align = Align.Left,
	.Display = Display.InlineBlock
})

' fill the header section
doc.PageHeader.Class = "pageHeader"
doc.PageHeader.Add(New Image("logo") With {
	.Width = 100,
	.Height = 50
})
doc.PageHeader.Add(New TextBlock("This document is intended for internal use only") With {.TextIndent = 20})
doc.PageHeader.Add(New Hr())

' fill the footer section
doc.PageFooter.Class = "pageFooter"
doc.PageFooter.Add(New Hr())
doc.PageFooter.Add(New TextBlock(Function(ctx) String.Format("Page {0} from&nbsp;",ctx.CurrentPage+1)))
doc.PageFooter.Add(New PageCount(3) With {.Display = Display.Inline})

' add pages
For i As Integer = 0 To 1
	doc.Add(New TextBlock("This is header and footer generation pdf file.") With {.Class = "content"})
	doc.Add(New PageBreak())
Next i

' generate PDF
Using stream As Stream = File.Create("out.pdf")
	doc.Write(stream, resourceManager)
End Using

Process.Start("out.pdf")
VB   C#

El resultado es el siguiente:

Una comparación de IronPDF con Apitron PDF SDK .NET - Figura 7: Encabezado y pie de página de Apitron

Encabezado y pie de página de Apitron

5. Firmar digitalmente PDF

5.1. Utilización de IronPDF

Una de las funciones más importantes del procesamiento de PDF es la posibilidad de firmar digitalmente un documento PDF. IronPDF proporciona todas las herramientas necesarias para ello.

using IronPdf;

// Cryptographically sign an existing PDF in 1 line of code!
new IronPdf.Signing.PdfSignature("Iron.p12", "123456").SignPdfFile("any.pdf");

/***** Advanced example for more control *****/

// 1. Create a PDF
var Renderer = new IronPdf.ChromePdfRenderer();
var doc = Renderer.RenderHtmlAsPdf("<h1>Testing 2048 bit digital security</h1>");

// 2. Create a Signature.
// You may create a .pfx or .p12 PDF signing certificate using Adobe Acrobat Reader.

var signature = new IronPdf.Signing.PdfSignature("Iron.pfx", "123456");

// 3. Handwritten signature graphic
signature.LoadSignatureImageFromFile("handwriting.png");

// 4. Sign the PDF with the PdfSignature. Multiple signing certificates may be used
doc.SignPdfWithDigitalSignature(signature);

// 5. The PDF is not signed until saved to file, stream or byte array.
doc.SaveAs("signed.pdf");
using IronPdf;

// Cryptographically sign an existing PDF in 1 line of code!
new IronPdf.Signing.PdfSignature("Iron.p12", "123456").SignPdfFile("any.pdf");

/***** Advanced example for more control *****/

// 1. Create a PDF
var Renderer = new IronPdf.ChromePdfRenderer();
var doc = Renderer.RenderHtmlAsPdf("<h1>Testing 2048 bit digital security</h1>");

// 2. Create a Signature.
// You may create a .pfx or .p12 PDF signing certificate using Adobe Acrobat Reader.

var signature = new IronPdf.Signing.PdfSignature("Iron.pfx", "123456");

// 3. Handwritten signature graphic
signature.LoadSignatureImageFromFile("handwriting.png");

// 4. Sign the PDF with the PdfSignature. Multiple signing certificates may be used
doc.SignPdfWithDigitalSignature(signature);

// 5. The PDF is not signed until saved to file, stream or byte array.
doc.SaveAs("signed.pdf");
Imports IronPdf

' Cryptographically sign an existing PDF in 1 line of code!
Call (New IronPdf.Signing.PdfSignature("Iron.p12", "123456")).SignPdfFile("any.pdf")

'''*** Advanced example for more control ****

' 1. Create a PDF
Dim Renderer = New IronPdf.ChromePdfRenderer()
Dim doc = Renderer.RenderHtmlAsPdf("<h1>Testing 2048 bit digital security</h1>")

' 2. Create a Signature.
' You may create a .pfx or .p12 PDF signing certificate using Adobe Acrobat Reader.

Dim signature = New IronPdf.Signing.PdfSignature("Iron.pfx", "123456")

' 3. Handwritten signature graphic
signature.LoadSignatureImageFromFile("handwriting.png")

' 4. Sign the PDF with the PdfSignature. Multiple signing certificates may be used
doc.SignPdfWithDigitalSignature(signature)

' 5. The PDF is not signed until saved to file, stream or byte array.
doc.SaveAs("signed.pdf")
VB   C#

5.2 Utilización del kit PDF de Apitron

Estampar una firma en un PDF utilizando Apitron PDF Kit es un proceso largo y técnico.

static void Main(string [] args)
{
    string fileName = "signedTwice.pdf";

    using (Stream stream = File.Create(fileName))
   {
        FlowDocument doc = new FlowDocument(){Margin = new Thickness(10)};
        doc.Add(new TextBlock("Signed using Apitron PDF Kit for .NET"));
        doc.Write(stream,new ResourceManager());
   }

    // save
    Sign(fileName, "../../data/certs/JohnDoe.pfx", "password", "../../data/images/signatureImage.png", new Boundary(10, 750, 110, 800));
}

// Implementation of Sign Method
private static void Sign(string pathToDocument, string pathToCertificate, string password, string pathToSignatureImage, Boundary signatureViewLocation)
{
    // open existing document and sign once
    using (Stream inputStream = new FileStream(pathToDocument, FileMode.Open, FileAccess.ReadWrite))
    {
        using (FixedDocument doc = new FixedDocument(inputStream))
        {
            string imageResourceId = Guid.NewGuid().ToString("N");
            string signatureFieldId = Guid.NewGuid().ToString("N");

            // register signature image resource
            doc.ResourceManager.RegisterResource(new Image(imageResourceId, pathToSignatureImage));

            // create first signature field and initialize it using a stored certificate
            SignatureField signatureField = new SignatureField(signatureFieldId);
            using (Stream signatureDataStream = File.OpenRead(pathToCertificate))
            {
                signatureField.Signature = Signature.Create(new Pkcs12Store(signatureDataStream,password));
            }

            // add signature fields to the document
            doc.AcroForm.Fields.Add(signatureField);

            // create first signature view using the image resource
            SignatureFieldView signatureView = new SignatureFieldView(signatureField, signatureViewLocation);
            signatureView.ViewSettings.Graphic = Graphic.Image;
            signatureView.ViewSettings.GraphicResourceID = imageResourceId;
            signatureView.ViewSettings.Description = Description.None;

            // add views to page annotations collection
            doc.Pages [0].Annotations.Add(signatureView);

            // save as incremental update
            doc.Save();
        }
    }
}
static void Main(string [] args)
{
    string fileName = "signedTwice.pdf";

    using (Stream stream = File.Create(fileName))
   {
        FlowDocument doc = new FlowDocument(){Margin = new Thickness(10)};
        doc.Add(new TextBlock("Signed using Apitron PDF Kit for .NET"));
        doc.Write(stream,new ResourceManager());
   }

    // save
    Sign(fileName, "../../data/certs/JohnDoe.pfx", "password", "../../data/images/signatureImage.png", new Boundary(10, 750, 110, 800));
}

// Implementation of Sign Method
private static void Sign(string pathToDocument, string pathToCertificate, string password, string pathToSignatureImage, Boundary signatureViewLocation)
{
    // open existing document and sign once
    using (Stream inputStream = new FileStream(pathToDocument, FileMode.Open, FileAccess.ReadWrite))
    {
        using (FixedDocument doc = new FixedDocument(inputStream))
        {
            string imageResourceId = Guid.NewGuid().ToString("N");
            string signatureFieldId = Guid.NewGuid().ToString("N");

            // register signature image resource
            doc.ResourceManager.RegisterResource(new Image(imageResourceId, pathToSignatureImage));

            // create first signature field and initialize it using a stored certificate
            SignatureField signatureField = new SignatureField(signatureFieldId);
            using (Stream signatureDataStream = File.OpenRead(pathToCertificate))
            {
                signatureField.Signature = Signature.Create(new Pkcs12Store(signatureDataStream,password));
            }

            // add signature fields to the document
            doc.AcroForm.Fields.Add(signatureField);

            // create first signature view using the image resource
            SignatureFieldView signatureView = new SignatureFieldView(signatureField, signatureViewLocation);
            signatureView.ViewSettings.Graphic = Graphic.Image;
            signatureView.ViewSettings.GraphicResourceID = imageResourceId;
            signatureView.ViewSettings.Description = Description.None;

            // add views to page annotations collection
            doc.Pages [0].Annotations.Add(signatureView);

            // save as incremental update
            doc.Save();
        }
    }
}
Shared Sub Main(ByVal args() As String)
	Dim fileName As String = "signedTwice.pdf"

	Using stream As Stream = File.Create(fileName)
		Dim doc As New FlowDocument() With {.Margin = New Thickness(10)}
		doc.Add(New TextBlock("Signed using Apitron PDF Kit for .NET"))
		doc.Write(stream,New ResourceManager())
	End Using

	' save
	Sign(fileName, "../../data/certs/JohnDoe.pfx", "password", "../../data/images/signatureImage.png", New Boundary(10, 750, 110, 800))
End Sub

' Implementation of Sign Method
Private Shared Sub Sign(ByVal pathToDocument As String, ByVal pathToCertificate As String, ByVal password As String, ByVal pathToSignatureImage As String, ByVal signatureViewLocation As Boundary)
	' open existing document and sign once
	Using inputStream As Stream = New FileStream(pathToDocument, FileMode.Open, FileAccess.ReadWrite)
		Using doc As New FixedDocument(inputStream)
			Dim imageResourceId As String = Guid.NewGuid().ToString("N")
			Dim signatureFieldId As String = Guid.NewGuid().ToString("N")

			' register signature image resource
			doc.ResourceManager.RegisterResource(New Image(imageResourceId, pathToSignatureImage))

			' create first signature field and initialize it using a stored certificate
			Dim signatureField As New SignatureField(signatureFieldId)
			Using signatureDataStream As Stream = File.OpenRead(pathToCertificate)
				signatureField.Signature = Signature.Create(New Pkcs12Store(signatureDataStream,password))
			End Using

			' add signature fields to the document
			doc.AcroForm.Fields.Add(signatureField)

			' create first signature view using the image resource
			Dim signatureView As New SignatureFieldView(signatureField, signatureViewLocation)
			signatureView.ViewSettings.Graphic = Graphic.Image
			signatureView.ViewSettings.GraphicResourceID = imageResourceId
			signatureView.ViewSettings.Description = Description.None

			' add views to page annotations collection
			doc.Pages (0).Annotations.Add(signatureView)

			' save as incremental update
			doc.Save()
		End Using
	End Using
End Sub
VB   C#

El resultado es prácticamente el mismo para las bibliotecas. Puede ver claramente que IronPDF es más fácil y cómodo para manipular contenido PDF. El PDF de salida se firma con el certificado y la firma impresos en él.

6. Precios y licencias

Precios y licencias de IronPDF

IronPDF es una librería C# de uso gratuito para el desarrollo y puede ser licenciada para uso comercial en cualquier momento. Existen licencias de proyecto para desarrolladores individuales, agencias y organizaciones multinacionales, así como para SaaS y redistribución OEM. Todas las licencias ofrecen una garantía de devolución del dinero de 30 días, un año de soporte y actualizaciones, validez para desarrollo/establecimiento/producción y una licencia perpetua.(compra única).

El paquete Lite está disponible por $749 sin gastos recurrentes. Encontrará más información y ayuda para elegir la mejor licencia en la página webPágina de licencias de productos IronPDF.

Una comparación de IronPDF con Apitron PDF SDK .NET - Figura 8: Licenciamiento de IronPDF

Licencias IronPDF

Precios y licencias del kit PDF de Apitron

Actualmente se utilizan dos sistemas de licencias: Modern y Legacy. Si ya dispone de una licencia, el esquema de licencia heredado permanecerá activo para usted hasta que caduque su licencia. Después, tienes que ponerte en contacto con el servicio de atención al cliente para la transición. El régimen moderno de licencias sólo se le aplica si es un cliente nuevo.

En el régimen moderno, hay tres niveles de licencias:

  • Evaluación: periodo de evaluación de tres meses para utilizar un producto totalmente funcional. Sólo tienes que descargar el paquete de NuGet y empezar a desarrollar.
  • Comunidad - Utilice productos totalmente funcionales sin ningún coste en sus proyectos no comerciales. Se requiere autorización.
  • Comercial: cualquier caso de uso no descrito anteriormente. El precio depende del patrón de uso.

    Para más detalles sobre la compra, puedepóngase en contacto con el representante de ventas de Apitron.

Conclusión

La biblioteca IronPDF crea PDF perfectos a partir de tipos de documentos como HTML, JS, CSS, JPG, PNG, GIF y SVG. El motor Chromium ayuda a renderizar los archivos HTML o URLs para dar como resultado PDFs perfectos.

Apitron le permite crear PDF utilizando una API de diseño fijo, implementada para ser 100% compatible con la especificación PDF. Como método de generación de contenidos basado en el estilo y similar a HTML y CSS, esta API de diseño fijo le ofrece la posibilidad de crear informes, facturas, catálogos y mucho más sorprendentes en cuestión de minutos. También admite la creación de plantillas XML.

Los precios de las licencias de Apitron PDF no están disponibles en su sitio web. Debe ponerse en contacto con el servicio de asistencia y obtener un presupuesto basado en su uso. Por otro lado, IronPDF tiene un paquete de licencias muy claro que se muestra en su sitio web. Esto hace que IronPDF destaque entre sus competidores y permite a los usuarios elegir sabiamente en función de sus necesidades.

Con IronPDF, puede trabajar con archivos PDF más fácilmente que con Apitron PDF. IronPDF permite a sus usuarios escribir menos líneas de código para trabajos PDF exigentes. IronPDF ofrece varios métodos para producir PDF a partir de varios tipos de archivos, mientras que Apitron sólo puede convertir documentos XML en documentos PDF. En comparación con Apitron, en IronPDF se consigue un resultado perfecto sin añadir ninguna opción técnica.

Todos los clientes de Iron Software tienen la opción de adquirir los cinco productos de la empresa por el precio de dos de ellos. Prueba elprueba gratuita de 30 días de IronPDF para probar toda su funcionalidad. Adquiera el paquete completo de productos de Iron Softwareen IronSoftware.com.

< ANTERIOR
Generador HTML a PDF de Telerik vs IronPDF
SIGUIENTE >
Comparación entre IronPDF y GroupDocs

¿Listo para empezar? Versión: 2024.12 acaba de salir

Descarga gratuita de NuGet Descargas totales: 11,622,374 Ver licencias >