C#でWebView2からIronPDFに移行する方法
WebView2からIronPDFへの移行:完全なC#開発者ガイド
WebView2は、Microsoftの埋め込み可能なEdge/Chromiumブラウザコントロールで、Windowsアプリケーション内にWebコンテンツを表示する方法を開発者に提供します。 しかし、開発チームがPDF生成にWebView2を使用しようとすると、本番環境には適さない深刻なアーキテクチャ上の制限に遭遇します。 WebView2は、UIアプリケーション用に設計されたブラウザ埋め込みコントロールであり、PDF生成ライブラリではありません。
このガイドでは、アプリケーションで信頼性の高いPDF生成を必要とする.NET開発者のために、WebView2からIronPDFへの完全な移行経路を、ステップバイステップの手順、コード比較、実用的な例とともに提供します。
重大な警告です:WebView2はPDF生成には適していません
移行経路を検討する前に、開発チームはなぜWebView2をPDF作成に使用すると重大な問題が発生するのかを理解する必要があります:
| 課題 | インパクト | 重要度 |
|---|---|---|
| メモリリーク | WebView2には、長時間実行されるプロセスにおけるメモリリークがあることが十分に文書化されています。 サーバーがクラッシュします。 | 重要 |
| Windowsのみ。 | Linux、macOS、Docker、クラウド環境のサポートはありません。 | 重要 |
| UIスレッドが必要です。 | メッセージポンプを使用したSTAスレッドで実行する必要があります。ウェブサーバーやAPIでは動作しません。 | 重要 |
| PDF用にデザインされていません。 | PrintToPdfAsyncは後付けであり、コア機能ではありません。 | 高 |
| 不安定なサービス | Windowsサービスとバックグラウンドワーカーでよくあるクラッシュとハングアップ | 高 |
| 複雑な非同期フロー | ナビゲーションイベント、完了コールバック、レースコンディション | 高 |
| 対象マシンにEdgeWebView2Runtimeがインストールされている必要があります。 | 中級 | |
| ヘッドレスモードはありません。 | 非表示でも常にUI要素を作成 | 中級 |
| パフォーマンス | 起動が遅く、リソースの消費が激しい | 中級 |
| プロのサポートはありません。 | Microsoft は PDF 生成をサポートしていません。 | 中級 |
現実世界の失敗シナリオ
これらのコードパターンは、生産上の障害を引き起こします:
// DANGER: This code WILL cause problems in production
//課題1: Memory leak - creates newWebView2for each PDF
public async Task<byte[]> GeneratePdf(string html) // Called 1000x/day = server crash
{
using var webView = new WebView2(); // Memory not fully released!
await webView.EnsureCoreWebView2Async();
webView.CoreWebView2.NavigateToString(html);
// ... memory accumulates until OOM
}
//課題2: UI thread requirement - crashes in ASP.NET
public IActionResult GenerateReport() // FAILS - no STA thread
{
var webView = new WebView2(); // InvalidOperationException
}
//課題3: Windows Service instability
public class PdfService : BackgroundService // Random crashes
{
protected override async Task ExecuteAsync(CancellationToken token)
{
//WebView2+ no message pump = hangs, crashes, undefined behavior
}
}// DANGER: This code WILL cause problems in production
//課題1: Memory leak - creates newWebView2for each PDF
public async Task<byte[]> GeneratePdf(string html) // Called 1000x/day = server crash
{
using var webView = new WebView2(); // Memory not fully released!
await webView.EnsureCoreWebView2Async();
webView.CoreWebView2.NavigateToString(html);
// ... memory accumulates until OOM
}
//課題2: UI thread requirement - crashes in ASP.NET
public IActionResult GenerateReport() // FAILS - no STA thread
{
var webView = new WebView2(); // InvalidOperationException
}
//課題3: Windows Service instability
public class PdfService : BackgroundService // Random crashes
{
protected override async Task ExecuteAsync(CancellationToken token)
{
//WebView2+ no message pump = hangs, crashes, undefined behavior
}
}IRON VB CONVERTER ERROR developers@ironsoftware.comIronPDFとWebView2の比較: 機能の比較
アーキテクチャの違いを理解することは、技術的な意思決定者が移行への投資を評価するのに役立ちます:
| アスペクト | WebView2 | IronPDF |
|---|---|---|
| 目的 | ブラウザコントロール(UI) | PDFライブラリ(PDF用に設計) |
| プロダクションレディ | NO | はい |
| メモリ管理 | 長期にわたる | 安定した適切な処理 |
| プラットフォームサポート | Windowsのみ | Windows、Linux、macOS、Docker |
| スレッドの要件 | STA + メッセージポンプ | スレッド |
| サーバー/クラウド | サポートされていません | フルサポート |
| Azure/AWS/GCP(アジュール/AWS/GCP | 問題点 | 完璧な翻訳 |
| ドッカー。 | 不可 | 利用可能な公式画像 |
| .NETコア。 | 不可 | 一流のサポート |
| バックグラウンドサービス | 不安定 | 安定性 |
| サポートされるコンテキスト | WinForms/WPFのみ | あらゆる.NETコンテキスト:コンソール、ウェブ、デスクトップ |
| HTMLからPDFへ | 基本 | フル |
| URLからPDFへ。 | 基本 | フル |
| ヘッダー/フッター | NO | はい(HTML) |
| ウォーターマーク。 | NO | はい |
| PDFをマージする。 | NO | はい |
| PDFを分割する。 | NO | はい |
| デジタル署名。 | NO | はい |
| パスワード保護 | NO | はい |
| PDF/Aコンプライアンス | NO | はい |
| プロフェッショナルサポート | PDFはありません | はい |
| ドキュメント | 制限的 | 広範囲 |
クイックスタートWebView2からIronPdfへの移行
これらの基本的なステップを踏めば、すぐにでも移行を開始できます。
ステップ 1:WebView2パッケージの削除
dotnet remove package Microsoft.Web.WebView2dotnet remove package Microsoft.Web.WebView2または、プロジェクトファイルから削除してください:
<!-- REMOVE these packages -->
<PackageReference Include="Microsoft.Web.WebView2" Version="*" Remove /><!-- REMOVE these packages -->
<PackageReference Include="Microsoft.Web.WebView2" Version="*" Remove />ステップ2: IronPDFをインストールする
dotnet add package IronPdfdotnet add package IronPdfステップ 3: 名前空間の更新
WebView2の名前空間をIronPdfの名前空間に置き換えてください:
// Before (WebView2)
using Microsoft.Web.WebView2.Core;
using Microsoft.Web.WebView2.WinForms;
// After (IronPDF)
using IronPdf;// Before (WebView2)
using Microsoft.Web.WebView2.Core;
using Microsoft.Web.WebView2.WinForms;
// After (IronPDF)
using IronPdf;IRON VB CONVERTER ERROR developers@ironsoftware.comステップ 4: ライセンスの初期化
アプリケーション起動時のライセンス初期化を追加します:
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"コード移行の例
HTML を PDF に変換する
最も基本的な操作は、これらの.NET PDFアプローチの複雑さの違いを明らかにします。
WebView2のアプローチ:
// NuGet: Install-Package Microsoft.Web.WebView2.WinForms
using System;
using System.IO;
using System.Threading.Tasks;
using Microsoft.Web.WebView2.WinForms;
using Microsoft.Web.WebView2.Core;
class Program
{
static async Task Main()
{
var webView = new WebView2();
await webView.EnsureCoreWebView2Async();
webView.CoreWebView2.NavigateToString("<html><body><h1>Hello World</h1></body></html>");
await Task.Delay(2000);
await webView.CoreWebView2.CallDevToolsProtocolMethodAsync(
"Page.printToPDF",
"{}"
);
}
}// NuGet: Install-Package Microsoft.Web.WebView2.WinForms
using System;
using System.IO;
using System.Threading.Tasks;
using Microsoft.Web.WebView2.WinForms;
using Microsoft.Web.WebView2.Core;
class Program
{
static async Task Main()
{
var webView = new WebView2();
await webView.EnsureCoreWebView2Async();
webView.CoreWebView2.NavigateToString("<html><body><h1>Hello World</h1></body></html>");
await Task.Delay(2000);
await webView.CoreWebView2.CallDevToolsProtocolMethodAsync(
"Page.printToPDF",
"{}"
);
}
}IRON VB CONVERTER ERROR developers@ironsoftware.comIronPDFのアプローチ:
// NuGet: Install-Package IronPdf
using IronPdf;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<html><body><h1>Hello World</h1></body></html>");
pdf.SaveAs("output.pdf");
}
}// NuGet: Install-Package IronPdf
using IronPdf;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<html><body><h1>Hello World</h1></body></html>");
pdf.SaveAs("output.pdf");
}
}IRON VB CONVERTER ERROR developers@ironsoftware.comWebView2バージョンは、EnsureCoreWebView2Async()による非同期初期化、NavigateToString()によるナビゲーション、レンダリングを待つための信頼性の低いTask.Delay(2000)、およびDevToolsプロトコルとのインタラクションを必要とします。 IronPDFはこのセレモニーを完全に排除します-レンダラーを作成し、HTMLをレンダリングし、保存します。
高度なHTMLからPDFへのシナリオについては、HTMLからPDFへの変換ガイドをご覧ください。
URLをPDFに変換する
URLからPDFへの変換は、WebView2の複雑な非同期ナビゲーションフローを示しています。
WebView2のアプローチ:
// NuGet: Install-Package Microsoft.Web.WebView2.WinForms
using System;
using System.IO;
using System.Threading.Tasks;
using Microsoft.Web.WebView2.WinForms;
using Microsoft.Web.WebView2.Core;
class Program
{
static async Task Main()
{
var webView = new WebView2();
await webView.EnsureCoreWebView2Async();
var tcs = new TaskCompletionSource<bool>();
webView.CoreWebView2.NavigationCompleted += (s, e) => tcs.SetResult(true);
webView.CoreWebView2.Navigate("https://example.com");
await tcs.Task;
await Task.Delay(1000);
var result = await webView.CoreWebView2.CallDevToolsProtocolMethodAsync(
"Page.printToPDF",
"{\"printBackground\": true}"
);
var base64 = System.Text.Json.JsonDocument.Parse(result).RootElement.GetProperty("data").GetString();
File.WriteAllBytes("output.pdf", Convert.FromBase64String(base64));
}
}// NuGet: Install-Package Microsoft.Web.WebView2.WinForms
using System;
using System.IO;
using System.Threading.Tasks;
using Microsoft.Web.WebView2.WinForms;
using Microsoft.Web.WebView2.Core;
class Program
{
static async Task Main()
{
var webView = new WebView2();
await webView.EnsureCoreWebView2Async();
var tcs = new TaskCompletionSource<bool>();
webView.CoreWebView2.NavigationCompleted += (s, e) => tcs.SetResult(true);
webView.CoreWebView2.Navigate("https://example.com");
await tcs.Task;
await Task.Delay(1000);
var result = await webView.CoreWebView2.CallDevToolsProtocolMethodAsync(
"Page.printToPDF",
"{\"printBackground\": true}"
);
var base64 = System.Text.Json.JsonDocument.Parse(result).RootElement.GetProperty("data").GetString();
File.WriteAllBytes("output.pdf", Convert.FromBase64String(base64));
}
}IRON VB CONVERTER ERROR developers@ironsoftware.comIronPDFのアプローチ:
// NuGet: Install-Package IronPdf
using IronPdf;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderUrlAsPdf("https://example.com");
pdf.SaveAs("output.pdf");
}
}// NuGet: Install-Package IronPdf
using IronPdf;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderUrlAsPdf("https://example.com");
pdf.SaveAs("output.pdf");
}
}IRON VB CONVERTER ERROR developers@ironsoftware.comWebView2 では、TaskCompletionSource を作成し、NavigationCompleted イベントを購読し、CallDevToolsProtocolMethodAsync を呼び出し、JSON レスポンスを解析し、base64 データをデコードする必要があります。 IronPDFはすべての複雑さを内部で処理する専用のRenderUrlAsPdfメソッドを提供します。
認証とカスタムヘッダーオプションについては、URL to PDF documentationを参照してください。
HTMLファイルからのカスタムPDF設定
ページの向き、余白、用紙サイズの設定には、さまざまなアプローチが必要です。
WebView2のアプローチ:
// NuGet: Install-Package Microsoft.Web.WebView2.WinForms
using System;
using System.IO;
using System.Threading.Tasks;
using Microsoft.Web.WebView2.Core;
using Microsoft.Web.WebView2.WinForms;
class Program
{
static async Task Main()
{
var webView = new WebView2();
await webView.EnsureCoreWebView2Async();
string htmlFile = Path.Combine(Directory.GetCurrentDirectory(), "input.html");
webView.CoreWebView2.Navigate(htmlFile);
await Task.Delay(3000);
var printSettings = webView.CoreWebView2.Environment.CreatePrintSettings();
printSettings.Orientation = CoreWebView2PrintOrientation.Landscape;
printSettings.MarginTop = 0.5;
printSettings.MarginBottom = 0.5;
using (var stream = await webView.CoreWebView2.PrintToPdfAsync("custom.pdf", printSettings))
{
Console.WriteLine("Custom PDF created");
}
}
}// NuGet: Install-Package Microsoft.Web.WebView2.WinForms
using System;
using System.IO;
using System.Threading.Tasks;
using Microsoft.Web.WebView2.Core;
using Microsoft.Web.WebView2.WinForms;
class Program
{
static async Task Main()
{
var webView = new WebView2();
await webView.EnsureCoreWebView2Async();
string htmlFile = Path.Combine(Directory.GetCurrentDirectory(), "input.html");
webView.CoreWebView2.Navigate(htmlFile);
await Task.Delay(3000);
var printSettings = webView.CoreWebView2.Environment.CreatePrintSettings();
printSettings.Orientation = CoreWebView2PrintOrientation.Landscape;
printSettings.MarginTop = 0.5;
printSettings.MarginBottom = 0.5;
using (var stream = await webView.CoreWebView2.PrintToPdfAsync("custom.pdf", printSettings))
{
Console.WriteLine("Custom PDF created");
}
}
}IRON VB CONVERTER ERROR developers@ironsoftware.comIronPDFのアプローチ:
// NuGet: Install-Package IronPdf
using IronPdf;
using IronPdf.Rendering;
using System;
using System.IO;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Landscape;
renderer.RenderingOptions.MarginTop = 50;
renderer.RenderingOptions.MarginBottom = 50;
string htmlFile = Path.Combine(Directory.GetCurrentDirectory(), "input.html");
var pdf = renderer.RenderHtmlFileAsPdf(htmlFile);
pdf.SaveAs("custom.pdf");
Console.WriteLine("Custom PDF created");
}
}// NuGet: Install-Package IronPdf
using IronPdf;
using IronPdf.Rendering;
using System;
using System.IO;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Landscape;
renderer.RenderingOptions.MarginTop = 50;
renderer.RenderingOptions.MarginBottom = 50;
string htmlFile = Path.Combine(Directory.GetCurrentDirectory(), "input.html");
var pdf = renderer.RenderHtmlFileAsPdf(htmlFile);
pdf.SaveAs("custom.pdf");
Console.WriteLine("Custom PDF created");
}
}IRON VB CONVERTER ERROR developers@ironsoftware.comWebView2では、3秒間のTask.Delay(信頼できない推測です)、環境による印刷設定の作成、ストリームによるPrintToPdfAsyncの使用が必要です。 IronPdfはRenderingOptionsプロパティを明確な名前で直接提供し、より正確な測定のためにミリメートルを使用します。
DevToolsプロトコルによる高度なPDFオプション
複雑なWebView2の設定には、DevToolsプロトコルの対話が必要です。
WebView2のアプローチ:
// NuGet: Install-Package Microsoft.Web.WebView2.WinForms
using System;
using System.IO;
using System.Threading.Tasks;
using System.Text.Json;
using Microsoft.Web.WebView2.WinForms;
using Microsoft.Web.WebView2.Core;
class Program
{
static async Task Main()
{
var webView = new WebView2();
await webView.EnsureCoreWebView2Async();
var htmlPath = Path.GetFullPath("document.html");
var tcs = new TaskCompletionSource<bool>();
webView.CoreWebView2.NavigationCompleted += (s, e) => tcs.SetResult(true);
webView.CoreWebView2.Navigate($"file:///{htmlPath}");
await tcs.Task;
await Task.Delay(1000);
var options = new
{
landscape = false,
printBackground = true,
paperWidth = 8.5,
paperHeight = 11,
marginTop = 0.4,
marginBottom = 0.4,
marginLeft = 0.4,
marginRight = 0.4
};
var result = await webView.CoreWebView2.CallDevToolsProtocolMethodAsync(
"Page.printToPDF",
JsonSerializer.Serialize(options)
);
var base64 = JsonDocument.Parse(result).RootElement.GetProperty("data").GetString();
File.WriteAllBytes("output.pdf", Convert.FromBase64String(base64));
}
}// NuGet: Install-Package Microsoft.Web.WebView2.WinForms
using System;
using System.IO;
using System.Threading.Tasks;
using System.Text.Json;
using Microsoft.Web.WebView2.WinForms;
using Microsoft.Web.WebView2.Core;
class Program
{
static async Task Main()
{
var webView = new WebView2();
await webView.EnsureCoreWebView2Async();
var htmlPath = Path.GetFullPath("document.html");
var tcs = new TaskCompletionSource<bool>();
webView.CoreWebView2.NavigationCompleted += (s, e) => tcs.SetResult(true);
webView.CoreWebView2.Navigate($"file:///{htmlPath}");
await tcs.Task;
await Task.Delay(1000);
var options = new
{
landscape = false,
printBackground = true,
paperWidth = 8.5,
paperHeight = 11,
marginTop = 0.4,
marginBottom = 0.4,
marginLeft = 0.4,
marginRight = 0.4
};
var result = await webView.CoreWebView2.CallDevToolsProtocolMethodAsync(
"Page.printToPDF",
JsonSerializer.Serialize(options)
);
var base64 = JsonDocument.Parse(result).RootElement.GetProperty("data").GetString();
File.WriteAllBytes("output.pdf", Convert.FromBase64String(base64));
}
}IRON VB CONVERTER ERROR developers@ironsoftware.comIronPDFのアプローチ:
// NuGet: Install-Package IronPdf
using IronPdf;
using IronPdf.Rendering;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.PaperSize = PdfPaperSize.Letter;
renderer.RenderingOptions.MarginTop = 40;
renderer.RenderingOptions.MarginBottom = 40;
renderer.RenderingOptions.MarginLeft = 40;
renderer.RenderingOptions.MarginRight = 40;
renderer.RenderingOptions.PrintHtmlBackgrounds = true;
var pdf = renderer.RenderHtmlFileAsPdf("document.html");
pdf.SaveAs("output.pdf");
}
}// NuGet: Install-Package IronPdf
using IronPdf;
using IronPdf.Rendering;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.PaperSize = PdfPaperSize.Letter;
renderer.RenderingOptions.MarginTop = 40;
renderer.RenderingOptions.MarginBottom = 40;
renderer.RenderingOptions.MarginLeft = 40;
renderer.RenderingOptions.MarginRight = 40;
renderer.RenderingOptions.PrintHtmlBackgrounds = true;
var pdf = renderer.RenderHtmlFileAsPdf("document.html");
pdf.SaveAs("output.pdf");
}
}IRON VB CONVERTER ERROR developers@ironsoftware.comWebView2は無名オブジェクトの構築、JSONへのシリアライズ、DevTools Protocolメソッドの呼び出し、JSONレスポンスの解析、手動によるbase64のデコードを必要とします。IronPDFは明確な名前とPdfPaperSize.Letterのような列挙値を持つ型付きプロパティを提供します。
WebView2APIからIronPDFへのマッピングリファレンス
このマッピングは、APIと同等のものを直接示すことで、移行を加速します:
| WebView2 API | IronPDF 同等物 | ノート |
|---|---|---|
new WebView2(). | new ChromePdfRenderer(). | UIコントロール不要 |
EnsureCoreWebView2Async()を使用してください。 | 該当なし | 初期化不要 |
NavigateToString(html)と PrintToPdfAsync()です。 | RenderHtmlAsPdf(html)を使用してください。 | 単一メソッド呼び出し |
Navigate(url) + PrintToPdfAsync(). | RenderUrlAsPdf(url)を使用してください。 | 単一メソッド呼び出し |
PrintSettings.PageWidthを使用してください。 | <コード>RenderingOptions.PaperSize</コード | PdfPaperSize列挙型を使用する |
PrintSettings.PageHeight(プリント設定.ページ高さ | <コード>RenderingOptions.PaperSize</コード | PdfPaperSize列挙型を使用する |
PrintSettings.MarginTop。 | RenderingOptions.MarginTop。 | 単位はインチではなくmm |
| <コード>PrintSettings.Orientation</コード | <コード>RenderingOptions.PaperOrientation</コード | ポートレート/風景 |
ExecuteScriptAsync()を使用してください。 | HTMLのJavaScript | または、WaitForオプションを使用してください。 |
AddScriptToExecuteOnDocumentCreatedAsync(). | HTML <script>タグ | JSフルサポート |
| ナビゲーションイベント | <コード>WaitFor.JavaScript()</コード | クリーンな待機メカニズム |
CallDevToolsProtocolMethodAsync("Page.printToPDF")。 | <コード>RenderHtmlAsPdf()</コード | 直接レンダリング |
一般的な移行の問題と解決策
課題1: メモリ リーク
WebView2の問題: WebView2インスタンスを破棄するときにメモリが完全に解放されません。 長時間稼働するプロセスは、クラッシュするまでメモリを蓄積します。
IronPDFソリューション:漏れのない適切なガベージコレクション:
//IronPDF- clean memory management
using (var pdf = renderer.RenderHtmlAsPdf(html))
{
pdf.SaveAs("output.pdf");
} // Properly disposed//IronPDF- clean memory management
using (var pdf = renderer.RenderHtmlAsPdf(html))
{
pdf.SaveAs("output.pdf");
} // Properly disposedIRON VB CONVERTER ERROR developers@ironsoftware.com課題2:ウェブアプリにUIスレッドがない
WebView2の問題 メッセージポンプを備えたSTAスレッドが必要です。.NET Core コントローラーはWebView2インスタンスを作成できません。
IronPDFソリューション:どのスレッドでも動作します:
// ASP.NET Core - just works
public async Task<IActionResult> GetPdf()
{
var pdf = await renderer.RenderHtmlAsPdfAsync(html);
return File(pdf.BinaryData, "application/pdf");
}// ASP.NET Core - just works
public async Task<IActionResult> GetPdf()
{
var pdf = await renderer.RenderHtmlAsPdfAsync(html);
return File(pdf.BinaryData, "application/pdf");
}IRON VB CONVERTER ERROR developers@ironsoftware.com課題3:ナビゲーションイベントの複雑さ
WebView2の問題: TaskCompletionSourceで、非同期のナビゲーション イベント、完了コールバック、およびレース条件を処理しなければなりません。
IronPDFソリューション: 同期または非同期の単一メソッド呼び出し:
// Simple and predictable
var pdf = renderer.RenderHtmlAsPdf(html);
// or
var pdf = await renderer.RenderHtmlAsPdfAsync(html);// Simple and predictable
var pdf = renderer.RenderHtmlAsPdf(html);
// or
var pdf = await renderer.RenderHtmlAsPdfAsync(html);IRON VB CONVERTER ERROR developers@ironsoftware.com課題4:測定単位
WebView2は寸法にインチを使用しています(レターは8.5 x 11)。 IronPDFは、より正確な測定のためにミリメートルを使用しています。
変換アプローチ:。
// WebView2: PageWidth = 8.27 (inches for A4)
// IronPDF: Use enum
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
// Or custom size in mm
renderer.RenderingOptions.SetCustomPaperSizeInMillimeters(210, 297);// WebView2: PageWidth = 8.27 (inches for A4)
// IronPDF: Use enum
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
// Or custom size in mm
renderer.RenderingOptions.SetCustomPaperSizeInMillimeters(210, 297);IRON VB CONVERTER ERROR developers@ironsoftware.comWebView2移行のチェックリスト
マイグレーション前のタスク
コードベース内のすべてのWebView2PDF 生成コードを文書化します。WebView2が問題(メモリリーク、クラッシュ、デプロイの問題)を引き起こしている箇所を特定すること。 IronPDFのドキュメントを見て、機能を理解してください。
コード更新タスク
1.Microsoft.Web.WebView2 NuGet パッケージの削除 2.IronPdf NuGetパッケージをインストールする 3.PDF生成にのみ使用する場合は、WinForms/WPFの依存関係を削除してください。 4.WebView2のコードをChromePdfRendererに置き換えてください。 5.STAスレッド要件の削除 6.ナビゲーション イベント ハンドラと TaskCompletionSource<//code> パターンを削除する。 7.Task.Delay<//code> ハックの削除 8.起動時にIronPDFライセンスの初期化を追加する
移行後のテスト
移行後、これらの点を検証してください:
- ターゲット環境でのテスト(ASP.NET、Docker、該当する場合はLinux)
- PDF出力の品質が期待値に合っていることを確認
- JavaScriptを多用したページが正しくレンダリングされることをテストする
- ヘッダーとフッターがIronPDFのHTML機能で動作することを確認する。
- 長時間の動作におけるメモリの安定性に関する負荷テスト
- メモリの蓄積なしに長時間実行するシナリオをテストする
デプロイメントの更新
- 該当する場合は、Dockerイメージを更新してください(EdgeWebView2Runtimeを削除してください)。
- サーバー要件からEdgeWebView2Runtimeの依存関係を削除する
- サーバー要件ドキュメントの更新
- クロスプラットフォーム展開がターゲットプラットフォームで動作することを確認する。
IronPDFに移行する主な利点
WebView2からIronPdfに移行することで、いくつかの重要な利点が得られます:
クロスプラットフォームのサポート:WebView2のWindowsのみの制限とは異なり、IronPdfはWindows、Linux、macOS、Docker上で機能します。 この柔軟性により、Azure、AWS、GCP、およびプラットフォームの制約を受けないあらゆるクラウド環境への展開が可能になります。
UI依存なし: IronPDFはSTAスレッド、メッセージポンプ、WinForms/WPFコンテキストを必要としません。 コンソールアプリケーション、Web API、Windowsサービス、バックグラウンドワーカーで動作します。
メモリの安定性:適切なガベージコレクションにより、長時間実行するプロセスでWebView2を悩ませるメモリリークがなくなります。 プロダクションサーバーは安定したままです。
シンプルなAPI:単一のメソッド呼び出しが、複雑なナビゲーションイベント、完了コールバック、DevToolsプロトコル相互作用、およびbase64デコードに取って代わります。
拡張PDF機能: ヘッダー、フッター、透かし、結合/分割、電子署名、パスワード保護、PDF/Aコンプライアンス-WebView2では提供できない機能です。
アクティブ開発:2026年まで.NET 10とC# 14の採用が増加する中、IronPDFの定期的なアップデートは現在と将来の.NETバージョンとの互換性を保証します。
結論
WebView2は、WindowsアプリケーションでWebコンテンツを表示するための、有能なブラウザ埋め込みコントロールです。 しかし、PDF生成に使用すると、メモリリーク、プラットフォームの制限、スレッドの問題、デプロイの複雑さなどが発生し、本番環境には適しません。
IronPdfは目的に応じたアーキテクチャでPDFを生成します。 HTML-to-PDFおよびURL-to-PDF操作は、単一のメソッド呼び出しになります。 メモリ管理は安定しています。 クロスプラットフォーム展開が可能になります。 NuGetパッケージの置き換え、名前空間の更新、ナビゲーション・イベントと非同期式の削除によるコードの簡素化です。
IronPDFの無料トライアルで今すぐ移行を開始し、ブラウザコントロールベースのPDF生成に特有の信頼性の問題を解消しましょう。
包括的な実装ガイダンスについては、IronPdfドキュメント、チュートリアル、APIリファレンスをご覧ください。






