フッターコンテンツにスキップ
移行ガイド

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.com
$vbLabelText   $csharpLabel

IronPDFとWebView2の比較: 機能の比較

アーキテクチャの違いを理解することは、技術的な意思決定者が移行への投資を評価するのに役立ちます:

アスペクトWebView2IronPDF
目的ブラウザコントロール(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.WebView2
dotnet remove package Microsoft.Web.WebView2
SHELL

または、プロジェクトファイルから削除してください:

<!-- REMOVE these packages -->
<PackageReference Include="Microsoft.Web.WebView2" Version="*" Remove />
<!-- REMOVE these packages -->
<PackageReference Include="Microsoft.Web.WebView2" Version="*" Remove />
XML

ステップ2: IronPDFをインストールする

dotnet add package IronPdf
dotnet add package IronPdf
SHELL

ステップ 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
$vbLabelText   $csharpLabel

ステップ 4: ライセンスの初期化

アプリケーション起動時のライセンス初期化を追加します:

IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"
$vbLabelText   $csharpLabel

コード移行の例

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.com
$vbLabelText   $csharpLabel

IronPDFのアプローチ:

// 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.com
$vbLabelText   $csharpLabel

WebView2バージョンは、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.com
$vbLabelText   $csharpLabel

IronPDFのアプローチ:

// 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.com
$vbLabelText   $csharpLabel

WebView2 では、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.com
$vbLabelText   $csharpLabel

IronPDFのアプローチ:

// 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.com
$vbLabelText   $csharpLabel

WebView2では、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.com
$vbLabelText   $csharpLabel

IronPDFのアプローチ:

// 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.com
$vbLabelText   $csharpLabel

WebView2は無名オブジェクトの構築、JSONへのシリアライズ、DevTools Protocolメソッドの呼び出し、JSONレスポンスの解析、手動によるbase64のデコードを必要とします。IronPDFは明確な名前とPdfPaperSize.Letterのような列挙値を持つ型付きプロパティを提供します。

WebView2APIからIronPDFへのマッピングリファレンス

このマッピングは、APIと同等のものを直接示すことで、移行を加速します:

WebView2 APIIronPDF 同等物ノート
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.MarginTopRenderingOptions.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 disposed
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

課題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
$vbLabelText   $csharpLabel

課題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
$vbLabelText   $csharpLabel

課題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.com
$vbLabelText   $csharpLabel

WebView2移行のチェックリスト

マイグレーション前のタスク

コードベース内のすべての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リファレンスをご覧ください。

カーティス・チャウ
テクニカルライター

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

開発以外にも、CurtisはIoT(Internet of Things)への強い関心を持ち、ハードウェアとソフトウェアの統合方法を模索しています。余暇には、ゲームをしたりDiscordボットを作成したりして、技術に対する愛情と創造性を組み合わせています。