COMPARACIóN DE PRODUCTOS

Wkhtmltopdf C# Comparación con Ejemplos de Código

Actualizado 30 de septiembre, 2021
Compartir:

Elegir el mejor componente para trabajar con archivos PDF mediante programación puede ser una tarea desalentadora, pero que en última instancia puede ahorrarle tiempo y esfuerzo. Exploraremos el código necesario y los tutoriales paso a paso para trabajar con PDF utilizando wkhtmltopdf e IronPDF, así como su compatibilidad con los sistemas y la estructura de licencias para ayudarle a decidir qué es lo mejor para su proyecto.

A continuación encontrará tutoriales sobre cómo crear archivos PDF, utilizar funciones predefinidas como la implementación de encabezados y pies de página, generar archivos y mucho más.


Visión general

Acerca de IronPDF

IronPDF es un componente para trabajar con archivos PDF proporcionado por la Biblioteca C# de Iron Software. Utilizando IronPDF podemos fácilmente crear PDF por URL o cadena HTML, y establezca cabeceras, pies de página, marcas de agua, márgenes y otras propiedades de archivos PDF mediante programación. IronPDF es conocido por su reputada biblioteca de productos, su documentación clara y su lenguaje natural, que facilitan su implantación en proyectos de desarrolladores.

Acerca de wkhtmltopdf

wkhtmltopdf es un binario de software C++ para renderizar archivos PDF. Puede utilizarse para crear archivos PDF por URL o cadena HTML. También proporciona una manera de establecer encabezados, pies de página, márgenes y otras propiedades de los archivos PDF trabajando sobre la base de la interfaz de línea de comandos (CLI). Sin embargo, no está diseñado en .NET framework, por lo que puede resultar difícil integrarlo con aplicaciones .NET (más información sobre nuestra solución). Además, una empresa no se encarga de su mantenimiento constante con actualizaciones. En cambio, fue creado originalmente por Jakob Truelsen y mantenido por Ashish Kulkarniun par de desarrolladores.

Cómo utilizar Wkhtmltopdf C# Ejemplo

  1. Descarga el archivo wkhtmlpdf.exe e instálalo
  2. Iniciar un nuevo proceso para ejecutar el comando con el archivo wkhtmltopdf.exe
  3. Crea un método en C# y llámalo Main()
  4. Copiar código de la sección URL a PDF con wkhtmltopdf
  5. Ejecutar el código C

Comparación rápida

1. IronPDF frente a wkhtmltopdf

Para ayudarle a elegir qué componente puede ser mejor para su proyecto, le proporcionaremos ejemplos de código y un tutorial sobre cómo crear, editar y gestionar archivos PDF utilizando tanto wkhtmltopdf como IronPDF. He aquí un breve resumen de las características y posibilidades de uso de ambos recursos.

IronPDFwkhtmltopdf
IronPDF convierte HTML a PDFwkhtmltopdf convierte HTML a PDF
Compatible con Windows, Linux y macOSCompatible con Windows, Ubuntu, Amazon Linux y macOS
Diseñado en .NET Framework utilizando C#.Diseñado en C++
Una biblioteca de vínculos dinámicos (.dll), se convierte en parte de su proyectoUn archivo .exe, utilizado por separado
IronPDF establece encabezados, pies de página y márgenes direccionaleswkhtmltopdf establece encabezados, pies de página y márgenes direccionales
Función `RenderDelay` para retrasar la renderización y garantizar que la página web se carga correctamente.Función `javascript-delay` para retrasar la renderización hasta que finalice la ejecución de JavaScript.
Actualizaciones frecuentes con nuevas funciones y correcciones de productosActualizaciones de productos poco frecuentes
Ideal para proyectos .NETIdeal para proyectos CLI / Shell
Funciones predefinidas para marcar con agua páginas específicasSin función predefinida para añadir marcas de agua
Renderice, edite, rellene, analice y firme archivos PDF.Sólo renderizado.
Equipo de asistencia técnica siempre disponibleNo se conoce soporte técnico

Paso 1: Instalación

2. Instalación de IronPDF

IronPDF puede instalarse en su sistema utilizando dos enfoques diferentes, y puede utilizar el que le resulte más sencillo para las necesidades de su proyecto.

2.1. Instalación mediante paquete NuGet

El primer enfoque consiste en utilizar el NuGet Package Manager de Visual Studio. Ábralo y busque IronPDF. (proporcionado por Iron)e instálelo.

Install-Package IronPdf

2.2 Descargar IronPdf.dll

El segundo enfoque consiste en descargar IronPDF.dll archivo. Después de descargarlo, indique la ruta de este archivo en las referencias del proyecto para añadir su referencia.

Nota: Puede importar las librerías de IronPDF escribiendo la siguiente línea using IronPdf;

2.3. Plataformas compatibles con IronPDF

IronPDF es compatible con muchos idiomas y plataformas.

.NET framework 4.0 o superior utilizando

  * Windows
  * Azure

.NET Standard 2.0 & Core 2 & 3 utilizando

  • Windows
  • macOS
  • Linux
  • Azure

    **Los servicios de alojamiento en la nube incluyen

    • Microsoft Azure
    • Docker
    • AWS

    IronPDF puede utilizarse para.

    • Aplicaciones ASP.NET MVC
    • Aplicaciones ASP.NET Web Forms
    • Aplicaciones de consola
    • Aplicaciones en la nube
    • Servicios
    • Funciones
    • Aplicaciones de escritorio

2.4. Dependencias de IronPDF

Las siguientes dependencias son necesarias para utilizar IronPDF.

Para .NET Framework 4.0 o superior:

Instalar Wkhtmltopdf

  1. Descargar la última wkhtmlpdf.exe relacionado con las especificaciones de su sistema.
  2. Si está comprimido, descomprímelo y ejecuta el archivo.
  3. Reinicie todos los servidores en ejecución.

Tras la instalación, si instalas 32 bits, se creará una nueva carpeta llamada wkhtmltopdf en C:Archivos de programa (x86), que incluyen algunos archivos necesarios.

Si instala 64 bits, esta carpeta creará C:\Archivos de programa.

Una vez creada la carpeta, wkhtmltopdf se instalará correctamente en tu sistema.

3. Crear PDF desde URL

Cuando hablamos de tratar con archivos PDF, el caso de uso básico que nos viene a la mente es cómo crear un archivo PDF a partir de una URL.

