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

C#でPlaywrightからIronPDFに移行する方法

Playwright for .NETからIronPDFに移行することで、PDF生成のワークフローがテスト中心のブラウザ自動化ツールから目的に特化したPDFライブラリに変わります。 このガイドでは、複雑な非同期パターン、ブラウザのライフサイクル管理、400MB以上のブラウザのダウンロードを排除し、より良いパフォーマンスとプロフェッショナルなPDF機能を提供する、完全でステップバイステップの移行パスを提供します。

なぜPlaywrightからIronPDFに移行するのか

.NET用Playwrightを理解する

Playwright for .NETは、Microsoftのエンドツーエンドのテストフレームワークであり、ドキュメント生成ライブラリではありません。Chromium 、Firefox、WebKitブラウザでの自動テストのためにゼロから構築されました。脚本家は、ボタンのクリック、フォームへの入力、ネットワーク リクエストのインターセプト、スクリーンショットの取得、クロス ブラウザーの互換性の検証などのシナリオのテストに優れています。

重要な理解:PlaywrightはPDF生成用に再利用されたテストツールです。PDF作成はブラウザの印刷機能(Ctrl+P)の副作用に過ぎず、設計の主目的ではありません。 これにより、根本的なアーキテクチャの不一致が生じます。 -テスト重視のアーキテクチャ:ヘッドレスドキュメントの作成ではなく、インタラクティブなブラウザテスト用に構築されています -マルチブラウザのオーバーヘッド: PDF生成のみが必要な場合でも、400MB以上のブラウザバイナリ(Chromium、Firefox、WebKit)をダウンロードします。 -テスト中心のAPI:ドキュメント生成ではなく、テスト自動化ワークフロー向けに設計された複雑な非同期パターン -ドキュメント機能なし: PDF/A準拠、デジタル署名、透かし、結合、セキュリティ制御が不足しています

テストフレームワークの問題

Playwrightは、ドキュメント生成ではなく、エンドツーエンドのテスト用に設計されています。 このため、PDFに使用する場合、基本的な問題が発生します:

1.初回使用前に400MB以上のブラウザダウンロードが必要です。 Playwrightのデフォルト設定では、複数のブラウザをダウンロードする必要があるため、リソースの制約が厳しい環境では注意が必要です。

2.ブラウザのコンテキストとページ管理による複雑な非同期パターン。 開発者は、ブラウザのコンテキストやページ管理、適切な廃棄方法について熟知する必要があります。

3.テスト優先のアーキテクチャで、ドキュメント生成には最適化されていません。

4.Print-to-PDFの制限 Ctrl+Pのブラウザ印刷と同等です。 レイアウトはリフローされ、背景はデフォルトで省略されます。

5.アクセシビリティ準拠のため、PDF/AまたはPDF/UAはサポートしていません。 Playwrightでは、PDF/A(アーカイブ)またはPDF/UA(アクセシビリティ)に準拠したドキュメントは作成できません。 508条、EUアクセシビリティ指令、または長期保存の要件には、専用のPDFライブラリが必要です。

6.フルブラウザのインスタンスを必要とする、リソースの多い操作

テストフレームワークの構成問題

Playwright では、QA エンジニアが理解できる広範なテスト中心の構成が必要ですが、ドキュメント開発者には必要ありません。

ブラウザのインス​​トールが必要です:

# Manual installation step required before first use
playwright install  # Downloads 400MB+ of browser binaries
# Or programmatically:
playwright install chromium  # Still 100MB+ for single browser
# Manual installation step required before first use
playwright install  # Downloads 400MB+ of browser binaries
# Or programmatically:
playwright install chromium  # Still 100MB+ for single browser
SHELL

ブラウザ起動構成:

// Testing-focused launch options for PDF generation
using var playwright = await Playwright.CreateAsync();
var browser = await playwright.Chromium.LaunchAsync(new BrowserTypeLaunchOptions
{
    Headless = true,  // Required for server environments
    Args = new[] { "--disable-gpu", "--no-sandbox" } // Linux/Docker configs
});
// Testing-focused launch options for PDF generation
using var playwright = await Playwright.CreateAsync();
var browser = await playwright.Chromium.LaunchAsync(new BrowserTypeLaunchOptions
{
    Headless = true,  // Required for server environments
    Args = new[] { "--disable-gpu", "--no-sandbox" } // Linux/Docker configs
});
' Testing-focused launch options for PDF generation
Using playwright = Await Playwright.CreateAsync()
    Dim browser = Await playwright.Chromium.LaunchAsync(New BrowserTypeLaunchOptions With {
        .Headless = True,  ' Required for server environments
        .Args = New String() { "--disable-gpu", "--no-sandbox" } ' Linux/Docker configs
    })
End Using
$vbLabelText   $csharpLabel

