比較

NReco.PdfGenerator vs IronPdf:技術比較ガイド

NReco.PdfGenerator の概要

NReco.PdfGenerator は、wkhtmltopdf コマンドライン ツールを使用して HTML ドキュメントを PDF に変換する C# ライブラリです。 これは、レンダリングのために wkhtmltopdf を呼び出すHtmlToPdfConverterクラスを通じて簡単な API を提供します。

wkhtmltopdf ツールは、レンダリング エンジンとして WebKit Qt を採用しており、そのバージョンは 2012 年頃に遡ります。広く使用されているにもかかわらず、wkhtmltopdf の開発は 2020 年に停止され、セキュリティ更新や新機能は提供されていません。 これは、現在の CSS と JavaScript のニーズに合わせて最新のアプリケーションを開発するチームにとって課題となります。

NReco.PdfGenerator の無料バージョンでは、生成された PDF に透かしが含まれるため、実稼働で使用するには商用ライセンスが必要です。 これらのライセンスの価格を取得するには営業担当者に連絡する必要があり、調達プロセスが複雑になる可能性があります。

IronPDFの紹介

IronPDFは、最新のChromiumベースのレンダリングエンジンを使用してHTML、CSS、JavaScriptをPDFドキュメントに変換する.NETライブラリです。 ChromePdfRendererクラスは、HTML から PDF への変換のメイン インターフェースとして機能し、 RenderingOptionsプロパティを通じて広範な構成オプションを提供します。

wkhtmltopdfラッパーとは異なり、IronPDFのレンダリングエンジンはセキュリティと互換性のために定期的に更新されます。 ライブラリは自己完結型であるため、異なるプラットフォーム間で外部バイナリの依存関係を管理する必要はありません。

IronPDFは全機能(透かしなし)の試用期間を提供しており、チームは購入前に機能を評価することができます。 商用ライセンスは、公開された透明性のある価格設定を使用します。

レンダリングエンジンの比較

これらのライブラリ間の主な違いはレンダリング エンジンにあり、セキュリティと CSS の互換性に影響します。