3.1. URL a PDF utilizando IronPDF

Con IronPDF, podemos utilizar la sencilla conversión que se indica a continuación.

/**
URL to PDF
anchor-url-to-pdf-using-ironpdf
**/
using IronPdf;
{
    var converter = new ChromePdfRenderer();
    //Especificar URL 
    using var PDF = converter.RenderUrlAsPdf("URL");
    //Guardar el archivo
    PDF.SaveAs("Sample.pdf");
    Console.WriteLine("successfully created!");
    Console.ReadKey(); 
}
/**
URL to PDF
anchor-url-to-pdf-using-ironpdf
**/
using IronPdf;
{
    var converter = new ChromePdfRenderer();
    //Especificar URL 
    using var PDF = converter.RenderUrlAsPdf("URL");
    //Guardar el archivo
    PDF.SaveAs("Sample.pdf");
    Console.WriteLine("successfully created!");
    Console.ReadKey(); 
}
'''
'''URL to PDF
'''anchor-url-to-pdf-using-ironpdf
'''*
Private ReadOnly Property IronPdf() As using
	Dim converter = New ChromePdfRenderer()
	'Especificar URL 
	Dim PDF = converter.RenderUrlAsPdf("URL")
	'Guardar el archivo
	PDF.SaveAs("Sample.pdf")
	Console.WriteLine("successfully created!")
	Console.ReadKey()
End Property
VB   C#

El código anterior creará un archivo Sample.pdf de una Página Web completa a partir de la URL especificada, y lo guardará en la ubicación especificada.

Nota:

  • Si no especifica una ruta y sólo da el nombre del archivo, el archivo PDF se creará en la carpeta bin\Debug de su proyecto.
  • Si desea crear un archivo PDF en otra ubicación, por ejemplo, en el Disco local E, entonces puede escribir E:\\Sample.pdf.

    Veamos ahora cómo crear un archivo PDF por URL utilizando wkhtmltopdf.

3.2. URL a PDF con wkhtmltopdf

Como hemos comentado anteriormente, wkhtmltopdf no está diseñado en .NET framework. Pero aún podemos utilizarlo en nuestras aplicaciones .NET.

Para ello, iniciaremos un nuevo proceso para ejecutar el comando con el fichero wkhtmltopdf.exe, como en el siguiente ejemplo.

Para evitar cualquier complejidad y confusión, creamos un método y lo llamamos Main() funcionan de la siguiente manera:

using System.Text;
using System.Diagnostics;
static void Main(string [] args)
{
    //llamada a funciones
    ConvertChromePdfRenderer("URL", "Sample.pdf");
    Console.WriteLine("successfully created!");
    Console.ReadKey();
}
//declaración de función
public static void ConvertChromePdfRenderer(string url, string filename)
{
    //definición de la función
    StringBuilder paramsBuilder = new StringBuilder();
    //comando CLI make
    paramsBuilder.AppendFormat("\"{0}\" \"{1}\"", url, filename);
    //crear un nuevo proceso
    using (Process process = new Process())
    {
        //especifique la ruta del archivo wkhtmltopdf.exe para ejecutar la CLI anterior
        process.StartInfo.FileName = "C:\\Program Files (x86)\\wkhtmltopdf\\bin\\wkhtmltopdf.exe";
        //asignar CLI como argumento de proceso
        process.StartInfo.Arguments = paramsBuilder.ToString();
        //establecimiento de las credenciales
        process.StartInfo.UseShellExecute = false;
        process.StartInfo.RedirectStandardOutput = true;
        process.StartInfo.RedirectStandardError = true;
        //iniciar ejecución
        process.Start();
        if (!process.WaitForExit(60000))
        {
            process.Kill();
        }
    }
}
using System.Text;
using System.Diagnostics;
static void Main(string [] args)
{
    //llamada a funciones
    ConvertChromePdfRenderer("URL", "Sample.pdf");
    Console.WriteLine("successfully created!");
    Console.ReadKey();
}
//declaración de función
public static void ConvertChromePdfRenderer(string url, string filename)
{
    //definición de la función
    StringBuilder paramsBuilder = new StringBuilder();
    //comando CLI make
    paramsBuilder.AppendFormat("\"{0}\" \"{1}\"", url, filename);
    //crear un nuevo proceso
    using (Process process = new Process())
    {
        //especifique la ruta del archivo wkhtmltopdf.exe para ejecutar la CLI anterior
        process.StartInfo.FileName = "C:\\Program Files (x86)\\wkhtmltopdf\\bin\\wkhtmltopdf.exe";
        //asignar CLI como argumento de proceso
        process.StartInfo.Arguments = paramsBuilder.ToString();
        //establecimiento de las credenciales
        process.StartInfo.UseShellExecute = false;
        process.StartInfo.RedirectStandardOutput = true;
        process.StartInfo.RedirectStandardError = true;
        //iniciar ejecución
        process.Start();
        if (!process.WaitForExit(60000))
        {
            process.Kill();
        }
    }
}
Imports System.Text
Imports System.Diagnostics
Shared Sub Main(ByVal args() As String)
	'llamada a funciones
	ConvertChromePdfRenderer("URL", "Sample.pdf")
	Console.WriteLine("successfully created!")
	Console.ReadKey()
End Sub
'declaración de función
Public Shared Sub ConvertChromePdfRenderer(ByVal url As String, ByVal filename As String)
	'definición de la función
	Dim paramsBuilder As New StringBuilder()
	'comando CLI make
	paramsBuilder.AppendFormat("""{0}"" ""{1}""", url, filename)
	'crear un nuevo proceso
	Using process As New Process()
		'especifique la ruta del archivo wkhtmltopdf.exe para ejecutar la CLI anterior
		process.StartInfo.FileName = "C:\Program Files (x86)\wkhtmltopdf\bin\wkhtmltopdf.exe"
		'asignar CLI como argumento de proceso
		process.StartInfo.Arguments = paramsBuilder.ToString()
		'establecimiento de las credenciales
		process.StartInfo.UseShellExecute = False
		process.StartInfo.RedirectStandardOutput = True
		process.StartInfo.RedirectStandardError = True
		'iniciar ejecución
		process.Start()
		If Not process.WaitForExit(60000) Then
			process.Kill()
		End If
	End Using
End Sub
VB   C#