テスト固有の構成オプション:

  • Headless: 本番環境ではヘッドレス モードを設定する必要があります (テスト環境ではデフォルトでヘッドレス モードになっています)
  • SlowMo: テストタイミングの遅延(PDF生成には関係ありません)
  • Devtools: テストツールの設定 (ドキュメントには必要ありません)
  • ExecutablePath: テスト環境のカスタム ブラウザ パス
  • Proxy: テストのためのネットワーク傍受(不要なオーバーヘッド)
  • DownloadsPath: テスト成果物の管理
  • TracesDir: テスト実行トレース

ブラウザコンテキスト管理:

// Complex context lifecycle from testing paradigm
var context = await browser.NewContextAsync(new BrowserNewContextOptions
{
    ViewportSize = new ViewportSize { Width = 1920, Height = 1080 },
    UserAgent = "custom-user-agent",
    Locale = "en-US",
    TimezoneId = "America/New_York"
});
var page = await context.NewPageAsync();
// ... generate PDF ...
await context.CloseAsync();  // Manual cleanup required
await browser.CloseAsync();  // Manual cleanup required
// Complex context lifecycle from testing paradigm
var context = await browser.NewContextAsync(new BrowserNewContextOptions
{
    ViewportSize = new ViewportSize { Width = 1920, Height = 1080 },
    UserAgent = "custom-user-agent",
    Locale = "en-US",
    TimezoneId = "America/New_York"
});
var page = await context.NewPageAsync();
// ... generate PDF ...
await context.CloseAsync();  // Manual cleanup required
await browser.CloseAsync();  // Manual cleanup required
' Complex context lifecycle from testing paradigm
Dim context = Await browser.NewContextAsync(New BrowserNewContextOptions With {
    .ViewportSize = New ViewportSize With {.Width = 1920, .Height = 1080},
    .UserAgent = "custom-user-agent",
    .Locale = "en-US",
    .TimezoneId = "America/New_York"
})
Dim page = Await context.NewPageAsync()
' ... generate PDF ...
Await context.CloseAsync()  ' Manual cleanup required
Await browser.CloseAsync()  ' Manual cleanup required
$vbLabelText   $csharpLabel

マルチブラウザの複雑さ:

//脚本家downloads multiple browsers by default
await playwright.Chromium.LaunchAsync();  // For Chrome testing
await playwright.Firefox.LaunchAsync();   // For Firefox testing
await playwright.Webkit.LaunchAsync();    // For Safari testing
// All downloaded but only Chromium needed for PDF generation
//脚本家downloads multiple browsers by default
await playwright.Chromium.LaunchAsync();  // For Chrome testing
await playwright.Firefox.LaunchAsync();   // For Firefox testing
await playwright.Webkit.LaunchAsync();    // For Safari testing
// All downloaded but only Chromium needed for PDF generation
'脚本家downloads multiple browsers by default
Await playwright.Chromium.LaunchAsync()  ' For Chrome testing
Await playwright.Firefox.LaunchAsync()   ' For Firefox testing
Await playwright.Webkit.LaunchAsync()    ' For Safari testing
' All downloaded but only Chromium needed for PDF generation
$vbLabelText   $csharpLabel

IronPDF: ゼロ設定、ゼロインストール

// No installation, no configuration, no lifecycle management
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("output.pdf");
// No installation, no configuration, no lifecycle management
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("output.pdf");
' No installation, no configuration, no lifecycle management
Dim renderer As New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf(html)
pdf.SaveAs("output.pdf")
$vbLabelText   $csharpLabel

真のプラグアンドプレイ:IronPDFは、すべてのテスト フレームワークのオーバーヘッドを排除します。 ブラウザのインス​​トール コマンド、ヘッドレス構成、コンテキスト管理は不要で、インスタンス化してレンダリングするだけです。 テスト ツールから適応されたものではなく、ドキュメント生成用に特別に構築されています。

PlaywrightとIronPDFのパフォーマンス比較

メトリック 脚本家 IronPDF
主な目的 E2Eテストフレームワーク PDFドキュメント生成
デザイン哲学 PDFサイド機能を備えたテストツール 専用のPDFライブラリ
インストールが必要です playwright install (ダウンロードサイズ 400MB 以上) なし - 即時セットアップ
必要な設定 ヘッドレスモード、ブラウザ起動オプション、コンテキスト ゼロ構成
ブラウザのダウンロード 400MB以上(Chromium、Firefox、WebKit) 最適化エンジン内蔵
セットアップの複雑さ コマンドラインインストール + 起動構成 プラグアンドプレイ
ファーストレンダリング(コールドスタート) 4.5秒 2.8秒
後続レンダリング 3.8-4.1秒 0.8-1.2秒
変換あたりのメモリ 280-420MB 80~120MB
APIの複雑さ 複雑な非同期ブラウザ/コンテキスト/ページライフサイクル シンプルな同期ワンライナー
初期化 CreateAsync() + LaunchAsync() + NewPageAsync() new ChromePdfRenderer()
PDF/Aサポート 利用不可 サポートされている
PDF/UAアクセシビリティ 利用不可 サポートされている
デジタル署名 利用不可 サポートされている
PDFの編集 利用不可 結合、分割、スタンプ、編集
プロフェッショナルサポート コミュニティ SLA付き商用

