Saltar al pie de página
COMPARACIONES DE PRODUCTOS

Una Comparación entre Compdfkit e IronPDF

PDF, abreviatura de Portable Document Format, es un tipo de archivo creado por Adobe para garantizar la uniformidad en el intercambio de documentos. Este formato mantiene el diseño, el texto y las imágenes consistentes en varios dispositivos y sistemas operativos. Los PDFs son conocidos por su seguridad, características interactivas y tamaño compacto, lo que los hace perfectos para distribuir documentos sin alterar el contenido original.

Para los desarrolladores que usan C#, las librerías de PDF proporcionan Soluciones PDF para trabajar con archivos PDF. Estas librerías permiten la creación de documentos, modificación de contenido y extracción de texto e imágenes. También soportan funciones como manejo de formularios, firmas digitales y compatibilidad entre diferentes plataformas. Diseñadas para un rendimiento óptimo, estas librerías facilitan un procesamiento eficiente de PDF.

In this article, we will compare two C# PDF libraries: IronPDF and ComPDFKit. Esta comparación incluirá características, funcionalidad, ejemplos de código y licencias. Al examinar estos aspectos, puede determinar qué librería se adapta mejor a sus proyectos relacionados con PDF.

1. SDK de ComPDFKit

Una Comparación Entre Compdfkit & IronPDF: Figura 1 - Página de inicio del SDK de ComPDFKIT

ComPDFKit PDF SDK es un robusto SDK de PDF en C# que permite a los desarrolladores integrar funcionalidades completas de PDF en sus aplicaciones. Esta librería soporta una amplia gama de funciones PDF necesarias para manejar documentos PDF de manera programática. Está diseñado para su uso en diversos entornos, incluyendo plataformas web, de escritorio y móviles, lo que lo convierte en una herramienta versátil para desarrolladores que trabajan en proyectos multiplataforma. Tiene múltiples funciones en la solución de ejemplo. Puede seleccionar cualquier función del SDK de ComPDFKit PDF que desee probar.

1.1 Características Clave de ComPDFKit

  1. Visualización de PDF: ComPDFKit proporciona un potente visor de PDF que permite a los usuarios ver documentos PDF con alta fidelidad. El visor soporta el desplazamiento suave, zoom y navegación, asegurando una experiencia de usuario fluida.
  2. Anotaciones: La librería incluye herramientas para integrar anotaciones PDF de manera fluida. Los usuarios pueden resaltar texto, añadir comentarios y crear varios tipos de anotaciones, que son esenciales para los flujos de trabajo colaborativos.
  3. Manejo de Formularios: La librería ofrece un amplio soporte para formularios interactivos. Los desarrolladores pueden crear, llenar y extraer datos de formularios PDF, lo que lo hace ideal para aplicaciones que requieren procesamiento de formularios.
  4. Edición de PDF: ComPDFKit permite capacidades extensas de edición de PDF, incluyendo modificación de texto, imágenes y otro contenido dentro de archivos PDF. Esta característica es útil para aplicaciones que necesitan actualizar o personalizar documentos PDF existentes.
  5. Conversión: La librería soporta la conversión de archivos PDF hacia y desde varios formatos como Word, Excel, PowerPoint e imágenes. Esta flexibilidad es vital para aplicaciones que necesitan transformar contenido PDF para diferentes usos.
  6. Seguridad: ComPDFKit incluye robustas características de seguridad como cifrado y gestión de permisos. Los desarrolladores pueden asegurar documentos PDF para proteger información sensible de accesos no autorizados.
  7. Reconocimiento Óptico de Caracteres (OCR): La librería incluye capacidades OCR para convertir documentos escaneados en PDFs editables y buscables. Esta característica es esencial para digitalizar documentos en papel y hacerlos accesibles electrónicamente.

ComPDFKit proporciona un conjunto completo de APIs que agilizan la integración de estas características en varias aplicaciones. Su extensa documentación y soporte lo hacen una excelente opción para desarrolladores que buscan incorporar funcionalidades avanzadas de PDF en sus proyectos.

2. Librería IronPDF

Una Comparación Entre Compdfkit & IronPDF: Figura 2 - Página de inicio de IronPDF

IronPDF es una librería PDF versátil para .NET que permite a los desarrolladores crear, editar y gestionar documentos PDF usando C#. Proporciona funciones PDF completas. Está diseñada para simplificar la generación de PDF al renderizar PDFs a partir de HTML, CSS, JavaScript y varios formatos de imagen. Esto la convierte en una herramienta ideal para desarrolladores que buscan integrar funcionalidad robusta de PDF en sus aplicaciones .NET.

Características Clave de IronPDF

  1. Conversión de HTML a PDF: IronPDF se destaca en convertir contenido HTML, CSS y JavaScript en documentos PDF de alta calidad. Esta característica soporta cadenas HTML a PDFs, URLs, formularios web ASPX y vistas MVC, haciendo que sea una solución flexible para varios contenidos web.
  2. Edición de PDF: La librería ofrece amplias capacidades de edición, incluyendo añadir, copiar y borrar páginas, fusionar y dividir PDFs, y manipular texto e imágenes. Los desarrolladores también pueden añadir encabezados, pies de página, marcas de agua y firmas digitales a documentos PDF.
  3. Manejo de Formularios: IronPDF soporta la creación de formularios inteligentes y llenado programático de formularios PDF. Esta característica es esencial para aplicaciones que requieren generación dinámica de formularios y extracción de datos de formularios enviados por los usuarios.
  4. Características de Seguridad: IronPDF proporciona opciones de seguridad robustas, como establecer contraseñas y permisos, cifrar documentos y añadir firmas digitales. Estas características aseguran que la información sensible dentro de documentos PDF esté protegida contra accesos no autorizados.
  5. OCR y Extracción de Datos: La librería incluye capacidades de Reconocimiento Óptico de Caracteres (OCR), permitiendo la conversión de documentos escaneados en PDFs editables y buscables. Además, IronPDF puede extraer texto, imágenes y otros datos de PDFs existentes, facilitando la reutilización y análisis de contenido.
  6. Conversión de Imágenes: IronPDF soporta la conversión de varios formatos de imagen, incluyendo JPG, PNG, GIF, BMP y SVG, en documentos PDF. También ofrece la capacidad de renderizar páginas PDF como imágenes, lo cual es útil para aplicaciones que requieren vistas previas visuales del contenido PDF.
  7. Compatibilidad Multiplataforma: IronPDF es compatible con múltiples plataformas .NET, incluyendo .NET Core, .NET Framework y .NET Standard. Soporta despliegue en Windows, Linux, macOS y Azure, lo que lo convierte en una opción versátil para desarrolladores que trabajan en entornos diversos.
  8. Optimización del Rendimiento: La librería está diseñada para alto rendimiento, con soporte para procesamiento multihilo y operaciones asíncronas. Esto asegura que las tareas de procesamiento de PDF se ejecuten eficientemente, incluso en aplicaciones con altas cargas de trabajo.
  9. Documentación Exhaustiva y Soporte: IronPDF proporciona documentación detallada y numerosos ejemplos de código, haciendo que sea fácil para los desarrolladores comenzar e implementar sus características. Además, ofrece soporte técnico para asistir con cualquier problema que pueda surgir durante el desarrollo.

3. Crear un Nuevo Proyecto de Visual Studio

Antes de adentrarnos en ejemplos de codificación, vamos a crear un nuevo proyecto en Visual Studio. Aquí hay una guía paso a paso para configurar una aplicación de consola en C# en Visual Studio.

Paso 1: Instalar Visual Studio (Si no está ya instalado)

Visual Studio es el mejor IDE para proyectos de C#. Si aún no lo ha descargado e instalado, descárguelo desde esta página de Descargas de Visual Studio.

Paso 2: Abrir Visual Studio

Después de instalar Visual Studio, ábralo. Si tiene Visual Studio Community, puede optar por registrarse o continuar sin registrarse.

Paso 3: Crear un Nuevo Proyecto

  1. Haga clic en "Crear un nuevo proyecto" o navegue a Archivo > Nuevo > Proyecto.

    Una Comparación Entre Compdfkit & IronPDF: Figura 3 - Una Comparación Entre IronPDF & DinkToPdf: Figura 1

  2. Busque la aplicación de consola en la barra de búsqueda y seleccione la aplicación de consola de los resultados de búsqueda.

    Una Comparación Entre Compdfkit & IronPDF: Figura 4 - Una Comparación Entre IronPDF & DinkToPdf: Figura 2 - En el diálogo Crear un nuevo proyecto, seleccione la Aplicación de Consola de C# y haga clic en Siguiente.

  3. Elija la plantilla de proyecto que mejor se adapte a sus necesidades. Para una aplicación de consola básica, puede elegir "Aplicación de Consola (.NET Framework)".
  4. Proporcione el nombre y la ubicación de guardado de su proyecto. También puede establecer el nombre de la solución.
  5. Elija el marco de destino adecuado y haga clic en "Crear" para generar su proyecto.

4. Instalar IronPDF

