Saltar al pie de página
COMPARACIONES DE PRODUCTOS

Una Comparación entre IronPDF y Apitron PDF Kit

En C#, trabajar con archivos PDF puede ser un desafío para los desarrolladores. Hay muchos factores a considerar al crear contenido para dichos archivos, y más aún al convertir contenido de diferentes formatos a PDF. La automatización es ahora la clave para 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.

Dos bibliotecas PDF se compararán para .NET y .NET Core en esta publicación de blog. Estas dos bibliotecas son:

  • La biblioteca IronPDF
  • El Apitron PDF Kit

IronPDF y Apitron PDF Kit son dos bibliotecas que proporcionan funciones de manipulación de PDF para .NET y .NET Core. Ambas se pueden utilizar para tareas de conversión y manipulación de campos de documentos. Ambas también pueden crear marcadores. La siguiente pregunta es decidir cuál biblioteca C# PDF .NET es mejor para nuestros proyectos .NET. Este artículo de comparación te ayudará a decidir entre estas dos bibliotecas PDF.

Primero, echemos un vistazo a lo que tienen para ofrecer las dos bibliotecas, y luego pasemos a la comparación en sí.

La biblioteca Apitron PDF Kit y sus características

Apitron PDF Kit es un componente .NET que te permite manipular o convertir archivos PDF de la forma que desees. Puedes agregar imágenes, dibujos y textos, firmar documentos y mucho más. También puedes editar contenido existente. El componente .NET de Apitron PDF Kit se puede utilizar para crear aplicaciones móviles, de escritorio, web, Windows y en la nube en múltiples plataformas.

Usando este SDK PDF, podrás:

  • Extraer, modificar y agregar gráficos (texto, imágenes, dibujos)
  • Dividir o fusionar documentos PDF
  • Llenar o crear formularios PDF protegidos con contraseña, soporte FDF
  • Crear documentos PDF de varias capas con grupos de contenido opcionales (OCG)
  • Agregar o eliminar campos de un documento
  • Usar texto de derecha a izquierda o bidireccional para crear contenido de página
  • Examinar recursos dentro de un documento: fuentes definidas, archivos incrustados
  • Firmar digitalmente y comprobar firmas existentes en documentos PDF

Las características principales de IronPDF

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

IronPDF utiliza el motor Chromium de .NET para cambiar páginas HTML (en código o en forma de URL) a archivos PDF. No hay absolutamente ninguna necesidad de usar APIs complejas para posicionar objetos de navegación o para diseñar PDFs desde HTML. IronPDF admite documentos web estándar, incluidos HTML, ASPX, JS, CSS e imágenes.

IronPDF se puede crear usando HTML5, CSS, JS e imágenes. Un PDF puede editarse fácilmente, estamparse y añadirse con encabezados y pies de página. También facilita la lectura de texto PDF y la extracción de gráficos.

Las características destacadas de IronPDF incluyen:

  • Creación de documentos PDF usando HTML4/5, CSS y JavaScript
  • Carga de URL con credenciales de inicio de sesión de red personalizadas, agentes de usuario, proxies, cookies, encabezados HTTP y variables de formulario (permitiendo iniciar sesión detrás de formularios de inicio de sesión HTML)
  • Lectura y completado de campos de formulario PDF
  • Extracción de texto y gráficos de PDFs
  • Actualización de páginas PDF con nuevo contenido HTML
  • Creación de encabezados y pies de página basados en texto o en HTML
  • Fusión y separación de contenido de documentos PDF
  • Conversión de formularios web ASP.NET en PDFs imprimibles
  • Impresión de archivos PDF sin el software Adobe Acrobat

IronPDF está disponible en casi todos los sistemas operativos y marcos compatibles con C#, incluyendo lo siguiente:

  • .NET Core 2.1, 3.0, 3.1, .NET 6 & 5
  • Cumplimiento de .NET Standard 2.0 para compatibilidad universal
  • Azure, AWS, Docker, Linux, Windows

