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

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

PuppeteerSharpからIronPdfへの移行は、あなたのPDF生成ワークフローを、300MB以上の依存関係を持つブラウザ自動化ツールから、自動メモリ管理機能を持つ専用PDFライブラリへと変えます。 このガイドは、Chromiumのダウンロードをなくし、メモリリークの問題を解決し、包括的なPDF操作機能を提供する、完全で段階的な移行パスを提供します。

なぜPuppeteerSharpからIronPDFへ移行するのか

PuppeteerSharpの理解

PuppeteerSharpは、GoogleのPuppeteerの.NET移植版で、ブラウザ自動化機能をC#にもたらします。 Chromeに内蔵されているprint-to-PDF機能(ブラウザでCtrl+Pを押すのと同じ)を使ってPDFを生成します。 このため、画面に表示されるものとは異なる、紙に最適化された印刷用出力が作成されます。

PuppeteerSharpは、ウェブテストとスクレイピングのために設計されており、文書生成のために設計されていません。 PDFの生成にPuppeteerSharpを使用することは可能ですが、制作上の大きな課題があります。

ブラウザ自動化の問題

PuppeteerSharpは、ドキュメント生成ではなく、ブラウザ自動化のために設計されています。 このため、PDFに使用する場合、基本的な問題が発生します:

1.初回使用前に300MB以上のChromiumダウンロードが必要です。 PuppeteerSharpの重大な欠点は、主にChromiumバイナリをバンドルしているため、デプロイメントサイズが大きいことです。 この膨大なサイズはDockerイメージを肥大化させ、サーバーレス環境におけるコールドスタートの問題を引き起こす可能性があります。

2.負荷がかかるとメモリリークが発生し、ブラウザを手動でリサイクルする必要があります。 高負荷の場合、PuppeteerSharpはメモリリークを起こすことが知られています。 ブラウザのインスタンスによってメモリが蓄積されるため、プロセス管理とリサイクルのために手作業が必要になります。

3.ブラウザのライフサイクル管理による複雑な非同期パターン

4.PDF出力(画面キャプチャではなく、Ctrl+Pと同等)。 レイアウトはリフローし、背景はデフォルトで省略され、出力はブラウザのビューポートに合わせるのではなく、印刷用にページ分割されます。

5.コンプライアンス要件のため、PDF/AまたはPDF/UAのサポートはありません。 PuppeteerSharpでは、PDF/A(アーカイブ)またはPDF/UA(アクセシビリティ)に準拠した文書は作成できません。

6.PDFの操作はできません - 生成のみで、マージ/分割/編集はできません。 PuppeteerSharpはPDFを効率的に生成できますが、PDFの結合、分割、保護、編集など、さらなる操作のための機能が欠けています。

PuppeteerSharpとIronPDFの比較

アスペクト PuppeteerSharp IronPDF
主な目的 ブラウザ自動化 PDF生成
クロム依存 300MB以上の個別ダウンロード 最適化エンジン内蔵
APIの複雑さ 非同期ブラウザ/ページライフサイクル 同期ワンライナー
初期化 BrowserFetcher.DownloadAsync() + LaunchAsync new ChromePdfRenderer().
メモリ管理 手動ブラウザリサイクルが必要 自動翻訳
負荷下のメモリ リークを含む500MB以上 ~50MB 安定版
コールドスタート 45秒以上 ~20秒
PDF/Aサポート 不可 フルサポート
PDF/UAアクセシビリティ 不可 フルサポート
PDFの編集 不可 マージ、分割、スタンプ、編集
デジタル署名 不可 フルサポート
スレッドセーフティ 制限的 フル
プロフェッショナルサポート コミュニティ SLA付き商用

プラットフォームサポート

ライブラリ .NET Framework 4.7.2 .NET Core 3.1 .NET 6-8 .NET 10
IronPDF フル フル フル フル
PuppeteerSharp 制限的 フル フル 未定

IronPDFは.NETプラットフォームを幅広くサポートしているため、開発者は互換性の問題に直面することなく様々な環境でIronPDFを活用することができ、2025年と2026年まで最新の.NETアプリケーションに柔軟な選択肢を提供します。


始める前に

前提条件

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

NuGetパッケージの変更

# Remove PuppeteerSharp
dotnet remove package PuppeteerSharp

# Remove downloaded Chromium binaries (~300MB recovered)
# Delete the .local-chromium folder

