Konvertieren von HTML in PDF hinter der Anmeldeauthentifizierung

Chaknith Bin
Chaknith Bin
25. Januar 2023
Aktualisiert 10. Dezember 2024
Teilen Sie:
This article was translated from English: Does it need improvement?
Translated
View the article in English

Der beste Weg, mit Logins umzugehen, ist, sie wenn möglich zu vermeiden und HTML direkt aus einer Datei oder einem String zu rendern.

Erste Schritte mit IronPDF

Beginnen Sie noch heute mit der Verwendung von IronPDF in Ihrem Projekt mit einer kostenlosen Testversion.

Erster Schritt:
green arrow pointer



Bewährte Praktiken

IronPDF unterstützt die TLS-Netzwerkauthentifizierung (Benutzername und Passwort), die äußerst sicher ist, und .NET-Webanwendungen können sie problemlos unterstützen: ChromeHttpLoginCredentials API

Die beste Praxis ist die Verwendung von System.Net.WebClient oder HttpClient, um das HTML und alle Assets herunterzuladen. Dabei werden Header, Logins und alles andere, was Sie benötigen, vollständig unterstützt. Nach dem Herunterladen in den Arbeitsspeicher oder auf die Festplatte kann IronPDF Ihr HTML in eine PDF-Datei umwandeln. Assets wie Stylesheets und Bilder können mit dem HtmlAgilityPack entdeckt und anschließend mit dem System.Net.WebClient heruntergeladen werden.

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

[{i:(Jede relative URL kann mithilfe eines überladenen Konstruktors der System.Uri-Klasse in eine absolute URL umgewandelt werden. Um relative Pfade in einem gesamten HTML-Dokument neu zu definieren, fügen Sie mit HtmlAgilityPack einen

-Tag zum Header hinzu. Beispiel

Anmeldung über Netzwerkauthentifizierung

Die meisten ASP.NET-Anwendungen unterstützen die Netzwerkauthentifizierung, die zuverlässiger ist als das Senden von HTML-Formularen.

: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

Anmeldung über ein HTML-Formular

Das Einloggen durch das Senden von Daten an ein HTML-Formular kann auch mit der ChromeHttpLoginCredentials-Klasse erreicht werden, wie im vorherigen Beispiel. Siehe die ChromeHttpLoginCredentials API von IronPDF.

Bitte beachten Sie:

  • Die Anmeldedaten müssen an die im ACTION-Attribut des HTML-Formulars angegebene URL gesendet werden. Dies sollte als das *LoginFormUrl*-Attribut der HttpLoginCredentials festgelegt werden. Dies kann von der URL abweichen, die Sie tatsächlich als PDF wiedergeben möchten.
  • Die zu sendenden Daten sollten alle Eingaben und Textfelder des HTML-Formulars repräsentieren. Die Name-Attribute definieren den Namen jeder Variablen (nicht die ID, wie häufig missverstanden wird).
  • Einige Websites schützen sich aktiv gegen diese Art der maschinellen Anmeldung.

MVC

Mit dem folgenden Workaround kann eine .NET MVC-Ansicht programmatisch in einen String umgewandelt werden, was sehr nützlich ist, um MVC-Anmeldungen zu vermeiden und dennoch eine Ansicht originalgetreu darzustellen.

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
Software-Ingenieur
Chaknith arbeitet an IronXL und IronBarcode. Er hat tiefgehende Expertise in C# und .NET und hilft, die Software zu verbessern und Kunden zu unterstützen. Seine Erkenntnisse aus Benutzerinteraktionen tragen zu besseren Produkten, Dokumentation und einem insgesamt besseren Erlebnis bei.