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

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の比較

アスペクトPuppeteerSharpIronPDF
主な目的ブラウザ自動化PDF生成
クロム依存300MB以上の個別ダウンロード最適化エンジン内蔵
APIの複雑さ非同期ブラウザ/ページライフサイクル同期ワンライナー
初期化BrowserFetcher.DownloadAsync() + LaunchAsyncnew 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";
IRON VB CONVERTER ERROR developers@ironsoftware.com
$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;
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

コア API マッピング

PuppeteerSharp APIIronPDF 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.MarginOptionsRenderingOptions.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
$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");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$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");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$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");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$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"
            }
        });
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$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");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$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
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$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;
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$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;
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$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;
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

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

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
$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);
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;
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

デジタル署名

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

PDF/A準拠

pdf.SaveAsPdfA("archive.pdf", PdfAVersions.PdfA3b);
pdf.SaveAsPdfA("archive.pdf", PdfAVersions.PdfA3b);
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

性能比較概要

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

移行チェックリスト

移行前

  • [コードベース内のすべてのPuppeteerSharpの使用法を特定する。
  • [ドキュメントマージン値(文字列をミリメートルに変換)
  • [ヘッダー/フッターのプレースホルダーの構文に注意してください。
  • [ブラウザ・プーリング/リサイクル・インフラの削除
  • [ironpdf.comからIronPDFライセンスキーを入手してください。

パッケージの変更

  • [PuppeteerSharp NuGetパッケージを削除してください。
  • [ ] .local-chromiumフォルダを削除して、~300MBのディスクスペースを取り戻します。
  • [ ] IronPdf NuGetパッケージをインストールします:dotnet add package IronPdf NuGetパッケージをインストールします。

コードの変更

  • [名前空間インポートの更新
  • [ ] 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への移行を加速してください。

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

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

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