Explora las Mejores Alternativas de PDF a Imagen para PDFsharp
La mayoría de los trabajos de HTML a PDF fallan por la misma razón: la página solo se ve bien después de que un usuario inicia sesión. IronPDF impulsa un motor Chrome, por lo que ve lo que vería un navegador no autenticado, una pantalla de inicio de sesión o una carcasa vacía, hasta que le proporciones las cookies correctas. Tres partes de la API resuelven esto, la propiedad RequestContext, el método ApplyCookies y el diccionario CustomCookies. Aquí es donde encaja cada una, con un fragmento para coincidir.
Renderizando facturas y extractos tras iniciar sesión
La factura de un cliente se encuentra en una ruta protegida por sesión, y tu aplicación ya tiene su sesión. Pasa ese ID de sesión directamente a través de CustomCookies:
using IronPdf;
using System.Collections.Generic;
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.RequestContext = IronPdf.Rendering.RequestContexts.Global;
renderer.RenderingOptions.CustomCookies = new Dictionary<string, string>
{
{ "ASP.NET_SessionId", sessionId }
};
renderer.RenderUrlAsPdf("https://app.example.com/account/invoices/1042")
.SaveAs("invoice-1042.pdf");Imports IronPdf
Imports System.Collections.Generic
Dim renderer As New ChromePdfRenderer()
renderer.RenderingOptions.RequestContext = IronPdf.Rendering.RequestContexts.Global
renderer.RenderingOptions.CustomCookies = New Dictionary(Of String, String) From {
{"ASP.NET_SessionId", sessionId}
}
renderer.RenderUrlAsPdf("https://app.example.com/account/invoices/1042").SaveAs("invoice-1042.pdf")Para autenticación básica o de Windows, utiliza ApplyCookies en su lugar. Inicia sesión en la URL con las credenciales proporcionadas y captura las cookies resultantes en el contexto global, que luego reutiliza el siguiente renderizado:
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.RequestContext = IronPdf.Rendering.RequestContexts.Global;
var credentials = new ChromeHttpLoginCredentials
{
NetworkUsername = "svc_reports",
NetworkPassword = "your_password"
};
string uri = "https://app.example.com/account/invoices/1042";
renderer.ApplyCookies(uri, credentials);
renderer.RenderUrlAsPdf(uri).SaveAs("invoice-1042.pdf");Imports IronPdf
Dim renderer As New ChromePdfRenderer()
renderer.RenderingOptions.RequestContext = IronPdf.Rendering.RequestContexts.Global
Dim credentials As New ChromeHttpLoginCredentials With {
.NetworkUsername = "svc_reports",
.NetworkPassword = "your_password"
}
Dim uri As String = "https://app.example.com/account/invoices/1042"
renderer.ApplyCookies(uri, credentials)
renderer.RenderUrlAsPdf(uri).SaveAs("invoice-1042.pdf")Autenticación basada en tokens y de terceros
Las aplicaciones modernas rara vez se apoyan en credenciales HTTP simples. Se autentican con JWTs, OAuth, o SAML, a menudo almacenando el resultado en una cookie. Dado que CustomCookies toma cualquier par clave-valor, un token de portador o una cookie de proveedor de identidad se incorporan directamente:
renderer.RenderingOptions.CustomCookies = new Dictionary<string, string>
{
{ "auth_token", jwt },
{ "refresh_token", refreshToken }
};Imports System.Collections.Generic
renderer.RenderingOptions.CustomCookies = New Dictionary(Of String, String) From {
{"auth_token", jwt},
{"refresh_token", refreshToken}
}Documentos personalizados y localizados
Las cookies a menudo llevan el estado de localización, moneda, o características. Transfiérelas, y el PDF coincide con lo que ese usuario específico ve, en el idioma y la moneda correctos:
renderer.RenderingOptions.CustomCookies = new Dictionary<string, string>
{
{ "locale", "en-AU" },
{ "currency", "AUD" },
{ "feature_newLayout", "on" }
};renderer.RenderingOptions.CustomCookies = New Dictionary(Of String, String) From {
{"locale", "en-AU"},
{"currency", "AUD"},
{"feature_newLayout", "on"}
}Generación por lotes que comparte una sola sesión
Para generar muchos PDFs para el mismo usuario autenticado en secuencia, establece RequestContext en Global. El estado del navegador, incluidas las cookies, persiste entre renderizados, por lo que autenticas una sola vez en lugar de por documento:
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.RequestContext = IronPdf.Rendering.RequestContexts.Global;
renderer.RenderingOptions.CustomCookies = new Dictionary<string, string>
{
{ "ASP.NET_SessionId", sessionId }
};
foreach (var id in invoiceIds)
{
renderer.RenderUrlAsPdf($"https://app.example.com/invoices/{id}")
.SaveAs($"invoice-{id}.pdf");
}Imports IronPdf.Rendering
Dim renderer As New ChromePdfRenderer()
renderer.RenderingOptions.RequestContext = RequestContexts.Global
renderer.RenderingOptions.CustomCookies = New Dictionary(Of String, String) From {
{"ASP.NET_SessionId", sessionId}
}
For Each id In invoiceIds
renderer.RenderUrlAsPdf($"https://app.example.com/invoices/{id}").SaveAs($"invoice-{id}.pdf")
NextRenderizado concurrente sin fuga de cookies
El escenario opuesto lleva igual peso. Un servicio que renderiza para muchos usuarios diferentes al mismo tiempo necesita contexto de Isolated, que proporciona a cada renderizado un estado limpio y evita que la sesión de un usuario se filtre en el documento de otro. Dale a cada hilo su propio renderizador:
using System.Threading.Tasks;
Parallel.ForEach(jobs, job =>
{
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.RequestContext = IronPdf.Rendering.RequestContexts.Isolated;
renderer.RenderingOptions.CustomCookies = new Dictionary<string, string>
{
{ "ASP.NET_SessionId", job.SessionId }
};
renderer.RenderUrlAsPdf(job.Url).SaveAs(job.OutputPath);
});Imports System.Threading.Tasks
Imports IronPdf.Rendering
Parallel.ForEach(jobs, Sub(job)
Dim renderer = New ChromePdfRenderer()
renderer.RenderingOptions.RequestContext = RequestContexts.Isolated
renderer.RenderingOptions.CustomCookies = New Dictionary(Of String, String) From {
{"ASP.NET_SessionId", job.SessionId}
}
renderer.RenderUrlAsPdf(job.Url).SaveAs(job.OutputPath)
End Sub)Emparejando el método con la tarea
Utiliza cookies estándar (ApplyCookies) para autenticación HTTP básica, autenticación de Windows y sesiones simples. Utiliza CustomCookies con tokens, sesiones con múltiples parámetros, proveedores de terceros y preferencias almacenadas. Elige Global para compartir estado entre renderizados y Isolated para mantenerlos separados; Auto por defecto es aislado y cambia a global una vez que se llama a ApplyCookies.
La mayoría de los fallos se agrupan alrededor de tokens expirados, dominios de cookies desajustados, manejo de cookies seguras en URLs HTTPS, y políticas SameSite en solicitudes de origen cruzado. Confirma la validez de las cookies antes de renderizar y apóyate en Global cuando las sesiones deban persistir.
Cuando las cookies son todo el trabajo
Las cookies no son un caso especial en la generación de PDFs. Hazlo bien y obtienes un documento usable; hazlo mal y obtienes una captura de pantalla de un formulario de inicio de sesión.

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 estructurados y visualmente atractivos.