La integración de IronPDF en su proyecto puede realizarse a través de varios métodos, cada uno proporcionando una experiencia de configuración sencilla.

  1. Para usar el Administrador de Paquetes NuGet de Visual Studio, comience haciendo clic derecho en "Dependencias" en su solución y seleccionando "Administrar Paquetes NuGet". En la pestaña "Explorar", busque "IronPDF" e instale la última versión para su proyecto.

    Una Comparación Entre Compdfkit & IronPDF: Figura 5 - Buscar IronPDF usando el Administrador de Paquetes NuGet

  2. Alternativamente, puede usar la Consola del Administrador de Paquetes NuGet. Abra la consola navegando a Herramientas > Administrador de Paquetes NuGet > Consola del Administrador de Paquetes en Visual Studio. Una vez que la consola está abierta, ejecute el comando:

    Install-Package IronPdf

    Este enfoque proporciona una manera rápida de instalar la librería usando una simple línea de comandos.

    Una Comparación Entre Compdfkit & IronPDF: Figura 6 - Usando la línea de comandos introduzca el comando anterior

  3. Para aquellos que prefieren descargar directamente desde el sitio web de NuGet, visite la página del paquete NuGet de IronPDF. Desde allí, puede descargar el archivo del paquete. Después de descargarlo, haga doble clic en el archivo para añadirlo a su proyecto, luego recargue su solución para completar la integración.
  4. Otro método es descargar directamente la última versión de IronPDF. Esto asegura que tenga el paquete más actualizado. Siga las instrucciones proporcionadas en el sitio web para integrar manualmente IronPDF en su proyecto de Visual Studio.

Siguiendo cualquiera de estos métodos, puede integrar eficientemente IronPDF en su proyecto .NET.

5. Instalar ComPDFKit C

Hay dos métodos principales para añadir ComPDFKit a su proyecto: usando el Administrador de Paquetes NuGet o un paquete local.

5.1 Usando el Administrador de Paquetes NuGet

  1. Abrir el Administrador de Paquetes NuGet: En el Explorador de Soluciones, haga clic derecho en "Referencias" y seleccione "Administrar Paquetes NuGet".
  2. Buscar e Instalar: Busque "ComPDFKit" en el Administrador de Paquetes NuGet. Seleccione el paquete adecuado (por ejemplo, ComPDFKit.NetFramework o ComPDFKit.Conversion.NetFramework) y haga clic en "Instalar".

Una Comparación Entre Compdfkit & IronPDF: Figura 7 - Buscar ComPDFKit usando el Administrador de Paquetes NuGet

  1. Verificar Instalación: Asegúrese de que el paquete aparezca bajo "Referencias" en el Explorador de Soluciones.

5.2 Usando un Paquete Local

  1. Descargar el Paquete: Obtenga el archivo ComPDFKit.NetFramework.nupkg desde el sitio web oficial de ComPDFKit.
  2. Configurar la Fuente de NuGet: Cree o edite un archivo nuget.config en el directorio de su proyecto para incluir la ruta hacia el paquete local.

    <?xml version="1.0" encoding="utf-8"?>
    <configuration>
        <packageSources>
            <add key="ComPDFKitSource" value="path\to\directoryContainingNupkg" />
        </packageSources>
    </configuration>
    <?xml version="1.0" encoding="utf-8"?>
    <configuration>
        <packageSources>
            <add key="ComPDFKitSource" value="path\to\directoryContainingNupkg" />
        </packageSources>
    </configuration>
    XML
  3. Instalar el Paquete Local: Reabra su solución en Visual Studio, vaya a "Administrar Paquetes NuGet" y seleccione su fuente de paquete local. Instale el paquete de ComPDFKit desde la fuente local.

5.3 Aplicar la Clave de Licencia

  1. Obtener Licencia: Contacte al equipo de ComPDFKit para obtener una licencia de prueba o completa.
  2. Aplicar la Licencia en el Código:

    bool LicenseVerify()
    {
        if (!CPDFSDKVerifier.LoadNativeLibrary())
            return false;
        LicenseErrorCode verifyResult = CPDFSDKVerifier.LicenseVerify("input your license here");
        return (verifyResult == LicenseErrorCode.E_LICENSE_SUCCESS);
    }
    bool LicenseVerify()
    {
        if (!CPDFSDKVerifier.LoadNativeLibrary())
            return false;
        LicenseErrorCode verifyResult = CPDFSDKVerifier.LicenseVerify("input your license here");
        return (verifyResult == LicenseErrorCode.E_LICENSE_SUCCESS);
    }
    IRON VB CONVERTER ERROR developers@ironsoftware.com
    $vbLabelText   $csharpLabel

    Añada este método a su archivo principal de aplicación para verificar la licencia.

Siguiendo estos pasos, puede integrar con éxito ComPDFKit en su proyecto C#.

6. HTML a PDF

Convertir HTML a PDF es un requisito común en muchas aplicaciones, como generar informes, facturas o documentación dinámicamente desde contenido web. Tanto IronPDF como ComPDFKit ofrecen soluciones robustas para esta tarea, pero su enfoque y capacidades difieren significativamente.

El proceso generalmente comienza con capturar el contenido HTML, que puede ser estático o dinámicamente generado. El HTML capturado es entonces procesado para aplicar cualquier hoja de estilo asociada (CSS) y scripts (JavaScript), lo que asegura que el PDF final refleje la apariencia y el comportamiento de la página web original.

6.1 Convertir HTML a PDF Usando IronPDF

IronPDF es una librería versátil para convertir HTML a PDF en C#. Utiliza un motor de renderizado basado en Chrome para asegurar una salida de alta calidad. Este proceso involucra renderizar contenido HTML, CSS y JavaScript con precisión en formato PDF. Aquí hay un ejemplo básico de cómo convertir una cadena HTML a un archivo PDF usando IronPDF:

using IronPdf;
using System;

class Program
{
    static void Main()
    {
        // Define your HTML string
        string htmlString = @"
            <h1>Hello, IronPDF!</h1>
            <p>This is a simple PDF created from an HTML string.</p>";

        var renderer = new ChromePdfRenderer();
        // Convert the HTML string to a PDF document
        PdfDocument pdf = renderer.RenderHtmlAsPdf(htmlString);
        // Save the PDF document to a file
        string outputPath = "sample.pdf";
        pdf.SaveAs(outputPath);
        Console.WriteLine($"PDF created successfully and saved to {outputPath}");
    }
}
using IronPdf;
using System;

class Program
{
    static void Main()
    {
        // Define your HTML string
        string htmlString = @"
            <h1>Hello, IronPDF!</h1>
            <p>This is a simple PDF created from an HTML string.</p>";

        var renderer = new ChromePdfRenderer();
        // Convert the HTML string to a PDF document
        PdfDocument pdf = renderer.RenderHtmlAsPdf(htmlString);
        // Save the PDF document to a file
        string outputPath = "sample.pdf";
        pdf.SaveAs(outputPath);
        Console.WriteLine($"PDF created successfully and saved to {outputPath}");
    }
}
Imports IronPdf
Imports System

Friend Class Program
	Shared Sub Main()
		' Define your HTML string
		Dim htmlString As String = "
            <h1>Hello, IronPDF!</h1>
            <p>This is a simple PDF created from an HTML string.</p>"

		Dim renderer = New ChromePdfRenderer()
		' Convert the HTML string to a PDF document
		Dim pdf As PdfDocument = renderer.RenderHtmlAsPdf(htmlString)
		' Save the PDF document to a file
		Dim outputPath As String = "sample.pdf"
		pdf.SaveAs(outputPath)
		Console.WriteLine($"PDF created successfully and saved to {outputPath}")
	End Sub
End Class
$vbLabelText   $csharpLabel

Una Comparación Entre Compdfkit & IronPDF: Figura 8 - Ejemplo de salida del código anterior

De manera similar, puede crear PDFs a partir de un archivo HTML. Es muy útil porque a veces las cadenas HTML son demasiado grandes y necesita añadir CSS con ellas. IronPDF ayuda proporcionando un método para convertir directamente archivos HTML junto con sus archivos CSS y JS a documentos PDF.

using IronPdf;
using System;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        // Convert the HTML file to a PDF document
        PdfDocument pdf = renderer.RenderHtmlFileAsPdf("index.html");
        // Save the PDF document to a file
        string outputPath = "HTML File.pdf";
        pdf.SaveAs(outputPath);
        Console.WriteLine($"PDF created successfully and saved to {outputPath}");
    }
}
using IronPdf;
using System;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        // Convert the HTML file to a PDF document
        PdfDocument pdf = renderer.RenderHtmlFileAsPdf("index.html");
        // Save the PDF document to a file
        string outputPath = "HTML File.pdf";
        pdf.SaveAs(outputPath);
        Console.WriteLine($"PDF created successfully and saved to {outputPath}");
    }
}
Imports IronPdf
Imports System

Friend Class Program
	Shared Sub Main()
		Dim renderer = New ChromePdfRenderer()
		' Convert the HTML file to a PDF document
		Dim pdf As PdfDocument = renderer.RenderHtmlFileAsPdf("index.html")
		' Save the PDF document to a file
		Dim outputPath As String = "HTML File.pdf"
		pdf.SaveAs(outputPath)
		Console.WriteLine($"PDF created successfully and saved to {outputPath}")
	End Sub
