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));
}

(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");

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;
    }
}
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.