PDFsharpに代わるPDFから画像への最良の代替案を探る
ほとんどのHTMLからPDFへのジョブは、同じ理由で失敗します:ユーザーがサインインした後でのみページが正しく表示されます。 IronPDFはChromiumエンジンを駆動しており、未認証のブラウザが見るもの、つまりログイン画面や空のシェルが、正しいクッキーを渡すまでは表示されます。 3つのAPIの部分がこれを解決します。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")トークンベースおよびサードパーティ認証
現代のアプリは、単純な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を生成するには、Globalに設定してください。 ブラウザの状態(クッキーを含む)はレンダリング間で保持されるので、1回だけ認証するだけで、各ドキュメントごとに認証する必要がありません。
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を利用してください。 レンダー間で状態を共有するためにIsolatedを選んでください; ApplyCookiesが呼び出されるとグローバルに切り替わります。
ほとんどの失敗は、期限切れのトークン、不一致のクッキードメイン、HTTPS URLでのセキュアクッキーの取り扱い、およびクロスオリジンリクエストでのSameSiteポリシーの周りに集中しています。 レンダリングの前にクッキーの有効性を確認し、セッションを持続させる必要がある場合にはGlobalを頼りにしてください。
クッキーが全作業の時
クッキーはPDF生成において例外ではありません。 それらが正しければ、使用可能なドキュメントを届けることができ、 誤っていたら、ログインフォームのスクリーンショットを届けることになってしまいます。

Curtis Chauは、カールトン大学でコンピュータサイエンスの学士号を取得し、Node.js、TypeScript、JavaScript、およびReactに精通したフロントエンド開発を専門としています。直感的で美しいユーザーインターフェースを作成することに情熱を持ち、Curtisは現代のフレームワークを用いた開発や、構造の良い視覚的に魅力的なマニュアルの作成を楽しんでいます。