アスペクトNReco.PdfGeneratorIronPDF
レンダリングエンジンWebKit Qt (2012)クロミウム(現在)
セキュリティ20以上のCVE、放棄アクティブなセキュリティアップデート
CSSサポートCSS2.1、限定的なCSS3フルCSS3、グリッド、フレックスボックス
JavaScript(ジャバスクリプト基本的なES5完全なES6
依存関係について外部wkhtmltopdfバイナリ自己完結型
非同期サポートについて同期のみ完全なasync/await
ウェブフォント制限的フルGoogleフォント、@font-face
<ストロング>無料トライアル</ストロング透かし入り全機能
価格設定の透明性不透明、営業に連絡公開価格

NReco.PdfGeneratorは、サーバーサイドリクエストフォージェリ、ローカルファイル読み取り脆弱性、潜在的なリモートコード実行のための文書化されたCVEを含む、wkhtmltopdfからすべてのセキュリティ脆弱性を継承しています。 2020年以降、wkhtmltopdfは廃止されたため、これらの問題に対するパッチはありません。

IronPDFのChromiumエンジンは最新のウェブ標準をサポートし、グリッドやFlexboxレイアウト、CSS変数、カスタムプロパティなどの最新のCSS機能を可能にします。 JavaScriptの実行は、async/awaitパターンを含むES6+構文をサポートしています。

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

どちらのライブラリも基本的なHTMLからPDFへの変換を行いますが、APIパターンは異なります。

NReco.PdfGeneratorのアプローチ:

// NuGet: Install-Package NReco.PdfGenerator
using NReco.PdfGenerator;
using System.IO;

class Program
{
    static void Main()
    {
        var htmlToPdf = new HtmlToPdfConverter();
        var htmlContent = "<html><body><h1>Hello World</h1><p>This is a PDF document.</p></body></html>";
        var pdfBytes = htmlToPdf.GeneratePdf(htmlContent);
        File.WriteAllBytes("output.pdf", pdfBytes);
    }
}
// NuGet: Install-Package NReco.PdfGenerator
using NReco.PdfGenerator;
using System.IO;

class Program
{
    static void Main()
    {
        var htmlToPdf = new HtmlToPdfConverter();
        var htmlContent = "<html><body><h1>Hello World</h1><p>This is a PDF document.</p></body></html>";
        var pdfBytes = htmlToPdf.GeneratePdf(htmlContent);
        File.WriteAllBytes("output.pdf", pdfBytes);
    }
}
$vbLabelText   $csharpLabel

IronPDFのアプローチ:

// NuGet: Install-Package IronPdf
using IronPdf;
using System.IO;

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

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

どちらのライブラリも、基本的な変換には最小限のコードしか必要としません。 NReco.PdfGeneratorはbyte[]配列を返し、手動でのファイル操作を必要としますが、IronPDFはSaveAs()のような便利なメソッドを持つPdfDocumentオブジェクトを返します。 IronPDFオブジェクトはバイト配列アクセスのためのBinaryDataとストリームベースの操作のためのStreamへのアクセスも提供します。

HTMLからPDFへの変換ワークフローに慣れている開発者にとっては、IronPDFのAPIは基本的な変換を超えた追加機能を提供しながら直感的に感じられるでしょう。

URLからPDFへの変換

ウェブページをPDF文書に変換すると、メソッドの命名とセマンティクスにおけるAPIの違いが明らかになります。

NReco.PdfGeneratorのURL変換:

// NuGet: Install-Package NReco.PdfGenerator
using NReco.PdfGenerator;
using System.IO;

class Program
{
    static void Main()
    {
        var htmlToPdf = new HtmlToPdfConverter();
        var pdfBytes = htmlToPdf.GeneratePdfFromFile("https://www.example.com", null);
        File.WriteAllBytes("webpage.pdf", pdfBytes);
    }
}
// NuGet: Install-Package NReco.PdfGenerator
using NReco.PdfGenerator;
using System.IO;

class Program
{
    static void Main()
    {
        var htmlToPdf = new HtmlToPdfConverter();
        var pdfBytes = htmlToPdf.GeneratePdfFromFile("https://www.example.com", null);
        File.WriteAllBytes("webpage.pdf", pdfBytes);
    }
}
$vbLabelText   $csharpLabel

IronPDFのURL変換:

// NuGet: Install-Package IronPdf
using IronPdf;

class Program
{
    static void Main()
    {
        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()
    {
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderUrlAsPdf("https://www.example.com");
        pdf.SaveAs("webpage.pdf");
    }
}
$vbLabelText   $csharpLabel

NReco.PdfGeneratorは、ファイルパスとURLの両方にGeneratePdfFromFile()を使用します。 IronPDFは専用のRenderUrlAsPdf メソッドを提供し、実行される操作を明確に示します。

ページサイズと余白のカスタマイズ

Professionalな文書では、特定のページ寸法や余白構成が求められることがよくあります。 どちらのライブラリも、異なる設定パターンでこれらのカスタマイズをサポートしています。

NReco.PdfGeneratorページ構成:

// NuGet: Install-Package NReco.PdfGenerator
using NReco.PdfGenerator;
using System.IO;

class Program
{
    static void Main()
    {
        var htmlToPdf = new HtmlToPdfConverter();
        htmlToPdf.PageWidth = 210;
        htmlToPdf.PageHeight = 297;
        htmlToPdf.Margins = new PageMargins { Top = 10, Bottom = 10, Left = 10, Right = 10 };
        var htmlContent = "<html><body><h1>Custom Page Size</h1><p>A4 size document with margins.</p></body></html>";
        var pdfBytes = htmlToPdf.GeneratePdf(htmlContent);
        File.WriteAllBytes("custom-size.pdf", pdfBytes);
    }
}
// NuGet: Install-Package NReco.PdfGenerator
using NReco.PdfGenerator;
using System.IO;

class Program
{
    static void Main()
    {
        var htmlToPdf = new HtmlToPdfConverter();
        htmlToPdf.PageWidth = 210;
        htmlToPdf.PageHeight = 297;
        htmlToPdf.Margins = new PageMargins { Top = 10, Bottom = 10, Left = 10, Right = 10 };
        var htmlContent = "<html><body><h1>Custom Page Size</h1><p>A4 size document with margins.</p></body></html>";
        var pdfBytes = htmlToPdf.GeneratePdf(htmlContent);
        File.WriteAllBytes("custom-size.pdf", pdfBytes);
    }
}
$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.A4;
        renderer.RenderingOptions.MarginTop = 10;
        renderer.RenderingOptions.MarginBottom = 10;
        renderer.RenderingOptions.MarginLeft = 10;
        renderer.RenderingOptions.MarginRight = 10;
        var htmlContent = "<html><body><h1>Custom Page Size</h1><p>A4 size document with margins.</p></body></html>";
        var pdf = renderer.RenderHtmlAsPdf(htmlContent);
        pdf.SaveAs("custom-size.pdf");
    }
}
// NuGet: Install-Package IronPdf
using IronPdf;
using IronPdf.Rendering;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
        renderer.RenderingOptions.MarginTop = 10;
        renderer.RenderingOptions.MarginBottom = 10;
        renderer.RenderingOptions.MarginLeft = 10;
        renderer.RenderingOptions.MarginRight = 10;
        var htmlContent = "<html><body><h1>Custom Page Size</h1><p>A4 size document with margins.</p></body></html>";
        var pdf = renderer.RenderHtmlAsPdf(htmlContent);
        pdf.SaveAs("custom-size.pdf");
    }
}
$vbLabelText   $csharpLabel