No utilice este código en producción. No es seguro para los subprocesos y provocará bloqueos en las aplicaciones de servidor. !

Este código creará el siguiente comando y lo ejecutará con wkhtmltopdf.exe usando el proceso

"URL" "NombreArchivo.pdf"

El código anterior también crea un archivo Sample.pdf, igual que el que creamos con IronPDF, y lo guarda en la ubicación especificada.

Podemos observar fácilmente lo fácil que es trabajar con IronPDF con sólo unas pocas líneas de código. Cuando utilizamos wkhtmltopdf, necesitamos ejecutar un proceso independiente que afecta al rendimiento del sistema, además de escribir muchas líneas de código.

Ahora, hablemos de las funciones de ambos componentes y entendamos su funcionalidad.


4. Funciones para trabajar con PDF

Cuando evaluamos dos componentes diferentes y tenemos que seleccionar el mejor, es muy importante saber qué componente proporciona más funciones, con qué facilidad podemos utilizarlos en el proyecto y cuál requiere menos líneas de código.

4.1. Funciones de IronPDF

Podemos utilizar funciones IronPDF dentro de Corchetes .{} como sigue:

  • {página} para imprimir el número de página actual.
  • {total-páginas} para imprimir el número total de páginas.
  • {url} para imprimir la URL de la página web renderizada.
  • {fecha} para imprimir la fecha actual.
  • {tiempo} para imprimir la hora actual.
  • {html-title} para imprimir el título de la página web.
  • {título pdf} para imprimir el título del documento.

    ¿Cómo podemos utilizar las funciones anteriores en nuestro proyecto? Veamos el siguiente ejemplo.

/**
PDF Functions
anchor-ironpdf-functions
**/
using IronPdf;
{
    var converter = new IronPdf.ChromePdfRenderer();
    //cabecera de ajuste
    converter.RenderingOptions.TextHeader = new TextHeaderFooter()
    {
        RightText = "{date} {time}"              
    };
    //establecer pie de página
    converter.RenderingOptions.TextFooter = new TextHeaderFooter()
    {
        CenterText= "Page {page} of {total-pages}"              
    };
    using var PDF = converter.RenderUrlAsPdf("URL");
    PDF.SaveAs("Sample.pdf");
    Console.WriteLine("successfully created..!");
    Console.ReadKey();
}
/**
PDF Functions
anchor-ironpdf-functions
**/
using IronPdf;
{
    var converter = new IronPdf.ChromePdfRenderer();
    //cabecera de ajuste
    converter.RenderingOptions.TextHeader = new TextHeaderFooter()
    {
        RightText = "{date} {time}"              
    };
    //establecer pie de página
    converter.RenderingOptions.TextFooter = new TextHeaderFooter()
    {
        CenterText= "Page {page} of {total-pages}"              
    };
    using var PDF = converter.RenderUrlAsPdf("URL");
    PDF.SaveAs("Sample.pdf");
    Console.WriteLine("successfully created..!");
    Console.ReadKey();
}
'''
'''PDF Functions
'''anchor-ironpdf-functions
'''*
Private ReadOnly Property IronPdf() As using
	Dim converter = New IronPdf.ChromePdfRenderer()
	'cabecera de ajuste
	converter.RenderingOptions.TextHeader = New TextHeaderFooter() With {.RightText = "{date} {time}"}
	'establecer pie de página
	converter.RenderingOptions.TextFooter = New TextHeaderFooter() With {.CenterText= "Page {page} of {total-pages}"}
	Dim PDF = converter.RenderUrlAsPdf("URL")
	PDF.SaveAs("Sample.pdf")
	Console.WriteLine("successfully created..!")
	Console.ReadKey()
End Property
VB   C#

Este código creará un archivo PDF de la URL WebPage especificada, imprimirá la fecha y la hora en la cabecera a la derecha, e imprimirá el número de página actual en el centro del pie de página.

4.2. Funciones de wkhtmltopdf

A continuación se indican algunas funciones básicas de wkhtmltopdf. Estas funciones pueden utilizarse entre Corchetes .[] como sigue

  • [página] para imprimir el número de página actual.
  • [topage] para imprimir el número de la última página o el número total de páginas.
  • [página web] para imprimir la URL de la página que se está convirtiendo.
  • [fecha] para imprimir la fecha actual.
  • [tiempo] para imprimir la hora actual.
  • [título] para imprimir el título de la página actual.

    Más información Funciones wkhtmltopdf aquí.

    Veamos un ejemplo de cómo utilizar estas funciones en el proyecto.

using System.Text;
using System.Diagnostics;
static void Main(string [] args)
{
    ConvertChromePdfRenderer("URL", "Sample.pdf");
    Console.WriteLine("ok");
    Console.ReadKey();
}
public static void ConvertChromePdfRenderer(string url, string filename)
{
    StringBuilder paramsBuilder = new StringBuilder();
    paramsBuilder.AppendFormat("--header-right \"[date][time]\" --footer-center \"Page [page] of [topage]\" \"{0}\" \"{1}\"", url, filename);
    using (Process process = new Process())
    {
        process.StartInfo.FileName = "C:\\Program Files (x86)\\wkhtmltopdf\\bin\\wkhtmltopdf.exe";
        process.StartInfo.Arguments = paramsBuilder.ToString();
        process.StartInfo.UseShellExecute = false;
        process.StartInfo.RedirectStandardOutput = true;
        process.StartInfo.RedirectStandardError = true;
        process.Start();
        if (!process.WaitForExit(60000))
        {
            process.Kill();
        }
    }
}
using System.Text;
using System.Diagnostics;
static void Main(string [] args)
{
    ConvertChromePdfRenderer("URL", "Sample.pdf");
    Console.WriteLine("ok");
    Console.ReadKey();
}
public static void ConvertChromePdfRenderer(string url, string filename)
{
    StringBuilder paramsBuilder = new StringBuilder();
    paramsBuilder.AppendFormat("--header-right \"[date][time]\" --footer-center \"Page [page] of [topage]\" \"{0}\" \"{1}\"", url, filename);
    using (Process process = new Process())
    {
        process.StartInfo.FileName = "C:\\Program Files (x86)\\wkhtmltopdf\\bin\\wkhtmltopdf.exe";
        process.StartInfo.Arguments = paramsBuilder.ToString();
        process.StartInfo.UseShellExecute = false;
        process.StartInfo.RedirectStandardOutput = true;
        process.StartInfo.RedirectStandardError = true;
        process.Start();
        if (!process.WaitForExit(60000))
        {
            process.Kill();
        }
    }
}
Imports System.Text
Imports System.Diagnostics
Shared Sub Main(ByVal args() As String)
	ConvertChromePdfRenderer("URL", "Sample.pdf")
	Console.WriteLine("ok")
	Console.ReadKey()
