COMPARACIóN DE PRODUCTOS

Comparación entre IronPDF y Apitron PDF Kit

Actualizado 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.

Comparación de IronPDF con Apitron PDF SDK .NET - Figura 1: Acceso al Gestor de paquetes NuGet mediante 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.

A Comparison of IronPDF with Apitron PDF SDK .NET - Figure 2: Instalación de la biblioteca IronPDF mediante el gestor 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 directamente el sitio NuGet y descargando el paquete. Los pasos son:

  • Vaya a https://www.nuget.org/packages/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 aplicaciones .NET Core, podemos instalar Apitron utilizando NuGet Package Manager, o podemos descargar e instalar Apitron desde NuGet directamente.

  • Abra los paquetes NuGet en Visual Studio como hicimos en IronPDF.
  • Buscar Apitron.PDF.Kit.
  • Haga clic en instalar en su proyecto actual.
    A Comparison of IronPDF with Apitron PDF SDK .NET - Figure 3: Apitron PDF Kit Búsqueda

    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");

//  Cargar activos HTML externos: imágenes, CSS y JavaScript.
//  Una BasePath opcional 'C:\site\assets\' se establece como la ubicación del archivo para cargar los activos de
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");

//  Cargar activos HTML externos: imágenes, CSS y JavaScript.
//  Una BasePath opcional 'C:\site\assets\' se establece como la ubicación del archivo para cargar los activos de
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")

'  Cargar activos HTML externos: imágenes, CSS y JavaScript.
'  Una BasePath opcional 'C:\site\assets\' se establece como la ubicación del archivo para cargar los activos de
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:

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

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:

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

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();

//  Añadir una cabecera
Renderer.RenderingOptions.FirstPageNumber = 1; //  utilice 2 si se va a adjuntar una portada
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; //crear un espacio de 25 mm para la cabecera

//  Añade también un pie de página
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; //crear un espacio de 25 mm para el pie de página

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();

//  Añadir una cabecera
Renderer.RenderingOptions.FirstPageNumber = 1; //  utilice 2 si se va a adjuntar una portada
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; //crear un espacio de 25 mm para la cabecera

//  Añade también un pie de página
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; //crear un espacio de 25 mm para el pie de página

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()

'  Añadir una cabecera
Renderer.RenderingOptions.FirstPageNumber = 1 '  utilice 2 si se va a adjuntar una portada
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 'crear un espacio de 25 mm para la cabecera

'  Añade también un pie de página
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 'crear un espacio de 25 mm para el pie de página

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:

A Comparison of IronPDF with Apitron PDF SDK .NET - Figure 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 archivos PDF mediante la conversión de contenido en un formato de estructura XML a 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:

//  registrar primero los recursos del doc
ResourceManager resourceManager = new ResourceManager();
resourceManager.RegisterResource(new Apitron.PDF.Kit.FixedLayout.Resources.XObjects.Image("logo","../../data/logo.png"));

//  crear documento
FlowDocument doc = new FlowDocument(){Margin = new Thickness(10)};

//  estilos de registro
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});

//  rellenar la sección de cabecera
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());

//  rellenar la sección de pie de página
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});

//  añadir páginas
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());
}

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

Process.Start("out.pdf");
//  registrar primero los recursos del doc
ResourceManager resourceManager = new ResourceManager();
resourceManager.RegisterResource(new Apitron.PDF.Kit.FixedLayout.Resources.XObjects.Image("logo","../../data/logo.png"));

//  crear documento
FlowDocument doc = new FlowDocument(){Margin = new Thickness(10)};

//  estilos de registro
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});

//  rellenar la sección de cabecera
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());

//  rellenar la sección de pie de página
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});

//  añadir páginas
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());
}

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

Process.Start("out.pdf");
'  registrar primero los recursos del doc
Dim resourceManager As New ResourceManager()
resourceManager.RegisterResource(New Apitron.PDF.Kit.FixedLayout.Resources.XObjects.Image("logo","../../data/logo.png"))

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

'  estilos de registro
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
})

'  rellenar la sección de cabecera
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())

'  rellenar la sección de pie de página
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})

'  añadir páginas
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

'  generar 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:

A Comparison of IronPDF with Apitron PDF SDK .NET - Figure 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;

//  ¡Firme criptográficamente un PDF existente en 1 línea de código!
new IronPdf.Signing.PdfSignature("Iron.p12", "123456").SignPdfFile("any.pdf");

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

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

//  2. Crear una firma.
//  Puede crear un certificado de firma PDF .pfx o .p12 con Adobe Acrobat Reader.

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

//  3. Gráfico de firma manuscrita
signature.LoadSignatureImageFromFile("handwriting.png");

//  4. Firme el PDF con PdfSignature. Se pueden utilizar varios certificados de firma
doc.SignPdfWithDigitalSignature(signature);

//  5. El PDF no se firma hasta que se guarda en un archivo, flujo o matriz de bytes.
doc.SaveAs("signed.pdf");
using IronPdf;

//  ¡Firme criptográficamente un PDF existente en 1 línea de código!
new IronPdf.Signing.PdfSignature("Iron.p12", "123456").SignPdfFile("any.pdf");

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

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

//  2. Crear una firma.
//  Puede crear un certificado de firma PDF .pfx o .p12 con Adobe Acrobat Reader.

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

//  3. Gráfico de firma manuscrita
signature.LoadSignatureImageFromFile("handwriting.png");

