Saltar al pie de página
COMPARACIONES DE PRODUCTOS

IronPDF vs Accusoft PDF Viewer: ¿Qué biblioteca de C# es mejor para convertir HTML a PDF?

IronPDF y Accusoft PDF Viewer convierten HTML a PDF en .NET. IronPDF ofrece una sintaxis sencilla, procesamiento local sin dependencias de la nube y conversiones ilimitadas desde $699. Por el contrario, Accusoft requiere conexión a internet y cobra por transacción.

Comparar IronPDF con Accusoft PDF Viewer

  • Convertir HTML a PDF
  • Establecer encabezado y pie de página para PDF
  • Convertir PDF en archivo de imagen
  • Comparar licencias, opciones de prueba gratuitas y más
Cheat Sheet `card related to IronPDF vs Accusoft PDF Viewer: ¿Qué biblioteca de C# es mejor para convertir HTML a PDF?

Resumen

¿Qué es IronPDF y cómo funciona?

IronPDF es una biblioteca de HTML a PDF de C# que permite a los desarrolladores crear archivos PDF a partir de fuentes como HTML string , WebPage y URL . También permite configurar propiedades como Marca de agua , Marcador y Encabezado y pie de página . Además, los desarrolladores pueden fusionar varios archivos PDF en uno o convertir páginas PDF en imágenes , y viceversa mediante la conversión de imágenes a PDF .

IronPDF es gratuito para el desarrollo y ofrece una prueba de implementación de 30 días para proyectos en vivo. Proporciona documentación completa, ejemplos de código y referencia de API para ayudar a los desarrolladores a comenzar rápidamente.

Developers can download a file project from this link.

What Is Accusoft `PrizmDoc` Viewer and How Does It Work?

PrizmDoc Viewer es una API REST que trabaja con archivos PDF y los convierte a otros formatos de forma remota. PrizmDoc puede convertir más de 100 formatos de archivos diferentes a PDF y de PDF a PNG, JPG , TIFF y SVG. También proporciona varias opciones de firma electrónica para aplicaciones.

How Do IronPDF and `PrizmDoc` Viewer Compare?

IronPDF`PrizmDoc` Viewer
Work with [PDF files programmatically](/how-to/csharp-parse-pdf/). Trabaje con archivos PDF mediante programación.
Supports [.NET Core](/docs/) with [Windows](/get-started/windows/), [Mac](/get-started/macos/), or [Linux](/get-started/linux/). Compatible con .NET Core utilizando Windows, Mac o Linux.
[Works Locally](/get-started/installation-overview/) Sends Documents to a [remote server](/get-started/ironpdfengine/).
Work with or without [Asynchronous Programming](/how-to/async/). Must use Asynchronous Programming with `System.Threading.Tasks`.
Works offline once [installed](/get-started/installation-overview/). Requires internet connection for `PrizmDoc` server requests.
Provides many [predefined functions](/features/). Proporciona algunas funciones predefinidas.
Often requires [minimal lines of code](/tutorials/html-to-pdf/). A menudo requiere muchas líneas de código.
[Ilimitado conversions](/licensing/) per project in each license.Transacciones limitadas en licencias alojadas en la nube.
[Free for development](/get-started/quickstart/) without time limits. Sólo 300 transacciones con prueba.

Instalemos ambas bibliotecas y comparemos el código.


Paso 1: Instalación

¿Cómo instalo IronPDF en mi proyecto .NET?

Hay dos formas de instalar IronPDF en un proyecto, sin diferencias entre los enfoques. IronPDF admite varios entornos, incluidos la implementación de Azure , AWS Lambda , contenedores Docker y aplicaciones Blazor .

¿Cuáles son las diferentes formas de descargar IronPDF?

Descargue IronPDF.dll y agregue su referencia al proyecto. Los desarrolladores también pueden utilizar Windows Installer para la instalación en todo el sistema. Después de esto, el espacio de nombres IronPdf se vuelve accesible mediante:

using IronPdf;
using IronPdf;
$vbLabelText   $csharpLabel

Ahora, los desarrolladores pueden acceder fácilmente a las funciones y clases proporcionadas de IronPDF, incluido ChromePdfRenderer para renderizado, manipulación de documentos PDF y funciones de seguridad .

¿Cómo instalo IronPDF a través del Administrador de paquetes NuGet?


How Do I Install `PrizmDoc` Viewer from Accusoft?

PrizmDoc Viewer tiene dos partes: el componente del lado del servidor llamado PrizmDoc Server , que se comporta como una API RESTful, y el proyecto cliente que envía solicitudes a la API y recibe respuestas. A diferencia de IronPDF, que funciona localmente sin dependencias externas , PrizmDoc requiere conectividad de red para operaciones basadas en la nube.

How Can I Access the `PrizmDoc` Server?

PrizmDoc Server es una aplicación del lado del servidor que recibe información básica con documentos como solicitudes (entrada) y convierte documentos en archivos PDF , luego envía los archivos PDF convertidos como respuestas (salida). Funciona como el núcleo técnico del producto: un motor de procesamiento y conversión de documentos. Los desarrolladores pueden utilizarlo mediante dos métodos diferentes, ambos con la misma estructura y técnicas de programación:

  1. Autoalojado:

    Esta opción requiere la organización de un servidor. Descargue PrizmDoc Server y luego instálelo. Lea más sobre cómo instalar PrizmDoc Server en Windows.

    Nota: Requiere un mínimo de 32 GB de RAM y CPU de 4 núcleos para un mejor rendimiento. Por el contrario, los requisitos del sistema de IronPDF son mucho más modestos.

  2. Alojado en la nube:

    Este servicio basado en la nube elimina la necesidad de organizar un servidor. Para utilizar esta opción, cree una cuenta y copie la API key desde el menú API Key en la página de inicio.

Primero, examinemos la estructura básica para trabajar con PrizmDoc Viewer para convertir documentos en archivos PDF interactuando directamente con Accusoft server usando WebClient() en una aplicación de consola C#.

Nota: El siguiente ejemplo demuestra cómo PrizmDoc maneja los archivos PDF conceptualmente. Es extenso, así que siéntete libre de omitir este ejemplo y pasar directamente a la comparación .

¿Cómo funciona la estructura de trabajo de Accusoft?

Este ejemplo convierte myWebpage.html a sample.pdf . A diferencia de la sencilla conversión de HTML a PDF de IronPDF , PrizmDoc requiere múltiples llamadas API.

Nota: La biblioteca Newtonsoft.Json debe estar instalada y referenciada en el proyecto.

Primero, agregue las siguientes bibliotecas al proyecto:

using System;
using System.IO;
using System.Net;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json.Linq; // Install Newtonsoft.Json via NuGet Package Manager
using System;
using System.IO;
using System.Net;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json.Linq; // Install Newtonsoft.Json via NuGet Package Manager
$vbLabelText   $csharpLabel

Luego, cree una variable pública Accusoft API Key y pegue la clave API en ella:

static string ApiKey = "Your-API-KEY";
static string ApiKey = "Your-API-KEY";
$vbLabelText   $csharpLabel

Hay 3 pasos para trabajar con archivos PDF usando PrizmDoc Viewer:

  1. Sube un archivo al servidor PrizmDoc .
  2. Convertir el archivo cargado.
  3. Descargue el archivo convertido del servidor PrizmDoc .

Una función independiente gestiona cada paso:

static void Main(string[] args)
{
    //---Upload file to Server---
    JObject uploadResults = UploadToServer("myWebpage.html").Result;
    string fileID = (string)uploadResults.SelectToken("fileId");
    string affinityToken = (string)uploadResults.SelectToken("affinityToken");

    //---Convert the uploaded file to PDF---
    JObject convertResults = Convert(affinityToken, fileID).Result;
    string processId = (string)convertResults.SelectToken("processId");
    affinityToken = (string)convertResults.SelectToken("affinityToken");

    //---Check the status that conversion is completed---
    JObject convertStatusResults = ConvertStatus(processId, affinityToken).Result;
    string convertStatus = (string)convertStatusResults.SelectToken("state");

    //---Continuously checking whether conversion completed---
    while (!(convertStatus.Equals("complete")))
    {
        System.Threading.Thread.Sleep(30000);
        convertStatusResults = ConvertStatus(processId, affinityToken).Result;
        convertStatus = (string)convertStatusResults.SelectToken("state");
    }

    //---Download the converted file from server---
    string newFileID = (string)convertStatusResults.SelectToken("output.results[0].fileId");
    DownloadFromServer(affinityToken, newFileID, "sample.pdf").Wait();

    Console.WriteLine("PDF file created successfully...!");
    Console.ReadKey();
}
static void Main(string[] args)
{
    //---Upload file to Server---
    JObject uploadResults = UploadToServer("myWebpage.html").Result;
    string fileID = (string)uploadResults.SelectToken("fileId");
    string affinityToken = (string)uploadResults.SelectToken("affinityToken");

    //---Convert the uploaded file to PDF---
    JObject convertResults = Convert(affinityToken, fileID).Result;
    string processId = (string)convertResults.SelectToken("processId");
    affinityToken = (string)convertResults.SelectToken("affinityToken");

    //---Check the status that conversion is completed---
    JObject convertStatusResults = ConvertStatus(processId, affinityToken).Result;
    string convertStatus = (string)convertStatusResults.SelectToken("state");

    //---Continuously checking whether conversion completed---
    while (!(convertStatus.Equals("complete")))
    {
        System.Threading.Thread.Sleep(30000);
        convertStatusResults = ConvertStatus(processId, affinityToken).Result;
        convertStatus = (string)convertStatusResults.SelectToken("state");
    }

    //---Download the converted file from server---
    string newFileID = (string)convertStatusResults.SelectToken("output.results[0].fileId");
    DownloadFromServer(affinityToken, newFileID, "sample.pdf").Wait();

    Console.WriteLine("PDF file created successfully...!");
    Console.ReadKey();
}
$vbLabelText   $csharpLabel

1. Cargar archivo al servidor:

public static async Task<JObject> UploadToServer(string fileToUpload)
{
    FileInfo input = new FileInfo(fileToUpload);
    if (input == null)
    {
        throw new ArgumentException("Missing parameter input", nameof(input));
    }
    var fileName = input.Name;
    var endpoint = new Uri("___PROTECTED_URL_123___");
    using (var client = new WebClient())
    {
        client.Headers.Add("acs-api-key", ApiKey);
        client.Headers.Add("Content-Type", "application/octet-stream");
        using (var reader = new BinaryReader(input.OpenRead()))
        {
            var data = reader.ReadBytes((int)reader.BaseStream.Length);
            var results = await client.UploadDataTaskAsync(endpoint, "POST", data);
            string getResult = Encoding.ASCII.GetString(results);
            return JObject.Parse(getResult);
        }
    }
}
public static async Task<JObject> UploadToServer(string fileToUpload)
{
    FileInfo input = new FileInfo(fileToUpload);
    if (input == null)
    {
        throw new ArgumentException("Missing parameter input", nameof(input));
    }
    var fileName = input.Name;
    var endpoint = new Uri("___PROTECTED_URL_123___");
    using (var client = new WebClient())
    {
        client.Headers.Add("acs-api-key", ApiKey);
        client.Headers.Add("Content-Type", "application/octet-stream");
        using (var reader = new BinaryReader(input.OpenRead()))
        {
            var data = reader.ReadBytes((int)reader.BaseStream.Length);
            var results = await client.UploadDataTaskAsync(endpoint, "POST", data);
            string getResult = Encoding.ASCII.GetString(results);
            return JObject.Parse(getResult);
        }
    }
}
$vbLabelText   $csharpLabel

2. Convertir el archivo cargado a PDF:

public static async Task<JObject> Convert(string affinityToken, string fileID)
{
    var endpoint = new Uri("___PROTECTED_URL_124___");
    using (var client = new WebClient())
    {
        client.Headers.Add("Content-Type", "application/json");
        client.Headers.Add("acs-api-key", ApiKey);
        client.Headers.Add("Accusoft-Affinity-Token", affinityToken);
        JObject myJson =
            new JObject(
                new JProperty("input",
                    new JObject(
                        new JProperty("sources",
                            new JArray(
                                new JObject(
                                    new JProperty("fileId", fileID)
                                )
                            )
                        ),
                        new JProperty("dest",
                            new JObject(
                                new JProperty("format", "pdf")
                            )
                        )
                    )
                )
            );
        string results = await client.UploadStringTaskAsync(endpoint, "POST", myJson.ToString());
        return JObject.Parse(results);
    }
}
public static async Task<JObject> Convert(string affinityToken, string fileID)
{
    var endpoint = new Uri("___PROTECTED_URL_124___");
    using (var client = new WebClient())
    {
        client.Headers.Add("Content-Type", "application/json");
        client.Headers.Add("acs-api-key", ApiKey);
        client.Headers.Add("Accusoft-Affinity-Token", affinityToken);
        JObject myJson =
            new JObject(
                new JProperty("input",
                    new JObject(
                        new JProperty("sources",
                            new JArray(
                                new JObject(
                                    new JProperty("fileId", fileID)
                                )
                            )
                        ),
                        new JProperty("dest",
                            new JObject(
                                new JProperty("format", "pdf")
                            )
                        )
                    )
                )
            );
        string results = await client.UploadStringTaskAsync(endpoint, "POST", myJson.ToString());
        return JObject.Parse(results);
    }
}
$vbLabelText   $csharpLabel

El siguiente JSON es el valor resultante del objeto myJson:

{
  "input": {
    "sources": 
    [
      {"fileId": "Auto Generated FileId Value"}
    ],
    "dest": {
      "format": "pdf"
    }
  }
}

Verificar el estado de si la conversión está completa o no

public static async Task<JObject> ConvertStatus(string processId, string affinityToken)
{
    string endpoint = "___PROTECTED_URL_125___" + processId;
    using (var client = new WebClient())
    {
        client.BaseAddress = endpoint;
        client.Headers.Add("acs-api-key", ApiKey);
        client.Headers.Add("Accusoft-Affinity-Token", affinityToken);
        string results = await client.DownloadStringTaskAsync(endpoint);
        return JObject.Parse(results);
    }
}
public static async Task<JObject> ConvertStatus(string processId, string affinityToken)
{
    string endpoint = "___PROTECTED_URL_125___" + processId;
    using (var client = new WebClient())
    {
        client.BaseAddress = endpoint;
        client.Headers.Add("acs-api-key", ApiKey);
        client.Headers.Add("Accusoft-Affinity-Token", affinityToken);
        string results = await client.DownloadStringTaskAsync(endpoint);
        return JObject.Parse(results);
    }
}
$vbLabelText   $csharpLabel

3. Descargar el archivo convertido del servidor

public static async Task DownloadFromServer(string affinityToken, string fileId, string outfile)
{
    var endpoint = new Uri("___PROTECTED_URL_126___" + fileId);

    using (var client = new WebClient())
    {
        client.Headers.Add("acs-api-key", ApiKey);
        client.Headers.Add("Accusoft-Affinity-Token", affinityToken);
        FileInfo output = new FileInfo(outfile);

        using (var writeStream = output.Create())
        {
            var results = await client.DownloadDataTaskAsync(endpoint);
            await writeStream.WriteAsync(results, 0, results.Length);
        }
    }
}
public static async Task DownloadFromServer(string affinityToken, string fileId, string outfile)
{
    var endpoint = new Uri("___PROTECTED_URL_126___" + fileId);

    using (var client = new WebClient())
    {
        client.Headers.Add("acs-api-key", ApiKey);
        client.Headers.Add("Accusoft-Affinity-Token", affinityToken);
        FileInfo output = new FileInfo(outfile);

        using (var writeStream = output.Create())
        {
            var results = await client.DownloadDataTaskAsync(endpoint);
            await writeStream.WriteAsync(results, 0, results.Length);
        }
    }
}
$vbLabelText   $csharpLabel

El ejemplo anterior requiere un esfuerzo significativo. Para minimizar la carga de trabajo, Accusoft introdujo una biblioteca .NET llamada Accusoft.PrizmDocServerSDK , un contenedor alrededor de la API REST de PrizmDoc Server. Examinemos cómo instalar y utilizar esta biblioteca en proyectos .NET.

How Do I Install Accusoft.`PrizmDocServer`SDK?

Hay dos maneras de instalar el contenedor.

  • Consola del Gestor de Paquetes:

    Si utiliza la consola del administrador de paquetes, ejecute el siguiente comando:

    _BLOQUE DE CÓDIGO_10 _

  • Administrar Paquetes para la Solución:

    Si utiliza la GUI del Administrador de paquetes NuGet, busque Accusoft.PrizmDocServerSDK en la barra de búsqueda e instálelo.

Ahora, los desarrolladores pueden acceder fácilmente al espacio de nombres Accusoft.PrizmDocServer y usarlo:

using Accusoft.PrizmDocServer;
using Accusoft.PrizmDocServer;
$vbLabelText   $csharpLabel

Tutoriales prácticos

¿Cómo se comparan IronPDF y PrizmDoc Viewer en ejemplos de código?

Después de revisar la introducción e instalación de ambos componentes, es hora de trabajar con ambos. Los siguientes casos de uso demuestran la implementación utilizando ambos componentes para ayudar a comprender las estructuras de programación y determinar cuál se adapta mejor a los requisitos del proyecto.


¿Cómo convierto HTML a PDF usando IronPDF vs PrizmDoc Viewer?

Para esta comparación, convirtamos una página web llamada myWebPage.html en un archivo PDF y guardémoslo en la ubicación de destino. El motor de renderizado Chrome de IronPDF proporciona una conversión perfecta en píxeles con soporte total para CSS , JavaScript y fuentes web .

¿Cómo IronPDF convierte HTML a PDF?

using IronPdf;

static void Main(string[] args)
{
    // Create rendering converter
    var converter = new ChromePdfRenderer();
    // Render HTML file to PDF
    using var PDF = converter.RenderHTMLFileAsPdf("myWebPage.html");
    // Save to target location
    PDF.SaveAs("sample.pdf");
}
using IronPdf;

static void Main(string[] args)
{
    // Create rendering converter
    var converter = new ChromePdfRenderer();
    // Render HTML file to PDF
    using var PDF = converter.RenderHTMLFileAsPdf("myWebPage.html");
    // Save to target location
    PDF.SaveAs("sample.pdf");
}
$vbLabelText   $csharpLabel

El código anterior crea un archivo sample.pdf y lo guarda en la carpeta bin&gt;debug del proyecto. IronPDF también admite cadenas HTML , URL e incluso archivos ZIP que contengan HTML como fuentes de entrada.

Los desarrolladores también pueden especificar cualquier ruta como esta: PDF.SaveAs(&quot;E:/sample.pdf&quot;); o guardar en el flujo de memoria para implementaciones en la nube.

Lea más sobre cómo trabajar con IronPDF para trabajar con archivos PDF.

Ahora, realicemos la misma tarea usando PrizmDoc Viewer para comparar.

¿Cómo convierte PrizmDoc Viewer HTML a PDF?

En la sección de instalación PrizmDoc Viewer, se discutió cómo obtener la Accusoft API Key . Aquí te explicamos cómo usarlo.

Primero, envíe una solicitud al servidor PrizmDoc y reciba una respuesta. Este proceso lleva tiempo y requiere Programación Asincrónica . IronPDF también admite métodos asincrónicos para un mejor rendimiento.

Nota: Asegúrese de que el sistema esté conectado a Internet al crear archivos PDF utilizando los servicios en la nube de PrizmDoc Viewer.

using Accusoft.PrizmDocServer;
using Accusoft.PrizmDocServer.Conversion;

static void Main(string[] args)
{
    ChromePdfRenderer().GetAwaiter().GetResult();
}

private static async Task ChromePdfRenderer()
{
    // Instantiate PrizmDocServerClient object
    var prizmDocServer = new PrizmDocServerClient("___PROTECTED_URL_127___", "Your-API-KEY");
    // Specify HTML file and convert it to a PDF.
    ConversionResult result = await prizmDocServer.ConvertToPdfAsync("myWebPage.html");
    // Save PDF file to the target location
    await result.RemoteWorkFile.SaveAsync("sample.pdf");
}
using Accusoft.PrizmDocServer;
using Accusoft.PrizmDocServer.Conversion;

static void Main(string[] args)
{
    ChromePdfRenderer().GetAwaiter().GetResult();
}

private static async Task ChromePdfRenderer()
{
    // Instantiate PrizmDocServerClient object
    var prizmDocServer = new PrizmDocServerClient("___PROTECTED_URL_127___", "Your-API-KEY");
    // Specify HTML file and convert it to a PDF.
    ConversionResult result = await prizmDocServer.ConvertToPdfAsync("myWebPage.html");
    // Save PDF file to the target location
    await result.RemoteWorkFile.SaveAsync("sample.pdf");
}
$vbLabelText   $csharpLabel

Obtenga más información sobre cómo trabajar con PrizmDoc Viewer.

¿Qué biblioteca proporciona una conversión de HTML a PDF más sencilla?

Estos ejemplos demuestran que IronPDF ofrece un enfoque más sencillo para crear archivos PDF y requiere menos tiempo. IronPDF también ofrece opciones de renderizado para ajustar el resultado final, incluyendo tamaños de papel personalizados , márgenes y configuraciones de ventana gráfica .


¿Cómo convierto imágenes a PDF usando IronPDF vs PrizmDoc Viewer?

Esta comparación demuestra cómo crear un archivo PDF a partir de una imagen ubicada en la carpeta debug del proyecto. Los desarrolladores comienzan con IronPDF.

¿Cómo IronPDF convierte imágenes a PDF?

using IronPdf;

static void Main(string[] args)
{
    // Specify the image to be converted
    using var converted = ImageToPdfConverter.ImageToPdf("google.png");
    // Save PDF file to the target location
    converted.SaveAs("sample.pdf");
}
using IronPdf;

static void Main(string[] args)
{
    // Specify the image to be converted
    using var converted = ImageToPdfConverter.ImageToPdf("google.png");
    // Save PDF file to the target location
    converted.SaveAs("sample.pdf");
}
$vbLabelText   $csharpLabel

IronPDF también admite la conversión de TIFF de múltiples fotogramas , la incrustación de imágenes de Azure Blob Storage y la incrustación de imágenes Base64 .

Salida:

Esta captura de pantalla muestra el archivo PDF recién creado sample.pdf usando el código anterior:

Documento PDF que muestra el logotipo de Google centrado sobre un fondo blanco, lo que demuestra la capacidad de conversión de imágenes a PDF de IronPDF

Crear un archivo PDF a partir de una imagen usando IronPDF es sencillo. Ahora, realicemos la misma tarea utilizando PrizmDoc Viewer y examinemos el archivo PDF generado.

¿Cómo convierte PrizmDoc Viewer imágenes a PDF?

using Accusoft.PrizmDocServer;
using Accusoft.PrizmDocServer.Conversion;

static void Main(string[] args)
{
    ImageToPDF().GetAwaiter().GetResult();
}

private static async Task ImageToPDF()
{
    // Instantiate PrizmDocServerClient object
    var prizmDocServer = new PrizmDocServerClient("___PROTECTED_URL_128___", "Your-API-KEY");
    // Specify the image to be converted
    ConversionResult results = await prizmDocServer.ConvertToPdfAsync("google.png");
    // Save PDF file to the target location
    await results.RemoteWorkFile.SaveAsync("sample.pdf");
}
using Accusoft.PrizmDocServer;
using Accusoft.PrizmDocServer.Conversion;

static void Main(string[] args)
{
    ImageToPDF().GetAwaiter().GetResult();
}

private static async Task ImageToPDF()
{
    // Instantiate PrizmDocServerClient object
    var prizmDocServer = new PrizmDocServerClient("___PROTECTED_URL_128___", "Your-API-KEY");
    // Specify the image to be converted
    ConversionResult results = await prizmDocServer.ConvertToPdfAsync("google.png");
    // Save PDF file to the target location
    await results.RemoteWorkFile.SaveAsync("sample.pdf");
}
$vbLabelText   $csharpLabel

Salida: Esta captura de pantalla muestra el archivo PDF recién creado sample.pdf a partir del código anterior:

PDF viewer displaying the Google logo on a gray background, showing `PrizmDoc`'s image conversion result

¿Qué biblioteca requiere menos código para la conversión de imágenes a PDF?

IronPDF requiere solo dos líneas de código. Por el contrario, el uso del servidor PrizmDoc implica más líneas de código con programación asincrónica. La salida de IronPDF también proporciona automáticamente un documento de página completa utilizable. IronPDF ofrece opciones adicionales para el posicionamiento de imágenes y conversiones de múltiples imágenes .


¿Cómo fusiono varios archivos PDF usando IronPDF vs PrizmDoc Viewer?

Para esta comparación, supongamos que existen tres archivos PDF llamados A.pdf , B.pdf y C.pdf . La tarea es fusionarlos en un solo archivo PDF . Ambos componentes pueden realizar esta tarea. Primero, el ejemplo muestra cómo realizar esto usando IronPDF.

¿Cómo fusiona IronPDF archivos PDF?

using IronPdf;
using System.Collections.Generic;

static void Main(string[] args)
{
    // Create rendering converter  
    var Renderer = new IronPdf.ChromePdfRenderer();
    // Create a list of pdf files
    var PDFs = new List<PdfDocument>();
    PDFs.Add(PdfDocument.FromFile("A.pdf"));
    PDFs.Add(PdfDocument.FromFile("B.pdf"));
    PDFs.Add(PdfDocument.FromFile("C.pdf"));
    // Merge the list of pdf file
    using PdfDocument PDF = PdfDocument.Merge(PDFs);
    // Save merged file to the target location
    PDF.SaveAs("sample.pdf");

    foreach(var pdf in PDFs)
    {
        pdf.Dispose();
    }
}
using IronPdf;
using System.Collections.Generic;

static void Main(string[] args)
{
    // Create rendering converter  
    var Renderer = new IronPdf.ChromePdfRenderer();
    // Create a list of pdf files
    var PDFs = new List<PdfDocument>();
    PDFs.Add(PdfDocument.FromFile("A.pdf"));
    PDFs.Add(PdfDocument.FromFile("B.pdf"));
    PDFs.Add(PdfDocument.FromFile("C.pdf"));
    // Merge the list of pdf file
    using PdfDocument PDF = PdfDocument.Merge(PDFs);
    // Save merged file to the target location
    PDF.SaveAs("sample.pdf");

    foreach(var pdf in PDFs)
    {
        pdf.Dispose();
    }
}
$vbLabelText   $csharpLabel

El código anterior crea un archivo sample.pdf , que combina A.pdf , B.pdf y C.pdf . IronPDF también admite agregar y copiar páginas entre archivos PDF y dividir archivos PDF .

Ahora, realicemos la misma tarea utilizando PrizmDoc Viewer.

¿Cómo PrizmDoc Viewer fusiona archivos PDF?

using System.Threading.Tasks;
using Accusoft.PrizmDocServer;
using Accusoft.PrizmDocServer.Conversion;

static void Main(string[] args)
{
    PdfMerge().GetAwaiter().GetResult();
}

private static async Task PdfMerge()
{
    // Instantiate PrizmDocServerClient object
    var prizmDocServer = new PrizmDocServerClient("___PROTECTED_URL_129___", "Your-API-KEY");
    // Pass the list of pdf files to PrizmDoc Server
    ConversionResult result = await prizmDocServer.CombineToPdfAsync(
        new []
        {
            new ConversionSourceDocument("A.pdf"),
            new ConversionSourceDocument("B.pdf"),
            new ConversionSourceDocument("C.pdf"),
        });
    // Save merged file to the target location
    await result.RemoteWorkFile.SaveAsync("sample.pdf");
}
using System.Threading.Tasks;
using Accusoft.PrizmDocServer;
using Accusoft.PrizmDocServer.Conversion;

static void Main(string[] args)
{
    PdfMerge().GetAwaiter().GetResult();
}

private static async Task PdfMerge()
{
    // Instantiate PrizmDocServerClient object
    var prizmDocServer = new PrizmDocServerClient("___PROTECTED_URL_129___", "Your-API-KEY");
    // Pass the list of pdf files to PrizmDoc Server
    ConversionResult result = await prizmDocServer.CombineToPdfAsync(
        new []
        {
            new ConversionSourceDocument("A.pdf"),
            new ConversionSourceDocument("B.pdf"),
            new ConversionSourceDocument("C.pdf"),
        });
    // Save merged file to the target location
    await result.RemoteWorkFile.SaveAsync("sample.pdf");
}
$vbLabelText   $csharpLabel

El código anterior también crea un archivo sample.pdf , que combina los archivos A.pdf , B.pdf y C.pdf .


¿Cómo agrego encabezados y pies de página a archivos PDF usando IronPDF vs PrizmDoc Viewer?

Para esta comparación, supongamos que existe una WebPage simple llamada myWebPage.html con el siguiente HTML y CSS:

<html>
<head>
    <style>
        li {
            font-size: x-large;
            color: rgba(156, 89, 13, 0.897);
            list-style: square;
        }
    </style>
</head>
<body>
    <h1 style="text-align: center;">Hello World..!</h1>
    <h1>Main Menu</h1>
    <ul>
        <li>SubMenu 1</li>
        <li>SubMenu 2</li>
        <li>SubMenu 3</li>
        <li>SubMenu 4</li>
        <li>SubMenu 5</li>
    </ul>
</body>
</html>
<html>
<head>
    <style>
        li {
            font-size: x-large;
            color: rgba(156, 89, 13, 0.897);
            list-style: square;
        }
    </style>
</head>
<body>
    <h1 style="text-align: center;">Hello World..!</h1>
    <h1>Main Menu</h1>
    <ul>
        <li>SubMenu 1</li>
        <li>SubMenu 2</li>
        <li>SubMenu 3</li>
        <li>SubMenu 4</li>
        <li>SubMenu 5</li>
    </ul>
</body>
</html>
HTML

El objetivo es convertir esta WebPage en un archivo PDF con las siguientes propiedades de encabezado y pie de página :

  • Page Title en el lado izquierdo del encabezado
  • DateTime en el lado derecho del Encabezado
  • Page Number of Total Pages en el lado derecho del pie de página

Primero, examinemos cómo IronPDF maneja los encabezados y pies de página.

¿Cómo gestiona IronPDF los encabezados y pies de página PDF?

Para gestionar encabezados y pies de página de archivos PDF, IronPDF proporciona una propiedad en la clase ChromePdfRenderer llamada RenderingOptions que se puede utilizar de la siguiente manera:

  • Para Encabezado:

    _BLOQUE DE CÓDIGO19

  • Para Pie de Página:

    _BLOQUE DE CÓDIGO_20 _

Las siguientes propiedades se pueden configurar al inicializar TextHeaderFooter() :

  • CenterText para imprimir texto en el centro del encabezado o pie de página
  • LeftText para imprimir texto en el lado izquierdo del encabezado o pie de página
  • RightText para imprimir texto en el lado derecho del encabezado o pie de página
  • DrawDividerLine dibuja una línea que separa el contenido de la página del encabezado o pie de página.
  • FontFamily para especificar la familia de fuentes del encabezado o pie de página
  • FontSize para especificar el tamaño de fuente del encabezado o pie de página
  • El espaciado ajusta el espacio entre el contenido de la página y el encabezado o pie de página.

Los siguientes atributos predefinidos ayudan a establecer el contenido del encabezado o pie de página. Se escriben entre llaves { } :

  • {page} imprime el número de página actual en el encabezado o pie de página
  • {total-pages} imprime el número total de páginas en el encabezado o pie de página
  • {url} imprime la URL de la página renderizada
  • {date} imprime la fecha actual en el encabezado o pie de página
  • {time} imprime la hora actual en el encabezado o pie de página
  • {html-title} imprime el título de la página web renderizada en el encabezado o pie de página
  • {pdf-title} imprime el título del documento en el encabezado o pie de página

Lea más en detalle sobre cómo trabajar con encabezados y pies de página utilizando IronPDF. IronPDF también admite encabezados y pies de página HTML para diseños más complejos.

El siguiente ejemplo muestra para implementar el caso de uso y demostrar cómo utilizar las propiedades anteriores:

using IronPdf;

static void Main(string[] args)
{
    // Create rendering converter
    var converter = new ChromePdfRenderer();
    // Setting Header properties
    converter.RenderingOptions.TextHeader = new TextHeaderFooter()
    {
        DrawDividerLine = true,
        LeftText = "Page Title",
        RightText = "{date} {time}",
        FontSize = 13
    };
    // Setting footer properties
    converter.RenderingOptions.TextFooter = new TextHeaderFooter()
    {
        RightText = "Page {page} of {total-pages}",
        FontSize = 12
    };
    // Specify the file to be converted
    using var PDF = converter.RenderHTMLFileAsPdf("myWebPage.html");
    // Save to target location
    PDF.SaveAs("sample.pdf");
}
using IronPdf;

static void Main(string[] args)
{
    // Create rendering converter
    var converter = new ChromePdfRenderer();
    // Setting Header properties
    converter.RenderingOptions.TextHeader = new TextHeaderFooter()
    {
        DrawDividerLine = true,
        LeftText = "Page Title",
        RightText = "{date} {time}",
        FontSize = 13
    };
    // Setting footer properties
    converter.RenderingOptions.TextFooter = new TextHeaderFooter()
    {
        RightText = "Page {page} of {total-pages}",
        FontSize = 12
    };
    // Specify the file to be converted
    using var PDF = converter.RenderHTMLFileAsPdf("myWebPage.html");
    // Save to target location
    PDF.SaveAs("sample.pdf");
}
$vbLabelText   $csharpLabel

Salida: La captura de pantalla del archivo PDF recién creado sample.pdf por el código anterior:

Documento PDF con encabezado personalizado que muestra el "Título de la página" y la fecha/hora, lo que demuestra las capacidades de encabezado y pie de página de IronPDF

Trabajar con encabezados y pies de página utilizando IronPDF implica un lenguaje intuitivo al crear archivos PDF. Ahora, el ejemplo muestra cómo PrizmDoc Viewer maneja encabezados y pies de página.

¿Cómo maneja PrizmDoc Viewer los encabezados y pies de página de PDF?

PrizmDoc Viewer proporciona la clase HeaderFooterOptions para gestionar encabezados y pies de página, con las siguientes propiedades:

  • Líneas especifica la(s) línea(s) para Encabezado y Pie de página, donde cada línea tiene las siguientes propiedades: Izquierda imprime texto en el lado izquierdo de la línea de encabezado o pie de página Centro imprime texto en el centro de la línea de encabezado o pie de página Derecha * imprime texto en el lado derecho de la línea de encabezado o pie de página
  • FontFamily para especificar la familia de fuentes del texto del encabezado o pie de página
  • FontSize para especificar el tamaño de fuente del texto del encabezado o pie de página
  • Color para especificar el color del texto del encabezado o pie de página

Lea más sobre cómo configurar encabezados y pies de página de páginas PDF utilizando el servidor PrizmDoc .

El ejemplo muestra cómo implementar el caso de uso utilizando las propiedades anteriores:

using System.Threading.Tasks;
using System.Collections.Generic;
using Accusoft.PrizmDocServer;
using Accusoft.PrizmDocServer.Conversion;

static void Main(string[] args)
{
    SetHeaderFooter().GetAwaiter().GetResult();
}

private static async Task SetHeaderFooter()
{
    // Instantiate PrizmDocServerClient object with Header and footer properties
    var prizmDocServer = new PrizmDocServerClient("___PROTECTED_URL_130___", "Your-API-KEY");

    ConversionResult result = await prizmDocServer.ConvertToPdfAsync(
        "myWebPage.html",
        header: new HeaderFooterOptions
        {
            Lines = new List<HeaderFooterLine>
            {
                new HeaderFooterLine { Left = "Page Title", Right = DateTime.Now.ToString() }
            },
        },
        footer: new HeaderFooterOptions
        {
            Lines = new List<HeaderFooterLine>
            {
                new HeaderFooterLine { Right = "Page {{pageNumber}} of {{pageCount}}" },
            },
        });

    // Save to the target location
    await result.RemoteWorkFile.SaveAsync("sample.pdf");
}
using System.Threading.Tasks;
using System.Collections.Generic;
using Accusoft.PrizmDocServer;
using Accusoft.PrizmDocServer.Conversion;

static void Main(string[] args)
{
    SetHeaderFooter().GetAwaiter().GetResult();
}

private static async Task SetHeaderFooter()
{
    // Instantiate PrizmDocServerClient object with Header and footer properties
    var prizmDocServer = new PrizmDocServerClient("___PROTECTED_URL_130___", "Your-API-KEY");

    ConversionResult result = await prizmDocServer.ConvertToPdfAsync(
        "myWebPage.html",
        header: new HeaderFooterOptions
        {
            Lines = new List<HeaderFooterLine>
            {
                new HeaderFooterLine { Left = "Page Title", Right = DateTime.Now.ToString() }
            },
        },
        footer: new HeaderFooterOptions
        {
            Lines = new List<HeaderFooterLine>
            {
                new HeaderFooterLine { Right = "Page {{pageNumber}} of {{pageCount}}" },
            },
        });

    // Save to the target location
    await result.RemoteWorkFile.SaveAsync("sample.pdf");
}
$vbLabelText   $csharpLabel

Salida:

La captura de pantalla del archivo PDF recién creado con el código anterior:

PDF with header showing 'Page Title' and timestamp, comparing `PrizmDoc`'s header/footer implementation

¿Qué biblioteca ofrece más flexibilidad para encabezados y pies de página?

IronPDF proporciona más funciones para configurar las propiedades de encabezado y pie de página con una estructura de programación simple en comparación con PrizmDoc Viewer. El archivo PDF generado por IronPDF es más legible y atractivo que el generado PrizmDoc Viewer. IronPDF también admite numeración y saltos de página para un mejor control del documento.


## ¿Cómo convierto páginas PDF en imágenes usando IronPDF vs PrizmDoc Viewer?

Para esta comparación, supongamos que tiene un archivo PDF simple llamado Sample_PDF.pdf con dos páginas.

Página 1Página 2
Visor de PDF que muestra la página 1 de un PDF de muestra con texto Lorem ipsum y controles de visor estándar
Visor de PDF que muestra la página 2 de un PDF de muestra con texto Lorem ipsum y controles de navegación

La tarea es crear una imagen de cada página . Primero, el ejemplo verá cómo realizar esto usando IronPDF.

¿Cómo convierte IronPDF páginas PDF en imágenes?

using IronPdf;

static void Main(string[] args)
{
    // Specify file to be converted
    var pdf = PdfDocument.FromFile("Sample_PDF.pdf");
    // Save images to the target location
    pdf.RasterizeToImageFiles("image_*.png");
}
using IronPdf;

static void Main(string[] args)
{
    // Specify file to be converted
    var pdf = PdfDocument.FromFile("Sample_PDF.pdf");
    // Save images to the target location
    pdf.RasterizeToImageFiles("image_*.png");
}
$vbLabelText   $csharpLabel

IronPDF también admite guardar imágenes en flujos de memoria y diferentes formatos de imagen, incluidos JPEG, TIFF y más.

Salida:

El código anterior crea las siguientes dos imágenes .png :

Página1 ImagenPágina2 Imagen
Imagen PNG generada a partir de la página 1 del PDF que muestra el contenido del tutorial de mecánica virtual con representación de texto claro.
Imagen PNG generada a partir de la página 2 del PDF que muestra el contenido de texto continuo con la calidad de rasterización de IronPDF

Crear imágenes de páginas PDF con IronPDF es sencillo. Ahora, realicemos la misma tarea utilizando PrizmDoc Viewer.

¿Cómo convierte PrizmDoc Viewer páginas PDF en imágenes?

using System.Linq;
using System.Collections.Generic;
using System.Threading.Tasks;
using Accusoft.PrizmDocServer;
using Accusoft.PrizmDocServer.Conversion;

static void Main(string[] args)
{
    PdfToImage().GetAwaiter().GetResult();
}

private static async Task PdfToImage()
{
    // Instantiate PrizmDocServerClient object
    var prizmDocServer = new PrizmDocServerClient("___PROTECTED_URL_131___", "Your-API-KEY");
    // Convert PDF file to images
    IEnumerable<ConversionResult> results = await prizmDocServer.ConvertAsync("Sample_PDF.pdf", DestinationFileFormat.Png);

    // Save each image.
    for (int i = 0; i < results.Count(); i++)
    {
        await results.ElementAt(i).RemoteWorkFile.SaveAsync($"page-{i + 1}.png");
    }
}
using System.Linq;
using System.Collections.Generic;
using System.Threading.Tasks;
using Accusoft.PrizmDocServer;
using Accusoft.PrizmDocServer.Conversion;

static void Main(string[] args)
{
    PdfToImage().GetAwaiter().GetResult();
}

private static async Task PdfToImage()
{
    // Instantiate PrizmDocServerClient object
    var prizmDocServer = new PrizmDocServerClient("___PROTECTED_URL_131___", "Your-API-KEY");
    // Convert PDF file to images
    IEnumerable<ConversionResult> results = await prizmDocServer.ConvertAsync("Sample_PDF.pdf", DestinationFileFormat.Png);

    // Save each image.
    for (int i = 0; i < results.Count(); i++)
    {
        await results.ElementAt(i).RemoteWorkFile.SaveAsync($"page-{i + 1}.png");
    }
}
$vbLabelText   $csharpLabel

Salida:

El código anterior también crea las siguientes dos imágenes .png :

Página 1Página 2
PNG image generated from PDF page 1 using `PrizmDoc`'s conversion service with sample text content
PNG image generated from PDF page 2 showing `PrizmDoc`'s image conversion output quality

¿Qué biblioteca facilita la conversión de PDF a imagen?

En comparación con PrizmDoc Viewer, IronPDF permite a los desarrolladores crear fácilmente imágenes de cada página con un mínimo de líneas de código, incluso sin iterar entre páginas.


¿Puedo utilizar tablas de datos de Bootstrap 5 con IronPDF?

El motor de renderizado Chrome V8 de IronPDF proporciona un excelente soporte para las tablas de datos Bootstrap 5 , lo que permite a los desarrolladores generar informes PDF profesionales con diseños tabulares complejos. Este ejemplo demuestra encabezados de degradado, insignias de estado, controles de paginación y métricas de resumen: características que resaltan la ventaja de IronPDF sobre los visores de PDF tradicionales como PrizmDoc . IronPDF es totalmente compatible con funciones CSS modernas, incluidos diseños flexbox , degradados y diseño responsivo .

using IronPdf;

var renderer = new ChromePdfRenderer();

string dataTableReport = @"
<!DOCTYPE html>
<html>
<head>
    <meta charset='utf-8'>
    <link href='___PROTECTED_URL_132___ rel='stylesheet'>
    <style>
        .table-header {
            background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
            color: white;
            padding: 30px;
            border-radius: 10px 10px 0 0;
        }
        .table-container {
            background: white;
            border-radius: 0 0 10px 10px;
            box-shadow: 0 10px 30px rgba(0,0,0,0.1);
            overflow: hidden;
        }
        .table th {
            background: #f8f9fa;
            font-weight: 600;
            text-transform: uppercase;
            font-size: 0.85rem;
            letter-spacing: 0.5px;
        }
        .status-badge {
            padding: 0.35em 0.65em;
            border-radius: 0.25rem;
            font-weight: 600;
            font-size: 0.75rem;
        }
        .trend-positive { color: #198754; font-weight: 700; }
        .trend-negative { color: #dc3545; font-weight: 700; }
        @media print {
            .table-container { page-break-inside: avoid; }
        }
    </style>
</head>
<body class='bg-light'>
    <div class='container py-5'>
        <div class='table-container'>
            <div class='table-header'>
                <div class='row align-items-center'>
                    <div class='col-md-8'>
                        <h2 class='mb-2'>Sales Performance Report</h2>
                        <p class='mb-0 opacity-75'>Q4 2024 Regional Analysis</p>
                    </div>
                    <div class='col-md-4 text-end'>
                        <div class='btn-group btn-group-sm'>
                            <button class='btn btn-light'>Export</button>
                            <button class='btn btn-light'>Filter</button>
                            <button class='btn btn-light'>Sort</button>
                        </div>
                    </div>
                </div>
            </div>

            <div class='p-4'>
                <div class='row mb-3'>
                    <div class='col-md-4'>
                        <input type='text' class='form-control form-control-sm' placeholder='Search regions...'>
                    </div>
                    <div class='col-md-8 text-end'>
                        <span class='text-muted small'>Showing 1-10 of 48 results</span>
                    </div>
                </div>

                <div class='table-responsive'>
                    <table class='table table-hover align-middle'>
                        <thead>
                            <tr>
                                <th>Region</th>
                                <th>Revenue</th>
                                <th>Units Sold</th>
                                <th>Growth</th>
                                <th>Status</th>
                                <th>Action</th>
                            </tr>
                        </thead>
                        <tbody>
                            <tr>
                                <td>
                                    <strong>North America</strong><br>
                                    <small class='text-muted'>USA, Canada, Mexico</small>
                                </td>
                                <td>$4,280,000</td>
                                <td>12,450</td>
                                <td><span class='trend-positive'>↑ 18.5%</span></td>
                                <td><span class='status-badge bg-success text-white'>Exceeding</span></td>
                                <td><button class='btn btn-sm btn-outline-primary'>Details</button></td>
                            </tr>
                            <tr>
                                <td>
                                    <strong>Europe</strong><br>
                                    <small class='text-muted'>EU, UK, Switzerland</small>
                                </td>
                                <td>$3,650.000</td>
                                <td>10,890</td>
                                <td><span class='trend-positive'>↑ 12.3%</span></td>
                                <td><span class='status-badge bg-success text-white'>On Track</span></td>
                                <td><button class='btn btn-sm btn-outline-primary'>Details</button></td>
                            </tr>
                            <tr>
                                <td>
                                    <strong>Asia Pacific</strong><br>
                                    <small class='text-muted'>Japan, Australia, Singapore</small>
                                </td>
                                <td>$2,940,000</td>
                                <td>8,320</td>
                                <td><span class='trend-positive'>↑ 24.7%</span></td>
                                <td><span class='status-badge bg-primary text-white'>Growing</span></td>
                                <td><button class='btn btn-sm btn-outline-primary'>Details</button></td>
                            </tr>
                            <tr>
                                <td>
                                    <strong>Latin America</strong><br>
                                    <small class='text-muted'>Brazil, Argentina, Chile</small>
                                </td>
                                <td>$1,580,000</td>
                                <td>4,670</td>
                                <td><span class='trend-positive'>↑ 8.9%</span></td>
                                <td><span class='status-badge bg-info text-white'>Stable</span></td>
                                <td><button class='btn btn-sm btn-outline-primary'>Details</button></td>
                            </tr>
                            <tr>
                                <td>
                                    <strong>Middle East</strong><br>
                                    <small class='text-muted'>UAE, Saudi Arabia, Israel</small>
                                </td>
                                <td>$980,000</td>
                                <td>2,890</td>
                                <td><span class='trend-negative'>↓ 3.2%</span></td>
                                <td><span class='status-badge bg-warning text-dark'>Review</span></td>
                                <td><button class='btn btn-sm btn-outline-primary'>Details</button></td>
                            </tr>
                        </tbody>
                        <tfoot class='table-light'>
                            <tr>
                                <td><strong>Total</strong></td>
                                <td><strong>$13,430,000</strong></td>
                                <td><strong>39,220</strong></td>
                                <td><strong class='trend-positive'>↑ 14.8%</strong></td>
                                <td colspan='2'></td>
                            </tr>
                        </tfoot>
                    </table>
                </div>

                <div class='d-flex justify-content-between align-items-center mt-4'>
                    <div>
                        <select class='form-select form-select-sm' style='width: auto; display: inline-block;'>
                            <option>10 per page</option>
                            <option>25 per page</option>
                            <option>50 per page</option>
                        </select>
                    </div>
                    <nav>
                        <ul class='pagination pagination-sm mb-0'>
                            <li class='page-item disabled'><a class='page-link' href='#'>Previous</a></li>
                            <li class='page-item active'><a class='page-link' href='#'>1</a></li>
                            <li class='page-item'><a class='page-link' href='#'>2</a></li>
                            <li class='page-item'><a class='page-link' href='#'>3</a></li>
                            <li class='page-item'><a class='page-link' href='#'>Next</a></li>
                        </ul>
                    </nav>
                </div>
            </div>
        </div>

        <div class='row g-3 mt-4'>
            <div class='col-md-3'>
                <div class='card text-center'>
                    <div class='card-body'>
                        <h3 class='text-primary mb-1'>$13.4M</h3>
                        <small class='text-muted'>Total Revenue</small>
                    </div>
                </div>
            </div>
            <div class='col-md-3'>
                <div class='card text-center'>
                    <div class='card-body'>
                        <h3 class='text-success mb-1'>39,220</h3>
                        <small class='text-muted'>Units Sold</small>
                    </div>
                </div>
            </div>
            <div class='col-md-3'>
                <div class='card text-center'>
                    <div class='card-body'>
                        <h3 class='text-info mb-1'>14.8%</h3>
                        <small class='text-muted'>Growth Rate</small>
                    </div>
                </div>
            </div>
            <div class='col-md-3'>
                <div class='card text-center'>
                    <div class='card-body'>
                        <h3 class='text-warning mb-1'>5</h3>
                        <small class='text-muted'>Active Regions</small>
                    </div>
                </div>
            </div>
        </div>
    </div>
</body>
</html>";

var pdf = renderer.RenderHtmlAsPdf(dataTableReport);
pdf.SaveAs("data-table-report.pdf");
using IronPdf;

var renderer = new ChromePdfRenderer();

string dataTableReport = @"
<!DOCTYPE html>
<html>
<head>
    <meta charset='utf-8'>
    <link href='___PROTECTED_URL_132___ rel='stylesheet'>
    <style>
        .table-header {
            background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
            color: white;
            padding: 30px;
            border-radius: 10px 10px 0 0;
        }
        .table-container {
            background: white;
            border-radius: 0 0 10px 10px;
            box-shadow: 0 10px 30px rgba(0,0,0,0.1);
            overflow: hidden;
        }
        .table th {
            background: #f8f9fa;
            font-weight: 600;
            text-transform: uppercase;
            font-size: 0.85rem;
            letter-spacing: 0.5px;
        }
        .status-badge {
            padding: 0.35em 0.65em;
            border-radius: 0.25rem;
            font-weight: 600;
            font-size: 0.75rem;
        }
        .trend-positive { color: #198754; font-weight: 700; }
        .trend-negative { color: #dc3545; font-weight: 700; }
        @media print {
            .table-container { page-break-inside: avoid; }
        }
    </style>
</head>
<body class='bg-light'>
    <div class='container py-5'>
        <div class='table-container'>
            <div class='table-header'>
                <div class='row align-items-center'>
                    <div class='col-md-8'>
                        <h2 class='mb-2'>Sales Performance Report</h2>
                        <p class='mb-0 opacity-75'>Q4 2024 Regional Analysis</p>
                    </div>
                    <div class='col-md-4 text-end'>
                        <div class='btn-group btn-group-sm'>
                            <button class='btn btn-light'>Export</button>
                            <button class='btn btn-light'>Filter</button>
                            <button class='btn btn-light'>Sort</button>
                        </div>
                    </div>
                </div>
            </div>

            <div class='p-4'>
                <div class='row mb-3'>
                    <div class='col-md-4'>
                        <input type='text' class='form-control form-control-sm' placeholder='Search regions...'>
                    </div>
                    <div class='col-md-8 text-end'>
                        <span class='text-muted small'>Showing 1-10 of 48 results</span>
                    </div>
                </div>

                <div class='table-responsive'>
                    <table class='table table-hover align-middle'>
                        <thead>
                            <tr>
                                <th>Region</th>
                                <th>Revenue</th>
                                <th>Units Sold</th>
                                <th>Growth</th>
                                <th>Status</th>
                                <th>Action</th>
                            </tr>
                        </thead>
                        <tbody>
                            <tr>
                                <td>
                                    <strong>North America</strong><br>
                                    <small class='text-muted'>USA, Canada, Mexico</small>
                                </td>
                                <td>$4,280,000</td>
                                <td>12,450</td>
                                <td><span class='trend-positive'>↑ 18.5%</span></td>
                                <td><span class='status-badge bg-success text-white'>Exceeding</span></td>
                                <td><button class='btn btn-sm btn-outline-primary'>Details</button></td>
                            </tr>
                            <tr>
                                <td>
                                    <strong>Europe</strong><br>
                                    <small class='text-muted'>EU, UK, Switzerland</small>
                                </td>
                                <td>$3,650.000</td>
                                <td>10,890</td>
                                <td><span class='trend-positive'>↑ 12.3%</span></td>
                                <td><span class='status-badge bg-success text-white'>On Track</span></td>
                                <td><button class='btn btn-sm btn-outline-primary'>Details</button></td>
                            </tr>
                            <tr>
                                <td>
                                    <strong>Asia Pacific</strong><br>
                                    <small class='text-muted'>Japan, Australia, Singapore</small>
                                </td>
                                <td>$2,940,000</td>
                                <td>8,320</td>
                                <td><span class='trend-positive'>↑ 24.7%</span></td>
                                <td><span class='status-badge bg-primary text-white'>Growing</span></td>
                                <td><button class='btn btn-sm btn-outline-primary'>Details</button></td>
                            </tr>
                            <tr>
                                <td>
                                    <strong>Latin America</strong><br>
                                    <small class='text-muted'>Brazil, Argentina, Chile</small>
                                </td>
                                <td>$1,580,000</td>
                                <td>4,670</td>
                                <td><span class='trend-positive'>↑ 8.9%</span></td>
                                <td><span class='status-badge bg-info text-white'>Stable</span></td>
                                <td><button class='btn btn-sm btn-outline-primary'>Details</button></td>
                            </tr>
                            <tr>
                                <td>
                                    <strong>Middle East</strong><br>
                                    <small class='text-muted'>UAE, Saudi Arabia, Israel</small>
                                </td>
                                <td>$980,000</td>
                                <td>2,890</td>
                                <td><span class='trend-negative'>↓ 3.2%</span></td>
                                <td><span class='status-badge bg-warning text-dark'>Review</span></td>
                                <td><button class='btn btn-sm btn-outline-primary'>Details</button></td>
                            </tr>
                        </tbody>
                        <tfoot class='table-light'>
                            <tr>
                                <td><strong>Total</strong></td>
                                <td><strong>$13,430,000</strong></td>
                                <td><strong>39,220</strong></td>
                                <td><strong class='trend-positive'>↑ 14.8%</strong></td>
                                <td colspan='2'></td>
                            </tr>
                        </tfoot>
                    </table>
                </div>

                <div class='d-flex justify-content-between align-items-center mt-4'>
                    <div>
                        <select class='form-select form-select-sm' style='width: auto; display: inline-block;'>
                            <option>10 per page</option>
                            <option>25 per page</option>
                            <option>50 per page</option>
                        </select>
                    </div>
                    <nav>
                        <ul class='pagination pagination-sm mb-0'>
                            <li class='page-item disabled'><a class='page-link' href='#'>Previous</a></li>
                            <li class='page-item active'><a class='page-link' href='#'>1</a></li>
                            <li class='page-item'><a class='page-link' href='#'>2</a></li>
                            <li class='page-item'><a class='page-link' href='#'>3</a></li>
                            <li class='page-item'><a class='page-link' href='#'>Next</a></li>
                        </ul>
                    </nav>
                </div>
            </div>
        </div>

        <div class='row g-3 mt-4'>
            <div class='col-md-3'>
                <div class='card text-center'>
                    <div class='card-body'>
                        <h3 class='text-primary mb-1'>$13.4M</h3>
                        <small class='text-muted'>Total Revenue</small>
                    </div>
                </div>
            </div>
            <div class='col-md-3'>
                <div class='card text-center'>
                    <div class='card-body'>
                        <h3 class='text-success mb-1'>39,220</h3>
                        <small class='text-muted'>Units Sold</small>
                    </div>
                </div>
            </div>
            <div class='col-md-3'>
                <div class='card text-center'>
                    <div class='card-body'>
                        <h3 class='text-info mb-1'>14.8%</h3>
                        <small class='text-muted'>Growth Rate</small>
                    </div>
                </div>
            </div>
            <div class='col-md-3'>
                <div class='card text-center'>
                    <div class='card-body'>
                        <h3 class='text-warning mb-1'>5</h3>
                        <small class='text-muted'>Active Regions</small>
                    </div>
                </div>
            </div>
        </div>
    </div>
</body>
</html>";

var pdf = renderer.RenderHtmlAsPdf(dataTableReport);
pdf.SaveAs("data-table-report.pdf");
$vbLabelText   $csharpLabel

Este código genera un informe de tabla de datos sofisticado con encabezados en degradado, tablas receptivas, distintivos de estado, y métricas de resumen. El motor de renderizado Chrome de IronPDF conserva todo el estilo de Bootstrap, incluidos los efectos de desplazamiento sobre tablas, los colores de las insignias y los controles de paginación: capacidades que van más allá de los visores de PDF tradicionales. El motor también admite la representación de JavaScript para contenido dinámico, fuentes personalizadas y caracteres internacionales UTF-8 .

Ventajas clave frente a PrizmDoc Viewer:

Para obtener más detalles sobre la generación de PDF con Bootstrap, consulte la documentación de renderizado completa. Los desarrolladores también pueden explorar la conversión de Angular a PDF y la compatibilidad con otros marcos de JavaScript . ## ¿Cómo se comparan los costos de licencia entre IronPDF y PrizmDoc Viewer?

Después de revisar la estructura técnica y las funciones disponibles de ambos componentes, a continuación se describe el precio de la licencia. Esto es crucial ya que los desarrolladores buscan satisfacer los requisitos dentro de las limitaciones presupuestarias.

¿Cuáles son las opciones de licencia de IronPDF?

Las licencias de IronPDF comienzan en $699 para un solo proyecto con un desarrollador. IronPDF ofrece opciones de licencia flexibles que incluyen licencias de desarrollo, licencias de implementación y opciones de extensión para soporte y actualizaciones continuas.

Para los desarrolladores de empresas o agencias que atienden a múltiples clientes, las licencias también comienzan en $699 y se pueden ajustar según el tamaño del equipo y la cantidad de proyectos. IronPDF ofrece rutas de actualización de licencia a medida que evolucionan las necesidades.

Las siguientes licencias requieren un pago único:

Número de desarrolladoresPrecio
1-5$699
6-10$799
11-20$899
21-50$1,199
Ilimitado$1,199
  • Para empresas con múltiples ubicaciones, las licencias comienzan desde $1199
  • Para servicios SaaS, las licencias comienzan desde $1099
  • Para la redistribución OEM sin regalías, las licencias comienzan desde $1599

Nota: Todos los paquetes de licencia anteriores incluyen 1 año de soporte y actualizaciones .

Lea más sobre todos los paquetes de licencia disponibles de IronPDF. Los desarrolladores también pueden aplicar claves de licencia de diversas maneras, incluidas Web.config y variables de entorno.

¿Cuáles son las opciones de licencia de PrizmDoc Viewer?

What Is the Cost of Self-Hosted `PrizmDoc`?

Para servidores autogestionados, el precio de la licencia es de $7,900 anuales con soporte estándar.

Lea más sobre todos los paquetes disponibles para PrizmDoc Viewer.

How Much Does Cloud-Based `PrizmDoc` Cost?

Esta licencia cubre los servicios basados en la nube de PrizmDoc Viewer, escalados según la cantidad de transacciones.

Terminologías:

Transaction se refiere a enviar una solicitud al servidor PrizmDoc Viewer y recibir la salida (documento resultante).

Cubos de prepago implican pagar una sola vez y recibir transacciones que no vencen.

Número de transaccionesCubos de prepagoMensualAnualmente
200$18
1.000$89
2.000$119
6.000$254$1691.859 $ (6.000 transacciones/mes)
12.000$434$2893.179 $ (12.000 transacciones/mes)
25.000$699$4995.459 $ (25.000 transacciones/mes)
50.000$1,199$7998.789 $ (50.000 transacciones/mes)
100.000$1,199$1,19910.989 $ (100.000 transacciones/mes)
200.000$2,549$1,69919.188 dólares (200.000 transacciones/mes)
300.000$3,299$2,199$25,188 (300.000 transacciones/mes)
400.000$4,049$2,69931.188 $ (400.000 transacciones/mes)
500.000$4,799$3,19937.188 $ (500.000 transacciones/mes)

Tutorial de acceso rápido

Html To Pdf `icon related to Tutorial de acceso rápido