End Sub
Public Shared Sub ConvertChromePdfRenderer(ByVal url As String, ByVal filename As String)
	Dim paramsBuilder As New StringBuilder()
	paramsBuilder.AppendFormat("--header-right ""[date][time]"" --footer-center ""Page [page] of [topage]"" ""{0}"" ""{1}""", url, filename)
	Using process As New Process()
		process.StartInfo.FileName = "C:\Program Files (x86)\wkhtmltopdf\bin\wkhtmltopdf.exe"
		process.StartInfo.Arguments = paramsBuilder.ToString()
		process.StartInfo.UseShellExecute = False
		process.StartInfo.RedirectStandardOutput = True
		process.StartInfo.RedirectStandardError = True
		process.Start()
		If Not process.WaitForExit(60000) Then
			process.Kill()
		End If
	End Using
End Sub
VB   C#

Este código creará el siguiente comando y lo ejecutará con wkhtmltopdf.exe usando el proceso:

--cabecera-derecha "[fecha][tiempo]" --footer-center "Página [página] de [topage]" "URL" "Ejemplo.pdf"

También creará el mismo archivo PDF que creamos con IronPDF, con datetime en la cabecera del lado derecho y current page of total page en el centro del pie de página.


5. Crear PDF a partir de cadena HTML

Es un requisito muy común crear un archivo PDF utilizando una cadena HTML. Para ello, ambos componentes permiten crear archivos PDF. Tenga en cuenta que IronPDF fue desarrollado en .NET framework y wkhtmltopdf desarrollado en C++, así que por esta razón ambos componentes tienen una forma completamente diferente de tratar con archivos PDF.

5.1. Cadena HTML a PDF usando IronPDF

/**
HTML String to PDF
anchor-html-string-to-pdf-using-ironpdf
**/
using IronPdf;
{
    var converter = new ChromePdfRenderer();
    //Cadena HTML
    string HTML = "<h1>Hello IronPDF!</h1> <h2>Welcome to PDF File</h2> ";
    //convertir cadena HTML a archivo PDF
    using var PDF = converter.RenderHtmlAsPdf(HTML);
    //Guardar el archivo
    PDF.SaveAs("Sample.pdf");
    Console.WriteLine("successfully created..!");
    Console.ReadKey();
}
/**
HTML String to PDF
anchor-html-string-to-pdf-using-ironpdf
**/
using IronPdf;
{
    var converter = new ChromePdfRenderer();
    //Cadena HTML
    string HTML = "<h1>Hello IronPDF!</h1> <h2>Welcome to PDF File</h2> ";
    //convertir cadena HTML a archivo PDF
    using var PDF = converter.RenderHtmlAsPdf(HTML);
    //Guardar el archivo
    PDF.SaveAs("Sample.pdf");
    Console.WriteLine("successfully created..!");
    Console.ReadKey();
}
'''
'''HTML String to PDF
'''anchor-html-string-to-pdf-using-ironpdf
'''*
Private ReadOnly Property IronPdf() As using
	Dim converter = New ChromePdfRenderer()
	'Cadena HTML
	Dim HTML As String = "<h1>Hello IronPDF!</h1> <h2>Welcome to PDF File</h2> "
	'convertir cadena HTML a archivo PDF
	Dim PDF = converter.RenderHtmlAsPdf(HTML)
	'Guardar el archivo
	PDF.SaveAs("Sample.pdf")
	Console.WriteLine("successfully created..!")
	Console.ReadKey()
End Property
VB   C#

Salida:

A continuación se muestra una captura de pantalla del archivo Sample.pdf recién creado por IronPDF:

Nota:

  • Si no especificamos la ruta completa y sólo escribimos el nombre del archivo, como hicimos en el código anterior, entonces el archivo PDF se creará en la carpeta bin\Debug del proyecto.

5.2. Cadena HTML a PDF usando wkhtmltopdf

Trabajar con wkhtmltopdf es un poco complejo, así que para hacerlo más claro para una mejor comprensión, definimos una función y la llamamos Main() funcionan del siguiente modo

using System.Text;
using System.Diagnostics;
static void Main(string [] args)
{
    //Cadena html
    string HTML = "<h1>Hello wkhtmltopdf!</h1><h2>Welcome to PDF File</h2>";
    //Llamada a la función
    ConvertChromePdfRenderer(HTML, "Sample.pdf");
    Console.WriteLine("ok");
    Console.ReadKey();
}
//Declaración de funciones
public static void ConvertChromePdfRenderer(string html, string path)
{
    //Definición de la función
    StringBuilder paramsBuilder = new StringBuilder();
    //Comando de construcción
    paramsBuilder.AppendFormat("\"-\" \"{0}\"", path);
    //proceso para ejecutar el comando anterior
    using (Process process = new Process())
    {
        //ruta del archivo wkhtmltopdf.exe
        string filepath= "C:\\Program Files (x86)\\wkhtmltopdf\\bin\\wkhtmltopdf.exe";
        //especificar ruta
        process.StartInfo.FileName = filepath;
        //establecer comando por argumento
        process.StartInfo.Arguments = paramsBuilder.ToString();
        //establecer credenciales
        process.StartInfo.UseShellExecute = false;
        process.StartInfo.RedirectStandardError = true;
        process.StartInfo.RedirectStandardInput = true;
        //iniciar proceso
        process.Start();
        using (var stream = process.StandardInput)
        {
            byte [] buffer = Encoding.UTF8.GetBytes(html);
            stream.BaseStream.Write(buffer, 0, buffer.Length);
            stream.WriteLine();
        }
    }
}
using System.Text;
using System.Diagnostics;
static void Main(string [] args)
{
    //Cadena html
    string HTML = "<h1>Hello wkhtmltopdf!</h1><h2>Welcome to PDF File</h2>";
    //Llamada a la función
    ConvertChromePdfRenderer(HTML, "Sample.pdf");
    Console.WriteLine("ok");
    Console.ReadKey();
}
//Declaración de funciones
public static void ConvertChromePdfRenderer(string html, string path)
{
    //Definición de la función
    StringBuilder paramsBuilder = new StringBuilder();
    //Comando de construcción
    paramsBuilder.AppendFormat("\"-\" \"{0}\"", path);
    //proceso para ejecutar el comando anterior
    using (Process process = new Process())
    {
        //ruta del archivo wkhtmltopdf.exe
        string filepath= "C:\\Program Files (x86)\\wkhtmltopdf\\bin\\wkhtmltopdf.exe";
        //especificar ruta
        process.StartInfo.FileName = filepath;
        //establecer comando por argumento
        process.StartInfo.Arguments = paramsBuilder.ToString();
        //establecer credenciales
        process.StartInfo.UseShellExecute = false;
        process.StartInfo.RedirectStandardError = true;
        process.StartInfo.RedirectStandardInput = true;
        //iniciar proceso
        process.Start();
        using (var stream = process.StandardInput)
        {
            byte [] buffer = Encoding.UTF8.GetBytes(html);
            stream.BaseStream.Write(buffer, 0, buffer.Length);
            stream.WriteLine();
        }
    }
}
Imports System.Text
Imports System.Diagnostics
Shared Sub Main(ByVal args() As String)
	'Cadena html
	Dim HTML As String = "<h1>Hello wkhtmltopdf!</h1><h2>Welcome to PDF File</h2>"
	'Llamada a la función
	ConvertChromePdfRenderer(HTML, "Sample.pdf")
	Console.WriteLine("ok")
	Console.ReadKey()