NReco.PdfGeneratorは、ページ寸法をミリメートルで指定する必要があり(A4の場合は210×297)、PageMarginsオブジェクトを使用します。 IronPDFは標準サイズのPdfPaperSize列挙型を使用し、RenderingOptionsを通して個々のマージンプロパティを提供します。 RenderingOptionsクラスは、すべてのページ設定を一元化し、IDEのオートコンプリートを通して設定を発見できるようにします。

APIマッピングリファレンス

NReco.PdfGeneratorからIronPDFへの移行を検討しているチームにとって、APIマッピングを理解することは労力を見積もり、移行を計画するのに役立ちます。

コアメソッドマッピング

NReco.PdfGeneratorIronPDF
new HtmlToPdfConverter().new ChromePdfRenderer().
GeneratePdf(html)を実行してください。RenderHtmlAsPdf(html)を使用してください。
<コード>GeneratePdfFromFile(url, output)RenderUrlAsPdf(url)を使用してください。
<コード>GeneratePdfFromFile(path, output)RenderHtmlFileAsPdf(path)を実行してください。
(サポートされていません)RenderHtmlAsPdfAsync(html)

構成プロパティのマッピング

NReco.PdfGeneratorIronPDF
Orientation = PageOrientation.Landscape です。RenderingOptions.PaperOrientation=PdfPaperOrientation.Landscape
<コード>サイズ = PageSize.A4RenderingOptions.PaperSize=PdfPaperSize.A4
マージン.トップ = 10RenderingOptions.MarginTop = 10.
ズーム = 0.9fRenderingOptions.Zoom = 90.
PageHeaderHtml = "...".<コード>RenderingOptions.HtmlHeader</コード
PageFooterHtml = "...".<コード>RenderingOptions.HtmlFooter</コード

プレースホルダ構文の違い

ヘッダーやフッターには、ページ番号のような動的コンテンツが含まれることがよくあります。 プレースホルダーの構文はライブラリによって異なります:

NReco.PdfGeneratorIronPDF目的
<コード>[ページ]</コード<コード>{ページ}</コード現在のページ番号
<コード>[トップページ]</コード<コード>{総ページ数}</コード総ページ数
<コード>[日付]</コード{date}<//code>現在の日付
<コード>[時間]</コード<コード>{時間}</コード現在の時間
<コード>[タイトル]</コード{html-title}<//code>文書タイトル
<コード>[ウェブページ]</コード{url}<//code>ソースURL

NReco.PdfGeneratorから移行するチームは、すべてのヘッダーとフッターのテンプレートを新しいプレースホルダーの構文で更新する必要があります。

ズーム値の変換

NReco.PdfGeneratorはズームにfloat値(0.0-2.0)を使用し、IronPdfはパーセント値を使用します:

// NReco: Zoom = 0.75f means 75%
// IronPDF: Zoom = 75 means 75%
int ironPdfZoom = (int)(nrecoZoom * 100);
// NReco: Zoom = 0.75f means 75%
// IronPDF: Zoom = 75 means 75%
int ironPdfZoom = (int)(nrecoZoom * 100);
$vbLabelText   $csharpLabel

非同期サポートの比較

