Découvrez les meilleures alternatives pour convertir PDF en image à PDFsharp
La plupart des tâches HTML-vers-PDF échouent pour la même raison : la page ne ressemble correctement qu'après qu'un utilisateur se soit connecté. IronPDF utilise un moteur Chrome, donc il voit ce qu'un navigateur non authentifié verrait, un écran de connexion ou une coquille vide, jusqu'à ce que vous lui remettiez les bons cookies. Trois éléments de l'API résolvent cela, la propriété RequestContext, la méthode ApplyCookies, et le dictionnaire CustomCookies. Voici où chacun s'intègre, avec un extrait correspondant.
Rendu des factures et relevés derrière une connexion
La facture d'un client se trouve sur une route protégée par session, et votre application détient déjà leur session. Faites passer cet ID de session directement via 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")Pour l'authentification basique ou Windows, optez plutôt pour ApplyCookies. Il se connecte à l'URL avec les informations d'identification fournies et capture les cookies résultants dans le contexte global, que le rendu suivant réutilise ensuite :
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")Authentification basée sur les jetons et par des tiers
Les applications modernes n'utilisent que rarement des identifiants HTTP simples. Elles s'authentifient avec des JWT, OAuth, ou SAML, souvent en stockant le résultat dans un cookie. Comme CustomCookies accepte toute paire clé-valeur, un jeton au porteur ou un cookie de fournisseur d'identité s'intègre directement :
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}
}Documents personnalisés et localisés
Les cookies portent souvent l'état de la langue, de la devise, ou du drapeau de fonctionnalité. Transmettez-les, et le PDF correspond à ce que cet utilisateur spécifique voit, dans la langue et la devise correctes :
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"}
}Génération par lots partageant une seule session
Pour générer de nombreux PDFs pour le même utilisateur authentifié en séquence, définissez RequestContext sur Global. L'état du navigateur, cookies compris, persiste à travers les rendus, vous authentifiez une fois plutôt que par document :
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")
NextRendu concurrent sans mélange de cookies
Le scénario opposé a autant de poids. Un service de rendu pour de nombreux utilisateurs différents à la fois nécessite un contexte Isolated, qui donne à chaque rendu un état propre et empêche la session d'un utilisateur de fuir dans le document d'un autre. Donnez à chaque thread son propre moteur de rendu :
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)Adapter la méthode à la tâche
Utilisez des cookies standards (ApplyCookies) pour l'authentification HTTP basique, l'authentification Windows, et les sessions simples. Optez pour CustomCookies avec des jetons, des sessions multiparamètres, des fournisseurs tiers, et des préférences stockées. Choisissez Global pour partager l'état à travers les rendus et Isolated pour les garder séparés ; Auto se par défaut à isolé et passe à global une fois que ApplyCookies est appelé.
La plupart des échecs se regroupent autour des jetons expirés, des domaines de cookies non correspondants, de la gestion des cookies sécurisés sur les URL HTTPS, et des politiques SameSite sur les requêtes multi-origines. Confirmez la validité des cookies avant le rendu, et appuyez-vous sur Global lorsque les sessions doivent persister.
Quand les cookies sont tout le travail
Les cookies ne sont pas un cas limite dans la génération de PDF. Faites-les correctement et vous livrez un document utilisable ; faites-les mal et vous livrez une capture d'écran d'un formulaire de connexion.

Curtis Chau détient un baccalauréat en informatique (Université de Carleton) et se spécialise dans le développement front-end avec expertise en Node.js, TypeScript, JavaScript et React. Passionné par la création d'interfaces utilisateur intuitives et esthétiquement plaisantes, Curtis aime travailler avec des frameworks modernes et créer des manuels bien structurés et visuellement attrayants.