El resto del artículo es el siguiente:

  1. Instalación de IronPDF
  2. Instalación del Apitron PDF Kit
  3. Crear un documento PDF
  4. Crear encabezado y pie de página en PDF
  5. Firma digital de PDF
  6. Precios y licencias
  7. Conclusión

1. Instalación de IronPDF

Hay cuatro métodos para descargar e instalar la biblioteca IronPDF. Estos son los siguientes:

  1. Usar el Administrador de Paquetes NuGet
  2. El Símbolo del Sistema del Desarrollador
  3. Descargar el Paquete NuGet directamente
  4. Descargar la biblioteca .DLL de IronPDF

1.1. Usar el Administrador de Paquetes NuGet

Para instalar IronPDF, simplemente haz clic derecho sobre tu proyecto en el Explorador de Soluciones. Esto abrirá el Administrador de Paquetes NuGet.

A Comparison of IronPDF with Apitron PDF SDK .NET - Figure 1: Accessing the NuGet Package Manager using the Solution Explorer

Accediendo al Administrador de Paquetes NuGet usando el Explorador de Soluciones

Una vez seleccionada, navega por el paquete IronPDF e instálalo, como se muestra en la captura de pantalla a continuación.

A Comparison of IronPDF with Apitron PDF SDK .NET - Figure 2: Installing the IronPDF library using the NuGet Package Manager

Instalación de la biblioteca IronPDF usando el Administrador de Paquetes NuGet

1.2. Usar el Símbolo del Sistema del Desarrollador

También puedes instalar IronPDF a través del Símbolo del Sistema del Desarrollador.

  • Abre el Símbolo del Sistema del Desarrollador --- generalmente se encuentra en la carpeta de Visual Studio
  • Escribe el siguiente comando:
Install-Package IronPdf
  • Presiona Enter
  • Esto descargará e instalará el paquete
  • Recarga tu proyecto y comienza a usarlo

1.3. Descargar el Paquete NuGet Directamente

IronPDF también se puede instalar visitando el sitio del Paquete NuGet de IronPDF directamente y descargando el paquete. Los pasos son:

  • Navega a Paquete NuGet de IronPDF
  • Selecciona Descargar Paquete
  • Haz doble clic en el paquete descargado
  • El paquete se instalará
  • Recarga tu proyecto de Visual Studio y comienza a usarlo

IronPDF está descargado y listo para usar. Sin embargo, antes de eso, deberíamos instalar la biblioteca Apitron PDF.

2. Instalación del Apitron PDF Kit

Para aplicaciones .NET Core, podemos instalar Apitron usando el Administrador de Paquetes NuGet, o podemos descargar e instalar Apitron desde el sitio web Apitron PDF Kit NuGet directamente.

  • Abre los paquetes NuGet en Visual Studio como lo hicimos en IronPDF.
  • Busca Apitron.PDF.Kit.
  • Haz clic en instalar en tu proyecto actual.
A Comparison of IronPDF with Apitron PDF SDK .NET - Figure 3: Apitron PDF Kit Search

Búsqueda de Apitron PDF Kit

También puedes usar la Consola del Administrador de Paquetes NuGet para instalar Apitron. Sigue el paso "Usar el Símbolo del Sistema del Desarrollador" como se mencionó en IronPDF y escribe el siguiente comando:

Install-Package Apitron.PDF.Kit

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

Agrega 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
$vbLabelText   $csharpLabel

Ahora, pasemos a la comparación entre IronPDF y Apitron PDF.

3. Creación de Documento PDF

3.1. Usando IronPDF

IronPDF tiene múltiples métodos para crear PDFs. Echemos un vistazo a dos importantes.

URL existente a PDF

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

var Renderer = new IronPdf.ChromePdfRenderer();
// Render a PDF from an existing URL
using var Pdf = Renderer.RenderUrlAsPdf("https://ironpdf.com/");
// Save the PDF to a file
Pdf.SaveAs("url.pdf");
var Renderer = new IronPdf.ChromePdfRenderer();
// Render a PDF from an existing URL
using var Pdf = Renderer.RenderUrlAsPdf("https://ironpdf.com/");
// Save the PDF to a file
Pdf.SaveAs("url.pdf");
Dim Renderer = New IronPdf.ChromePdfRenderer()
' Render a PDF from an existing URL
Dim Pdf = Renderer.RenderUrlAsPdf("https://ironpdf.com/")
' Save the PDF to a file
Pdf.SaveAs("url.pdf")
$vbLabelText   $csharpLabel