# Add IronPDF
dotnet add package IronPdf
# Remove PuppeteerSharp
dotnet remove package PuppeteerSharp

# Remove downloaded Chromium binaries (~300MB recovered)
# Delete the .local-chromium folder

# Add IronPDF
dotnet add package IronPdf
SHELL

IronPDFではBrowserFetcher.DownloadAsync()は必要ありません - レンダリングエンジンは自動的にバンドルされています。

ライセンス構成

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

完全な API リファレンス

名前空間の変更

// Before: PuppeteerSharp
using PuppeteerSharp;
using PuppeteerSharp.Media;
using System.Threading.Tasks;

// After: IronPDF
using IronPdf;
using IronPdf.Rendering;
// Before: PuppeteerSharp
using PuppeteerSharp;
using PuppeteerSharp.Media;
using System.Threading.Tasks;

// After: IronPDF
using IronPdf;
using IronPdf.Rendering;
$vbLabelText   $csharpLabel

コア API マッピング

PuppeteerSharp API IronPDF API ノート
new BrowserFetcher().DownloadAsync(). 不要 ブラウザのダウンロードなし
Puppeteer.LaunchAsync(options)を実行します。 不要 ブラウザ管理なし
browser.NewPageAsync() 不要 ページコンテキストなし
page.GoToAsync(url). renderer.RenderUrlAsPdf(url)のようにします。 直接レンダリング
page.SetContentAsync(html). renderer.RenderHtmlAsPdf(html). 直接レンダリング
page.PdfAsync(パス) pdf.SaveAs(path)のようにします。 レンダリング後
awaitページ.CloseAsync() 不要 自動クリーンアップ
await browser.CloseAsync(). 不要 自動クリーンアップ
PdfOptions.Format RenderingOptions.PaperSize 用紙サイズ
PdfOptions.Landscape RenderingOptions.PaperOrientation オリエンテーション
PdfOptions.MarginOptions RenderingOptions.MarginTop/Bottom/Left/Right 個々の余白
PdfOptions.PrintBackground RenderingOptions.PrintHtmlBackgroundsを使用してください。 背景印刷
PdfOptions.HeaderTemplate RenderingOptions.HtmlHeader HTMLヘッダー
PdfOptions.FooterTemplate RenderingOptions.HtmlFooter HTMLフッター
page.WaitForSelectorAsync() RenderingOptions.WaitFor.HtmlElementId 要素を待つ

コード移行の例

例1: 基本的なHTMLからPDFへの変換

以前(PuppeteerSharp):

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

class Program
{
    static async Task Main(string[] args)
    {
        var browserFetcher = new BrowserFetcher();
        await browserFetcher.DownloadAsync();

        await using var browser = await Puppeteer.LaunchAsync(new LaunchOptions
        {
            Headless = true
        });

        await using var page = await browser.NewPageAsync();
        await page.SetContentAsync("<h1>Hello World</h1><p>This is a PDF document.</p>");
        await page.PdfAsync("output.pdf");
    }
}
// NuGet: Install-Package PuppeteerSharp
using PuppeteerSharp;
using System.Threading.Tasks;

class Program
{
    static async Task Main(string[] args)
    {
        var browserFetcher = new BrowserFetcher();
        await browserFetcher.DownloadAsync();

        await using var browser = await Puppeteer.LaunchAsync(new LaunchOptions
        {
            Headless = true
        });

        await using var page = await browser.NewPageAsync();
        await page.SetContentAsync("<h1>Hello World</h1><p>This is a PDF document.</p>");
        await page.PdfAsync("output.pdf");
    }
}
$vbLabelText   $csharpLabel

翻訳後(IronPDF):

// NuGet: Install-Package IronPdf
using IronPdf;

class Program
{
    static void Main(string[] args)
    {
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderHtmlAsPdf("<h1>Hello World</h1><p>This is a PDF document.</p>");
        pdf.SaveAs("output.pdf");
    }
}
// NuGet: Install-Package IronPdf
using IronPdf;

class Program
{
    static void Main(string[] args)
    {
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderHtmlAsPdf("<h1>Hello World</h1><p>This is a PDF document.</p>");
        pdf.SaveAs("output.pdf");
    }
}
$vbLabelText   $csharpLabel