IronPdfはPDF生成に焦点を当てて作られました。 テスト中心のPlaywrightとは異なり、IronPDFはドキュメント中心の様々なAPI機能を提供します。 最適化された1つのChromiumインスタンスに依存し、効率性を重視し、同期と非同期の両方の操作を提供します。 その結果、PDFの機能を必要とする開発者にとって、よりシンプルなメンタルモデルとワークフローが実現します。

2025年と2026年まで.NET 10とC# 14の導入を計画しているチームに対して、IronPDFはより良いパフォーマンスとプロフェッショナルなドキュメント機能を提供しながら、ブラウザの自動化オーバーヘッドを排除する専用PDFソリューションを提供します。

結論

Playwright は、クロスブラウザー自動テストを実行する QA エンジニア向けに設計された Microsoft のテスト フレームワークです。 これを PDF 生成に使用すると、広範なテスト固有の知識を必要とするアーキテクチャ上の不一致が発生します。

  • ブラウザの手動インストール (playwright install)
  • 本番環境向けのヘッドレスモード構成
  • ブラウザ起動オプションの管理
  • コンテキストライフサイクル構成
  • 必要なブラウザが 1 つだけの場合でも、複数のブラウザからのダウンロード (400 MB 以上)
  • テストパラダイムからの複雑な async/await パターン

IronPDFは、PDF ワークフローを構築する開発者向けに設計されたドキュメント生成ライブラリです。 まさにプラグアンドプレイです。

  • インストール不要、すぐに使用可能
  • ゼロ構成 - インテリジェントなデフォルト
  • ブラウザのダウンロードは不要 - 最適化されたエンジンを搭載
  • シンプルなAPI - テストの概念を学ぶ必要はありません
  • 自動リソース管理 - ライフサイクルの複雑さなし

複数のブラウザで Web アプリケーションをテストする必要がある場合は、Playwright を使用します。 PDF ドキュメントを生成する必要がある場合は、 IronPDFを使用します。ドキュメント生成にテスト フレームワークを採用しないでください。その作業専用に構築されたツールを使用してください。


始める前に

前提条件

  1. .NET環境: .NET Framework 4.6.2+ または.NET Core 3.1+ / .NET 5/6/7/8/9+
  2. NuGetアクセス: NuGetパッケージをインストールする機能
  3. IronPDFライセンス: IronPDFからライセンスキーを取得します。

NuGetパッケージの変更

# Remove Playwright
dotnet remove package Microsoft.Playwright

# Remove browser binaries (reclaim ~400MB disk space)
# Delete the .playwright folder in your project or user directory

# Add IronPDF
dotnet add package IronPdf
# Remove Playwright
dotnet remove package Microsoft.Playwright

# Remove browser binaries (reclaim ~400MB disk space)
# Delete the .playwright folder in your project or user directory

# Add IronPDF
dotnet add package IronPdf
SHELL

IronPDFでは playwright install は必要ありません- レンダリング エンジンは自動的にバンドルされます。

ライセンス構成

// Add at application startup
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
// Add at application startup
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
' Add at application startup
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"
$vbLabelText   $csharpLabel

完全な API リファレンス

名前空間の変更

// Before: Playwright
using Microsoft.Playwright;
using System.Threading.Tasks;

// After: IronPDF
using IronPdf;
using IronPdf.Rendering;
// Before: Playwright
using Microsoft.Playwright;
using System.Threading.Tasks;

// After: IronPDF
using IronPdf;
using IronPdf.Rendering;
' Before: Playwright
Imports Microsoft.Playwright
Imports System.Threading.Tasks

' After: IronPDF
Imports IronPdf
Imports IronPdf.Rendering
$vbLabelText   $csharpLabel

コア API マッピング

Playwright API IronPDF API
Playwright.CreateAsync() new ChromePdfRenderer()
playwright.Chromium.LaunchAsync() 不要
browser.NewPageAsync() 不要
page.GotoAsync(url) renderer.RenderUrlAsPdf(url)
page.SetContentAsync(html) + page.PdfAsync() renderer.RenderHtmlAsPdf(html)
page.CloseAsync() 不要
browser.CloseAsync() 不要
PagePdfOptions.Format RenderingOptions.PaperSize
PagePdfOptions.Margin RenderingOptions.MarginTop/Bottom/Left/Right
PagePdfOptions.DisplayHeaderFooter TextFooter
PagePdfOptions.HeaderTemplate RenderingOptions.HtmlHeader
PagePdfOptions.FooterTemplate RenderingOptions.HtmlFooter
<span class='pageNumber'> {page}