Cadena de entrada HTML a PDF

El código a continuación explica cómo renderizar un documento PDF a partir de una cadena HTML. Puedes usar solo HTML, o combinarlo con CSS, imágenes y JavaScript.

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

// Load external HTML assets like images, CSS, and JavaScript
// Set the optional BasePath 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();
// Render a PDF from a simple HTML string
using var PDF = Renderer.RenderHtmlAsPdf("<h1>Html with CSS and Images</h1>");
PDF.SaveAs("pixel-perfect.pdf");

// Load external HTML assets like images, CSS, and JavaScript
// Set the optional BasePath 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()
' Render a PDF from a simple HTML string
Dim PDF = Renderer.RenderHtmlAsPdf("<h1>Html with CSS and Images</h1>")
PDF.SaveAs("pixel-perfect.pdf")

' Load external HTML assets like images, CSS, and JavaScript
' Set the optional BasePath 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")
$vbLabelText   $csharpLabel

El resultado es el siguiente:

A Comparison of IronPDF with Apitron PDF SDK .NET - Figure 4: IronPDF Generate PDF from URL and HTML CSS String

IronPDF Genera PDF desde URL y Cadena HTML CSS

3.2. Usando Apitron PDF Kit

Apitron PDF no proporciona facilidad para convertir una URL o HTML a PDF. Permite convertir PDF a HTML. Sin embargo, también convierte archivo 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 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:

// Use Apitron's FlowDocument to convert XML to PDF
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);
}
// Use Apitron's FlowDocument to convert XML to PDF
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);
}
' Use Apitron's FlowDocument to convert XML to PDF
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
$vbLabelText   $csharpLabel

El resultado es el siguiente:

A Comparison of IronPDF with Apitron PDF SDK .NET - Figure 5: Apitron PDF Document

Documento PDF de Apitron

Si comparamos el resultado de IronPDF y Apitron, podemos ver claramente que IronPDF crea documentos impresionantes usando renderizado HTML y sin siquiera escalar el tamaño de la imagen. Por otro lado, Apitron da un resultado similar a IronPDF pero solo si el archivo XML tiene estilos registrados.

4. Agregar Encabezados y Pies de Página a Documentos PDF

4.1. Usando IronPDF

Agregar encabezados y pies de página es bastante fácil con IronPDF. IronPDF te permite agregar números de página y saltos de página, adjuntar una portada, márgenes, etc.

El código para agregar encabezados y pies de página es el siguiente:

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")
$vbLabelText   $csharpLabel

El resultado es el siguiente:

A Comparison of IronPDF with Apitron PDF SDK .NET - Figure 6: IronPDF Header and Footer

Encabezado y Pie de Página de IronPDF

4.2. Usando Apitron PDF Kit

Apitron PDF Kit crea PDFs convirtiendo contenido en un formato de estructura XML en un PDF. En Apitron PDF Kit, los encabezados y pies de página se pueden agregar usando las propiedades PageHeader y PageFooter. El código para hacer esto es el siguiente:

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

// Create the 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 document resources first
ResourceManager resourceManager = new ResourceManager();
resourceManager.RegisterResource(new Apitron.PDF.Kit.FixedLayout.Resources.XObjects.Image("logo", "../../data/logo.png"));

// Create the 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 document resources first
Dim resourceManager As New ResourceManager()
resourceManager.RegisterResource(New Apitron.PDF.Kit.FixedLayout.Resources.XObjects.Image("logo", "../../data/logo.png"))

' Create the 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")
$vbLabelText   $csharpLabel

El resultado es el siguiente:

A Comparison of IronPDF with Apitron PDF SDK .NET - Figure 7: Apitron Header and Footer

Encabezado y Pie de Página de Apitron

5. Firma digital de PDF

