Pruebas en un entorno real
Pruebe en producción sin marcas de agua.
Funciona donde lo necesites.
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.
IronPDF es un componente para trabajar con archivos PDF proporcionado por la Biblioteca C# de Iron Software. Utilizando IronPDFpodemos 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.
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.
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.
IronPDF | wkhtmltopdf |
---|---|
IronPDF convierte HTML a PDF | wkhtmltopdf convierte HTML a PDF |
Compatible con Windows, Linux y macOS | Compatible 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 proyecto | Un archivo .exe, utilizado por separado |
IronPDF establece encabezados, pies de página y márgenes direccionales | wkhtmltopdf 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 productos | Actualizaciones de productos poco frecuentes |
Ideal para proyectos .NET | Ideal para proyectos CLI / Shell |
Funciones predefinidas para marcar con agua páginas específicas | Sin 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 disponible | No se conoce soporte técnico |
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.
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
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;
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
Azure
**Los servicios de alojamiento en la nube incluyen
Microsoft Azure
Docker
IronPDF puede utilizarse para.
Aplicaciones ASP.NET MVC
Aplicaciones ASP.NET Web Forms
Aplicaciones de consola
Aplicaciones en la nube
Servicios
Funciones
Las siguientes dependencias son necesarias para utilizar IronPDF.
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.
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.
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();
//Specify URL
using var PDF = converter.RenderUrlAsPdf("URL");
//Save the file
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();
//Specify URL
using var PDF = converter.RenderUrlAsPdf("URL");
//Save the file
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()
'Specify URL
Dim PDF = converter.RenderUrlAsPdf("URL")
'Save the file
PDF.SaveAs("Sample.pdf")
Console.WriteLine("successfully created!")
Console.ReadKey()
End Property
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:
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.
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)
{
//function calling
ConvertChromePdfRenderer("URL", "Sample.pdf");
Console.WriteLine("successfully created!");
Console.ReadKey();
}
//function declaration
public static void ConvertChromePdfRenderer(string url, string filename)
{
//function definition
StringBuilder paramsBuilder = new StringBuilder();
//make CLI command
paramsBuilder.AppendFormat("\"{0}\" \"{1}\"", url, filename);
//create new process
using (Process process = new Process())
{
//specify wkhtmltopdf.exe file path to execute above CLI
process.StartInfo.FileName = "C:\\Program Files (x86)\\wkhtmltopdf\\bin\\wkhtmltopdf.exe";
//assign CLI as process argument
process.StartInfo.Arguments = paramsBuilder.ToString();
//setting the credentials
process.StartInfo.UseShellExecute = false;
process.StartInfo.RedirectStandardOutput = true;
process.StartInfo.RedirectStandardError = true;
//start execution
process.Start();
if (!process.WaitForExit(60000))
{
process.Kill();
}
}
}
using System.Text;
using System.Diagnostics;
static void Main(string [] args)
{
//function calling
ConvertChromePdfRenderer("URL", "Sample.pdf");
Console.WriteLine("successfully created!");
Console.ReadKey();
}
//function declaration
public static void ConvertChromePdfRenderer(string url, string filename)
{
//function definition
StringBuilder paramsBuilder = new StringBuilder();
//make CLI command
paramsBuilder.AppendFormat("\"{0}\" \"{1}\"", url, filename);
//create new process
using (Process process = new Process())
{
//specify wkhtmltopdf.exe file path to execute above CLI
process.StartInfo.FileName = "C:\\Program Files (x86)\\wkhtmltopdf\\bin\\wkhtmltopdf.exe";
//assign CLI as process argument
process.StartInfo.Arguments = paramsBuilder.ToString();
//setting the credentials
process.StartInfo.UseShellExecute = false;
process.StartInfo.RedirectStandardOutput = true;
process.StartInfo.RedirectStandardError = true;
//start execution
process.Start();
if (!process.WaitForExit(60000))
{
process.Kill();
}
}
}
Imports System.Text
Imports System.Diagnostics
Shared Sub Main(ByVal args() As String)
'function calling
ConvertChromePdfRenderer("URL", "Sample.pdf")
Console.WriteLine("successfully created!")
Console.ReadKey()
End Sub
'function declaration
Public Shared Sub ConvertChromePdfRenderer(ByVal url As String, ByVal filename As String)
'function definition
Dim paramsBuilder As New StringBuilder()
'make CLI command
paramsBuilder.AppendFormat("""{0}"" ""{1}""", url, filename)
'create new process
Using process As New Process()
'specify wkhtmltopdf.exe file path to execute above CLI
process.StartInfo.FileName = "C:\Program Files (x86)\wkhtmltopdf\bin\wkhtmltopdf.exe"
'assign CLI as process argument
process.StartInfo.Arguments = paramsBuilder.ToString()
'setting the credentials
process.StartInfo.UseShellExecute = False
process.StartInfo.RedirectStandardOutput = True
process.StartInfo.RedirectStandardError = True
'start execution
process.Start()
If Not process.WaitForExit(60000) Then
process.Kill()
End If
End Using
End Sub
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.
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.
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();
//setting header
converter.RenderingOptions.TextHeader = new TextHeaderFooter()
{
RightText = "{date} {time}"
};
//setting footer
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();
//setting header
converter.RenderingOptions.TextHeader = new TextHeaderFooter()
{
RightText = "{date} {time}"
};
//setting footer
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()
'setting header
converter.RenderingOptions.TextHeader = New TextHeaderFooter() With {.RightText = "{date} {time}"}
'setting footer
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
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.
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
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.
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.
/**
HTML String to PDF
anchor-html-string-to-pdf-using-ironpdf
**/
using IronPdf;
{
var converter = new ChromePdfRenderer();
//HTML string
string HTML = "<h1>Hello IronPDF!</h1> <h2>Welcome to PDF File</h2> ";
//convert HTML string to PDF file
using var PDF = converter.RenderHtmlAsPdf(HTML);
//Save the file
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();
//HTML string
string HTML = "<h1>Hello IronPDF!</h1> <h2>Welcome to PDF File</h2> ";
//convert HTML string to PDF file
using var PDF = converter.RenderHtmlAsPdf(HTML);
//Save the file
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()
'HTML string
Dim HTML As String = "<h1>Hello IronPDF!</h1> <h2>Welcome to PDF File</h2> "
'convert HTML string to PDF file
Dim PDF = converter.RenderHtmlAsPdf(HTML)
'Save the file
PDF.SaveAs("Sample.pdf")
Console.WriteLine("successfully created..!")
Console.ReadKey()
End Property
Salida:
A continuación se muestra una captura de pantalla del archivo Sample.pdf
recién creado por IronPDF:
Nota:
bin\Debug
del proyecto.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)
{
//Html string
string HTML = "<h1>Hello wkhtmltopdf!</h1><h2>Welcome to PDF File</h2>";
//Function calling
ConvertChromePdfRenderer(HTML, "Sample.pdf");
Console.WriteLine("ok");
Console.ReadKey();
}
//Function Declaration
public static void ConvertChromePdfRenderer(string html, string path)
{
//Function Definition
StringBuilder paramsBuilder = new StringBuilder();
//Build command
paramsBuilder.AppendFormat("\"-\" \"{0}\"", path);
//process to execute above command
using (Process process = new Process())
{
//path of wkhtmltopdf.exe file
string filepath= "C:\\Program Files (x86)\\wkhtmltopdf\\bin\\wkhtmltopdf.exe";
//specify path
process.StartInfo.FileName = filepath;
//set command by argument
process.StartInfo.Arguments = paramsBuilder.ToString();
//set credentials
process.StartInfo.UseShellExecute = false;
process.StartInfo.RedirectStandardError = true;
process.StartInfo.RedirectStandardInput = true;
//start process
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)
{
//Html string
string HTML = "<h1>Hello wkhtmltopdf!</h1><h2>Welcome to PDF File</h2>";
//Function calling
ConvertChromePdfRenderer(HTML, "Sample.pdf");
Console.WriteLine("ok");
Console.ReadKey();
}
//Function Declaration
public static void ConvertChromePdfRenderer(string html, string path)
{
//Function Definition
StringBuilder paramsBuilder = new StringBuilder();
//Build command
paramsBuilder.AppendFormat("\"-\" \"{0}\"", path);
//process to execute above command
using (Process process = new Process())
{
//path of wkhtmltopdf.exe file
string filepath= "C:\\Program Files (x86)\\wkhtmltopdf\\bin\\wkhtmltopdf.exe";
//specify path
process.StartInfo.FileName = filepath;
//set command by argument
process.StartInfo.Arguments = paramsBuilder.ToString();
//set credentials
process.StartInfo.UseShellExecute = false;
process.StartInfo.RedirectStandardError = true;
process.StartInfo.RedirectStandardInput = true;
//start process
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)
'Html string
Dim HTML As String = "<h1>Hello wkhtmltopdf!</h1><h2>Welcome to PDF File</h2>"
'Function calling
ConvertChromePdfRenderer(HTML, "Sample.pdf")
Console.WriteLine("ok")
Console.ReadKey()
End Sub
'Function Declaration
Public Shared Sub ConvertChromePdfRenderer(ByVal html As String, ByVal path As String)
'Function Definition
Dim paramsBuilder As New StringBuilder()
'Build command
paramsBuilder.AppendFormat("""-"" ""{0}""", path)
'process to execute above command
Using process As New Process()
'path of wkhtmltopdf.exe file
Dim filepath As String= "C:\Program Files (x86)\wkhtmltopdf\bin\wkhtmltopdf.exe"
'specify path
process.StartInfo.FileName = filepath
'set command by argument
process.StartInfo.Arguments = paramsBuilder.ToString()
'set credentials
process.StartInfo.UseShellExecute = False
process.StartInfo.RedirectStandardError = True
process.StartInfo.RedirectStandardInput = True
'start process
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
Salida:
Captura de pantalla del archivo Sample.pdf
recién creado por 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.
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.
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.
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++).
IronPDF proporciona las siguientes funciones para establecer las propiedades de los encabezados y pies de página. Puede escribirse en CamelCase
.
TextoDerecho para escribir texto a la derecha en 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
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:
bin\Debug
del proyecto.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:
--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
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.
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.
/**
Adjust Margins
anchor-add-and-adjust-margins-using-ironpdf
**/
using IronPdf;
{
//create rendering converter
var converter = new ChromePdfRenderer();
converter.RenderingOptions.MarginTop = 20;
converter.RenderingOptions.MarginLeft = 40;
//Specify URL
using var PDF = converter.RenderUrlAsPdf("https://en.wikipedia.org/wiki/PDF");
//Save the file
PDF.SaveAs("Sample.pdf");
Console.WriteLine("successfully created..!");
Console.ReadKey();
}
/**
Adjust Margins
anchor-add-and-adjust-margins-using-ironpdf
**/
using IronPdf;
{
//create rendering converter
var converter = new ChromePdfRenderer();
converter.RenderingOptions.MarginTop = 20;
converter.RenderingOptions.MarginLeft = 40;
//Specify URL
using var PDF = converter.RenderUrlAsPdf("https://en.wikipedia.org/wiki/PDF");
//Save the file
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
'create rendering converter
Dim converter = New ChromePdfRenderer()
converter.RenderingOptions.MarginTop = 20
converter.RenderingOptions.MarginLeft = 40
'Specify URL
Dim PDF = converter.RenderUrlAsPdf("https://en.wikipedia.org/wiki/PDF")
'Save the file
PDF.SaveAs("Sample.pdf")
Console.WriteLine("successfully created..!")
Console.ReadKey()
End Property
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.
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://en.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://en.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://en.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
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.
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.
Hablemos de licencias y precios de ambos productos.
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.
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.
IronPDF | wkhtmltopdf |
---|---|
IronPDF entra a formar parte del proyecto | wkhtmltopdf no forma parte del proyecto |
No requiere un proceso separado | Necesidad de ejecutar un proceso independiente |
Ajusta automáticamente el espacio para facilitar la lectura | Sin espacio automático entre el encabezado y el contenido de la página |
Puede activar o desactivar javascript | Puede activar y desactivar javascript |
Puede imprimir en diferentes tamaños de papel | Puede imprimir en diferentes tamaños de papel |
Mucha documentación disponible | Poca documentación disponible |
No es necesario especificar una ruta de archivo independiente | Es necesario especificar la ruta del archivo `wkhtmltopdf.exe`. |
biblioteca `C#`, es necesario añadir su referencia en el proyecto | Basado 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 PDF | No proporciona una forma generalizada de convertir una página `.aspx` a PDF |
Puede añadir saltos de página en archivos PDF fácilmente | Los 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 |
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 API9 productos API .NET para sus documentos de oficina