C#でPuppeteerSharpからIronPDFに移行する方法
PuppeteerSharpからIronPDFへの移行:完全なC#移行ガイド
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 IronPdfIronPDFではBrowserFetcher.DownloadAsync()は必要ありません - レンダリングエンジンは自動的にバンドルされています。
ライセンス構成
// Add at application startup
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";// Add at application startup
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";IRON VB CONVERTER ERROR developers@ironsoftware.com完全な 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;IRON VB CONVERTER ERROR developers@ironsoftware.comコア 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");
}
}IRON VB CONVERTER ERROR developers@ironsoftware.com翻訳後(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");
}
}IRON VB CONVERTER ERROR developers@ironsoftware.comこの例は、基本的なアーキテクチャの違いを示しています。 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");
}
}IRON VB CONVERTER ERROR developers@ironsoftware.com翻訳後(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");
}
}IRON VB CONVERTER ERROR developers@ironsoftware.comPuppeteerSharpは、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"
}
});
}
}IRON VB CONVERTER ERROR developers@ironsoftware.com翻訳後(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");
}
}IRON VB CONVERTER ERROR developers@ironsoftware.comこの例では、PDFオプションが2つのライブラリ間でどのようにマッピングされるかを示しています。 PuppeteerSharpは、Format、Landscape、MarginOptionsが文字列値("20mm")を含むPdfOptionsを使用します。 IronPDFはRenderingOptionsプロパティを使用し、直接用紙サイズ列挙型、方向列挙型、ミリメートル単位のマージン値を指定します。
主なマッピング
Format = PaperFormat.A4→PaperSize = PdfPaperSize.A4とします。Landscape = true→PaperOrientation = 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
}IRON VB CONVERTER ERROR developers@ironsoftware.comIronPDFは、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;
}
}IRON VB CONVERTER ERROR developers@ironsoftware.com重要な移行に関する注意事項
非同期から同期への変換
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;
}IRON VB CONVERTER ERROR developers@ironsoftware.comマージン単位の変換
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;IRON VB CONVERTER ERROR developers@ironsoftware.comヘッダー/フッター プレースホルダーの変換
| PuppeteerSharpクラス | IronPDF プレースホルダー |
|---|---|
<span> class="pageNumber"> | <コード>{ページ}</コード |
| <コード> class="totalPages"> | <コード>{総ページ数}</コード |
<span> class="date"> | {date}<//code> |
| <コード> class="title"> | {html-title}<//code> |
移行後の新機能
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");IRON VB CONVERTER ERROR developers@ironsoftware.comウォーターマーク
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);IRON VB CONVERTER ERROR developers@ironsoftware.comパスワード保護
pdf.SecuritySettings.OwnerPassword = "admin";
pdf.SecuritySettings.UserPassword = "readonly";
pdf.SecuritySettings.AllowUserCopyPasteContent = false;pdf.SecuritySettings.OwnerPassword = "admin";
pdf.SecuritySettings.UserPassword = "readonly";
pdf.SecuritySettings.AllowUserCopyPasteContent = false;IRON VB CONVERTER ERROR developers@ironsoftware.comデジタル署名
var signature = new PdfSignature("certificate.pfx", "password");
pdf.Sign(signature);var signature = new PdfSignature("certificate.pfx", "password");
pdf.Sign(signature);IRON VB CONVERTER ERROR developers@ironsoftware.comPDF/A準拠
pdf.SaveAsPdfA("archive.pdf", PdfAVersions.PdfA3b);pdf.SaveAsPdfA("archive.pdf", PdfAVersions.PdfA3b);IRON VB CONVERTER ERROR developers@ironsoftware.com性能比較概要
| メトリック | PuppeteerSharp | IronPDF | 改善 |
|---|---|---|---|
| 最初のPDF(コールドスタート) | 45s+ | ~20s | 55%以上のスピード。 |
| 後続のPDF | 変数 | 一貫性 | 予測可能な。 |
| メモリ使用量 | 500MB以上(成長中) | ~50MB(安定版) | 90%少ないメモリ。 |
| ディスクスペース(Chromium) | 300MB以上 | 0 | ダウンロードを排除する。 |
| ブラウザダウンロード | 必須 | 不要 | ゼロセットアップ。 |
| スレッドの安全性 | 制限的 | フル | 信頼できる並行処理。 |
| PDF作成時間 | 45s | 20s | 55%速い。 |
移行チェックリスト
移行前
- [コードベース内のすべてのPuppeteerSharpの使用法を特定する。
- [ドキュメントマージン値(文字列をミリメートルに変換)
- [ヘッダー/フッターのプレースホルダーの構文に注意してください。
- [ブラウザ・プーリング/リサイクル・インフラの削除
- [ironpdf.comからIronPDFライセンスキーを入手してください。
パッケージの変更
- [
PuppeteerSharpNuGetパッケージを削除してください。 - [ ]
.local-chromiumフォルダを削除して、~300MBのディスクスペースを取り戻します。 - [ ]
IronPdfNuGetパッケージをインストールします:dotnet add package IronPdfNuGetパッケージをインストールします。
コードの変更
- [名前空間インポートの更新
- [ ]
BrowserFetcher.DownloadAsync()コールを削除してください。 - [ ]
Puppeteer.LaunchAsync()とブラウザ管理を削除してください。 - [ ]
page.SetContentAsync()+page.PdfAsync()をRenderHtmlAsPdf()に置き換えてください。 - [ ]
page.GoToAsync()+page.PdfAsync()をRenderUrlAsPdf()に置き換えてください。 - [ ] 余白文字列をミリメートル値に変換する
- [ヘッダー/フッターのプレースホルダーの構文を変換してください。
- [すべてのブラウザ/ページ廃棄コードを削除してください。
- [ブラウザ・プーリング・インフラストラクチャの削除
- [アプリケーション起動時のライセンス初期化機能の追加
移行後
- [PDF 出力の視覚的比較
- [メモリの安定性に関する負荷テスト(再利用せずに安定していること)
- [ヘッダー/フッターのレンダリングとページ番号の確認
- [必要に応じて、新しい機能(セキュリティ、透かし、マージ)を追加してください。
結論
PuppeteerSharpとIronPDFのどちらかを選択する際には、プロジェクト特有のニーズを考慮してください。 PuppeteerSharpは、正確なHTMLレンダリングが要求され、Chromiumの依存関係を管理するオーバーヘッドが正当化できるようなシナリオで優れています。 対照的に、IronPDFは広範なPDF操作機能、比類のない容易なデプロイメント、優れたメモリ管理を備えた包括的なパッケージを提供しており、シンプルさと多用途性を求める開発者にとって理想的です。
この移行における主な変更点は以下のとおりです: 1.アーキテクチャ: ブラウザ自動化ツール → 目的別PDFライブラリ 2.依存関係: 300MB以上のChromiumダウンロード → バンドルされているレンダリングエンジン 3.複雑さ: 6つ以上の非同期操作 → 3つの同期呼び出し 4.メモリ: 500MB以上(リークあり) → ~50MB(安定版 5.ブラウザ管理:手動ライフサイクルとリサイクル → 自動処理 6.余白: 文字列単位 ("20mm") → 数値ミリメートル (20) 7.プレースホルダ:CSS クラス (<span> class="pageNumber">) → 中括弧 ({page}) 8.パフォーマンス: 45秒のコールドスタート → ~20秒のコールドスタート 9.新機能:PDFマージ、分割、透かし、セキュリティ、電子署名、PDF/Aコンプライアンス
どちらのライブラリにも独自の長所と短所があり、それらを理解することで、PDFの生成と操作のニーズに適したツールを選択する際の指針となります。
完全なIronPDFドキュメント、チュートリアル、APIリファレンスを参照して、PuppeteerSharpへの移行を加速してください。