この例は、基本的なアーキテクチャの違いを示しています。 PuppeteerSharpは、6つの非同期処理を必要とします:BrowserFetcher.DownloadAsync()(300MB以上のChromiumダウンロード)、Puppeteer.LaunchAsync()browser.NewPageAsync()page.SetContentAsync()page.PdfAsync()の6つの非同期操作と、await usingによる適切な処理が必要です。

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

例2: URLからPDFへの変換

以前(PuppeteerSharp):

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

class Program
{
    static async Task Main(string[] args)
    {
        var browserFetcher = new BrowserFetcher();
        await browserFetcher.DownloadAsync();

        await using var browser = await Puppeteer.LaunchAsync(new LaunchOptions
        {
            Headless = true
        });

        await using var page = await browser.NewPageAsync();
        await page.GoToAsync("https://www.example.com");
        await page.PdfAsync("webpage.pdf");
    }
}
// NuGet: Install-Package PuppeteerSharp
using PuppeteerSharp;
using System.Threading.Tasks;

class Program
{
    static async Task Main(string[] args)
    {
        var browserFetcher = new BrowserFetcher();
        await browserFetcher.DownloadAsync();

        await using var browser = await Puppeteer.LaunchAsync(new LaunchOptions
        {
            Headless = true
        });

        await using var page = await browser.NewPageAsync();
        await page.GoToAsync("https://www.example.com");
        await page.PdfAsync("webpage.pdf");
    }
}
$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");
    }
}
$vbLabelText   $csharpLabel

PuppeteerSharpは、GoToAsync()を使用して、PdfAsync()に続くURLに移動します。 IronPDFは一つのRenderUrlAsPdf()メソッドでナビゲーションとPDF生成を行います。 詳しくは、チュートリアルをご覧ください。

例3: 余白を使ったカスタムページ設定

以前(PuppeteerSharp):

// NuGet: Install-Package PuppeteerSharp
using PuppeteerSharp;
using PuppeteerSharp.Media;
using System.Threading.Tasks;

class Program
{
    static async Task Main(string[] args)
    {
        var browserFetcher = new BrowserFetcher();
        await browserFetcher.DownloadAsync();

        await using var browser = await Puppeteer.LaunchAsync(new LaunchOptions
        {
            Headless = true
        });

        await using var page = await browser.NewPageAsync();
        await page.SetContentAsync("<h1>Custom PDF</h1><p>With landscape orientation and margins.</p>");

        await page.PdfAsync("custom.pdf", new PdfOptions
        {
            Format = PaperFormat.A4,
            Landscape = true,
            MarginOptions = new MarginOptions
            {
                Top = "20mm",
                Bottom = "20mm",
                Left = "20mm",
                Right = "20mm"
            }
        });
    }
}
// NuGet: Install-Package PuppeteerSharp
using PuppeteerSharp;
using PuppeteerSharp.Media;
using System.Threading.Tasks;

class Program
{
    static async Task Main(string[] args)
    {
        var browserFetcher = new BrowserFetcher();
        await browserFetcher.DownloadAsync();

        await using var browser = await Puppeteer.LaunchAsync(new LaunchOptions
        {
            Headless = true
        });

        await using var page = await browser.NewPageAsync();
        await page.SetContentAsync("<h1>Custom PDF</h1><p>With landscape orientation and margins.</p>");

        await page.PdfAsync("custom.pdf", new PdfOptions
        {
            Format = PaperFormat.A4,
            Landscape = true,
            MarginOptions = new MarginOptions
            {
                Top = "20mm",
                Bottom = "20mm",
                Left = "20mm",
                Right = "20mm"
            }
        });
    }
}
$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.PaperSize = PdfPaperSize.A4;
        renderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Landscape;
        renderer.RenderingOptions.MarginTop = 20;
        renderer.RenderingOptions.MarginBottom = 20;
        renderer.RenderingOptions.MarginLeft = 20;
        renderer.RenderingOptions.MarginRight = 20;

        var pdf = renderer.RenderHtmlAsPdf("<h1>Custom PDF</h1><p>With landscape orientation and margins.</p>");
        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.PaperSize = PdfPaperSize.A4;
        renderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Landscape;
        renderer.RenderingOptions.MarginTop = 20;
        renderer.RenderingOptions.MarginBottom = 20;
        renderer.RenderingOptions.MarginLeft = 20;
        renderer.RenderingOptions.MarginRight = 20;

        var pdf = renderer.RenderHtmlAsPdf("<h1>Custom PDF</h1><p>With landscape orientation and margins.</p>");
        pdf.SaveAs("custom.pdf");
    }
}
$vbLabelText   $csharpLabel