5.1. Usando IronPDF

Una de las características más importantes del procesamiento PDF es la capacidad de firmar un documento PDF digitalmente. IronPDF proporciona todas las herramientas necesarias para hacerlo.

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")
$vbLabelText   $csharpLabel

5.2 Usando Apitron PDF Kit

Mostrar una firma en un PDF usando Apitron PDF Kit es un proceso tanto largo como 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
$vbLabelText   $csharpLabel

El resultado es bastante similar para las bibliotecas. Puedes ver claramente que IronPDF es más fácil y conveniente para manipular contenido de PDF. El PDF de salida está firmado con el certificado y la firma impresa en el mismo.

Usando Bootstrap 5 con IronPDF para Galerías de Portafolios

El motor de renderizado Chrome V8 de IronPDF admite completamente los componentes modernos de Bootstrap 5, lo que permite generar documentos PDF visualmente impresionantes con galerías de portafolios profesionales. Este ejemplo demuestra diseños de cuadrícula, efectos de desplazamiento, superposiciones de gradientes y distintivos de categoría, características que serían desafiantes de implementar con bibliotecas PDF tradicionales como el SDK PDF de Apitron.

using IronPdf;

var renderer = new ChromePdfRenderer();

string portfolioGallery = @"
<!DOCTYPE html>
<html>
<head>
    <meta charset='utf-8'>
    <link href='https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css' rel='stylesheet'>
    <style>
        .gallery-item {
            position: relative;
            overflow: hidden;
            border-radius: 10px;
            box-shadow: 0 4px 6px rgba(0,0,0,0.1);
        }
        .gallery-item img {
            width: 100%;
            height: 250px;
            object-fit: cover;
            transition: transform 0.3s;
        }
        .gallery-item:hover img {
            transform: scale(1.1);
        }
        .gallery-overlay {
            position: absolute;
            bottom: 0;
            left: 0;
            right: 0;
            background: linear-gradient(to top, rgba(0,0,0,0.8), transparent);
            padding: 20px;
            color: white;
        }
        .category-badge {
            position: absolute;
            top: 10px;
            right: 10px;
        }
        @media print {
            .gallery-item { page-break-inside: avoid; }
        }
    </style>
