PDFsharp의 이미지 변환을 위한 최고의 PDF 대안을 탐색하세요
대부분의 HTML-to-PDF 작업은 같은 이유로 깨집니다: 페이지는 사용자가 로그인한 후에만 올바르게 보입니다. IronPDF는 Chrome 엔진으로 구동되므로 인증되지 않은 브라우저가 보는 것을 볼 수 있으며, 적합한 쿠키를 전달할 때까지 로그인 화면 또는 빈 쉘을 봅니다. 세 가지 API 구성 요소는 이를 해결합니다. RequestContext 속성, ApplyCookies 메서드, CustomCookies 사전. 각 항목이 어디에 맞는지, 그리고 일치하는 스니펫이 포함된 곳이 여기입니다.
로그인 후 세금형식과 성명 렌더링
고객의 송장은 세션 보호된 경로에 있으며, 어플리케이션이 이미 해당 세션을 보유합니다. 세션 ID를 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");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")기본 인증 또는 Windows 인증의 경우, 대신 ApplyCookies을 참조하세요. URL에서 제공된 자격 증명으로 로그인하고, 결과 쿠키를 글로벌 컨텍스트에 캡처합니다. 그러면 다음 렌더링이 이를 재사용합니다.
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")토큰 기반 및 제3자 인증
현대 애플리케이션은 단순 HTTP 자격 증명에 거의 의존하지 않습니다. 대부분 JWT, OAuth 또는 SAML로 인증하며, 종종 결과를 쿠키에 저장합니다. CustomCookies이(가) 모든 키-값 쌍을 수용하므로, 베어러 토큰 또는 아이덴티티 공급자 쿠키를 바로 사용할 수 있습니다:
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}
}개인화 및 현지화된 문서
쿠키는 종종 로케일, 통화 또는 기능 상태를 담고 있습니다. 이를 전달하고, PDF는 특정 사용자가 보는 것과 일치하게, 올바른 언어 및 통화로 표시됩니다:
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"}
}한 세션을 공유하는 일괄 생성
같은 인증된 사용자에 대해 여러 PDF를 순차적으로 생성하려면, RequestContext을(를) Global로 설정하십시오. 브라우저 상태, 쿠키 포함, 렌더링 간에 지속되므로 문서당 인증이 아닌 한 번만 인증합니다.
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쿠키 누수가 없는 동시 렌더링
반대 시나리오도 똑같이 중요합니다. 여러 다른 사용자를 동시에 렌더링하는 서비스는 Isolated 컨텍스트가 필요하며, 이는 각 렌더링에 깨끗한 상태를 제공하고 한 사용자의 세션이 다른 문서로 누출되는 것을 방지합니다. 각 스레드에 자신의 렌더러를 제공하세요:
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)작업에 맞는 방법 일치시키기
기본 HTTP 인증, Windows 인증 및 간단한 세션을 위해 표준 쿠키(ApplyCookies)를 사용하세요. 토큰, 다중 매개변수 세션, 타사 제공자 및 저장된 환경설정과 함께 CustomCookies을 참조하세요. 렌더링 간 상태를 공유하려면 Global, 이를 분리하려면 Isolated을 선택하세요; Auto은 기본적으로 격리되어 있으며, ApplyCookies가 호출되면 글로벌로 전환됩니다.
대부분의 실패는 만료된 토큰, 일치하지 않는 쿠키 도메인, HTTPS URL의 보안 쿠키 처리, 및 교차 출처 요청에 대한 SameSite 정책 주변에 몰려 있습니다. 렌더링 전에 쿠키 유효성을 확인하고 세션이 지속되어야 하는 경우 Global에 의존하세요.
쿠키가 모든 작업인 경우
PDF 생성에서 쿠키는 경계 사례가 아닙니다. 이를 정확히 처리하면 사용 가능한 문서를 제공하며; 잘못 처리하면 로그인 양식의 스크린샷을 제공합니다.

커티스 차우는 칼턴 대학교에서 컴퓨터 과학 학사 학위를 취득했으며, Node.js, TypeScript, JavaScript, React를 전문으로 하는 프론트엔드 개발자입니다. 직관적이고 미적으로 뛰어난 사용자 인터페이스를 만드는 데 열정을 가진 그는 최신 프레임워크를 활용하고, 잘 구성되고 시각적으로 매력적인 매뉴얼을 제작하는 것을 즐깁니다.