Zum Fußzeileninhalt springen
PRODUKTVERGLEICHE

Erkunden Sie die besten PDF-zu-Bild-Alternativen zu PDFsharp

Die meisten HTML-zu-PDF-Jobs scheitern am gleichen Grund: Die Seite sieht nur dann richtig aus, wenn ein Benutzer angemeldet ist. IronPDF steuert eine Chrome-Engine, sodass es sieht, was ein nicht authentifizierter Browser sehen würde, einen Anmeldebildschirm oder eine leere Hülle, bis Sie ihm die richtigen Cookies übergeben. Drei Teile der API lösen dies, die RequestContext Eigenschaft, die ApplyCookies Methode und das CustomCookies Wörterbuch. Hier ist, wo jedes einzelne passt, mit einem passenden Snippet.

Rechnungen und Abrechnungen hinter der Anmeldung rendern

Die Rechnung eines Kunden befindet sich auf einer sitzungsbasierten Route, und Ihre Anwendung hält bereits deren Sitzung. Geben Sie diese Sitzungs-ID direkt über CustomCookies weiter:

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

Für grundlegende oder Windows-Authentifizierung verwenden Sie stattdessen ApplyCookies. Es meldet sich mit den angegebenen Anmeldeinformationen an der URL an und erfasst die resultierenden Cookies in den globalen Kontext, den das folgende Rendering dann wiederverwendet:

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

Token-basierte und Drittanbieter-Authentifizierung

Moderne Apps lehnen sich selten auf einfache HTTP-Anmeldeinformationen. Sie authentifizieren sich mit JWTs, OAuth oder SAML, oft speichert das Ergebnis in einem Cookie. Da CustomCookies jedes Schlüssel-Wert-Paar akzeptiert, kann ein Bearer-Token oder ein Identity-Provider-Cookie direkt eingesetzt werden:

renderer.RenderingOptions.CustomCookies = new Dictionary<string, string>
{
    { "auth_token", jwt },
    { "refresh_token", refreshToken }
};
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}
}
$vbLabelText   $csharpLabel

Personalisierte und lokalisierte Dokumente

Cookies tragen oft Locale-, Währungs- oder Feature-Flag-Status. Reichen Sie sie weiter, und das PDF passt zu dem, was dieser spezifische Benutzer sieht, in der richtigen Sprache und Währung:

renderer.RenderingOptions.CustomCookies = new Dictionary<string, string>
{
    { "locale", "en-AU" },
    { "currency", "AUD" },
    { "feature_newLayout", "on" }
};
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"}
}
$vbLabelText   $csharpLabel

Batch-Erstellung, die eine Sitzung teilt

Um viele PDFs für denselben authentifizierten Benutzer nacheinander zu generieren, setzen Sie RequestContext auf Global. Der Browserzustand, einschließlich Cookies, bleibt über Render hinweg erhalten, sodass Sie sich einmal anmelden, anstatt pro Dokument:

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

Konkurrierendes Rendering ohne Cookies-Bleeding

Das gegenteilige Szenario wiegt ebenso schwer. Ein Dienst, der für viele verschiedene Benutzer gleichzeitig rendert, benötigt Isolated Kontext, der jede Rendering-Operation einen sauberen Status gibt und verhindert, dass die Sitzung eines Benutzers in das Dokument eines anderen überläuft. Geben Sie jedem Thread seinen eigenen Renderer:

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

Die Methode dem Job anpassen

Verwenden Sie Standard-Cookies (ApplyCookies) für grundlegende HTTP-Authentifizierung, Windows-Authentifizierung und einfache Sitzungen. Verwenden Sie CustomCookies für Tokens, multi-parameter Sitzungen, Drittanbieter und gespeicherte Präferenzen. Wählen Sie Global, um Zustand über Renderings hinweg zu teilen und Isolated, um sie getrennt zu halten; Auto ist standardmäßig isoliert und wechselt zu global, sobald ApplyCookies aufgerufen wird.

Die meisten Fehler gruppieren sich um abgelaufene Tokens, nicht übereinstimmende Cookie-Domänen, die Behandlung von sicheren Cookies auf HTTPS-URLs und SameSite-Richtlinien bei Cross-Origin-Anfragen. Bestätigen Sie die Gültigkeit der Cookies vor dem Rendern und verlassen Sie sich auf Global, wenn Sitzungen bestehen bleiben müssen.

Wenn Cookies der gesamte Job sind

Cookies sind keine Randfälle in der PDF-Erzeugung. Wenn Sie es richtig machen, versenden Sie ein brauchbares Dokument; machen Sie es falsch, und Sie versenden einen Screenshot eines Anmeldeformulars.

Häufig gestellte Fragen

Wie render ich eine login-geschützte Seite als PDF mit IronPDF?

Legen Sie RequestContext auf Global fest und füllen Sie CustomCookies mit dem Sitzungs-Cookie des Benutzers, bevor Sie RenderUrlAsPdf aufrufen. Die Chrome-Engine von IronPDF authentifiziert sich mit diesen Cookies und rendert die geschützte Seite.

Was ist der Unterschied zwischen ApplyCookies und CustomCookies in IronPDF?

ApplyCookies meldet sich mit HTTP-Anmeldeinformationen (Basic Auth oder Windows Auth) an und erfasst die resultierenden Sitzungs-Cookies im globalen Kontext. CustomCookies ermöglicht es Ihnen, Cookie-Schlüsselwertpaare direkt bereitzustellen – nützlich für JWT-Tokens, OAuth-Cookies und Multi-Parameter-Sitzungen.

Was ist RequestContext und wann sollte ich Global im Vergleich zu Isolated verwenden?

Verwenden Sie Global, wenn mehrere Renderings die gleiche authentifizierte Sitzung teilen (z. B. die Stapelerzeugung von Rechnungen für einen Benutzer). Verwenden Sie Isolated, wenn für viele verschiedene Benutzer gleichzeitig gerendert wird, sodass jedes Rendern einen sauberen Cookie-Status erhält und Sitzungen nicht zwischen Benutzern überlaufen können.

Kann IronPDF JWT- und OAuth-Authentifizierung für das PDF-Rendering verarbeiten?

Ja. Übergeben Sie die Token-Werte in CustomCookies als Schlüsselwertpaare (z. B. auth_token und refresh_token). IronPDF leitet sie mit jeder Anforderung weiter, die die Chrome-Engine für dieses Rendern stellt.

Warum wird mein PDF als leere Seite oder Anmeldebildschirm gerendert?

Die häufigsten Ursachen sind abgelaufene Sitzungs-Cookies, nicht übereinstimmende Cookie-Domains, Einschränkungen für sichere Cookies bei HTTPS-URLs und SameSite-Policy-Blockierungen bei Cross-Origin-Anforderungen. Stellen Sie sicher, dass die Cookies gültig sind und mit der Zieldomain übereinstimmen, bevor Sie rendern.

Curtis Chau
Technischer Autor

Curtis Chau hat einen Bachelor-Abschluss in Informatik von der Carleton University und ist spezialisiert auf Frontend-Entwicklung mit Expertise in Node.js, TypeScript, JavaScript und React. Leidenschaftlich widmet er sich der Erstellung intuitiver und ästhetisch ansprechender Benutzerschnittstellen und arbeitet gerne mit modernen Frameworks sowie der Erstellung gut strukturierter, optisch ansprechender ...

Weiterlesen

Iron-Support-Team

Wir sind 24 Stunden am Tag, 5 Tage die Woche online.
Chat
E-Mail
Rufen Sie mich an