</head>
<body>
    <div class='container py-5'>
        <div class='text-center mb-5'>
            <h1 class='display-4'>Design Portfolio</h1>
            <p class='lead text-muted'>Showcase of PDF Document Designs</p>
        </div>

        <div class='row mb-4'>
            <div class='col-12'>
                <div class='btn-group' role='group'>
                    <button class='btn btn-primary'>All Projects</button>
                    <button class='btn btn-outline-primary'>Invoices</button>
                    <button class='btn btn-outline-primary'>Reports</button>
                    <button class='btn btn-outline-primary'>Forms</button>
                    <button class='btn btn-outline-primary'>Certificates</button>
                </div>
            </div>
        </div>

        <div class='row g-4'>
            <div class='col-md-4'>
                <div class='gallery-item'>
                    <span class='badge bg-primary category-badge'>Invoice</span>
                    <svg width='100%' height='250' style='background: linear-gradient(135deg, #667eea 0%, #764ba2 100%)'>
                        <text x='50%' y='50%' text-anchor='middle' fill='white' font-size='48' opacity='0.3'>📄</text>
                    </svg>
                    <div class='gallery-overlay'>
                        <h5 class='mb-1'>Professional Invoice Template</h5>
                        <small>Corporate billing with itemized details</small>
                    </div>
                </div>
            </div>

            <div class='col-md-4'>
                <div class='gallery-item'>
                    <span class='badge bg-success category-badge'>Report</span>
                    <svg width='100%' height='250' style='background: linear-gradient(135deg, #f093fb 0%, #f5576c 100%)'>
                        <text x='50%' y='50%' text-anchor='middle' fill='white' font-size='48' opacity='0.3'>📊</text>
                    </svg>
                    <div class='gallery-overlay'>
                        <h5 class='mb-1'>Analytics Dashboard Report</h5>
                        <small>Data visualization and metrics</small>
                    </div>
                </div>
            </div>

            <div class='col-md-4'>
                <div class='gallery-item'>
                    <span class='badge bg-warning category-badge'>Certificate</span>
                    <svg width='100%' height='250' style='background: linear-gradient(135deg, #4facfe 0%, #00f2fe 100%)'>
                        <text x='50%' y='50%' text-anchor='middle' fill='white' font-size='48' opacity='0.3'>🏆</text>
                    </svg>
                    <div class='gallery-overlay'>
                        <h5 class='mb-1'>Award Certificate</h5>
                        <small>Professional achievement recognition</small>
                    </div>
                </div>
            </div>

            <div class='col-md-4'>
                <div class='gallery-item'>
                    <span class='badge bg-info category-badge'>Form</span>
                    <svg width='100%' height='250' style='background: linear-gradient(135deg, #fa709a 0%, #fee140 100%)'>
                        <text x='50%' y='50%' text-anchor='middle' fill='white' font-size='48' opacity='0.3'>📝</text>
                    </svg>
                    <div class='gallery-overlay'>
                        <h5 class='mb-1'>Application Form</h5>
                        <small>Multi-page data collection</small>
                    </div>
                </div>
            </div>

            <div class='col-md-4'>
                <div class='gallery-item'>
                    <span class='badge bg-danger category-badge'>Invoice</span>
                    <svg width='100%' height='250' style='background: linear-gradient(135deg, #30cfd0 0%, #330867 100%)'>
                        <text x='50%' y='50%' text-anchor='middle' fill='white' font-size='48' opacity='0.3'>💰</text>
                    </svg>
                    <div class='gallery-overlay'>
                        <h5 class='mb-1'>Payment Receipt</h5>
                        <small>Transaction confirmation document</small>
                    </div>
                </div>
            </div>

            <div class='col-md-4'>
                <div class='gallery-item'>
                    <span class='badge bg-secondary category-badge'>Report</span>
                    <svg width='100%' height='250' style='background: linear-gradient(135deg, #a8edea 0%, #fed6e3 100%)'>
                        <text x='50%' y='50%' text-anchor='middle' fill='white' font-size='48' opacity='0.3'>📈</text>
                    </svg>
                    <div class='gallery-overlay'>
                        <h5 class='mb-1'>Financial Statement</h5>
                        <small>Quarterly performance overview</small>
                    </div>
                </div>
            </div>
        </div>

        <div class='text-center mt-5'>
            <p class='text-muted'>All templates rendered with IronPDF's Chromium engine</p>
            <div class='d-flex justify-content-center gap-2'>
                <span class='badge bg-primary'>Bootstrap 5</span>
                <span class='badge bg-success'>Responsive</span>
                <span class='badge bg-info'>Print-Ready</span>
            </div>
        </div>
    </div>
</body>
</html>";

var pdf = renderer.RenderHtmlAsPdf(portfolioGallery);
pdf.SaveAs("portfolio-gallery.pdf");
using IronPdf;

var renderer = new ChromePdfRenderer();

string portfolioGallery = @"
<!DOCTYPE html>
<html>
<head>
    <meta charset='utf-8'>
    <link href='https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css' rel='stylesheet'>
    <style>
        .gallery-item {
            position: relative;
            overflow: hidden;
            border-radius: 10px;
            box-shadow: 0 4px 6px rgba(0,0,0,0.1);
        }
        .gallery-item img {
            width: 100%;
            height: 250px;
            object-fit: cover;
            transition: transform 0.3s;
        }
        .gallery-item:hover img {
            transform: scale(1.1);
        }
        .gallery-overlay {
            position: absolute;
            bottom: 0;
            left: 0;
            right: 0;
            background: linear-gradient(to top, rgba(0,0,0,0.8), transparent);
            padding: 20px;
            color: white;
        }
        .category-badge {
            position: absolute;
            top: 10px;
            right: 10px;
        }
        @media print {
            .gallery-item { page-break-inside: avoid; }
        }
    </style>