この例では、PDFオプションが2つのライブラリ間でどのようにマッピングされるかを示しています。 PuppeteerSharpは、FormatLandscapeMarginOptionsが文字列値("20mm")を含むPdfOptionsを使用します。 IronPDFはRenderingOptionsプロパティを使用し、直接用紙サイズ列挙型、方向列挙型、ミリメートル単位のマージン値を指定します。

主なマッピング

  • Format = PaperFormat.A4PaperSize = PdfPaperSize.A4 とします。
  • Landscape = truePaperOrientation = PdfPaperOrientation.Landscape です。
  • MarginOptions.Top = "20mm"MarginTop = 20 (数値ミリメートル)

メモリリーク問題

PuppeteerSharpは、持続的な負荷がかかるとメモリが蓄積されることで有名です:

// ❌PuppeteerSharp- Memory grows with each operation
// Requires explicit browser recycling every N operations
for (int i = 0; i < 1000; i++)
{
    var page = await browser.NewPageAsync();
    await page.SetContentAsync($"<h1>Document {i}</h1>");
    await page.PdfAsync($"doc_{i}.pdf");
    await page.CloseAsync(); // Memory still accumulates!
}
// Must periodically: await browser.CloseAsync(); and re-launch

// ✅IronPDF- Stable memory, reuse renderer
var renderer = new ChromePdfRenderer();
for (int i = 0; i < 1000; i++)
{
    var pdf = renderer.RenderHtmlAsPdf($"<h1>Document {i}</h1>");
    pdf.SaveAs($"doc_{i}.pdf");
    // Memory managed automatically
}
// ❌PuppeteerSharp- Memory grows with each operation
// Requires explicit browser recycling every N operations
for (int i = 0; i < 1000; i++)
{
    var page = await browser.NewPageAsync();
    await page.SetContentAsync($"<h1>Document {i}</h1>");
    await page.PdfAsync($"doc_{i}.pdf");
    await page.CloseAsync(); // Memory still accumulates!
}
// Must periodically: await browser.CloseAsync(); and re-launch

// ✅IronPDF- Stable memory, reuse renderer
var renderer = new ChromePdfRenderer();
for (int i = 0; i < 1000; i++)
{
    var pdf = renderer.RenderHtmlAsPdf($"<h1>Document {i}</h1>");
    pdf.SaveAs($"doc_{i}.pdf");
    // Memory managed automatically
}
$vbLabelText   $csharpLabel

IronPDFは、PuppeteerSharpが必要とするブラウザ・プーリングのインフラを不要にします:

// Before (PuppeteerSharp - delete entire class)
public class PuppeteerBrowserPool
{
    private readonly ConcurrentBag<IBrowser> _browsers;
    private readonly SemaphoreSlim _semaphore;
    private int _operationCount;
    // ... recycling logic ...
}

// After (IronPDF - simple reuse)
public class PdfService
{
    private readonly ChromePdfRenderer _renderer = new();

    public byte[] Generate(string html)
    {
        return _renderer.RenderHtmlAsPdf(html).BinaryData;
    }
}
// Before (PuppeteerSharp - delete entire class)
public class PuppeteerBrowserPool
{
    private readonly ConcurrentBag<IBrowser> _browsers;
    private readonly SemaphoreSlim _semaphore;
    private int _operationCount;
    // ... recycling logic ...
}

// After (IronPDF - simple reuse)
public class PdfService
{
    private readonly ChromePdfRenderer _renderer = new();

    public byte[] Generate(string html)
    {
        return _renderer.RenderHtmlAsPdf(html).BinaryData;
    }
}
$vbLabelText   $csharpLabel

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

非同期から同期への変換

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

// PuppeteerSharp: Async required
public async Task<byte[]> GeneratePdfAsync(string html)
{
    await new BrowserFetcher().DownloadAsync();
    await using var browser = await Puppeteer.LaunchAsync(...);
    await using var page = await browser.NewPageAsync();
    await page.SetContentAsync(html);
    return await page.PdfDataAsync();
}

// IronPDF: Sync default
public byte[] GeneratePdf(string html)
{
    var renderer = new ChromePdfRenderer();
    return renderer.RenderHtmlAsPdf(html).BinaryData;
}