現代のウェブアプリケーションは、スレッドをブロックしない非同期操作の恩恵を受けています。 これは、同時リクエストを処理する.NET Coreアプリケーションでは特に重要です。

NReco.PdfGeneratorは、PDF生成中にWebサーバースレッドをブロックすることができる同期のみの操作を提供します:

// NReco.PdfGenerator - synchronous only
var pdfBytes = converter.GeneratePdf(html);  // Blocks thread
// NReco.PdfGenerator - synchronous only
var pdfBytes = converter.GeneratePdf(html);  // Blocks thread
$vbLabelText   $csharpLabel

IronPdfは完全なasync/awaitパターンをサポートしています:

//IronPDF- async support
var pdf = await renderer.RenderHtmlAsPdfAsync(html);  // Non-blocking
await pdf.SaveAsAsync("output.pdf");
//IronPDF- async support
var pdf = await renderer.RenderHtmlAsPdfAsync(html);  // Non-blocking
await pdf.SaveAsAsync("output.pdf");
$vbLabelText   $csharpLabel

HTTPリクエストに応答してPDFを生成するアプリケーションにとって、IronPdfの非同期サポートはレンダリング処理中にスレッドを解放することでスケーラビリティを向上させます。

依存関係とデプロイメントの違い

NReco.PdfGeneratorは、システム上で利用可能なwkhtmltopdfバイナリを必要とします。 そのため、展開に課題があります:

  • プラットフォーム固有のバイナリを管理する必要があります(Windows .exe、Linux .so、macOS .dylib)。
  • Dockerイメージにはwkhtmltopdfのインストールが必要です。
  • CI/CD パイプラインでは、バイナリのプロビジョニング手順が必要です。
  • セキュリティスキャナは既知のCVEにフラグを立てる

IronPDFはNuGetパッケージとして自己完結しています:

#IronPDFinstallation - complete
dotnet add package IronPdf

# NReco.PdfGenerator installation - plus binary management
dotnet add package NReco.PdfGenerator
# Plus: install wkhtmltopdf per platform
#IronPDFinstallation - complete
dotnet add package IronPdf

# NReco.PdfGenerator installation - plus binary management
dotnet add package NReco.PdfGenerator
# Plus: install wkhtmltopdf per platform
SHELL

NReco.PdfGeneratorから移行するチームはwkhtmltopdfバイナリを削除し、デプロイプロセスを簡素化することができます。

チームがNReco.PdfGeneratorからIronPDFへの移行を検討する場合

NReco.PdfGeneratorの代替としてIronPdfを評価するチームにはいくつかの要因があります:

セキュリティ コンプライアンス:セキュリティ要件を持つ組織は、脆弱性スキャナーが wkhtmltopdf CVE を識別するときに課題に直面します。 wkhtmltopdf は廃止されているため、これらの脆弱性は NReco.PdfGenerator 内で修復パスがありません。 IronPDFのChromiumエンジンは積極的にメンテナンスされ、セキュリティアップデートを受け取ります。

最新のCSS要件: CSSグリッド、フレックスボックス、CSS変数、その他の最新のCSS機能を必要とするプロジェクトでは、wkhtmltopdfの2012年版WebKitエンジンを使用できません。Webデザイナーは、NReco.PdfGeneratorで正しくレンダリングされない、あるいはレンダリングされないレイアウトを作成することがよくあります。

JavaScript の互換性: JavaScript でレンダリングされたコンテンツ (グラフ、動的なテーブル、計算値) を含む PDF を生成するアプリケーションには、最新の JavaScript サポートが必要です。 wkhtmltopdfのES5の制限により、最新のJavaScriptライブラリが使用できません。

非同期アプリケーション アーキテクチャ: ASP.NET Core アプリケーションは、非同期 PDF 生成を利用してスレッド効率を維持します。 NReco.PdfGeneratorの同期のみのAPIは、スケーラビリティのボトルネックを引き起こす可能性があります。

展開の簡素化:開発、ステージング、運用環境全体でプラットフォーム固有の wkhtmltopdf バイナリを管理すると、運用が複雑になります。 チームは、CI/CDパイプラインを簡素化する自己完結型のソリューションを求めています。

価格設定の明確化:予算計画には予測可能なコストが必要です。 NReco.PdfGeneratorの不透明な価格設定(営業に問い合わせる)は調達を複雑にしますが、IronPdfの公表された価格設定はわかりやすい予算編成を可能にします。