</head>
<body>
    <div class='container py-5'>
        <div class='text-center mb-5'>
            <h1 class='display-4'>Design Portfolio</h1>
            <p class='lead text-muted'>Showcase of PDF Document Designs</p>
        </div>

        <div class='row mb-4'>
            <div class='col-12'>
                <div class='btn-group' role='group'>
                    <button class='btn btn-primary'>All Projects</button>
                    <button class='btn btn-outline-primary'>Invoices</button>
                    <button class='btn btn-outline-primary'>Reports</button>
                    <button class='btn btn-outline-primary'>Forms</button>
                    <button class='btn btn-outline-primary'>Certificates</button>
                </div>
            </div>
        </div>

        <div class='row g-4'>
            <div class='col-md-4'>
                <div class='gallery-item'>
                    <span class='badge bg-primary category-badge'>Invoice</span>
                    <svg width='100%' height='250' style='background: linear-gradient(135deg, #667eea 0%, #764ba2 100%)'>
                        <text x='50%' y='50%' text-anchor='middle' fill='white' font-size='48' opacity='0.3'>📄</text>
                    </svg>
                    <div class='gallery-overlay'>
                        <h5 class='mb-1'>Professional Invoice Template</h5>
                        <small>Corporate billing with itemized details</small>
                    </div>
                </div>
            </div>

            <div class='col-md-4'>
                <div class='gallery-item'>
                    <span class='badge bg-success category-badge'>Report</span>
                    <svg width='100%' height='250' style='background: linear-gradient(135deg, #f093fb 0%, #f5576c 100%)'>
                        <text x='50%' y='50%' text-anchor='middle' fill='white' font-size='48' opacity='0.3'>📊</text>
                    </svg>
                    <div class='gallery-overlay'>
                        <h5 class='mb-1'>Analytics Dashboard Report</h5>
                        <small>Data visualization and metrics</small>
                    </div>
                </div>
            </div>

            <div class='col-md-4'>
                <div class='gallery-item'>
                    <span class='badge bg-warning category-badge'>Certificate</span>
                    <svg width='100%' height='250' style='background: linear-gradient(135deg, #4facfe 0%, #00f2fe 100%)'>
                        <text x='50%' y='50%' text-anchor='middle' fill='white' font-size='48' opacity='0.3'>🏆</text>
                    </svg>
                    <div class='gallery-overlay'>
                        <h5 class='mb-1'>Award Certificate</h5>
                        <small>Professional achievement recognition</small>
                    </div>
                </div>
            </div>

            <div class='col-md-4'>
                <div class='gallery-item'>
                    <span class='badge bg-info category-badge'>Form</span>
                    <svg width='100%' height='250' style='background: linear-gradient(135deg, #fa709a 0%, #fee140 100%)'>
                        <text x='50%' y='50%' text-anchor='middle' fill='white' font-size='48' opacity='0.3'>📝</text>
                    </svg>
                    <div class='gallery-overlay'>
                        <h5 class='mb-1'>Application Form</h5>
                        <small>Multi-page data collection</small>
                    </div>
                </div>
            </div>

            <div class='col-md-4'>
                <div class='gallery-item'>
                    <span class='badge bg-danger category-badge'>Invoice</span>
                    <svg width='100%' height='250' style='background: linear-gradient(135deg, #30cfd0 0%, #330867 100%)'>
                        <text x='50%' y='50%' text-anchor='middle' fill='white' font-size='48' opacity='0.3'>💰</text>
                    </svg>
                    <div class='gallery-overlay'>
                        <h5 class='mb-1'>Payment Receipt</h5>
                        <small>Transaction confirmation document</small>
                    </div>
                </div>
            </div>

            <div class='col-md-4'>
                <div class='gallery-item'>
                    <span class='badge bg-secondary category-badge'>Report</span>
                    <svg width='100%' height='250' style='background: linear-gradient(135deg, #a8edea 0%, #fed6e3 100%)'>
                        <text x='50%' y='50%' text-anchor='middle' fill='white' font-size='48' opacity='0.3'>📈</text>
                    </svg>
                    <div class='gallery-overlay'>
                        <h5 class='mb-1'>Financial Statement</h5>
                        <small>Quarterly performance overview</small>
                    </div>
                </div>
            </div>
        </div>

        <div class='text-center mt-5'>
            <p class='text-muted'>All templates rendered with IronPDF's Chromium engine</p>
            <div class='d-flex justify-content-center gap-2'>
                <span class='badge bg-primary'>Bootstrap 5</span>
                <span class='badge bg-success'>Responsive</span>
                <span class='badge bg-info'>Print-Ready</span>
            </div>
        </div>
    </div>