End Class
$vbLabelText   $csharpLabel

Una Comparación Entre Compdfkit & IronPDF: Figura 9 - Ejemplo de salida del código anterior utilizando IronPDF para renderizar un HTML como PDF

IronPDF también soporta URLs a PDF y archivos HTML a PDF. Estas características son muy útiles en software donde la gestión de documentos es importante. IronPDF proporciona una amplia gama de características para la creación y manipulación de PDF, lo que lo convierte en una herramienta poderosa para los desarrolladores.

6.2 HTML a PDF Usando ComPDFKit C

ComPDFKit no soporta directamente la conversión de HTML a PDF dentro de su SDK de C#. En su lugar, ofrece una API separada específicamente para este propósito. Esta API le permite realizar conversiones de HTML a PDF mediante el uso de peticiones HTTP a su servicio.

Para usar la API de HTML a PDF de ComPDFKit, normalmente seguiría estos pasos:

  1. Enviar Contenido HTML: Cree una petición HTTP POST al endpoint de la API de ComPDFKit con su contenido HTML.
  2. Recibir Salida en PDF: La API procesa el contenido HTML y devuelve el archivo PDF generado.

Aquí hay un ejemplo de cómo podría estructurar tal petición en C#:

using System;
using System.Net.Http;
using System.Threading.Tasks;

public class HtmlToPdfExample
{
    public static async Task ConvertHtmlToPdfAsync()
    {
        using (var client = new HttpClient())
        {
            var content = new StringContent("<h1>Hello World</h1>");
            var response = await client.PostAsync("https://api.compdfkit.com/html-to-pdf", content);
            var pdfBytes = await response.Content.ReadAsByteArrayAsync();
            System.IO.File.WriteAllBytes("output.pdf", pdfBytes);
        }
    }
}
using System;
using System.Net.Http;
using System.Threading.Tasks;

public class HtmlToPdfExample
{
    public static async Task ConvertHtmlToPdfAsync()
    {
        using (var client = new HttpClient())
        {
            var content = new StringContent("<h1>Hello World</h1>");
            var response = await client.PostAsync("https://api.compdfkit.com/html-to-pdf", content);
            var pdfBytes = await response.Content.ReadAsByteArrayAsync();
            System.IO.File.WriteAllBytes("output.pdf", pdfBytes);
        }
    }
}
Imports System
Imports System.Net.Http
Imports System.Threading.Tasks

Public Class HtmlToPdfExample
	Public Shared Async Function ConvertHtmlToPdfAsync() As Task
		Using client = New HttpClient()
			Dim content = New StringContent("<h1>Hello World</h1>")
			Dim response = Await client.PostAsync("https://api.compdfkit.com/html-to-pdf", content)
			Dim pdfBytes = Await response.Content.ReadAsByteArrayAsync()
			System.IO.File.WriteAllBytes("output.pdf", pdfBytes)
		End Using
	End Function
End Class
$vbLabelText   $csharpLabel

Es solo una demostración de que podemos usar la API de esta manera en el programa C#. No hay una forma específica de usarlo para C# en la documentación de ComPDFKit.

Soporte del Framework CSS de Bootstrap para la Generación de PDF

Las aplicaciones modernas de comercio electrónico y empresariales usan extensamente Bootstrap para un diseño consistente de la interfaz de usuario. Al generar facturas, recibos e informes como PDFs, mantener el estilo Bootstrap es esencial para la consistencia de la marca. El motor Chromium de IronPDF proporciona soporte completo para Bootstrap, mientras que el enfoque basado en API de ComPDFKit tiene limitaciones con frameworks CSS complejos.

IronPDF: Renderizado Nativo de Bootstrap con Chromium

IronPDF aprovecha todo el poder del motor de renderizado de Chromium, proporcionando soporte perfecto para Bootstrap a través de todas las versiones (Bootstrap 5, 4 y 3). La librería maneja disposiciones Flexbox, CSS Grid, utilidades responsivas y componentes personalizados de manera fluida.

using IronPdf;

// Set license
IronPdf.License.LicenseKey = "License-Key";

var renderer = new ChromePdfRenderer();

