Comment convertir HTML en PDF derrière l'authentification de la connexion

Chaknith Bin
Chaknith Bin
janvier 25, 2023
Mise à jour décembre 10, 2024
Partager:
This article was translated from English: Does it need improvement?
Translated
View the article in English

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.

Première étape :
green arrow pointer



Meilleures pratiques

IronPDF prend en charge l'authentification réseau TLS (nom d'utilisateur et mot de passe) qui est extrêmement sécurisée, et les applications web .NET peuvent facilement la prendre en charge : API ChromeHttpLoginCredentials

La meilleure pratique est d'utiliser System.Net.WebClient ou HttpClient pour télécharger le HTML et tous les éléments. 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 ressources telles que les feuilles de style et les images peuvent être découvertes à l'aide de HtmlAgilityPack et ensuite téléchargées en utilisant également 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
$vbLabelText   $csharpLabel

(Toute URL relative peut être convertie en URL absolue en utilisant un constructeur surchargé pour la classe System.Uri. Pour réanalyser tous les chemins relatifs dans un document HTML entier, ajoutez un onglet

à l'en-tête en utilisant HtmlAgilityPack. Exemple.)}]

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")
$vbLabelText   $csharpLabel

Connexion à l'aide d'un formulaire HTML

Pour se connecter en envoyant des données à un formulaire HTML, cela peut également être réalisé en utilisant la classe ChromeHttpLoginCredentials, comme dans l'exemple précédent. Voir l'API ChromeHttpLoginCredentials de IronPDF.

Veuillez envisager :

  • Les données de connexion doivent être envoyées à l'URL spécifiée dans l'attribut ACTION du formulaire HTML. Cela doit être défini comme l'attribut *LoginFormUrl* des 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 de nom définissent le nom de chaque variable (et non l'id, comme cela est souvent mal compris).
  • 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
$vbLabelText   $csharpLabel
Chaknith Bin
Ingénieur logiciel
Chaknith travaille sur IronXL et IronBarcode. Il possède une expertise approfondie en C# et .NET, aidant à améliorer le logiciel et à soutenir les clients. Ses idées issues des interactions avec les utilisateurs contribuent à de meilleurs produits, une documentation améliorée et une expérience globale enrichie.