コード移行の例

例1: HTML文字列からPDFへの変換

ビフォア(脚本家):

// NuGet: Install-Package Microsoft.Playwright
using Microsoft.Playwright;
using System.Threading.Tasks;

class Program
{
    static async Task Main(string[] args)
    {
        var playwright = await Playwright.CreateAsync();
        var browser = await playwright.Chromium.LaunchAsync();
        var page = await browser.NewPageAsync();

        string html = "<h1>Hello World</h1><p>This is a test PDF.</p>";
        await page.SetContentAsync(html);
        await page.PdfAsync(new PagePdfOptions { Path = "output.pdf" });

        await browser.CloseAsync();
    }
}
// NuGet: Install-Package Microsoft.Playwright
using Microsoft.Playwright;
using System.Threading.Tasks;

class Program
{
    static async Task Main(string[] args)
    {
        var playwright = await Playwright.CreateAsync();
        var browser = await playwright.Chromium.LaunchAsync();
        var page = await browser.NewPageAsync();

        string html = "<h1>Hello World</h1><p>This is a test PDF.</p>";
        await page.SetContentAsync(html);
        await page.PdfAsync(new PagePdfOptions { Path = "output.pdf" });

        await browser.CloseAsync();
    }
}
Imports Microsoft.Playwright
Imports System.Threading.Tasks

Module Program
    Async Function Main(args As String()) As Task
        Dim playwright = Await Playwright.CreateAsync()
        Dim browser = Await playwright.Chromium.LaunchAsync()
        Dim page = Await browser.NewPageAsync()

        Dim html As String = "<h1>Hello World</h1><p>This is a test PDF.</p>"
        Await page.SetContentAsync(html)
        Await page.PdfAsync(New PagePdfOptions With {.Path = "output.pdf"})

        Await browser.CloseAsync()
    End Function
End Module
$vbLabelText   $csharpLabel

翻訳後(IronPDF):

// NuGet: Install-Package IronPdf
using IronPdf;

class Program
{
    static void Main(string[] args)
    {
        var renderer = new ChromePdfRenderer();

        string html = "<h1>Hello World</h1><p>This is a test PDF.</p>";
        var pdf = renderer.RenderHtmlAsPdf(html);
        pdf.SaveAs("output.pdf");
    }
}
// NuGet: Install-Package IronPdf
using IronPdf;

class Program
{
    static void Main(string[] args)
    {
        var renderer = new ChromePdfRenderer();

        string html = "<h1>Hello World</h1><p>This is a test PDF.</p>";
        var pdf = renderer.RenderHtmlAsPdf(html);
        pdf.SaveAs("output.pdf");
    }
}
Imports IronPdf

Class Program
    Shared Sub Main(ByVal args As String())
        Dim renderer = New ChromePdfRenderer()

        Dim html As String = "<h1>Hello World</h1><p>This is a test PDF.</p>"
        Dim pdf = renderer.RenderHtmlAsPdf(html)
        pdf.SaveAs("output.pdf")
    End Sub
End Class
$vbLabelText   $csharpLabel

この例は、基本的なアーキテクチャの違いを示しています。脚本家には、5 つの非同期操作 (SetContentAsync()、および PdfAsync()) と、CloseAsync() による明示的なブラウザ クリーンアップが必要です。

IronPDF は、この複雑さをすべて排除します。ChromePdfRenderer を作成し、RenderHtmlAsPdf() を呼び出し、SaveAs() を呼び出します。 非同期パターン、ブラウザライフサイクル、クリーンアップコードはありません。 IronPDFのアプローチは、よりきれいな構文と最新 for .NETアプリケーションとのより良い統合を提供します。 包括的な例については、HTML to PDF documentationを参照してください。

例2: URLからPDFへの変換

ビフォア(脚本家):

// NuGet: Install-Package Microsoft.Playwright
using Microsoft.Playwright;
using System.Threading.Tasks;

class Program
{
    static async Task Main(string[] args)
    {
        var playwright = await Playwright.CreateAsync();
        var browser = await playwright.Chromium.LaunchAsync();
        var page = await browser.NewPageAsync();

        await page.GotoAsync("https://www.example.com");
        await page.PdfAsync(new PagePdfOptions 
        { 
            Path = "webpage.pdf",
            Format = "A4"
        });

        await browser.CloseAsync();
    }
}
// NuGet: Install-Package Microsoft.Playwright
using Microsoft.Playwright;
using System.Threading.Tasks;

class Program
{
    static async Task Main(string[] args)
    {
        var playwright = await Playwright.CreateAsync();
        var browser = await playwright.Chromium.LaunchAsync();
        var page = await browser.NewPageAsync();

        await page.GotoAsync("https://www.example.com");
        await page.PdfAsync(new PagePdfOptions 
        { 
            Path = "webpage.pdf",
            Format = "A4"
        });

        await browser.CloseAsync();
    }
}
Imports Microsoft.Playwright
Imports System.Threading.Tasks