End Sub
'Declaración de funciones
Public Shared Sub ConvertChromePdfRenderer(ByVal html As String, ByVal path As String)
	'Definición de la función
	Dim paramsBuilder As New StringBuilder()
	'Comando de construcción
	paramsBuilder.AppendFormat("""-"" ""{0}""", path)
	'proceso para ejecutar el comando anterior
	Using process As New Process()
		'ruta del archivo wkhtmltopdf.exe
		Dim filepath As String= "C:\Program Files (x86)\wkhtmltopdf\bin\wkhtmltopdf.exe"
		'especificar ruta
		process.StartInfo.FileName = filepath
		'establecer comando por argumento
		process.StartInfo.Arguments = paramsBuilder.ToString()
		'establecer credenciales
		process.StartInfo.UseShellExecute = False
		process.StartInfo.RedirectStandardError = True
		process.StartInfo.RedirectStandardInput = True
		'iniciar proceso
		process.Start()
		Using stream = process.StandardInput
			Dim buffer() As Byte = Encoding.UTF8.GetBytes(html)
			stream.BaseStream.Write(buffer, 0, buffer.Length)
			stream.WriteLine()
		End Using
	End Using
End Sub
VB   C#

Salida:

Captura de pantalla del archivo Sample.pdf recién creado por wkhtmltopdf:

5.3. Otra comparación de IronPDF y WkhtmlToPdf

Otra comparación de IronPDF y WkhtmlToPdf

WkhtmlToPdf es un producto de código abierto. No tiene todas las funciones que tiene IronPDF.

La mejor forma de comparar es hacer una prueba práctica.

WkhtmlToPdf Calidad de renderizado

Hay una clara diferencia entre la calidad de renderizado de PDF de IronPDF y WkHtmlToPdf.

**Diseño de interfaz de usuario

WkHtmlToPdf omite todos los archivos CSS que deben aplicarse en la página web.

Los archivos CSS y JS son importantes para el diseño de la interfaz de usuario. WkHtmlToPdf comienza a renderizar la página sin cargar estos archivos necesarios.

En comparación, IronPDF renderiza los archivos CSS y JS con gran precisión.

Colores

El renderizado del archivo WkHtmlToPdf no captura los colores del fondo. De nuevo, IronPDF tiene un mejor resultado con colores más precisos mostrados en el renderizado.

Cabeceras

En el renderizado WkHtmlToPdf falta completamente la cabecera. En el renderizado de IronPDF la cabecera aparece y está en la posición correcta.

Botones

La colocación de los botones en una página web es obviamente importante. Cambiar un botón y un CTA (Llamamiento a la acción) cambia la intención. En el WkHtmlToPdf los botones no están colocados en su posición exacta. Es totalmente diferente del diseño original de la página web.

En cambio, si hablamos del archivo IronPDF, vemos que la colocación de los botones es correcta.

Conclusión

La forma en que IronPDF hace una pausa y espera a que se carguen todos los archivos antes de renderizar. Este paso en sí mismo mejora el resultado. En general, IronPDF ofrece un resultado más preciso.

5.4. Comparación Conclusión

Después de leer el artículo anterior y comprender los dos ejemplos anteriores, está claro que IronPDF proporciona una forma sencilla de crear un archivo PDF, y que su archivo PDF generado es más legible que wkhtmltopdf porque ajusta automáticamente los márgenes de los lados izquierdo y derecho.

IronPdf también nos permite analizar, editar, combinar y firmar PDF.

Por otro lado, wkhtmltopdf es más complejo porque tenemos que añadir un proceso independiente y ejecutarlo, lo que afecta al rendimiento del proyecto.


6. Añadir encabezados y pies de página

Ambos componentes proporcionan las funciones para añadir encabezados y pies de página en un archivo PDF, pero ambos tienen estructuras de programación diferentes (IronPDF con .NET Framework, y wkhtmltopdf en C++).

6.1. Añadir encabezados y pies de página con IronPDF

IronPDF proporciona las siguientes funciones para establecer las propiedades de los encabezados y pies de página. Puede escribirse en CamelCase.

  • TextoCentro para escribir el texto del Encabezado o Pie en el centro.
  • DrawDividerLine para dibujar una línea horizontal que separe el contenido del Encabezado o Pie de Página.
  • FontFamily para especificar la familia de fuentes del encabezado o pie de página.
  • FontSize para definir el tamaño de la fuente del encabezado y del pie de página.
  • TextoIzquierdo para escribir texto en el lado izquierdo en Encabezado o Pie de Página.
  • TextoDerecho para escribir texto a la derecha en Encabezado o Pie de Página.
  • Espaciado para establecer el espaciado entre el contenido de la página y el encabezado o pie de página.