// Or async when needed
public async Task<byte[]> GeneratePdfAsync(string html)
{
    var renderer = new ChromePdfRenderer();
    var pdf = await renderer.RenderHtmlAsPdfAsync(html);
    return pdf.BinaryData;
}
// PuppeteerSharp: Async required
public async Task<byte[]> GeneratePdfAsync(string html)
{
    await new BrowserFetcher().DownloadAsync();
    await using var browser = await Puppeteer.LaunchAsync(...);
    await using var page = await browser.NewPageAsync();
    await page.SetContentAsync(html);
    return await page.PdfDataAsync();
}

// IronPDF: Sync default
public byte[] GeneratePdf(string html)
{
    var renderer = new ChromePdfRenderer();
    return renderer.RenderHtmlAsPdf(html).BinaryData;
}

// Or async when needed
public async Task<byte[]> GeneratePdfAsync(string html)
{
    var renderer = new ChromePdfRenderer();
    var pdf = await renderer.RenderHtmlAsPdfAsync(html);
    return pdf.BinaryData;
}
$vbLabelText   $csharpLabel

マージン単位の変換

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

//PuppeteerSharp- string units
MarginOptions = new MarginOptions
{
    Top = "1in",      // 25.4mm
    Bottom = "0.75in", // 19mm
    Left = "1cm",     // 10mm
    Right = "20px"    // ~7.5mm at 96dpi
}

//IronPDF- numeric millimeters
renderer.RenderingOptions.MarginTop = 25;    // mm
renderer.RenderingOptions.MarginBottom = 19;
renderer.RenderingOptions.MarginLeft = 10;
renderer.RenderingOptions.MarginRight = 8;
//PuppeteerSharp- string units
MarginOptions = new MarginOptions
{
    Top = "1in",      // 25.4mm
    Bottom = "0.75in", // 19mm
    Left = "1cm",     // 10mm
    Right = "20px"    // ~7.5mm at 96dpi
}

//IronPDF- numeric millimeters
renderer.RenderingOptions.MarginTop = 25;    // mm
renderer.RenderingOptions.MarginBottom = 19;
renderer.RenderingOptions.MarginLeft = 10;
renderer.RenderingOptions.MarginRight = 8;
$vbLabelText   $csharpLabel

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

PuppeteerSharpクラス IronPDF プレースホルダー
<span class="pageNumber"> {ページ}
<span class="totalPages"></code>|<code>{総ページ数}
<span class="date"> {date}
{html-title}

移行後の新機能

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

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");
$vbLabelText   $csharpLabel

ウォーターマーク

var watermark = new TextStamper
{
    Text = "CONFIDENTIAL",
    FontSize = 48,
    Opacity = 30,
    Rotation = -45
};
pdf.ApplyStamp(watermark);
var watermark = new TextStamper
{
    Text = "CONFIDENTIAL",
    FontSize = 48,
    Opacity = 30,
    Rotation = -45
};
pdf.ApplyStamp(watermark);
$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;
$vbLabelText   $csharpLabel

デジタル署名

var signature = new PdfSignature("certificate.pfx", "password");
pdf.Sign(signature);
var 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);
$vbLabelText   $csharpLabel

性能比較概要

メトリック PuppeteerSharp IronPDF 改善
最初のPDF(コールドスタート) 45s+ ~20s 55%以上のスピード
後続のPDF 変数 一貫性 予測可能な
メモリ使用量 500MB以上(成長中) ~50MB(安定版) 90%少ないメモリ
ディスクスペース(Chromium) 300MB以上 0 ダウンロードを排除する
ブラウザダウンロード 必須 不要 ゼロセットアップ
スレッドの安全性 制限的 フル 信頼できる並行処理
PDF作成時間 45s 20s 55%速い

移行チェックリスト

移行前

  • コードベース内のすべてのPuppeteerSharpの使用箇所を特定する
  • ドキュメントの余白値(文字列をミリメートルに変換)
  • 変換のためのヘッダー/フッターのプレースホルダー構文に注意してください
  • ブラウザプーリング/リサイクルインフラストラクチャを削除する
  • ironpdf.comからIronPDFライセンスキーを取得します

パッケージの変更

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

コードの変更

  • 名前空間のインポートを更新する
  • BrowserFetcher.DownloadAsync()呼び出しを削除する
  • Puppeteer.LaunchAsync()とブラウザ管理を削除
  • 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ボットを作成したりして、技術に対する愛情と創造性を組み合わせています。