Module Program
    Async Function Main(args As String()) As Task
        Dim playwright = Await Playwright.CreateAsync()
        Dim browser = Await playwright.Chromium.LaunchAsync()
        Dim page = Await browser.NewPageAsync()

        Await page.GotoAsync("https://www.example.com")
        Await page.PdfAsync(New PagePdfOptions With {
            .Path = "webpage.pdf",
            .Format = "A4"
        })

        Await browser.CloseAsync()
    End Function
End Module
$vbLabelText   $csharpLabel

翻訳後(IronPDF):

// NuGet: Install-Package IronPdf
using IronPdf;

class Program
{
    static void Main(string[] args)
    {
        var renderer = new ChromePdfRenderer();

        var pdf = renderer.RenderUrlAsPdf("https://www.example.com");
        pdf.SaveAs("webpage.pdf");
    }
}
// NuGet: Install-Package IronPdf
using IronPdf;

class Program
{
    static void Main(string[] args)
    {
        var renderer = new ChromePdfRenderer();

        var pdf = renderer.RenderUrlAsPdf("https://www.example.com");
        pdf.SaveAs("webpage.pdf");
    }
}
Imports IronPdf

Class Program
    Shared Sub Main(ByVal args As String())
        Dim renderer = New ChromePdfRenderer()

        Dim pdf = renderer.RenderUrlAsPdf("https://www.example.com")
        pdf.SaveAs("webpage.pdf")
    End Sub
End Class
$vbLabelText   $csharpLabel

Playwright は、GotoAsync() を使用して、PdfAsync() が続く URL に移動します。IronPDFは、ナビゲーションと PDF 生成を 1 回の呼び出しで処理する単一の RenderUrlAsPdf() メソッドを提供します。脚本家では、PagePdfOptionsFormat を指定する必要があり、 IronPDFでは用紙サイズの設定に RenderingOptions.PaperSize が使用されることに注意してください。 詳しくは、チュートリアルをご覧ください。

例3: 余白を使ったカスタムページサイズ

ビフォア(脚本家):

// NuGet: Install-Package Microsoft.Playwright
using Microsoft.Playwright;
using System.Threading.Tasks;

class Program
{
    static async Task Main()
    {
        using var playwright = await Playwright.CreateAsync();
        await using var browser = await playwright.Chromium.LaunchAsync();
        var page = await browser.NewPageAsync();
        await page.SetContentAsync("<h1>Custom PDF</h1><p>Letter size with margins</p>");
        await page.PdfAsync(new PagePdfOptions 
        { 
            Path = "custom.pdf",
            Format = "Letter",
            Margin = new Margin { Top = "1in", Bottom = "1in", Left = "0.5in", Right = "0.5in" }
        });
    }
}
// NuGet: Install-Package Microsoft.Playwright
using Microsoft.Playwright;
using System.Threading.Tasks;

class Program
{
    static async Task Main()
    {
        using var playwright = await Playwright.CreateAsync();
        await using var browser = await playwright.Chromium.LaunchAsync();
        var page = await browser.NewPageAsync();
        await page.SetContentAsync("<h1>Custom PDF</h1><p>Letter size with margins</p>");
        await page.PdfAsync(new PagePdfOptions 
        { 
            Path = "custom.pdf",
            Format = "Letter",
            Margin = new Margin { Top = "1in", Bottom = "1in", Left = "0.5in", Right = "0.5in" }
        });
    }
}
Imports Microsoft.Playwright
Imports System.Threading.Tasks

Module Program
    Async Function Main() As Task
        Using playwright = Await Playwright.CreateAsync()
            Await Using browser = Await playwright.Chromium.LaunchAsync()
                Dim page = Await browser.NewPageAsync()
                Await page.SetContentAsync("<h1>Custom PDF</h1><p>Letter size with margins</p>")
                Await page.PdfAsync(New PagePdfOptions With {
                    .Path = "custom.pdf",
                    .Format = "Letter",
                    .Margin = New Margin With {
                        .Top = "1in",
                        .Bottom = "1in",
                        .Left = "0.5in",
                        .Right = "0.5in"
                    }
                })
            End Using
        End Using
    End Function
End Module
$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 = 25;
        renderer.RenderingOptions.MarginBottom = 25;
        renderer.RenderingOptions.MarginLeft = 12;
        renderer.RenderingOptions.MarginRight = 12;
        var pdf = renderer.RenderHtmlAsPdf("<h1>Custom PDF</h1><p>Letter size with margins</p>");
        pdf.SaveAs("custom.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 = 25;
        renderer.RenderingOptions.MarginBottom = 25;
        renderer.RenderingOptions.MarginLeft = 12;
        renderer.RenderingOptions.MarginRight = 12;
        var pdf = renderer.RenderHtmlAsPdf("<h1>Custom PDF</h1><p>Letter size with margins</p>");
        pdf.SaveAs("custom.pdf");
    }
}
Imports IronPdf
Imports IronPdf.Rendering