</body>
</html>";

var pdf = renderer.RenderHtmlAsPdf(portfolioGallery);
pdf.SaveAs("portfolio-gallery.pdf");
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Este código genera un portafolio PDF profesional con un diseño de cuadrícula receptiva, distintivos visuales de categoría, superposiciones de gradientes y efectos de desplazamiento. El motor de renderizado de Chrome conserva todos los estilos de Bootstrap, los diseños de CSS Grid y las propiedades CSS personalizadas, capacidades que las bibliotecas PDF tradicionales luchan por replicar.

Ventajas Clave vs Apitron PDF SDK:

  • Soporte nativo de Bootstrap 5 sin conversión
  • Los diseños de CSS Grid y Flexbox se renderizan perfectamente
  • Fondos de gradiente y efectos modernos de CSS
  • Código más simple con una salida de mayor calidad

Para una guía completa sobre generación de PDF con Bootstrap, consulta Guía de HTML a PDF Bootstrap.

6. Precios y licencias

  • No se requieren llamadas API ni configuración de plantillas

IronPDF es una biblioteca de C# que es gratuita para usar en desarrollo y se puede licenciar para uso comercial en cualquier momento. Las licencias de proyecto para desarrolladores individuales, agencias y organizaciones multinacionales, así como para redistribución SaaS y OEM, están todas accesibles. Todas las licencias ofrecen una garantía de devolución de dinero de 30 días, un año de soporte y actualizaciones, validez para desarrollo/producción/escenarios y una licencia perpetua (compra única).

El paquete Lite está disponible por $799 sin gastos recurrentes. Más detalles y asistencia para elegir la mejor licencia están disponibles en la página de licencias del producto IronPDF.

A Comparison of IronPDF with Apitron PDF SDK .NET - Figure 8: IronPDF Licensing

Licencias de IronPDF

Precios y Licencias de Apitron PDF Kit

Actualmente hay dos esquemas de licencias en uso: Moderno y Legacy. Si ya tienes una licencia, entonces el esquema de licencia legacy permanece activo para ti hasta que tu licencia expire. Después, debes contactar al soporte técnico para la transición. El esquema de licencias moderno se aplica a ti solo si eres un nuevo cliente.

Bajo el esquema moderno, hay tres niveles de licencias:

  • Evaluación - periodo de tres meses de evaluación para usar un producto completamente funcional. Simplemente descarga el paquete desde NuGet y comienza a desarrollar. - Comunidad - Usa productos completamente funcionales sin ninguna tarifa en tus proyectos no comerciales. Se requiere aprobación.
  • Comercial - cualquier caso de uso no descrito anteriormente. El precio depende del patrón de uso. La biblioteca IronPDF crea PDFs perfectos a nivel de píxeles 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 te permite crear PDF usando una API de diseño fijo, implementada para ser 100% compatible con la especificación PDF.

Conclusión

Como un método de generación de contenido impulsado por estilos que es similar a HTML y CSS, esta API de diseño fijo te brinda la capacidad de crear impresionantes informes, facturas, catálogos y más en minutos. También admite la creación de plantillas XML.

Los precios de licencia para Apitron PDF no están disponibles en su sitio web. Tienes que contactar al soporte y obtener una cotización basada en tu uso. Por otro lado, IronPDF tiene un paquete de licencias muy claro mostrado en su sitio web. Esto hace que IronPDF se destaque sobre sus competidores y permita a los usuarios elegir sabiamente según sus necesidades. Con IronPDF, puedes 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 tareas PDF desafiantes. IronPDF proporciona múltiples métodos para producir PDFs desde múltiples tipos de archivos, mientras que Apitron solo puede convertir documentos XML a documentos PDF.

