Comment convertir HTML en PDF derrière l'authentification de la connexion
La meilleure façon de traiter les logins est de les éviter si possible et de rendre le HTML directement à partir d'un fichier ou d'une chaîne.
Commencez avec IronPDF
Commencez à utiliser IronPDF dans votre projet dès aujourd'hui avec un essai gratuit.
Comment convertir HTML en PDF derrière l'authentification de la connexion
Meilleures pratiques
IronPDF prend en charge l'authentification réseau TLS(nom d'utilisateur et mot de passe) la traduction doit rester professionnelle, en préservant la précision technique tout en expliquant les caractéristiques et les avantages de ces outils de développement :API ChromeHttpLoginCredentials
La meilleure pratique consiste à utiliser System.Net.WebClient
ou HttpClient
pour télécharger le code HTML et tous les actifs. Ce logiciel prend entièrement en charge les en-têtes, les connexions et tout ce dont vous pouvez avoir besoin. Une fois téléchargé en mémoire ou sur le disque, IronPDF peut transformer votre HTML en PDF. Les éléments tels que les feuilles de style et les images peuvent être découverts à l'aide du HtmlAgilityPack
, puis téléchargés à l'aide du System.Net.WebClient
.
string html;
using (WebClient client = new WebClient()) {
html = client.DownloadString("http://www.google.com");
}
HtmlDocument doc = new HtmlDocument();
doc.LoadHtml(html);
foreach(HtmlNode img in doc.DocumentNode.SelectNodes("//img")) {
Console.WriteLine(img.GetAttributeValue("src", null));
}
string html;
using (WebClient client = new WebClient()) {
html = client.DownloadString("http://www.google.com");
}
HtmlDocument doc = new HtmlDocument();
doc.LoadHtml(html);
foreach(HtmlNode img in doc.DocumentNode.SelectNodes("//img")) {
Console.WriteLine(img.GetAttributeValue("src", null));
}
Dim html As String
Using client As New WebClient()
html = client.DownloadString("http://www.google.com")
End Using
Dim doc As New HtmlDocument()
doc.LoadHtml(html)
For Each img As HtmlNode In doc.DocumentNode.SelectNodes("//img")
Console.WriteLine(img.GetAttributeValue("src", Nothing))
Next img
[{i :(Toute url relative peut être transformée en url absolue en utilisant un constructeur surchargé pour la classe System.Uri
. Pour rebaser tous les chemins relatifs d'un document HTML entier, ajoutez une balise
Connexion à l'aide de l'authentification réseau
La plupart des applications ASP.NET prennent en charge l'authentification réseau, qui est plus fiable que l'affichage de formulaires HTML.
:path=/static-assets/pdf/content-code-examples/how-to/logins-username-password.cs
using IronPdf;
using System;
ChromePdfRenderer renderer = new ChromePdfRenderer
{
// setting login credentials to bypass basic authentication
LoginCredentials = new ChromeHttpLoginCredentials()
{
NetworkUsername = "testUser",
NetworkPassword = "testPassword"
}
};
var uri = new Uri("http://localhost:51169/Invoice");
// Render web URL to PDF
PdfDocument pdf = renderer.RenderUrlAsPdf(uri);
// Export PDF
pdf.SaveAs("UrlToPdfExample.Pdf");
Imports IronPdf
Imports System
Private renderer As New ChromePdfRenderer With {
.LoginCredentials = New ChromeHttpLoginCredentials() With {
.NetworkUsername = "testUser",
.NetworkPassword = "testPassword"
}
}
Private uri = New Uri("http://localhost:51169/Invoice")
' Render web URL to PDF
Private pdf As PdfDocument = renderer.RenderUrlAsPdf(uri)
' Export PDF
pdf.SaveAs("UrlToPdfExample.Pdf")
Connexion à l'aide d'un formulaire HTML
Pour se connecter en envoyant des données à un formulaire HTML, on peut également utiliser la classe ChromeHttpLoginCredentials, comme dans l'exemple précédent. Voir le site web d'IronPDFAPI ChromeHttpLoginCredentials.
Please Consider:
- Les données de connexion doivent être envoyées à l'URL spécifiée dans l'attribut ACTION du formulaire HTML. Il doit être défini comme étant le *LoginFormUrl* de l'attribut HttpLoginCredentials. Cette traduction peut différer de l'URL que vous souhaitez rendre au format PDF.
- Les données à envoyer doivent représenter chaque entrée et chaque zone de texte du formulaire HTML. Les attributs name définissent le nom de chaque variable(et non l'id, comme on le croit souvent à tort).
- Certains sites web peuvent se protéger activement contre ce type de connexion automatique.
MVC
La solution de contournement suivante permet le rendu programmatique d'une vue MVC .NET vers une chaîne de caractères, ce qui est très utile pour éviter les connexions MVC tout en assurant le rendu fidèle d'une vue.
public static string RenderPartialViewToString(this Controller controller, string viewPath, object model = null)
{
try
{
var context = controller.ControllerContext;
controller.ViewData.Model = model;
using (var sw = new StringWriter())
{
var viewResult = ViewEngines.Engines.FindPartialView(context, viewPath);
if (viewResult.View == null)
{
throw new Exception($"Partial view {viewPath} could not be found.");
}
var viewContext = new ViewContext(context, viewResult.View, context.Controller.ViewData, context.Controller.TempData, sw);
viewResult.View.Render(viewContext, sw);
viewResult.ViewEngine.ReleaseView(context, viewResult.View);
return sw.GetStringBuilder().ToString();
}
}
catch (Exception ex)
{
return ex.Message;
}
}
public static string RenderPartialViewToString(this Controller controller, string viewPath, object model = null)
{
try
{
var context = controller.ControllerContext;
controller.ViewData.Model = model;
using (var sw = new StringWriter())
{
var viewResult = ViewEngines.Engines.FindPartialView(context, viewPath);
if (viewResult.View == null)
{
throw new Exception($"Partial view {viewPath} could not be found.");
}
var viewContext = new ViewContext(context, viewResult.View, context.Controller.ViewData, context.Controller.TempData, sw);
viewResult.View.Render(viewContext, sw);
viewResult.ViewEngine.ReleaseView(context, viewResult.View);
return sw.GetStringBuilder().ToString();
}
}
catch (Exception ex)
{
return ex.Message;
}
}
<System.Runtime.CompilerServices.Extension> _
Public Function RenderPartialViewToString(ByVal controller As Controller, ByVal viewPath As String, Optional ByVal model As Object = Nothing) As String
Try
Dim context = controller.ControllerContext
controller.ViewData.Model = model
Using sw = New StringWriter()
Dim viewResult = ViewEngines.Engines.FindPartialView(context, viewPath)
If viewResult.View Is Nothing Then
Throw New Exception($"Partial view {viewPath} could not be found.")
End If
Dim viewContext As New ViewContext(context, viewResult.View, context.Controller.ViewData, context.Controller.TempData, sw)
viewResult.View.Render(viewContext, sw)
viewResult.ViewEngine.ReleaseView(context, viewResult.View)
Return sw.GetStringBuilder().ToString()
End Using
Catch ex As Exception
Return ex.Message
End Try
End Function