Class Program
    Shared Sub Main()
        Dim renderer As New ChromePdfRenderer()
        renderer.RenderingOptions.PaperSize = PdfPaperSize.Letter
        renderer.RenderingOptions.MarginTop = 25
        renderer.RenderingOptions.MarginBottom = 25
        renderer.RenderingOptions.MarginLeft = 12
        renderer.RenderingOptions.MarginRight = 12
        Dim pdf = renderer.RenderHtmlAsPdf("<h1>Custom PDF</h1><p>Letter size with margins</p>")
        pdf.SaveAs("custom.pdf")
    End Sub
End Class
$vbLabelText   $csharpLabel

Playwright は文字列ベースの余白値 ("0.5in") を使用しますが、IronPDFは数値のミリメートル値を使用します。 変換は 1 インチ = 25.4 mm なので、"1in"25 になり、"0.5in" はおよそ 12 になります。脚本家の Format = "Letter" はIronPDFの PaperSize = PdfPaperSize.Letter にマップされます。

例4: ヘッダー、フッター、カスタム設定

ビフォア(脚本家):

// NuGet: Install-Package Microsoft.Playwright
using Microsoft.Playwright;
using System.Threading.Tasks;

class Program
{
    static async Task Main(string[] args)
    {
        var playwright = await Playwright.CreateAsync();
        var browser = await playwright.Chromium.LaunchAsync();
        var page = await browser.NewPageAsync();

        string html = "<h1>Custom PDF</h1><p>With margins and headers.</p>";
        await page.SetContentAsync(html);

        await page.PdfAsync(new PagePdfOptions
        {
            Path = "custom.pdf",
            Format = "A4",
            Margin = new Margin { Top = "1cm", Bottom = "1cm", Left = "1cm", Right = "1cm" },
            DisplayHeaderFooter = true,
            HeaderTemplate = "<div style='font-size:10px; text-align:center;'>Header</div>",
            FooterTemplate = "<div style='font-size:10px; text-align:center;'>Page <span class='pageNumber'></span></div>"
        });

        await browser.CloseAsync();
    }
}
// NuGet: Install-Package Microsoft.Playwright
using Microsoft.Playwright;
using System.Threading.Tasks;

class Program
{
    static async Task Main(string[] args)
    {
        var playwright = await Playwright.CreateAsync();
        var browser = await playwright.Chromium.LaunchAsync();
        var page = await browser.NewPageAsync();

        string html = "<h1>Custom PDF</h1><p>With margins and headers.</p>";
        await page.SetContentAsync(html);

        await page.PdfAsync(new PagePdfOptions
        {
            Path = "custom.pdf",
            Format = "A4",
            Margin = new Margin { Top = "1cm", Bottom = "1cm", Left = "1cm", Right = "1cm" },
            DisplayHeaderFooter = true,
            HeaderTemplate = "<div style='font-size:10px; text-align:center;'>Header</div>",
            FooterTemplate = "<div style='font-size:10px; text-align:center;'>Page <span class='pageNumber'></span></div>"
        });

        await browser.CloseAsync();
    }
}
Imports Microsoft.Playwright
Imports System.Threading.Tasks

Module Program
    Async Function Main(args As String()) As Task
        Dim playwright = Await Playwright.CreateAsync()
        Dim browser = Await playwright.Chromium.LaunchAsync()
        Dim page = Await browser.NewPageAsync()

        Dim html As String = "<h1>Custom PDF</h1><p>With margins and headers.</p>"
        Await page.SetContentAsync(html)

        Await page.PdfAsync(New PagePdfOptions With {
            .Path = "custom.pdf",
            .Format = "A4",
            .Margin = New Margin With {.Top = "1cm", .Bottom = "1cm", .Left = "1cm", .Right = "1cm"},
            .DisplayHeaderFooter = True,
            .HeaderTemplate = "<div style='font-size:10px; text-align:center;'>Header</div>",
            .FooterTemplate = "<div style='font-size:10px; text-align:center;'>Page <span class='pageNumber'></span></div>"
        })

        Await browser.CloseAsync()
    End Function
End Module
$vbLabelText   $csharpLabel

翻訳後(IronPDF):

// NuGet: Install-Package IronPdf
using IronPdf;
using IronPdf.Rendering;

class Program
{
    static void Main(string[] args)
    {
        var renderer = new ChromePdfRenderer();

        renderer.RenderingOptions.MarginTop = 10;
        renderer.RenderingOptions.MarginBottom = 10;
        renderer.RenderingOptions.MarginLeft = 10;
        renderer.RenderingOptions.MarginRight = 10;
        renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
        renderer.RenderingOptions.TextHeader.CenterText = "Header";
        renderer.RenderingOptions.TextFooter.CenterText = "Page {page}";

        string html = "<h1>Custom PDF</h1><p>With margins and headers.</p>";
        var pdf = renderer.RenderHtmlAsPdf(html);
        pdf.SaveAs("custom.pdf");
    }
}
// NuGet: Install-Package IronPdf
using IronPdf;
using IronPdf.Rendering;