/**
Add Header Footer
anchor-add-headers-and-footers-using-ironpdf
**/
using IronPdf;
{
    var converter = new IronPdf.ChromePdfRenderer();
    converter.RenderingOptions.TextHeader = new TextHeaderFooter()
    {
        LeftText = "MyTask",
        RightText = "{date} - {time}",
        DrawDividerLine = true,            
    };
    converter.RenderingOptions.TextFooter = new TextHeaderFooter()
    {             
        RightText = "Page {page} of {total-pages}"              
    };
    using var PDF = converter.RenderHtmlAsPdf("<h1 style='text-align:center'>Welcome To IronPdf</h1>");
    PDF.SaveAs("Sample.pdf");
    Console.WriteLine("successfully created..!");
    Console.ReadKey();
}
/**
Add Header Footer
anchor-add-headers-and-footers-using-ironpdf
**/
using IronPdf;
{
    var converter = new IronPdf.ChromePdfRenderer();
    converter.RenderingOptions.TextHeader = new TextHeaderFooter()
    {
        LeftText = "MyTask",
        RightText = "{date} - {time}",
        DrawDividerLine = true,            
    };
    converter.RenderingOptions.TextFooter = new TextHeaderFooter()
    {             
        RightText = "Page {page} of {total-pages}"              
    };
    using var PDF = converter.RenderHtmlAsPdf("<h1 style='text-align:center'>Welcome To IronPdf</h1>");
    PDF.SaveAs("Sample.pdf");
    Console.WriteLine("successfully created..!");
    Console.ReadKey();
}
'''
'''Add Header Footer
'''anchor-add-headers-and-footers-using-ironpdf
'''*
Private ReadOnly Property IronPdf() As using
	Dim converter = New IronPdf.ChromePdfRenderer()
	converter.RenderingOptions.TextHeader = New TextHeaderFooter() With {
		.LeftText = "MyTask",
		.RightText = "{date} - {time}",
		.DrawDividerLine = True
	}
	converter.RenderingOptions.TextFooter = New TextHeaderFooter() With {.RightText = "Page {page} of {total-pages}"}
	Dim PDF = converter.RenderHtmlAsPdf("<h1 style='text-align:center'>Welcome To IronPdf</h1>")
	PDF.SaveAs("Sample.pdf")
	Console.WriteLine("successfully created..!")
	Console.ReadKey()
End Property
VB   C#

Salida:

Esta es una captura de pantalla del archivo Sample.pdf recién creado por IronPDF.

Podemos ver fácilmente que el texto "mi tarea" se imprime en el lado izquierdo del encabezado, la "fecha y hora" se imprime en el lado derecho del encabezado y la "página actual del total de páginas" se imprime en el lado derecho del pie de página.

Nota:

  • Si no especificamos la ruta completa y sólo escribimos el nombre del archivo, como hicimos en el código anterior, el archivo PDF se creará en la carpeta bin\Debug del proyecto.

6.2. Añadir encabezados y pies de página con wkhtmltopdf

wkhtmltopdf también proporciona muchas funciones para tratar los encabezados y pies de página de un archivo PDF. Proporciona funciones separadas para el encabezado y el pie de página. Para ello, tenemos que poner dos guiones (--) antes de cada nombre de propiedad y un guión (-) para unir el nombre de la propiedad de la siguiente manera:

Configuración de las propiedades de la cabecera

  • --header-center para imprimir el texto del encabezado en el centro.
  • --header-right para imprimir el texto del encabezado a la derecha.
  • --header-left para imprimir el texto del encabezado a la izquierda.
  • --header-font-name para especificar la familia de fuentes del texto del encabezado.
  • --header-font-size para especificar el tamaño de la fuente del texto del encabezado.
  • --header-line para dibujar la línea de encabezado que separa el encabezado del contenido.
  • --no-header-line eliminar la línea de encabezado entre el encabezado y el contenido de la página.
  • --header-spacing para especificar el espacio entre el encabezado y el contenido de la página.

    Configuración de las propiedades del pie de página

  • --footer-center para imprimir el texto del pie de página en el centro.
  • --footer-right para imprimir el texto del pie de página a la derecha.
  • --footer-left para imprimir el texto del pie de página a la izquierda.
  • --footer-font-name para especificar la familia de fuentes del texto del pie de página.
  • --footer-font-size para especificar el tamaño de la fuente del texto del pie de página.
  • --footer-line para dibujar la línea de pie de página que separa el pie de página del contenido.
  • --no-footer-line eliminar la línea de pie de página entre el pie de página y el contenido de la página
  • --footer-spacing para especificar el espacio entre el pie de página y el contenido de la página.

    Más información funciones wkhtmltopdf de cabecera y pie de página y mucho más.

    En este ejemplo, para evitar la complejidad crearemos una función por separado, para que podamos entender fácilmente su funcionamiento. Crearemos el mismo archivo PDF que en el ejemplo anterior:

using System.Text;
using System.Diagnostics;
static void Main(string [] args)
{
    ConvertChromePdfRenderer("<h1 style='text-align:center'>Welcom to wkhtmltopdf</h1>", "MyTask", "Sample.pdf");
                Console.WriteLine("Successfully Created");
                Console.ReadKey();
    }
public static void ConvertChromePdfRenderer(string html, string header, string path)
{ 
    StringBuilder paramsBuilder = new StringBuilder();
    paramsBuilder.AppendFormat("--header-left \"{0}\" --header-right \"[date] - [time]\" --header-line --footer-right \"Page [page] of [topage]\" \"-\"  \"{1}\"", header, path);
    using (Process process = new Process())
    {
        process.StartInfo.FileName = "C:\\Program Files (x86)\\wkhtmltopdf\\bin\\wkhtmltopdf.exe";
        process.StartInfo.Arguments = paramsBuilder.ToString();
        process.StartInfo.UseShellExecute = false;
        process.StartInfo.RedirectStandardError = true;
        process.StartInfo.RedirectStandardInput = true;
        process.Start();
        using (var stream = process.StandardInput)
        {
            byte [] buffer = Encoding.UTF8.GetBytes(html);
            stream.BaseStream.Write(buffer, 0, buffer.Length);
            stream.WriteLine();
        }
    }
}
using System.Text;
using System.Diagnostics;
static void Main(string [] args)
{
    ConvertChromePdfRenderer("<h1 style='text-align:center'>Welcom to wkhtmltopdf</h1>", "MyTask", "Sample.pdf");
                Console.WriteLine("Successfully Created");
                Console.ReadKey();
    }
