Poznaj najlepsze alternatywy PDF-do-Obraz do PDFsharp
Większość zadań HTML-to-PDF nie działa z tego samego powodu: strona wygląda dobrze dopiero po zalogowaniu się użytkownika. IronPDF napędza silnik Chrome, więc widzi to, co widziałaby niezalogowana przeglądarka, ekran logowania lub pustą powłokę, dopóki nie poda mu się odpowiednich ciasteczek. Trzy elementy API rozwiązują to: właściwość RequestContext, metoda ApplyCookies i słownik CustomCookies. Oto, gdzie każdy pasuje, z kawałkiem kodu do dopasowania.
Renderowanie faktur i wyciągów za logowaniem
Faktura klienta znajduje się na trasie chronionej sesją, a Twoja aplikacja już posiada jego sesję. Przekaż ten identyfikator sesji bezpośrednio przez CustomCookies:
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")
W przypadku podstawowego lub Windows authentication sięgnij po ApplyCookies zamiast tego. Loguje się na URL z podanymi danymi uwierzytelniającymi i przechwytuje utworzone ciasteczka w globalnym kontekście, które następny renderowanie ponownie używa:
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")
Uwierzytelnianie oparte na tokenach i zewnętrzne
Nowoczesne aplikacje rzadko polegają na prostych poświadczeniach HTTP. Uwierzytelniają się za pomocą JWT, OAuth, lub SAML, często zapisując wynik w ciasteczku. Ponieważ CustomCookies przyjmuje dowolną parę klucz-wartość, można bezpośrednio użyć tokena dostępu lub ciasteczka dostawcy tożsamości:
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}
}
Spersonalizowane i lokalizowane dokumenty
Ciasteczka często przenoszą stan lokalizacji, waluty lub flagi funkcji. Przekaż je dalej, a PDF odpowiada temu, co widzi dany użytkownik, w odpowiednim języku i walucie:
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"}
}
Generowanie wsadowe, które dzieli jedną sesję
Aby wygenerować wiele plików PDF dla tego samego uwierzytelnionego użytkownika w kolejności, ustaw RequestContext na Global. Stan przeglądarki, w tym ciasteczka, trwa między renderowaniami, więc uwierzytelniasz się raz, zamiast każdego dokumentu osobno:
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
Równoczesne renderowanie bez przeplatania ciasteczek
Przeciwny scenariusz ma takie samo znaczenie. Usługa renderująca dla wielu różnych użytkowników jednocześnie potrzebuje kontekstu Isolated, co daje każdemu renderowi czysty stan i zapobiega przenikaniu sesji jednego użytkownika do dokumentów innych. Daj każdemu wątkowi własny 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)
Dopasowanie metody do zadania
Użyj standardowych ciasteczek (ApplyCookies) dla podstawowego uwierzytelniania HTTP, Windows authentication i prostych sesji. Sięgnij po CustomCookies przy użyciu tokenów, sesji wieloparametrowych, dostawców zewnętrznych i przechowywanych preferencji. Wybierz Global, aby współdzielić stan pomiędzy renderami, oraz Isolated, aby je oddzielić; Auto domyślnie zostaje oddzielony i przełącza się na globalny, gdy wywołany zostaje ApplyCookies.
Większość niepowodzeń skupia się wokół wygasłych tokenów, niedopasowanych domen ciasteczek, obsługi bezpiecznych ciasteczek na adresach URL HTTPS i zasad SameSite przy żądaniach spoza domeny. Potwierdzaj ważność ciasteczek przed renderowaniem i polegaj na Global, gdy sesje muszą być utrzymywane.
Kiedy ciasteczka stanowią całe zadanie
Ciasteczka nie są przypadkiem granicznym w generowaniu PDF. Zrobisz to dobrze, a wyślesz użyteczny dokument; zrobisz to źle, a wyślesz zrzut ekranu formularza logowania.
Często Zadawane Pytania
Jak renderować stronę zabezpieczoną logowaniem jako PDF w IronPDF?
Ustaw RequestContext na Global i wypełnij CustomCookies ciasteczkiem sesji użytkownika przed wywołaniem RenderUrlAsPdf. Silnik Chrome w IronPDF uwierzytelni się przy użyciu tych ciasteczek i wyrenderuje zabezpieczoną stronę.
Jaka jest różnica między ApplyCookies a CustomCookies w IronPDF?
ApplyCookies loguje się przy użyciu poświadczeń HTTP (podstawowe uwierzytelnianie lub uwierzytelnianie Windows) i przechwytuje wynikowe ciasteczka sesji do kontekstu globalnego. CustomCookies pozwala bezpośrednio dostarczyć pary klucz-wartość ciasteczek — przydatne dla tokenów JWT, ciasteczek OAuth i sesji wieloparametrowych.
Co to jest RequestContext i kiedy używać Global vs Isolated?
Użyj Global, gdy wiele renderów dzieli tę samą uwierzytelnioną sesję (np. generowanie faktur dla jednego użytkownika). Użyj Isolated, gdy renderujesz dla wielu różnych użytkowników jednocześnie, aby każdy render miał czysty stan ciasteczek i sesje nie przechodziły między użytkownikami.
Czy IronPDF obsługuje uwierzytelnianie JWT i OAuth do renderowania PDF?
Tak. Przekaż wartości tokenów w CustomCookies jako pary klucz-wartość (np. auth_token i refresh_token). IronPDF przesyła je z każdym żądaniem, które silnik Chrome wykonuje dla tego rendera.
Dlaczego mój PDF jest renderowany jako pusta strona lub ekran logowania?
Najczęstszymi przyczynami są wygasłe ciasteczka sesji, niedopasowane domeny ciasteczek, ograniczenia ciasteczek bezpiecznych na adresach HTTPS oraz blokady polityk SameSite dla żądań międzydomenowych. Zweryfikuj, czy ciasteczka są ważne i zgodne z docelową domeną przed renderowaniem.