class Program
{
    static void Main(string[] args)
    {
        var renderer = new ChromePdfRenderer();

        renderer.RenderingOptions.MarginTop = 10;
        renderer.RenderingOptions.MarginBottom = 10;
        renderer.RenderingOptions.MarginLeft = 10;
        renderer.RenderingOptions.MarginRight = 10;
        renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
        renderer.RenderingOptions.TextHeader.CenterText = "Header";
        renderer.RenderingOptions.TextFooter.CenterText = "Page {page}";

        string html = "<h1>Custom PDF</h1><p>With margins and headers.</p>";
        var pdf = renderer.RenderHtmlAsPdf(html);
        pdf.SaveAs("custom.pdf");
    }
}
Imports IronPdf
Imports IronPdf.Rendering

Class Program
    Shared Sub Main(args As String())
        Dim renderer = New ChromePdfRenderer()

        renderer.RenderingOptions.MarginTop = 10
        renderer.RenderingOptions.MarginBottom = 10
        renderer.RenderingOptions.MarginLeft = 10
        renderer.RenderingOptions.MarginRight = 10
        renderer.RenderingOptions.PaperSize = PdfPaperSize.A4
        renderer.RenderingOptions.TextHeader.CenterText = "Header"
        renderer.RenderingOptions.TextFooter.CenterText = "Page {page}"

        Dim html As String = "<h1>Custom PDF</h1><p>With margins and headers.</p>"
        Dim pdf = renderer.RenderHtmlAsPdf(html)
        pdf.SaveAs("custom.pdf")
    End Sub
End Class
$vbLabelText   $csharpLabel

この例では、ヘッダーとフッターのプレースホルダーの構文の違いを示しています。脚本家は HTML クラスベースのプレースホルダー (<span class='pageNumber'></span>) を使用し、IronPDFは中括弧のプレースホルダー ({page}) を使用します。脚本家ではヘッダー/フッターを有効にするために DisplayHeaderFooter = true が必要ですが、 IronPDFではヘッダー/フッターのコンテンツを設定すると自動的に有効になることに注意してください。


重要な移行に関する注意事項

非同期から同期への変換

Playwrightは、全体を通してasync/awaitを必要とします; IronPDFは同期操作をサポートしています:

// Playwright: Async required
public async Task<byte[]> GeneratePdfAsync(string html)
{
    using var playwright = await Playwright.CreateAsync();
    await using var browser = await playwright.Chromium.LaunchAsync();
    var page = await browser.NewPageAsync();
    await page.SetContentAsync(html);
    return await page.PdfAsync();
}

// IronPDF: Sync is simpler
public byte[] GeneratePdf(string html)
{
    var renderer = new ChromePdfRenderer();
    return renderer.RenderHtmlAsPdf(html).BinaryData;
}
// Playwright: Async required
public async Task<byte[]> GeneratePdfAsync(string html)
{
    using var playwright = await Playwright.CreateAsync();
    await using var browser = await playwright.Chromium.LaunchAsync();
    var page = await browser.NewPageAsync();
    await page.SetContentAsync(html);
    return await page.PdfAsync();
}

// IronPDF: Sync is simpler
public byte[] GeneratePdf(string html)
{
    var renderer = new ChromePdfRenderer();
    return renderer.RenderHtmlAsPdf(html).BinaryData;
}
Imports System.Threading.Tasks
Imports Microsoft.Playwright

Public Class PdfGenerator
    ' Playwright: Async required
    Public Async Function GeneratePdfAsync(html As String) As Task(Of Byte())
        Using playwright = Await Playwright.CreateAsync()
            Await Using browser = Await playwright.Chromium.LaunchAsync()
                Dim page = Await browser.NewPageAsync()
                Await page.SetContentAsync(html)
                Return Await page.PdfAsync()
            End Using
        End Using
    End Function

    ' IronPDF: Sync is simpler
    Public Function GeneratePdf(html As String) As Byte()
        Dim renderer = New ChromePdfRenderer()
        Return renderer.RenderHtmlAsPdf(html).BinaryData
    End Function
End Class
$vbLabelText   $csharpLabel

マージン単位の変換

Playwrightは文字列単位を使用します; IronPDFはミリメートルの数値を使用しています:

脚本家 IronPDF (mm)
"1in" 25
"0.5in" 12
"1cm" 10

ヘッダー/フッター プレースホルダーの変換

劇作家クラス IronPDF プレースホルダー
<span class='pageNumber'> {page}
<span class='totalPages'> {total-pages}
<span class='date'> {date}
<span class='title'> {html-title}