Obtenga el Manual de inicio rápido de C# IronPDF

Una guía de recursos PDF gratuita que simplifica el desarrollo de PDF para .NET, con tutoriales de funciones comunes y ejemplos para manipular, editar, generar y guardar PDF en C# y VB.NET para proyectos.

Descargar la guía

Explorar la referencia de la API de IronPDF

Explore la referencia de API para la biblioteca C# de IronPDF, incluidos detalles de todas las características, clases, campos de métodos, espacios de nombres y enumeraciones de IronPDF.

Ver la referencia de la API
`documentation related to Tutorial de acceso rápido

Por favor nota PrizmDoc Viewer de Accusoft es una marca registrada de su respectivo propietario. Este sitio no está afiliado, respaldado ni patrocinado por PrizmDoc Viewer de Accusoft. Todos los nombres de producto, logotipos y marcas son propiedad de sus respectivos dueños. Las comparaciones son sólo para fines informativos y reflejan información disponible públicamente al momento de escribir.

Preguntas Frecuentes

¿Cómo puedo 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.

¿Cuáles son las ventajas de usar IronPDF en lugar de PrizmDoc Viewer para la conversión de PDF?

IronPDF ofrece una solución local de renderizado de PDFs sencilla, permitiendo trabajar sin conexión sin necesidad de programación asincrónica. Por el contrario, PrizmDoc Viewer opera a través de una API REST, requiriendo conectividad a internet para la interacción con el servidor remoto.

¿Puedo combinar múltiples documentos PDF utilizando una biblioteca PDF?

Sí, con IronPDF, puedes combinar múltiples PDFs usando el método MergePdf, lo que te permite combinar documentos sin problemas.

¿Cómo maneja IronPDF la conversión de PDF a imagen?

IronPDF te permite convertir fácilmente páginas de PDF a imágenes usando sus métodos incorporados, ofreciendo un enfoque más sencillo en comparación con otros programas.

¿Cuáles son las opciones de personalización de encabezado y pie de página en IronPDF?

IronPDF proporciona funciones extensas para establecer propiedades de encabezado y pie de página con una estructura de programación simple, facilitando la personalización de tus documentos.

¿Es IronPDF adecuado para el procesamiento de PDF sin conexión?

Sí, IronPDF admite el procesamiento de PDF sin conexión, lo que significa que puedes trabajar sin conectividad a internet, a diferencia de algunas otras soluciones que requieren interacción con el servidor remoto.

¿Cuál es la estructura de costos para las licencias de IronPDF?

Las licencias de IronPDF comienzan en $699 para un solo proyecto con un desarrollador, con opciones escalables para empresas y servicios SaaS, ofreciendo una solución de pago único y rentable.

¿Puedo desarrollar con IronPDF de forma gratuita?

Sí, IronPDF es gratis para el desarrollo sin límite de tiempo y ofrece una prueba de implementación de 30 días para lanzar tu proyecto.

¿Cómo maneja PrizmDoc Viewer la conversión de HTML a PDF?

PrizmDoc Viewer utiliza una API REST para la conversión de HTML a PDF, requiriendo programación asincrónica y conectividad a internet para la interacción con el servidor remoto.

¿Cuáles son los requisitos del sistema para alojar un Servidor PrizmDoc?

El auto-alojamiento del Servidor PrizmDoc requiere un mínimo de 32 GB de RAM y un CPU de 4 núcleos, para adaptarse a sus necesidades de procesamiento.

¿IronPDF es totalmente compatible con .NET 10?

Sí. IronPDF es compatible con .NET 10 (así como con .NET 9, 8, 7, 6, .NET Core, .NET Standard y .NET Framework). Se instala mediante NuGet, funciona en Windows, Linux y macOS, y utiliza su renderizador nativo basado en Chrome para ofrecer una representación de HTML a PDF con una precisión de píxeles perfecta en aplicaciones .NET 10.

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