//  4. Firme el PDF con PdfSignature. Se pueden utilizar varios certificados de firma
doc.SignPdfWithDigitalSignature(signature);

//  5. El PDF no se firma hasta que se guarda en un archivo, flujo o matriz de bytes.
doc.SaveAs("signed.pdf");
Imports IronPdf

'  ¡Firme criptográficamente un PDF existente en 1 línea de código!
Call (New IronPdf.Signing.PdfSignature("Iron.p12", "123456")).SignPdfFile("any.pdf")

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

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

'  2. Crear una firma.
'  Puede crear un certificado de firma PDF .pfx o .p12 con Adobe Acrobat Reader.

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

'  3. Gráfico de firma manuscrita
signature.LoadSignatureImageFromFile("handwriting.png")

'  4. Firme el PDF con PdfSignature. Se pueden utilizar varios certificados de firma
doc.SignPdfWithDigitalSignature(signature)

'  5. El PDF no se firma hasta que se guarda en un archivo, flujo o matriz de bytes.
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());
   }

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

//  Aplicación del método de los signos
private static void Sign(string pathToDocument, string pathToCertificate, string password, string pathToSignatureImage, Boundary signatureViewLocation)
{
    //  abrir el documento existente y firmar una vez
    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");

            //  registrar recurso de imagen de firma
            doc.ResourceManager.RegisterResource(new Image(imageResourceId, pathToSignatureImage));

            //  crear el primer campo de firma e inicializarlo utilizando un certificado almacenado
            SignatureField signatureField = new SignatureField(signatureFieldId);
            using (Stream signatureDataStream = File.OpenRead(pathToCertificate))
            {
                signatureField.Signature = Signature.Create(new Pkcs12Store(signatureDataStream,password));
            }

            //  añadir campos de firma al documento
            doc.AcroForm.Fields.Add(signatureField);

            //  crear la primera vista de firma utilizando el recurso de imagen
            SignatureFieldView signatureView = new SignatureFieldView(signatureField, signatureViewLocation);
            signatureView.ViewSettings.Graphic = Graphic.Image;
            signatureView.ViewSettings.GraphicResourceID = imageResourceId;
            signatureView.ViewSettings.Description = Description.None;

            //  añadir vistas a la colección de anotaciones de página
            doc.Pages [0].Annotations.Add(signatureView);

            //  guardar como actualización incremental
            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());
   }

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

//  Aplicación del método de los signos
private static void Sign(string pathToDocument, string pathToCertificate, string password, string pathToSignatureImage, Boundary signatureViewLocation)
{
    //  abrir el documento existente y firmar una vez
    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");

            //  registrar recurso de imagen de firma
            doc.ResourceManager.RegisterResource(new Image(imageResourceId, pathToSignatureImage));

            //  crear el primer campo de firma e inicializarlo utilizando un certificado almacenado
            SignatureField signatureField = new SignatureField(signatureFieldId);
            using (Stream signatureDataStream = File.OpenRead(pathToCertificate))
            {
                signatureField.Signature = Signature.Create(new Pkcs12Store(signatureDataStream,password));
            }

            //  añadir campos de firma al documento
            doc.AcroForm.Fields.Add(signatureField);

            //  crear la primera vista de firma utilizando el recurso de imagen
            SignatureFieldView signatureView = new SignatureFieldView(signatureField, signatureViewLocation);
            signatureView.ViewSettings.Graphic = Graphic.Image;
            signatureView.ViewSettings.GraphicResourceID = imageResourceId;
            signatureView.ViewSettings.Description = Description.None;

            //  añadir vistas a la colección de anotaciones de página
            doc.Pages [0].Annotations.Add(signatureView);

            //  guardar como actualización incremental
            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

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

'  Aplicación del método de los signos
Private Shared Sub Sign(ByVal pathToDocument As String, ByVal pathToCertificate As String, ByVal password As String, ByVal pathToSignatureImage As String, ByVal signatureViewLocation As Boundary)
	'  abrir el documento existente y firmar una vez
	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")

			'  registrar recurso de imagen de firma
			doc.ResourceManager.RegisterResource(New Image(imageResourceId, pathToSignatureImage))

			'  crear el primer campo de firma e inicializarlo utilizando un certificado almacenado
			Dim signatureField As New SignatureField(signatureFieldId)
			Using signatureDataStream As Stream = File.OpenRead(pathToCertificate)
				signatureField.Signature = Signature.Create(New Pkcs12Store(signatureDataStream,password))
			End Using

			'  añadir campos de firma al documento
			doc.AcroForm.Fields.Add(signatureField)

			'  crear la primera vista de firma utilizando el recurso de imagen
			Dim signatureView As New SignatureFieldView(signatureField, signatureViewLocation)
			signatureView.ViewSettings.Graphic = Graphic.Image
			signatureView.ViewSettings.GraphicResourceID = imageResourceId
			signatureView.ViewSettings.Description = Description.None

			'  añadir vistas a la colección de anotaciones de página
			doc.Pages (0).Annotations.Add(signatureView)

			'  guardar como actualización incremental
			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 web página de licencias de productos.

Comparación de IronPDF con Apitron PDF SDK .NET - Figura 8: Licencias 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 un producto totalmente funcional sin coste alguno 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, puede pó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 el prueba gratuita de 30 días para probar toda su funcionalidad. Adquiera el paquete completo de productos de Iron Software aquí.

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

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

Descarga gratuita de NuGet Descargas totales: 9,974,197 Ver licencias >
123