public static void ConvertChromePdfRenderer(string html, string header, string path)
{ 
    StringBuilder paramsBuilder = new StringBuilder();
    paramsBuilder.AppendFormat("--header-left \"{0}\" --header-right \"[date] - [time]\" --header-line --footer-right \"Page [page] of [topage]\" \"-\"  \"{1}\"", header, path);
    using (Process process = new Process())
    {
        process.StartInfo.FileName = "C:\\Program Files (x86)\\wkhtmltopdf\\bin\\wkhtmltopdf.exe";
        process.StartInfo.Arguments = paramsBuilder.ToString();
        process.StartInfo.UseShellExecute = false;
        process.StartInfo.RedirectStandardError = true;
        process.StartInfo.RedirectStandardInput = true;
        process.Start();
        using (var stream = process.StandardInput)
        {
            byte [] buffer = Encoding.UTF8.GetBytes(html);
            stream.BaseStream.Write(buffer, 0, buffer.Length);
            stream.WriteLine();
        }
    }
}
Imports System.Text
Imports System.Diagnostics
Shared Sub Main(ByVal args() As String)
	ConvertChromePdfRenderer("<h1 style='text-align:center'>Welcom to wkhtmltopdf</h1>", "MyTask", "Sample.pdf")
				Console.WriteLine("Successfully Created")
				Console.ReadKey()
End Sub
Public Shared Sub ConvertChromePdfRenderer(ByVal html As String, ByVal header As String, ByVal path As String)
	Dim paramsBuilder As New StringBuilder()
	paramsBuilder.AppendFormat("--header-left ""{0}"" --header-right ""[date] - [time]"" --header-line --footer-right ""Page [page] of [topage]"" ""-""  ""{1}""", header, path)
	Using process As New Process()
		process.StartInfo.FileName = "C:\Program Files (x86)\wkhtmltopdf\bin\wkhtmltopdf.exe"
		process.StartInfo.Arguments = paramsBuilder.ToString()
		process.StartInfo.UseShellExecute = False
		process.StartInfo.RedirectStandardError = True
		process.StartInfo.RedirectStandardInput = True
		process.Start()
		Using stream = process.StandardInput
			Dim buffer() As Byte = Encoding.UTF8.GetBytes(html)
			stream.BaseStream.Write(buffer, 0, buffer.Length)
			stream.WriteLine()
		End Using
	End Using
End Sub
VB   C#

El código anterior ejecutará el siguiente comando utilizando el archivo wkhtmltopdf.exe.

--header-left "MiTarea" --header-right "[fecha] - [tiempo]"--header-line --footer-right "Página [página] de [topage]" "-" "Sample.pdf"

Salida

Esta es una captura de pantalla del archivo Sample.pdf recién creado por wkhtmltopdf.


7. Añadir y ajustar márgenes

Tomemos el caso de uso que queremos crear un archivo PDF por URL, y establecer los márgenes. Ambos componentes proporcionan las funciones para establecer el margen de Izquierda, Arriba, Derecha e Abajo.

7.1 Añadir y ajustar márgenes con IronPDF

/**
Adjust Margins
anchor-add-and-adjust-margins-using-ironpdf
**/
using IronPdf;
{
    //crear convertidor de renderizado
    var converter = new ChromePdfRenderer();
    converter.RenderingOptions.MarginTop = 20;
    converter.RenderingOptions.MarginLeft = 40;
    //Especificar URL 
    using var PDF = converter.RenderUrlAsPdf("https://en.wikipedia.org/wiki/PDF");
    //Guardar el archivo
    PDF.SaveAs("Sample.pdf");
    Console.WriteLine("successfully created..!");
    Console.ReadKey(); 
}
/**
Adjust Margins
anchor-add-and-adjust-margins-using-ironpdf
**/
using IronPdf;
{
    //crear convertidor de renderizado
    var converter = new ChromePdfRenderer();
    converter.RenderingOptions.MarginTop = 20;
    converter.RenderingOptions.MarginLeft = 40;
    //Especificar URL 
    using var PDF = converter.RenderUrlAsPdf("https://en.wikipedia.org/wiki/PDF");
    //Guardar el archivo
    PDF.SaveAs("Sample.pdf");
    Console.WriteLine("successfully created..!");
    Console.ReadKey(); 
}
'''
'''Adjust Margins
'''anchor-add-and-adjust-margins-using-ironpdf
'''*
Private ReadOnly Property IronPdf() As using
	'crear convertidor de renderizado
	Dim converter = New ChromePdfRenderer()
	converter.RenderingOptions.MarginTop = 20
	converter.RenderingOptions.MarginLeft = 40
	'Especificar URL 
	Dim PDF = converter.RenderUrlAsPdf("https://en.wikipedia.org/wiki/PDF")
	'Guardar el archivo
	PDF.SaveAs("Sample.pdf")
	Console.WriteLine("successfully created..!")
	Console.ReadKey()
End Property
VB   C#

Salida:

Aquí está la captura de pantalla del archivo Sample.pdf de IronPDF.

Está claro que el código anterior crea un archivo PDF desde la URL especificada, y establece el margen izquierdo 40 mm y el margen superior 20 mm. Ahora, hagamos lo mismo utilizando wkhtmltopdf.

7.2 Añadir y ajustar márgenes con wkhtmltopdf

Para trabajar con wkhtmltopdf, necesitamos ejecutar el proceso por separado utilizando el archivo wkhtmltopdf.exe. Para evitar la complejidad, definiremos una nueva función y la llamaremos main() funcionan del siguiente modo

using System.Text;
using System.Diagnostics;
static void Main(string [] args)
{
    ConvertChromePdfRenderer(20, 40, "https://es.wikipedia.org/wiki/PDF", "Sample.pdf");
    Console.WriteLine("ok");
    Console.ReadKey();
}