Se logra una salida perfecta sin agregar opciones técnicas en IronPDF en comparación con Apitron. Todos los clientes de Iron Software tienen la opción de adquirir los cinco productos de la compañía por el precio de dos de ellos. Prueba la prueba gratuita de 30 días de IronPDF para probar su funcionalidad completa. Compra la suite completa de productos de Iron Software en IronSoftware.com.

Por favor notaApitron PDF Kit es una marca registrada de su propietario respectivo. Este sitio no está afiliado, respaldado ni patrocinado por Apitron PDF Kit. Adquiere el paquete completo de productos de Iron Software en IronSoftware.com.

[{i:(Apitron PDF Kit es una marca registrada de su respectivo propietario. Este sitio no está afiliado, aprobado ni patrocinado por Apitron PDF Kit. Todos los nombres de producto, logotipos y marcas son propiedad de sus respectivos dueños. Las comparaciones son solo para fines informativos y reflejan información públicamente disponible en el momento de la redacción.

Preguntas Frecuentes

¿Cómo puedes convertir HTML a PDF en C#?

Puedes usar el método RenderHtmlAsPdf de IronPDF para convertir cadenas de HTML en PDFs. También puedes convertir archivos HTML a PDFs usando RenderHtmlFileAsPdf.

¿Qué características ofrece IronPDF para la creación de PDF?

IronPDF admite la creación de PDF desde HTML, CSS y JavaScript, carga de URL, extracción de texto y gráficos, fusión de PDF y más. Es compatible con .NET Core, Azure, AWS, Docker, Linux y Windows.

¿Cómo puedes firmar digitalmente un PDF en C#?

Con IronPDF, puedes firmar PDFs digitalmente usando un certificado de firma PDF, el cual puede integrarse con unas pocas líneas de código.

¿Cuáles son las opciones de instalación para IronPDF?

IronPDF puede instalarse usando el Administrador de Paquetes NuGet, el Símbolo del sistema para desarrolladores, o descargando directamente el paquete NuGet o la biblioteca IronPDF .DLL.

¿Hay una versión gratuita disponible para IronPDF?

Sí, IronPDF ofrece una versión de desarrollo gratuita junto con licencias comerciales. La información detallada de precios, incluyendo una garantía de devolución de dinero de 30 días, está disponible en su sitio web.

¿Cómo maneja Apitron PDF Kit la conversión de HTML a PDF?

Apitron PDF Kit no soporta la conversión directa de HTML a PDF, pero puede convertir archivos XML a PDF.

¿Cuáles son las características destacadas de Apitron PDF Kit?

Apitron PDF Kit permite una manipulación integral de PDF, incluyendo agregar imágenes, dibujos, textos, firmar documentos y fusionar o dividir PDFs. Sin embargo, carece de conversión directa de HTML a PDF.

¿Cómo puedes agregar encabezados y pies de página a un PDF en C#?

IronPDF te permite agregar encabezados y pies de página a PDFs fácilmente usando métodos como AddTextHeader y AddTextFooter.

¿Qué opciones de licencia están disponibles para Apitron PDF Kit?

Apitron PDF Kit ofrece un período de evaluación de tres meses y una licencia comunitaria para proyectos no comerciales. Para uso comercial, necesitas contactarles directamente para cotizaciones.

¿Cuál es la biblioteca PDF más fácil de usar para el desarrollo en .NET?

IronPDF es generalmente más fácil de usar para el desarrollo en .NET, proporcionando una API más simple y requiriendo menos líneas de código para tareas complejas en comparación con Apitron PDF Kit.

Curtis Chau
Escritor Técnico

Curtis Chau tiene una licenciatura en Ciencias de la Computación (Carleton University) y se especializa en el desarrollo front-end con experiencia en Node.js, TypeScript, JavaScript y React. Apasionado por crear interfaces de usuario intuitivas y estéticamente agradables, disfruta trabajando con frameworks modernos y creando manuales bien ...

Leer más