ブラウザーのライフサイクルの排除

すべてのブラウザ管理コードを削除してください:

// Playwright: Explicit cleanup required
await page.CloseAsync();
await browser.CloseAsync();
playwright.Dispose();

// IronPDF: No disposal needed - just use the renderer
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("output.pdf");
// Playwright: Explicit cleanup required
await page.CloseAsync();
await browser.CloseAsync();
playwright.Dispose();

// IronPDF: No disposal needed - just use the renderer
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("output.pdf");
' Playwright: Explicit cleanup required
Await page.CloseAsync()
Await browser.CloseAsync()
playwright.Dispose()

' IronPDF: No disposal needed - just use the renderer
Dim renderer As New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf(html)
pdf.SaveAs("output.pdf")
$vbLabelText   $csharpLabel

移行後の新機能

IronPdfに移行した後は、Playwrightでは提供できない機能を得ることができます:

PDFマージ

var pdf1 = renderer.RenderHtmlAsPdf(html1);
var pdf2 = renderer.RenderHtmlAsPdf(html2);
var merged = PdfDocument.Merge(pdf1, pdf2);
merged.SaveAs("merged.pdf");
var pdf1 = renderer.RenderHtmlAsPdf(html1);
var pdf2 = renderer.RenderHtmlAsPdf(html2);
var merged = PdfDocument.Merge(pdf1, pdf2);
merged.SaveAs("merged.pdf");
Dim pdf1 = renderer.RenderHtmlAsPdf(html1)
Dim pdf2 = renderer.RenderHtmlAsPdf(html2)
Dim merged = PdfDocument.Merge(pdf1, pdf2)
merged.SaveAs("merged.pdf")
$vbLabelText   $csharpLabel

ウォーターマーク

pdf.ApplyWatermark("<h1 style='color:red; opacity:0.3;'>DRAFT</h1>");
pdf.ApplyWatermark("<h1 style='color:red; opacity:0.3;'>DRAFT</h1>");
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

パスワード保護

pdf.SecuritySettings.OwnerPassword = "admin";
pdf.SecuritySettings.UserPassword = "readonly";
pdf.SecuritySettings.AllowUserCopyPasteContent = false;
pdf.SecuritySettings.OwnerPassword = "admin";
pdf.SecuritySettings.UserPassword = "readonly";
pdf.SecuritySettings.AllowUserCopyPasteContent = false;
pdf.SecuritySettings.OwnerPassword = "admin"
pdf.SecuritySettings.UserPassword = "readonly"
pdf.SecuritySettings.AllowUserCopyPasteContent = False
$vbLabelText   $csharpLabel

デジタル署名

var signature = new PdfSignature("certificate.pfx", "password");
pdf.Sign(signature);
var signature = new PdfSignature("certificate.pfx", "password");
pdf.Sign(signature);
Dim signature = New PdfSignature("certificate.pfx", "password")
pdf.Sign(signature)
$vbLabelText   $csharpLabel

PDF/A準拠

pdf.SaveAsPdfA("archive.pdf", PdfAVersions.PdfA3b);
pdf.SaveAsPdfA("archive.pdf", PdfAVersions.PdfA3b);
pdf.SaveAsPdfA("archive.pdf", PdfAVersions.PdfA3b)
$vbLabelText   $csharpLabel

移行チェックリスト

移行前

-脚本家PDF生成コードをすべて特定する

  • ドキュメントの余白値(インチ/cmをミリメートルに変換)
  • 変換のためのヘッダー/フッターのプレースホルダー構文に注意してください
  • IronPDFからIronPDFライセンスキーを取得します

パッケージの変更

  • Microsoft.Playwright NuGetパッケージを削除します
  • .playwright フォルダを削除して、約 400 MB のディスク容量を解放します。
  • IronPdf NuGetパッケージをインストールします: dotnet add package IronPdf

コードの変更

  • 名前空間のインポートを更新する
  • 非同期ブラウザライフサイクルを ChromePdfRenderer に置き換えます
  • page.SetContentAsync() + page.PdfAsync()RenderHtmlAsPdf() に変換します
  • page.GotoAsync() + page.PdfAsync()RenderUrlAsPdf() に変換します
  • マージン文字列をミリメートル値に変換する
  • ヘッダー/フッターのプレースホルダー構文を変換する
  • すべてのブラウザ/ページ破棄コードを削除します
  • アプリケーションの起動時にライセンスの初期化を追加

移行後

  • PDF出力の視覚的な比較
  • ページ番号付きのヘッダー/フッターのレンダリングを検証する
  • 余白とページサイズの精度をテストする
  • 必要に応じて新しい機能(セキュリティ、透かし、結合)を追加します

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

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

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

アイアンサポートチーム

私たちは週5日、24時間オンラインで対応しています。
チャット
メール
電話してね