// Bootstrap 5 e-commerce invoice example
string bootstrapInvoice = @"
<!DOCTYPE html>
<html lang='en'>
<head>
    <meta charset='utf-8'>
    <meta name='viewport' content='width=device-width, initial-scale=1'>
    <link href='https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css' rel='stylesheet'>
    <style>
        @page { margin: 20mm; }
        .invoice-header { border-bottom: 3px solid #0d6efd; }
        .product-row { border-bottom: 1px solid #dee2e6; }
        .total-section { background-color: #f8f9fa; }
    </style>
</head>
<body>
    <div class='container-fluid p-4'>
        <!-- Invoice Header -->
        <div class='row invoice-header pb-4 mb-4'>
            <div class='col-8'>
                <h1 class='display-4 text-primary'>INVOICE</h1>
                <p class='text-muted mb-0'>TechStore Inc.</p>
                <p class='text-muted mb-0'>123 Commerce Street, Tech City, TC 12345</p>
                <p class='text-muted'>Email: sales@techstore.com | Phone: (555) 123-4567</p>
            </div>
            <div class='col-4 text-end'>
                <p class='mb-1'><strong>Invoice #:</strong> INV-2024-1089</p>
                <p class='mb-1'><strong>Date:</strong> October 27, 2024</p>
                <p class='mb-1'><strong>Due Date:</strong> November 27, 2024</p>
                <span class='badge bg-success'>PAID</span>
            </div>
        </div>

        <!-- Bill To Section -->
        <div class='row mb-4'>
            <div class='col-6'>
                <h5 class='text-primary'>Bill To:</h5>
                <p class='mb-1'><strong>Acme Corporation</strong></p>
                <p class='mb-1'>456 Business Ave</p>
                <p class='mb-1'>Enterprise City, EC 67890</p>
                <p class='mb-0'>contact@acmecorp.com</p>
            </div>
            <div class='col-6 text-end'>
                <h5 class='text-primary'>Payment Method:</h5>
                <p class='mb-1'>Credit Card ending in 4242</p>
                <p class='mb-0'>Transaction ID: TXN-9876543210</p>
            </div>
        </div>

        <!-- Products Table -->
        <div class='row mb-4'>
            <div class='col-12'>
                <table class='table'>
                    <thead class='table-primary'>
                        <tr>
                            <th scope='col'>#</th>
                            <th scope='col'>Product</th>
                            <th scope='col'>Description</th>
                            <th scope='col' class='text-center'>Qty</th>
                            <th scope='col' class='text-end'>Unit Price</th>
                            <th scope='col' class='text-end'>Amount</th>
                        </tr>
                    </thead>
                    <tbody>
                        <tr class='product-row'>
                            <td>1</td>
                            <td><strong>IronPDF Pro License</strong></td>
                            <td>Professional developer license with 1 year support</td>
                            <td class='text-center'>1</td>
                            <td class='text-end'>$2,999.00</td>
                            <td class='text-end'><strong>$2,999.00</strong></td>
                        </tr>
                        <tr class='product-row'>
                            <td>2</td>
                            <td><strong>Priority Support</strong></td>
                            <td>24/7 priority technical support package</td>
                            <td class='text-center'>1</td>
                            <td class='text-end'>$999.00</td>
                            <td class='text-end'><strong>$999.00</strong></td>
                        </tr>
                        <tr class='product-row'>
                            <td>3</td>
                            <td><strong>Training Package</strong></td>
                            <td>On-site developer training (2 days)</td>
                            <td class='text-center'>1</td>
                            <td class='text-end'>$1,500.00</td>
                            <td class='text-end'><strong>$1,500.00</strong></td>
                        </tr>
                    </tbody>
                </table>
            </div>
        </div>

        <!-- Totals Section -->
        <div class='row justify-content-end mb-4'>
            <div class='col-md-6'>
                <div class='card total-section'>
                    <div class='card-body'>
                        <div class='row mb-2'>
                            <div class='col-6'><strong>Subtotal:</strong></div>
                            <div class='col-6 text-end'>$5,498.00</div>
                        </div>
                        <div class='row mb-2'>
                            <div class='col-6'><strong>Tax (8.5%):</strong></div>
                            <div class='col-6 text-end'>$467.33</div>
                        </div>
                        <div class='row mb-2'>
                            <div class='col-6 text-success'><strong>Discount (10%):</strong></div>
                            <div class='col-6 text-end text-success'>-$549.80</div>
                        </div>
                        <hr>
                        <div class='row'>
                            <div class='col-6'><h4 class='text-primary'>Total:</h4></div>
                            <div class='col-6 text-end'><h4 class='text-primary'>$5,415.53</h4></div>
                        </div>
                    </div>
                </div>
            </div>
        </div>

        <!-- Payment Terms -->
        <div class='row mb-4'>
            <div class='col-12'>
                <div class='alert alert-info' role='alert'>
                    <h6 class='alert-heading'>Payment Terms</h6>
                    <p class='mb-0'>Payment is due within 30 days. Late payments may incur a 1.5% monthly interest charge. Thank you for your business!</p>
                </div>
            </div>
        </div>

        <!-- Footer -->
        <div class='row border-top pt-3'>
            <div class='col-12 text-center text-muted'>
                <small>TechStore Inc. | Tax ID: 12-3456789 | All prices in USD</small>
            </div>
        </div>
    </div>
</body>
</html>";

// Render PDF with optimized settings
var pdf = renderer.RenderHtmlAsPdf(bootstrapInvoice);

// Add metadata for document management
pdf.MetaData.Title = "Invoice INV-2024-1089";
pdf.MetaData.Author = "TechStore Inc.";
pdf.MetaData.Subject = "Sales Invoice";
pdf.MetaData.Keywords = "invoice, payment, e-commerce";

// Save the invoice
pdf.SaveAs("invoice-with-bootstrap.pdf");
using IronPdf;

// Set license
IronPdf.License.LicenseKey = "License-Key";

var renderer = new ChromePdfRenderer();

// Bootstrap 5 e-commerce invoice example
string bootstrapInvoice = @"
<!DOCTYPE html>
<html lang='en'>
<head>
    <meta charset='utf-8'>
    <meta name='viewport' content='width=device-width, initial-scale=1'>
    <link href='https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css' rel='stylesheet'>
    <style>
        @page { margin: 20mm; }
        .invoice-header { border-bottom: 3px solid #0d6efd; }
        .product-row { border-bottom: 1px solid #dee2e6; }
        .total-section { background-color: #f8f9fa; }
    </style>
</head>
<body>
    <div class='container-fluid p-4'>
        <!-- Invoice Header -->
        <div class='row invoice-header pb-4 mb-4'>
            <div class='col-8'>
                <h1 class='display-4 text-primary'>INVOICE</h1>
                <p class='text-muted mb-0'>TechStore Inc.</p>
                <p class='text-muted mb-0'>123 Commerce Street, Tech City, TC 12345</p>
                <p class='text-muted'>Email: sales@techstore.com | Phone: (555) 123-4567</p>
            </div>
            <div class='col-4 text-end'>
                <p class='mb-1'><strong>Invoice #:</strong> INV-2024-1089</p>
                <p class='mb-1'><strong>Date:</strong> October 27, 2024</p>
                <p class='mb-1'><strong>Due Date:</strong> November 27, 2024</p>
                <span class='badge bg-success'>PAID</span>
            </div>
        </div>

        <!-- Bill To Section -->
        <div class='row mb-4'>
            <div class='col-6'>
                <h5 class='text-primary'>Bill To:</h5>
                <p class='mb-1'><strong>Acme Corporation</strong></p>
                <p class='mb-1'>456 Business Ave</p>
                <p class='mb-1'>Enterprise City, EC 67890</p>
                <p class='mb-0'>contact@acmecorp.com</p>
            </div>
            <div class='col-6 text-end'>
                <h5 class='text-primary'>Payment Method:</h5>
                <p class='mb-1'>Credit Card ending in 4242</p>
                <p class='mb-0'>Transaction ID: TXN-9876543210</p>
            </div>
        </div>

        <!-- Products Table -->
        <div class='row mb-4'>
            <div class='col-12'>
                <table class='table'>
                    <thead class='table-primary'>
                        <tr>
                            <th scope='col'>#</th>
                            <th scope='col'>Product</th>
                            <th scope='col'>Description</th>
                            <th scope='col' class='text-center'>Qty</th>
                            <th scope='col' class='text-end'>Unit Price</th>
                            <th scope='col' class='text-end'>Amount</th>
                        </tr>
                    </thead>
                    <tbody>
                        <tr class='product-row'>
                            <td>1</td>
                            <td><strong>IronPDF Pro License</strong></td>
                            <td>Professional developer license with 1 year support</td>
                            <td class='text-center'>1</td>
                            <td class='text-end'>$2,999.00</td>
                            <td class='text-end'><strong>$2,999.00</strong></td>
                        </tr>
                        <tr class='product-row'>
                            <td>2</td>
                            <td><strong>Priority Support</strong></td>
                            <td>24/7 priority technical support package</td>
                            <td class='text-center'>1</td>
                            <td class='text-end'>$999.00</td>
                            <td class='text-end'><strong>$999.00</strong></td>
                        </tr>
                        <tr class='product-row'>
                            <td>3</td>
                            <td><strong>Training Package</strong></td>
                            <td>On-site developer training (2 days)</td>
                            <td class='text-center'>1</td>
                            <td class='text-end'>$1,500.00</td>
                            <td class='text-end'><strong>$1,500.00</strong></td>
                        </tr>
                    </tbody>
                </table>
            </div>
        </div>

        <!-- Totals Section -->
        <div class='row justify-content-end mb-4'>
            <div class='col-md-6'>
                <div class='card total-section'>
                    <div class='card-body'>
                        <div class='row mb-2'>
                            <div class='col-6'><strong>Subtotal:</strong></div>
                            <div class='col-6 text-end'>$5,498.00</div>
                        </div>
                        <div class='row mb-2'>
                            <div class='col-6'><strong>Tax (8.5%):</strong></div>
                            <div class='col-6 text-end'>$467.33</div>
                        </div>
                        <div class='row mb-2'>
                            <div class='col-6 text-success'><strong>Discount (10%):</strong></div>
                            <div class='col-6 text-end text-success'>-$549.80</div>
                        </div>
                        <hr>
                        <div class='row'>
                            <div class='col-6'><h4 class='text-primary'>Total:</h4></div>
                            <div class='col-6 text-end'><h4 class='text-primary'>$5,415.53</h4></div>
                        </div>
                    </div>
                </div>
            </div>
        </div>

        <!-- Payment Terms -->
        <div class='row mb-4'>
            <div class='col-12'>
                <div class='alert alert-info' role='alert'>
                    <h6 class='alert-heading'>Payment Terms</h6>
                    <p class='mb-0'>Payment is due within 30 days. Late payments may incur a 1.5% monthly interest charge. Thank you for your business!</p>
                </div>
            </div>
        </div>

        <!-- Footer -->
        <div class='row border-top pt-3'>
            <div class='col-12 text-center text-muted'>
                <small>TechStore Inc. | Tax ID: 12-3456789 | All prices in USD</small>
            </div>
        </div>
    </div>
</body>
</html>";

// Render PDF with optimized settings
var pdf = renderer.RenderHtmlAsPdf(bootstrapInvoice);

// Add metadata for document management
pdf.MetaData.Title = "Invoice INV-2024-1089";
pdf.MetaData.Author = "TechStore Inc.";
pdf.MetaData.Subject = "Sales Invoice";
pdf.MetaData.Keywords = "invoice, payment, e-commerce";

// Save the invoice
pdf.SaveAs("invoice-with-bootstrap.pdf");
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Características Clave de Bootstrap Demostradas:

  • Sistema de Cuadrícula: Clases row y col-* para estructura de diseño responsivo
  • Tipografía: display-4, text-muted, h5 para estilo de texto jerárquico
  • Tablas: table, table-primary, table-hover para visualización estructurada de datos
  • Tarjetas: card y card-body para la sección de totales con estilo de fondo
  • Insignias: badge bg-success para indicadores de estado de pago
  • Alertas: alert alert-info para notificación de términos de pago
  • Utilidades: text-end, text-center, mb-*, pb-* utilidades de espaciado
  • Estilo Personalizado: Combinado con clases Bootstrap para diseño específico de la factura

El motor Chromium de IronPDF asegura un renderizado perfecto de los componentes Bootstrap, manteniendo la consistencia de la marca entre documentos web y PDF.

Para soluciones completas de problemas de diseño de Bootstrap en la generación de PDF, incluyendo Flexbox y problemas de diseño responsivo, consulte: Solución de Problemas de Bootstrap Flex y CSS.

ComPDFKit: Limitaciones del Procesamiento de HTML Basado en API

La conversión de HTML a PDF de ComPDFKit se basa en llamadas a APIs externas en lugar de en renderizado embebido. Aunque este enfoque puede manejar el estilo básico de Bootstrap, introduce varias limitaciones:

  • Dependencia de Red: Requiere peticiones HTTP a servicios externos
  • Soporte para Frameworks CSS: Puede no soportar completamente disposiciones complejas de Flexbox o CSS Grid
  • Consistencia de Renderizado: Los resultados pueden variar según la implementación del servicio API
  • Estilo Personalizado: Control limitado sobre el renderizado de componentes Bootstrap
  • Rendimiento: La latencia de la red añade un extra a la generación de documentos

Para aplicaciones que requieren un renderizado fiable de Bootstrap con un control completo sobre el estilo y el diseño, el renderizado nativo de Chromium proporciona resultados superiores.

7. Marca de Agua en PDF

La Marca de Agua en un PDF es una práctica esencial por muchas razones. Ayuda a proteger la integridad del documento, afirma la propiedad y añade una capa de seguridad. Las marcas de agua pueden ser texto, logotipos o imágenes que aparecen tanto en el fondo como en primer plano de un documento. Disuaden del uso no autorizado, la copia y distribución del contenido. Además, las marcas de agua pueden transmitir información importante como el estado del documento (ej. "Confidencial", "Borrador", "Aprobado") o la identidad del creador.

7.1 Marca de Agua usando IronPDF

IronPDF proporciona una manera sencilla de añadir marcas de agua a documentos PDF de manera programática. Esta funcionalidad está integrada en la librería, permitiendo a los desarrolladores aplicar marcas de agua usando código C#.

using IronPdf;
using IronPdf.Editing;

class Program
{
    static void Main()
    {
        License.LicenseKey = "License-Code";

        string watermarkHtml = @"
            <img style='width: 500px;' src='C:\Users\Tayyab Ali\Desktop\watermark.png'>
            <h1>IronPDF Watermark</h1>";

        ChromePdfRenderer renderer = new ChromePdfRenderer();
        PdfDocument pdf = renderer.RenderHtmlAsPdf("<h1>It's a PDF with a watermark</h1>");
        // Apply watermark with 30 degrees rotation and 50% opacity
        pdf.ApplyWatermark(watermarkHtml, rotation: 30, opacity: 50);
        pdf.SaveAs("Confidential.pdf");
    }
}
using IronPdf;
using IronPdf.Editing;

class Program
{
    static void Main()
    {
        License.LicenseKey = "License-Code";

        string watermarkHtml = @"
            <img style='width: 500px;' src='C:\Users\Tayyab Ali\Desktop\watermark.png'>
            <h1>IronPDF Watermark</h1>";

        ChromePdfRenderer renderer = new ChromePdfRenderer();
        PdfDocument pdf = renderer.RenderHtmlAsPdf("<h1>It's a PDF with a watermark</h1>");
        // Apply watermark with 30 degrees rotation and 50% opacity
        pdf.ApplyWatermark(watermarkHtml, rotation: 30, opacity: 50);
        pdf.SaveAs("Confidential.pdf");
    }
}
Imports IronPdf
Imports IronPdf.Editing

Friend Class Program
	Shared Sub Main()
		License.LicenseKey = "License-Code"

		Dim watermarkHtml As String = "
            <img style='width: 500px;' src='C:\Users\Tayyab Ali\Desktop\watermark.png'>
            <h1>IronPDF Watermark</h1>"

		Dim renderer As New ChromePdfRenderer()
		Dim pdf As PdfDocument = renderer.RenderHtmlAsPdf("<h1>It's a PDF with a watermark</h1>")
		' Apply watermark with 30 degrees rotation and 50% opacity
		pdf.ApplyWatermark(watermarkHtml, rotation:= 30, opacity:= 50)
		pdf.SaveAs("Confidential.pdf")
	End Sub
End Class
$vbLabelText   $csharpLabel

Una Comparación Entre Compdfkit & IronPDF: Figura 10 - Ejemplo de salida del código anterior mostrando la marca de agua añadida usando IronPDF

En este ejemplo, la clase ChromePdfRenderer se usa para crear un PDF a partir de una cadena HTML. El método ApplyWatermark se usa luego para aplicar una marca de agua. La marca de agua consiste en una imagen y un encabezado, ambos definidos en la cadena watermarkHtml. El parámetro rotation está establecido en 30 grados, y la opacity se establece en 50%, asegurando que la marca de agua sea visible pero no sobrepase el contenido principal. El PDF resultante se guarda en una ruta especificada.

7.2 Marca de Agua usando ComPDFKit

ComPDFKit proporciona una funcionalidad completa para añadir marcas de agua a documentos PDF directamente dentro de C#. Esto se puede hacer de manera programática utilizando los métodos de la librería ComPDFKit. Aquí hay un ejemplo de cómo añadir una marca de agua de texto usando ComPDFKit:

static private bool AddTextWatermark(CPDFDocument document)
{
    CPDFWatermark watermark = document.InitWatermark(C_Watermark_Type.WATERMARK_TYPE_TEXT);
    watermark.SetText("test");
    watermark.SetFontName("Helvetica"); 
    watermark.SetPages("0-3");
    byte[] color = { 255, 0, 0 };
    watermark.SetTextRGBColor(color);
    watermark.SetScale(2);
    watermark.SetRotation(0);
    watermark.SetOpacity(120);
    watermark.SetVertalign(C_Watermark_Vertalign.WATERMARK_VERTALIGN_CENTER);
    watermark.SetHorizalign(C_Watermark_Horizalign.WATERMARK_HORIZALIGN_CENTER);
    watermark.SetVertOffset(0);
    watermark.SetHorizOffset(0);
    watermark.SetFront(true);
    watermark.SetFullScreen(true);
    watermark.SetVerticalSpacing(10);
    watermark.SetHorizontalSpacing(10);
    watermark.CreateWatermark();
    string path = "AddTextWatermarkTest.pdf";
    if (!document.WriteToFilePath(path))
    {
        return false;
    }
    Console.WriteLine("Browse the changed file in " + path);
    return true;
}

CPDFDocument document = CPDFDocument.InitWithFilePath("SamplePDF.pdf");
if (AddTextWatermark(document))
{
    Console.WriteLine("Add text watermark done.");
}
else
{
    Console.WriteLine("Add text watermark failed.");
}
static private bool AddTextWatermark(CPDFDocument document)
{
    CPDFWatermark watermark = document.InitWatermark(C_Watermark_Type.WATERMARK_TYPE_TEXT);
    watermark.SetText("test");
    watermark.SetFontName("Helvetica"); 
    watermark.SetPages("0-3");
    byte[] color = { 255, 0, 0 };
    watermark.SetTextRGBColor(color);
    watermark.SetScale(2);
    watermark.SetRotation(0);
    watermark.SetOpacity(120);
    watermark.SetVertalign(C_Watermark_Vertalign.WATERMARK_VERTALIGN_CENTER);
    watermark.SetHorizalign(C_Watermark_Horizalign.WATERMARK_HORIZALIGN_CENTER);
    watermark.SetVertOffset(0);
    watermark.SetHorizOffset(0);
    watermark.SetFront(true);
    watermark.SetFullScreen(true);
    watermark.SetVerticalSpacing(10);
    watermark.SetHorizontalSpacing(10);
    watermark.CreateWatermark();
    string path = "AddTextWatermarkTest.pdf";
    if (!document.WriteToFilePath(path))
    {
        return false;
    }
    Console.WriteLine("Browse the changed file in " + path);
    return true;
}

CPDFDocument document = CPDFDocument.InitWithFilePath("SamplePDF.pdf");
if (AddTextWatermark(document))
{
    Console.WriteLine("Add text watermark done.");
}
else
{
    Console.WriteLine("Add text watermark failed.");
}
Private Shared Function AddTextWatermark(ByVal document As CPDFDocument) As Boolean
	Dim watermark As CPDFWatermark = document.InitWatermark(C_Watermark_Type.WATERMARK_TYPE_TEXT)
	watermark.SetText("test")
	watermark.SetFontName("Helvetica")
	watermark.SetPages("0-3")
	Dim color() As Byte = { 255, 0, 0 }
	watermark.SetTextRGBColor(color)
	watermark.SetScale(2)
	watermark.SetRotation(0)
	watermark.SetOpacity(120)
	watermark.SetVertalign(C_Watermark_Vertalign.WATERMARK_VERTALIGN_CENTER)
	watermark.SetHorizalign(C_Watermark_Horizalign.WATERMARK_HORIZALIGN_CENTER)
	watermark.SetVertOffset(0)
	watermark.SetHorizOffset(0)
	watermark.SetFront(True)
	watermark.SetFullScreen(True)
	watermark.SetVerticalSpacing(10)
	watermark.SetHorizontalSpacing(10)
	watermark.CreateWatermark()
	Dim path As String = "AddTextWatermarkTest.pdf"
	If Not document.WriteToFilePath(path) Then
		Return False
	End If
	Console.WriteLine("Browse the changed file in " & path)
	Return True
End Function

Private document As CPDFDocument = CPDFDocument.InitWithFilePath("SamplePDF.pdf")
If AddTextWatermark(document) Then
	Console.WriteLine("Add text watermark done.")
Else
	Console.WriteLine("Add text watermark failed.")
End If
$vbLabelText   $csharpLabel

Una Comparación Entre Compdfkit & IronPDF: Figura 11 - Ejemplo de salida del código mostrado la marca de agua añadida usando ComPDFKit

En este ejemplo, la clase CPDFDocument se usa para abrir un documento PDF existente. El método AddTextWatermark inicializa una marca de agua de texto usando el método InitWatermark. Se establecen varias propiedades de la marca de agua, como contenido de texto, fuente, color, escala, rotación, opacidad, alineación y espaciado. La marca de agua se crea luego y se aplica a las páginas especificadas del documento PDF. Finalmente, el PDF modificado se guarda en una ruta especificada. Se necesitan métodos diferentes para integrar marcas de agua de imagen.

8. PDFA

PDF/A es una versión estandarizada de PDF diseñada para la preservación digital a largo plazo de documentos electrónicos. Garantizar que los documentos cumplan con PDF/A asegura que puedan ser visualizados y reproducidos de manera fiable en el futuro. Esta sección explora cómo crear documentos compatibles con PDF/A usando dos librerías populares: IronPDF y ComPDFKit.

8.1 PDFA usando IronPDF

IronPDF simplifica el proceso de convertir documentos PDF estándar a documentos compatibles con PDF/A. Con IronPDF, puede cargar fácilmente un PDF existente y guardarlo en un formato compatible con PDF/A.

using IronPdf;
using System;

class Program
{
    static void Main()
    {
        License.LicenseKey = "License-Key";
        PdfDocument pdf = PdfDocument.FromFile("Source.pdf");
        pdf.SaveAsPdfA("pdfa-compliant.pdf", PdfAVersions.PdfA3);
    }
}
using IronPdf;
using System;

class Program
{
    static void Main()
    {
        License.LicenseKey = "License-Key";
        PdfDocument pdf = PdfDocument.FromFile("Source.pdf");
        pdf.SaveAsPdfA("pdfa-compliant.pdf", PdfAVersions.PdfA3);
    }
}
Imports IronPdf
Imports System

Friend Class Program
	Shared Sub Main()
		License.LicenseKey = "License-Key"
		Dim pdf As PdfDocument = PdfDocument.FromFile("Source.pdf")
		pdf.SaveAsPdfA("pdfa-compliant.pdf", PdfAVersions.PdfA3)
	End Sub
End Class
$vbLabelText   $csharpLabel

Aquí hay una breve descripción del proceso:

  1. Inicializar IronPDF: Comience importando la librería de IronPDF y configurando su clave de licencia.
  2. Cargar el PDF: Use PdfDocument.FromFile para cargar su archivo PDF de origen.
  3. Convertir y Guardar: Convierta el PDF cargado a PDF/A especificando la versión deseada de PDF/A y guardando el documento resultante.

Este enfoque simple hace que IronPDF sea una opción conveniente para manejar conversiones PDF/A.

8.2 PDFA usando ComPDFKit

ComPDFKit proporciona una solución robusta para convertir PDFs a formato PDF/A. El proceso involucra la inicialización de un documento PDF, definir la ruta de salida e invocar el método de conversión.

static public bool CovertToPDFA1a(CPDFDocument document)
{
    string convertToPDFA1aPath = "ConvertToPDFA1aTest.pdf";
    if (!document.WritePDFAToFilePath(CPDFType.CPDFTypePDFA1a, convertToPDFA1aPath))
    {
        return false;
    }
    Console.WriteLine("Browse the changed file in " + convertToPDFA1aPath);
    return true;
}

CPDFDocument document = CPDFDocument.InitWithFilePath("CommonFivePage.pdf");
if (CovertToPDFA1a(document))
{
    Console.WriteLine("Convert to PDF/A-1a done.");
}
else
{
    Console.WriteLine("Convert to PDF/A-1a failed.");
}
static public bool CovertToPDFA1a(CPDFDocument document)
{
    string convertToPDFA1aPath = "ConvertToPDFA1aTest.pdf";
    if (!document.WritePDFAToFilePath(CPDFType.CPDFTypePDFA1a, convertToPDFA1aPath))
    {
        return false;
    }
    Console.WriteLine("Browse the changed file in " + convertToPDFA1aPath);
    return true;
}

CPDFDocument document = CPDFDocument.InitWithFilePath("CommonFivePage.pdf");
if (CovertToPDFA1a(document))
{
    Console.WriteLine("Convert to PDF/A-1a done.");
}
else
{
    Console.WriteLine("Convert to PDF/A-1a failed.");
}
Public Shared Function CovertToPDFA1a(ByVal document As CPDFDocument) As Boolean
	Dim convertToPDFA1aPath As String = "ConvertToPDFA1aTest.pdf"
	If Not document.WritePDFAToFilePath(CPDFType.CPDFTypePDFA1a, convertToPDFA1aPath) Then
		Return False
	End If
	Console.WriteLine("Browse the changed file in " & convertToPDFA1aPath)
	Return True
End Function

Private document As CPDFDocument = CPDFDocument.InitWithFilePath("CommonFivePage.pdf")
If CovertToPDFA1a(document) Then
	Console.WriteLine("Convert to PDF/A-1a done.")
Else
	Console.WriteLine("Convert to PDF/A-1a failed.")
End If
$vbLabelText   $csharpLabel

Aquí hay un resumen de los pasos:

  1. Inicializar el Documento: Cargue el documento PDF usando CPDFDocument.InitWithFilePath.
  2. Configurar el Directorio de Salida: Asegúrese de que el directorio de salida exista o créelo si es necesario.
  3. Convertir a PDF/A: Use WritePDFAToFilePath con el tipo de PDF/A especificado para realizar la conversión y guardar el archivo.

9. Firma Digital

Las firmas digitales son esenciales para verificar la autenticidad e integridad de los documentos. Esta sección demuestra cómo añadir firmas digitales a PDFs usando IronPDF y ComPDFKit.

9.1 Firma Digital por IronPDF

IronPDF proporciona una manera simple y efectiva de aplicar firmas digitales a documentos PDF.

using IronPdf;
using IronPdf.Signing;

class Program
{
    static void Main(string[] args)
    {
        var simpleSignature = new PdfSignature("MyCert.p12", "newpassword");
        simpleSignature.SignPdfFile("sample.pdf");
    }
}
using IronPdf;
using IronPdf.Signing;

class Program
{
    static void Main(string[] args)
    {
        var simpleSignature = new PdfSignature("MyCert.p12", "newpassword");
        simpleSignature.SignPdfFile("sample.pdf");
    }
}
Imports IronPdf
Imports IronPdf.Signing

Friend Class Program
	Shared Sub Main(ByVal args() As String)
		Dim simpleSignature = New PdfSignature("MyCert.p12", "newpassword")
		simpleSignature.SignPdfFile("sample.pdf")
	End Sub
End Class
$vbLabelText   $csharpLabel

El proceso involucra:

  1. Inicializar IronPDF: Importe las librerías necesarias de IronPDF.
  2. Crear una Firma: Inicialice un objeto PdfSignature con el archivo de certificado y la contraseña.
  3. Firmar el PDF: Aplique la firma al PDF usando SignPdfFile.

Este método asegura que sus documentos PDF estén firmados de manera segura, mejorando su credibilidad y seguridad.

9.2 Firma Digital por CompDFKit

ComPDFKit ofrece una solución completa para crear firmas digitales con opciones de personalización extensas.

private static void CreateDigitalSignature(CPDFDocument document, string certificatePath, string password)
{
    Console.WriteLine("--------------------");
    Console.WriteLine("Create digital signature.");
    CPDFSignatureCertificate certificate = CPDFPKCS12CertHelper.GetCertificateWithPKCS12Path("Certificate.pfx", "ComPDFKit");
    CPDFPage page = document.PageAtIndex(0);
    CPDFSignatureWidget signatureField = page.CreateWidget(C_WIDGET_TYPE.WIDGET_SIGNATUREFIELDS) as CPDFSignatureWidget;
    signatureField.SetRect(new CRect(28, 420, 150, 370));
    signatureField.SetWidgetBorderRGBColor(new byte[] { 0, 0, 0 });
    signatureField.SetWidgetBgRGBColor(new byte[] { 150, 180, 210 });
    signatureField.UpdateAp();
    string name = GetGrantorFromDictionary(certificate.SubjectDict) + "\n";
    string date = DateTime.Now.ToString("yyyy.MM.dd HH:mm:ss");
    string reason = "I am the owner of the document.";
    string location = certificate.SubjectDict["C"];
    string DN = certificate.Subject;

    CPDFSignatureConfig signatureConfig = new CPDFSignatureConfig
    {
        Text = GetGrantorFromDictionary(certificate.SubjectDict),
        Content =
            "Name: " + name + "\n" +
            "Date: " + date + "\n" +
            "Reason: " + reason + " \n" +
            "Location: " + location + "\n" +
            "DN: " + DN + "\n",
        IsContentAlignLeft = false,
        IsDrawLogo = true,
        LogoBitmap = new Bitmap("Logo.png"),
        TextColor = new float[] { 0, 0, 0 },
        ContentColor = new float[] { 0, 0, 0 }
    };
    string filePath = document.FileName + "_Signed.pdf";
    signatureField.UpdataApWithSignature(signatureConfig);
    if (document.WriteSignatureToFilePath(signatureField,
        filePath,
        certificatePath, password,
        location,
        reason, CPDFSignaturePermissions.CPDFSignaturePermissionsNone))
    {
        Console.WriteLine("File saved in " + filePath);
        Console.WriteLine("Create digital signature done.");
    }
    else
    {
        Console.WriteLine("Create digital signature failed.");
    }
    Console.WriteLine("--------------------");
}
private static void CreateDigitalSignature(CPDFDocument document, string certificatePath, string password)
{
    Console.WriteLine("--------------------");
    Console.WriteLine("Create digital signature.");
    CPDFSignatureCertificate certificate = CPDFPKCS12CertHelper.GetCertificateWithPKCS12Path("Certificate.pfx", "ComPDFKit");
    CPDFPage page = document.PageAtIndex(0);
    CPDFSignatureWidget signatureField = page.CreateWidget(C_WIDGET_TYPE.WIDGET_SIGNATUREFIELDS) as CPDFSignatureWidget;
    signatureField.SetRect(new CRect(28, 420, 150, 370));
    signatureField.SetWidgetBorderRGBColor(new byte[] { 0, 0, 0 });
    signatureField.SetWidgetBgRGBColor(new byte[] { 150, 180, 210 });
    signatureField.UpdateAp();
    string name = GetGrantorFromDictionary(certificate.SubjectDict) + "\n";
    string date = DateTime.Now.ToString("yyyy.MM.dd HH:mm:ss");
    string reason = "I am the owner of the document.";
    string location = certificate.SubjectDict["C"];
    string DN = certificate.Subject;

    CPDFSignatureConfig signatureConfig = new CPDFSignatureConfig
    {
        Text = GetGrantorFromDictionary(certificate.SubjectDict),
        Content =
            "Name: " + name + "\n" +
            "Date: " + date + "\n" +
            "Reason: " + reason + " \n" +
            "Location: " + location + "\n" +
            "DN: " + DN + "\n",
        IsContentAlignLeft = false,
        IsDrawLogo = true,
        LogoBitmap = new Bitmap("Logo.png"),
        TextColor = new float[] { 0, 0, 0 },
        ContentColor = new float[] { 0, 0, 0 }
    };
    string filePath = document.FileName + "_Signed.pdf";
    signatureField.UpdataApWithSignature(signatureConfig);
    if (document.WriteSignatureToFilePath(signatureField,
        filePath,
        certificatePath, password,
        location,
        reason, CPDFSignaturePermissions.CPDFSignaturePermissionsNone))
    {
        Console.WriteLine("File saved in " + filePath);
        Console.WriteLine("Create digital signature done.");
    }
    else
    {
        Console.WriteLine("Create digital signature failed.");
    }
    Console.WriteLine("--------------------");
}
Imports Microsoft.VisualBasic

Private Shared Sub CreateDigitalSignature(ByVal document As CPDFDocument, ByVal certificatePath As String, ByVal password As String)
	Console.WriteLine("--------------------")
	Console.WriteLine("Create digital signature.")
	Dim certificate As CPDFSignatureCertificate = CPDFPKCS12CertHelper.GetCertificateWithPKCS12Path("Certificate.pfx", "ComPDFKit")
	Dim page As CPDFPage = document.PageAtIndex(0)
	Dim signatureField As CPDFSignatureWidget = TryCast(page.CreateWidget(C_WIDGET_TYPE.WIDGET_SIGNATUREFIELDS), CPDFSignatureWidget)
	signatureField.SetRect(New CRect(28, 420, 150, 370))
	signatureField.SetWidgetBorderRGBColor(New Byte() { 0, 0, 0 })
	signatureField.SetWidgetBgRGBColor(New Byte() { 150, 180, 210 })
	signatureField.UpdateAp()
	Dim name As String = GetGrantorFromDictionary(certificate.SubjectDict) & vbLf
	Dim [date] As String = DateTime.Now.ToString("yyyy.MM.dd HH:mm:ss")
	Dim reason As String = "I am the owner of the document."
	Dim location As String = certificate.SubjectDict("C")
	Dim DN As String = certificate.Subject

	Dim signatureConfig As New CPDFSignatureConfig With {
		.Text = GetGrantorFromDictionary(certificate.SubjectDict),
		.Content = "Name: " & name & vbLf & "Date: " & [date] & vbLf & "Reason: " & reason & " " & vbLf & "Location: " & location & vbLf & "DN: " & DN & vbLf,
		.IsContentAlignLeft = False,
		.IsDrawLogo = True,
		.LogoBitmap = New Bitmap("Logo.png"),
		.TextColor = New Single() { 0, 0, 0 },
		.ContentColor = New Single() { 0, 0, 0 }
	}
	Dim filePath As String = document.FileName & "_Signed.pdf"
	signatureField.UpdataApWithSignature(signatureConfig)
	If document.WriteSignatureToFilePath(signatureField, filePath, certificatePath, password, location, reason, CPDFSignaturePermissions.CPDFSignaturePermissionsNone) Then
		Console.WriteLine("File saved in " & filePath)
		Console.WriteLine("Create digital signature done.")
	Else
		Console.WriteLine("Create digital signature failed.")
	End If
	Console.WriteLine("--------------------")
End Sub
$vbLabelText   $csharpLabel

Los pasos incluyen:

  1. Inicializar el Documento y el Certificado: Cargue el documento PDF y obtenga el certificado usando CPDFPKCS12CertHelper.
  2. Crear y Configurar el Campo de Firma: Añada un campo de firma al PDF, configure sus propiedades y configure los detalles de la firma.
  3. Aplicar la Firma: Use WriteSignatureToFilePath para aplicar la firma y guardar el PDF firmado.

10. Extracción de Texto

Extraer texto de documentos PDF es crucial para varias tareas de procesamiento y análisis de datos. Esta sección explica cómo extraer texto de PDFs usando IronPDF y ComPDFKit.

10.1 Extraer Texto usando IronPDF

IronPDF ofrece un método sencillo para extraer texto de documentos PDF.

using IronPdf;
using System.IO;

PdfDocument pdf = PdfDocument.FromFile("PDF File With Text.pdf");
string text = pdf.ExtractAllText();
File.WriteAllText("PDF Text.txt", text);
using IronPdf;
using System.IO;

PdfDocument pdf = PdfDocument.FromFile("PDF File With Text.pdf");
string text = pdf.ExtractAllText();
File.WriteAllText("PDF Text.txt", text);
Imports IronPdf
Imports System.IO

Private pdf As PdfDocument = PdfDocument.FromFile("PDF File With Text.pdf")
Private text As String = pdf.ExtractAllText()
File.WriteAllText("PDF Text.txt", text)
$vbLabelText   $csharpLabel

El proceso involucra:

  1. Inicializar IronPDF: Importe la librería de IronPDF.
  2. Cargar el PDF: Use PdfDocument.FromFile para cargar el archivo PDF.
  3. Extraer Texto: Llame a ExtractAllText para recuperar todo el contenido de texto del PDF.
  4. Guardar Texto en un Archivo: Escriba el texto extraído en un archivo utilizando operaciones estándar de E/S de archivos.

Este método proporciona una manera fácil y eficiente de extraer y guardar texto de documentos PDF.

10.2 Extraer Texto usando ComPDFKit

ComPDFKit proporciona una solución flexible para la extracción de texto de documentos PDF.

static private bool PDFToText(CPDFDocument document)
{
    string path = "//PDFToText.txt";
    if (!document.PdfToText("1-" + document.PageCount.ToString(), path))//Page ranges are counted from 1
    {
        return false;
    }
    Console.WriteLine("Browse the generated file in " + path);
    return true;
}

static void Main(string[] args)
{
    Console.WriteLine("Running PDFPage test sample…\r\n");
    SDKLicenseHelper.LicenseVerify();
    CPDFDocument document = CPDFDocument.InitWithFilePath("CommonFivePage.pdf");

    if (PDFToText(document))
    {
        Console.WriteLine("PDF to text done.");
    }
    else
    {
        Console.WriteLine("PDF to text failed.");
    }
    Console.WriteLine("--------------------");
    Console.WriteLine("Done!");
    Console.WriteLine("--------------------");
    Console.ReadLine();
}
static private bool PDFToText(CPDFDocument document)
{
    string path = "//PDFToText.txt";
    if (!document.PdfToText("1-" + document.PageCount.ToString(), path))//Page ranges are counted from 1
    {
        return false;
    }
    Console.WriteLine("Browse the generated file in " + path);
    return true;
}

static void Main(string[] args)
{
    Console.WriteLine("Running PDFPage test sample…\r\n");
    SDKLicenseHelper.LicenseVerify();
    CPDFDocument document = CPDFDocument.InitWithFilePath("CommonFivePage.pdf");

    if (PDFToText(document))
    {
        Console.WriteLine("PDF to text done.");
    }
    else
    {
        Console.WriteLine("PDF to text failed.");
    }
    Console.WriteLine("--------------------");
    Console.WriteLine("Done!");
    Console.WriteLine("--------------------");
    Console.ReadLine();
}
Imports Microsoft.VisualBasic

Private Shared Function PDFToText(ByVal document As CPDFDocument) As Boolean
	Dim path As String = "//PDFToText.txt"
	If Not document.PdfToText("1-" & document.PageCount.ToString(), path) Then 'Page ranges are counted from 1
		Return False
	End If
	Console.WriteLine("Browse the generated file in " & path)
	Return True
End Function

Shared Sub Main(ByVal args() As String)
	Console.WriteLine("Running PDFPage test sample…" & vbCrLf)
	SDKLicenseHelper.LicenseVerify()
	Dim document As CPDFDocument = CPDFDocument.InitWithFilePath("CommonFivePage.pdf")

	If PDFToText(document) Then
		Console.WriteLine("PDF to text done.")
	Else
		Console.WriteLine("PDF to text failed.")
	End If
	Console.WriteLine("--------------------")
	Console.WriteLine("Done!")
	Console.WriteLine("--------------------")
	Console.ReadLine()
End Sub
$vbLabelText   $csharpLabel

Los pasos son:

  1. Inicializar el Documento: Cargue el documento PDF usando CPDFDocument.InitWithFilePath.
  2. Extraer y Guardar Texto: Use PdfToText para extraer texto del rango de páginas especificado y guardarlo en un archivo.

11. Licenciamiento

Los modelos de licenciamiento de IronPDF y ComPDFKit difieren en su enfoque y términos de uso. Entender estas diferencias puede ayudarle a elegir la herramienta adecuada para las necesidades y presupuesto de su proyecto.

11.1 Licenciamiento de IronPDF

Una Comparación Entre Compdfkit & IronPDF: Figura 12 - Página de licenciamiento de IronPDF

IronPDF opera bajo un modelo de licencia comercial, lo que significa que para aplicaciones comerciales o relacionadas con negocios, generalmente se requiere la compra de una licencia. Este modelo ofrece flexibilidad, incluyendo opciones como distribución libre de regalías. Esto permite a los desarrolladores incorporar la librería en sus proyectos sin enfrentar costos adicionales durante el tiempo de ejecución.

IronPDF ofrece licencias perpetuas. Las licencias perpetuas requieren un pago único para uso de por vida, con tarifas opcionales para actualizaciones y soporte técnico más allá del período inicial. Este modelo comercial asegura que las empresas reciban soporte dedicado, documentación completa y acceso a características avanzadas necesarias para la generación y manipulación profesional de PDF.

11.2 Licenciamiento de ComPDFKit

ComPDFKit emplea un modelo de licenciamiento flexible que se adapta a diferentes necesidades empresariales. Ofrece tanto licencias perpetuas como de suscripción. Una licencia perpetua implica un pago único que otorga acceso de por vida al SDK, con tarifas opcionales para actualizaciones y soporte extendido. Las licencias de suscripción requieren pagos regulares (mensuales o anuales) e incluyen acceso continuo a actualizaciones y soporte.

Al decidir entre IronPDF y ComPDFKit, considere los requisitos específicos de su proyecto, como la necesidad de soporte dedicado, restricciones de presupuesto y la escala de implementación. El modelo comercial de IronPDF es más adecuado para empresas que buscan soporte robusto y características avanzadas.

12. Documentación y Soporte

12.1. Documentación y Soporte de IronPDF

IronPDF ofrece documentación completa y opciones de soporte robustas para sus usuarios. La documentación es extensa y detallada, proporcionando orientación clara sobre instalación, uso básico, características avanzadas y solución de problemas. La documentación oficial está disponible en Read the Docs, que incluye una guía de Inicio Rápido, referencias detalladas de API y numerosos ejemplos de código para ayudar a los desarrolladores a comenzar y usar efectivamente las características de IronPDF.

IronPDF también mantiene una guía activa de solución de problemas y un sitio de soporte técnico a través de su blog y sección de ejemplos, donde los usuarios pueden encontrar soluciones a problemas comunes, como retrasos en el renderizado y desafíos de despliegue. El sitio de soporte incluye una colección de artículos que abordan preguntas frecuentes y problemas técnicos específicos.

Para soporte directo, IronPDF ofrece un equipo de atención al cliente receptivo que puede ser contactado para problemas más complejos o asistencia personalizada. Esta combinación de documentación extensa y una infraestructura de soporte fuerte hace de IronPDF una elección fiable para desarrolladores que buscan integrar funcionalidades de PDF en sus aplicaciones.

12.2. Documentación y Soporte de ComPDFKit

ComPDFKit también proporciona documentación y recursos de soporte completos para sus usuarios. Cubre varios aspectos del uso del SDK, desde la configuración básica hasta funcionalidades avanzadas como el marcado de agua y firmas digitales. Para soporte, ComPDFKit proporciona asistencia técnica a través de sus canales de atención al cliente. El equipo de soporte está disponible para ayudar a resolver problemas técnicos, responder preguntas y proporcionar orientación sobre el uso efectivo del SDK.

Aunque tanto IronPDF como ComPDFKit ofrecen documentación y soporte fuertes, IronPDF tiene una ventaja con sus guías de solución de problemas más extensas y un equipo de soporte altamente receptivo. Esto lo hace particularmente ventajoso para desarrolladores que puedan enfrentar desafíos técnicos complejos y necesiten asistencia fiable.

13. Conclusión

La comparación entre IronPDF y ComPDFKit destaca las fortalezas y consideraciones para los desarrolladores que buscan bibliotecas de C# robustas para la generación y manipulación de PDF.

ComPDFKit es un SDK de PDF completo que admite una amplia gama de funcionalidades necesarias para manejar documentos PDF de manera programática. Se destaca en las anotaciones de PDF y tiene capacidades de edición extensas. Sus características, como la conversión de formatos y las opciones de seguridad, aportan un valor significativo para los desarrolladores.

IronPDF, por otro lado, es conocido por su potente y fácil de usar API. Simplifica la generación de PDF renderizando PDFs desde HTML, CSS y JavaScript. IronPDF sobresale en la conversión de HTML a PDF, ofreciendo una integración perfecta con aplicaciones .NET. La biblioteca proporciona amplias capacidades de edición, incluyendo la adición de encabezados, pies de página, marcas de agua y firmas digitales.

Las características de seguridad de IronPDF aseguran que la información sensible dentro de los documentos PDF esté bien protegida. Su compatibilidad con múltiples plataformas .NET y rendimiento optimizado para cargas de trabajo altas lo convierten en una elección ideal para aplicaciones de nivel empresarial. El modelo de licencia comercial de IronPDF asegura soporte dedicado, documentación completa, y acceso a características avanzadas, haciéndolo particularmente adecuado para proyectos de grado profesional.

IronPDF se destaca como una opción fuerte en comparación con ComPDFKit para desarrolladores que buscan una biblioteca de PDF completa y rica en funciones. Sus funciones avanzadas, API amigable y robusta infraestructura de soporte lo convierten en una solución preferida para empresas y proyectos con requisitos diversos y exigentes relacionados con PDF. Las extensas capacidades de IronPDF y su soporte dedicado proporcionan una ventaja significativa, asegurando una generación y manipulación de PDF confiable y eficiente para aplicaciones profesionales.

En resumen, tanto IronPDF como ComPDFKit son herramientas poderosas para el procesamiento de PDF en C#. Sin embargo, el extenso conjunto de características de IronPDF, su rendimiento optimizado y soporte superior lo convierten en la elección preferida para desarrolladores que aspiran a aplicaciones de nivel profesional y empresarial.

IronPDF proporciona una licencia de prueba gratuita para que los usuarios prueben la biblioteca y sus capacidades. Las licencias de IronPDF comienzan desde $799. Additionally, Iron Software bundles nine libraries for the cost of two, which includes IronXL and IronOCR along with IronPDF.

(ComPDFKit es una marca registrada de su respectivo propietario. Este sitio no está afiliado, respaldado ni patrocinado por ComPDFKit. 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 puedo convertir HTML a PDF en C#?

Puedes usar el método RenderHtmlAsPdf de IronPDF para convertir cadenas HTML en PDFs. Este método es adecuado para convertir HTML, CSS y JavaScript en documentos PDF de alta calidad.

¿Cuáles son los beneficios de usar una biblioteca PDF C#?

Las bibliotecas PDF C# como IronPDF y ComPDFKit permiten la creación, modificación y extracción de texto/imagen en PDFs. Soportan características como manejo de formularios, firmas digitales y seguridad, proporcionando flexibilidad en diferentes plataformas.

¿Puedo añadir seguridad a mis PDFs en C#?

Sí, usando IronPDF, puedes mejorar la seguridad de los PDFs estableciendo contraseñas, encriptando documentos y añadiendo firmas digitales para proteger información sensible.

¿Cómo maneja ComPDFKit la edición y conversión de PDFs?

ComPDFKit ofrece capacidades de edición robustas y conversión a varios formatos, incluyendo PDF/A para preservación digital a largo plazo, haciéndolo versátil para proyectos multiplataforma.

¿Qué opciones de licencia están disponibles para las bibliotecas PDF C#?

IronPDF ofrece un modelo de licencias comerciales con licencias perpetuas, mientras que ComPDFKit proporciona tanto licencias perpetuas como de suscripción, permitiendo flexibilidad basada en las necesidades empresariales.

¿Qué soporte y recursos están disponibles para los desarrolladores que usan estas bibliotecas?

IronPDF proporciona documentación completa y soporte al cliente receptivo, haciéndolo adecuado para aplicaciones de nivel empresarial. ComPDFKit también ofrece documentación exhaustiva y soporte técnico.

¿Cómo comparan IronPDF y ComPDFKit en términos de conversión de HTML a PDF?

IronPDF sobresale en la conversión de HTML a PDF, soportando cadenas HTML, URLs, formularios web ASPX y vistas MVC, mientras que ComPDFKit ofrece una gama más amplia de características de edición y conversión de PDF.

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