インストールの比較

NReco.PdfGeneratorのインストール:

Install-Package NReco.PdfGenerator
Install-Package NReco.PdfGenerator
SHELL

Plusプラットフォーム固有のwkhtmltopdfバイナリのインストールと管理。

IronPDFのインストール:

Install-Package IronPdf
Install-Package IronPdf
SHELL

IronPdfはアプリケーション起動時にライセンスキーの設定を必要とします:

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

どちらのライブラリも.NET Framework 4.6.2+と.NET Core/.NET 5+をサポートしており、.NET 10とC# 14をターゲットとした最新の.NET開発と互換性があります。

パフォーマンスの考慮事項

IronPdfのChromiumエンジンは初回使用時に初期化コストがかかります(Chromium起動に約1.5秒)。 その後のレンダリングは大幅に高速化されます。 待ち時間の影響を受けやすい起動要件があるアプリケーションでは、アプリケーションの初期化時にレンダラーをウォームアップすることで、この遅延がユーザー向けの操作に影響するのを防ぎます:

// Warm up at startup
new ChromePdfRenderer().RenderHtmlAsPdf("<html></html>");
// Warm up at startup
new ChromePdfRenderer().RenderHtmlAsPdf("<html></html>");
$vbLabelText   $csharpLabel

NReco.PdfGeneratorは、wkhtmltopdfプロセスをスポーンするときの初期化オーバーヘッドと、外部プロセス管理による継続的なメモリオーバーヘッドも持っています。

決断を下す

NReco.PdfGeneratorとIronPdfのどちらを選ぶかは、あなたの特定の要件によります:

次の場合には、NReco.PdfGenerator を検討してください:既存の wkhtmltopdf ベースのワークフローが正しく機能し、セキュリティ スキャナーの検出結果が環境で許容範囲内であり、最新の CSS または JavaScript 機能は必要なく、プラットフォーム固有のバイナリ展開を管理できます。

次の場合にはIronPDFを検討してください:セキュリティ コンプライアンスのために wkhtmltopdf CVE に対処する必要がある、デザインで Grid や Flexbox などの最新の CSS 機能を使用している、Web アプリケーションで async/await サポートが必要である、外部バイナリを排除して展開を簡素化したい、または透明なライセンスと価格設定を希望する。

2025年に最新の.NETアプリケーションを構築し、2026年に向けて計画しているチームにとって、IronPDFの活発にメンテナンスされているChromiumエンジンは、現在と将来のWeb標準の互換性のための基盤を提供します。

IronPDFを始める

IronPDFをPDF生成のニーズに合わせて評価する:

1.IronPDF NuGetパッケージをインストールしてください:IronPdfパッケージをインストールしてください。 2.基本的な変換パターンについては、HTML to PDFチュートリアルをご覧ください。 3.WebページキャプチャのためのURLからPDFへの変換を探る 4.ヘッダーとフッターを設定して、Professionalなドキュメントを作成する。

IronPDFチュートリアルは、一般的なシナリオのための包括的な例を提供し、APIリファレンスは、利用可能なすべてのクラスとメソッドを文書化しています。

最終考察

NReco.PdfGeneratorとIronPdfはPDF生成技術の異なる時代を表しています。 NReco.PdfGeneratorはwkhtmltopdfの2012 WebKitエンジンをラップしており、使い慣れたAPIとセキュリティの脆弱性やレンダリングの制限の両方を継承しています。 IronPDFはアクティブなメンテナンス、最新のウェブ標準サポート、非同期機能を備えた最新のChromiumエンジンを使用しています。

セキュリティコンプライアンス、最新のCSS/JavaScript要件、デプロイの複雑さを懸念するチームにとって、IronPdfは依存関係を放棄する技術的負債を負うことなく前進する道を提供します。 移行には、APIコールとプレースホルダーの構文を更新する必要がありますが、外部バイナリを管理する必要がなくなり、文書化されたセキュリティの脆弱性に対処できます。

セキュリティ体制、レンダリングの忠実度、非同期サポート、デプロイの簡素化など、特定の要件に照らし合わせて、両方の選択肢を評価してください。 この比較で説明したアーキテクチャの違いを理解することで、PDF 生成のニーズと近代化の目標に沿った、十分な情報に基づいた決定を下すことができます。