public static void ConvertChromePdfRenderer(int margin_top, int margin_left, string url, string filename)
{
    StringBuilder paramsBuilder = new StringBuilder();
    paramsBuilder.AppendFormat("--margin-top \"{0}\" --margin-left \"{1}\" \"{2}\" \"{3}\"", margin_top, margin_left, url, filename);
    using (Process process = new Process())
    {
        process.StartInfo.FileName = "C:\\Program Files (x86)\\wkhtmltopdf\\bin\\wkhtmltopdf.exe";
        process.StartInfo.Arguments = paramsBuilder.ToString();
        process.StartInfo.UseShellExecute = false;
        process.StartInfo.RedirectStandardOutput = true;
        process.StartInfo.RedirectStandardError = true;
        process.Start();
        if (!process.WaitForExit(60000))
        {
            process.Kill();
        }
    }
}
using System.Text;
using System.Diagnostics;
static void Main(string [] args)
{
    ConvertChromePdfRenderer(20, 40, "https://es.wikipedia.org/wiki/PDF", "Sample.pdf");
    Console.WriteLine("ok");
    Console.ReadKey();
}

public static void ConvertChromePdfRenderer(int margin_top, int margin_left, string url, string filename)
{
    StringBuilder paramsBuilder = new StringBuilder();
    paramsBuilder.AppendFormat("--margin-top \"{0}\" --margin-left \"{1}\" \"{2}\" \"{3}\"", margin_top, margin_left, url, filename);
    using (Process process = new Process())
    {
        process.StartInfo.FileName = "C:\\Program Files (x86)\\wkhtmltopdf\\bin\\wkhtmltopdf.exe";
        process.StartInfo.Arguments = paramsBuilder.ToString();
        process.StartInfo.UseShellExecute = false;
        process.StartInfo.RedirectStandardOutput = true;
        process.StartInfo.RedirectStandardError = true;
        process.Start();
        if (!process.WaitForExit(60000))
        {
            process.Kill();
        }
    }
}
Imports System.Text
Imports System.Diagnostics
Shared Sub Main(ByVal args() As String)
	ConvertChromePdfRenderer(20, 40, "https://es.wikipedia.org/wiki/PDF", "Sample.pdf")
	Console.WriteLine("ok")
	Console.ReadKey()
End Sub

Public Shared Sub ConvertChromePdfRenderer(ByVal margin_top As Integer, ByVal margin_left As Integer, ByVal url As String, ByVal filename As String)
	Dim paramsBuilder As New StringBuilder()
	paramsBuilder.AppendFormat("--margin-top ""{0}"" --margin-left ""{1}"" ""{2}"" ""{3}""", margin_top, margin_left, url, filename)
	Using process As New Process()
		process.StartInfo.FileName = "C:\Program Files (x86)\wkhtmltopdf\bin\wkhtmltopdf.exe"
		process.StartInfo.Arguments = paramsBuilder.ToString()
		process.StartInfo.UseShellExecute = False
		process.StartInfo.RedirectStandardOutput = True
		process.StartInfo.RedirectStandardError = True
		process.Start()
		If Not process.WaitForExit(60000) Then
			process.Kill()
		End If
	End Using
End Sub
VB   C#

Este código ejecutará el siguiente comando usando wkhtmltopdf.exe usando el proceso de:

--margin-top "20" --margin-left "40" "https://en.wikipedia.org/wiki/PDF" "Sample.pdf"

Salida:

Aquí está el archivo Sample.pdf de wkhtmltopdf.

Crea el mismo archivo PDF que creamos con IronPDF.

7.3. Conclusión

El rendimiento de cualquier proyecto es muy importante, y desafortunadamente wkhtmltopdf afecta al rendimiento porque necesita ejecutar un Proceso y un Thread separados. Por otro lado, si utilizamos IronPDF, entonces no hay necesidad de ejecutar Procesos y Threads por separado.


Licencias y precios

8. Licencias y precios

Hablemos de licencias y precios de ambos productos.

8.1. Licencias y precios de IronPDF

IronPDF es gratuito para el desarrollo y ofrece una versión de prueba gratuita de 30 días. Para un uso completo, las licencias comienzan a partir de $749, con paquetes disponibles para múltiples desarrolladores, proyectos y productos de redistribución libres de derechos en Licencias IronPDF.

IronPDF lanza una nueva versión casi todos los meses, manteniéndose al día con las últimas tecnologías y correcciones de errores. El componente es fiable y está respaldado por un equipo de ingeniería a tiempo completo en IronSoftware, que ofrece alta calidad y rendimiento a sus clientes.

8.2. Licencias y precios de wkhtmltopdf

wkhtmltopdf es un componente de código abierto y de uso gratuito. Por lo tanto, no proporciona ningún tipo de actualizaciones de software, correcciones de errores, soporte, hot fixes o garantía de la empresa. Si utilizamos wkhtmltopdf en el proyecto, entonces nos corresponde a nosotros depurar y gestionar su éxito por nuestra cuenta.


Resumen

9. Comparación final IronPDF con wkhtmltopdf

IronPDFwkhtmltopdf
IronPDF entra a formar parte del proyectowkhtmltopdf no forma parte del proyecto
No requiere un proceso separadoNecesidad de ejecutar un proceso independiente
Ajusta automáticamente el espacio para facilitar la lecturaSin espacio automático entre el encabezado y el contenido de la página
Puede activar o desactivar javascriptPuede activar y desactivar javascript
Puede imprimir en diferentes tamaños de papelPuede imprimir en diferentes tamaños de papel
Mucha documentación disponiblePoca documentación disponible
No es necesario especificar una ruta de archivo independienteEs necesario especificar la ruta del archivo `wkhtmltopdf.exe`.
biblioteca `C#`, es necesario añadir su referencia en el proyectoBasado en CLI, ejecuta comandos utilizando Process en aplicaciones .NET. No se recomienda su uso en aplicaciones web o de servidor.
Proporciona una forma generalizada de convertir una página `.aspx` en un archivo PDFNo proporciona una forma generalizada de convertir una página `.aspx` a PDF
Puede añadir saltos de página en archivos PDF fácilmenteLos saltos de página pueden requerir investigación.
Gratuito para el desarrollo, las licencias proporcionan actualizaciones de versión y asistencia técnica.Código abierto, sin soporte conocido

Acceso rápido a tutoriales

Explorar la referencia API de IronPDF

Explore la Referencia de la API para la Biblioteca IronPDF C#, incluyendo detalles de todas las características, clases, campos de métodos, espacios de nombres y enums de IronPDF.

Ver la referencia de la API
< ANTERIOR
Comparación de Syncfusion PDF Viewer para HTML a PDF
SIGUIENTE >
Tutorial y comparación de Aspose PDF Converter

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

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