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.PdfGenerator | IronPDF |
|---|---|---|
| レンダリングエンジン | WebKit Qt (2012) | Chromium(現在) |
| セキュリティ。 | 20以上のCVE、放棄 | アクティブなセキュリティアップデート |
| CSSサポート | CSS2.1、限定的なCSS3 | フルCSS3、グリッド、フレックスボックス |
| JavaScript(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);
}
}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");
}
}どちらのライブラリも、基本的な変換には最小限のコードしか必要としません。 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);
}
}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");
}
}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);
}
}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");
}
}NReco.PdfGenerator では、ページ サイズをミリメートル単位で指定する必要があり (A4 の場合は 210×297)、PageMargins オブジェクトを使用します。IronPDFは標準サイズに PdfPaperSize 列挙型を使用し、RenderingOptions を通じて個別の余白プロパティを提供します。 RenderingOptionsクラスは、すべてのページ設定を一元化し、IDEのオートコンプリートを通して設定を発見できるようにします。
APIマッピングリファレンス
NReco.PdfGeneratorからIronPDFへの移行を検討しているチームにとって、APIマッピングを理解することは労力を見積もり、移行を計画するのに役立ちます。
コア メソッド マッピング
| NReco.PdfGenerator | IronPDF |
|---|---|
new HtmlToPdfConverter() | new ChromePdfRenderer() |
GeneratePdf(html) | RenderHtmlAsPdf(html) |
GeneratePdfFromFile(url, output) | RenderUrlAsPdf(url) |
GeneratePdfFromFile(path, output) | RenderHtmlFileAsPdf(path) |
| (サポートされていません) | RenderHtmlAsPdfAsync(html) |
構成プロパティのマッピング
| NReco.PdfGenerator | IronPDF |
|---|---|
Orientation = PageOrientation.Landscape | RenderingOptions.PaperOrientation = PdfPaperOrientation.Landscape |
Size = PageSize.A4 | RenderingOptions.PaperSize = PdfPaperSize.A4 |
Margins.Top = 10 | RenderingOptions.MarginTop = 10 |
Zoom = 0.9f | RenderingOptions.Zoom = 90 |
PageHeaderHtml = "..." | RenderingOptions.HtmlHeader |
PageFooterHtml = "..." | RenderingOptions.HtmlFooter |
プレースホルダーの構文の違い
ヘッダーやフッターには、ページ番号のような動的コンテンツが含まれることがよくあります。 プレースホルダーの構文はライブラリによって異なります:
| NReco.PdfGenerator | IronPDF | 目的 |
|---|---|---|
[page] | {page} | 現在のページ番号 |
[topage] | {total-pages} | 総ページ数 |
[date] | {date} | 現在の日付 |
[time] | {time} | 現在の時間 |
[title] | {html-title} | 文書タイトル |
[webpage] | {url} | ソース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);非同期サポートの比較
現代のウェブアプリケーションは、スレッドをブロックしない非同期操作の恩恵を受けています。 これは、同時リクエストを処理する.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 threadIronPdfは完全な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");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 platformNReco.PdfGeneratorから移行するチームはwkhtmltopdfバイナリを削除し、デプロイプロセスを簡素化することができます。
チームがNReco.PdfGeneratorからIronPdfへの移行を検討するとき
NReco.PdfGeneratorの代替としてIronPdfを評価するチームにはいくつかの要因があります:
セキュリティコンプライアンス:セキュリティ要件を持つ組織は、脆弱性スキャナがwkhtmltopdfのCVEを特定したときに課題に直面します。 wkhtmltopdf は廃止されているため、これらの脆弱性は NReco.PdfGenerator 内で修復パスがありません。 IronPDFのChromiumエンジンは積極的にメンテナンスされ、セキュリティアップデートを受け取ります。
モダン CSS の要件: CSS Grid、Flexbox、CSS 変数、またはその他のモダン CSS 機能を必要とするプロジェクトでは、wkhtmltopdf の 2012 年代の WebKit エンジンは使用できません。ウェブデザイナーはしばしば、NReco.PdfGenerator.CSSで正しくレンダリングされないか、まったくレンダリングされないレイアウトを作成します。
JavaScriptとの互換性:JavaScriptでレンダリングされたコンテンツ(チャート、ダイナミックテーブル、計算値)を持つPDFを生成するアプリケーションでは、最新 for JavaScriptサポートが必要です。 wkhtmltopdfのES5の制限により、最新 for JavaScriptライブラリが使用できません。
非同期アプリケーションアーキテクチャ: .NET Coreアプリケーションは、スレッド効率を維持するために、非同期PDF生成の恩恵を受けます。 NReco.PdfGeneratorの同期のみのAPIは、スケーラビリティのボトルネックを引き起こす可能性があります。
デプロイメントの簡素化:開発環境、ステージング環境、本番環境にわたって、プラットフォーム固有のwkhtmltopdfバイナリを管理することは、運用を複雑にします。 チームは、CI/CDパイプラインを簡素化する自己完結型のソリューションを求めています。
価格の明確さ:予算計画には、予測可能なコストが必要です。 NReco.PdfGeneratorの不透明な価格設定(営業に問い合わせる)は調達を複雑にしますが、IronPdfの公表された価格設定はわかりやすい予算編成を可能にします。
インストールの比較
NReco.PdfGeneratorのインストール:
Install-Package NReco.PdfGeneratorInstall-Package NReco.PdfGeneratorPlusプラットフォーム固有のwkhtmltopdfバイナリのインストールと管理。
IronPDFのインストール:。
Install-Package IronPdfInstall-Package IronPdfIronPdfはアプリケーション起動時にライセンスキーの設定を必要とします:
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";どちらのライブラリも.NET Framework 4.6.2+と.NET Core/.NET 5+をサポートしており、.NET 10とC# 14をターゲットとした最新 for .NET開発と互換性があります。
パフォーマンスの考慮事項
IronPdfのChromiumエンジンは初回使用時に初期化コストがかかります(Chromium起動に約1.5秒)。 その後のレンダリングは大幅に高速化されます。 待ち時間の影響を受けやすい起動要件があるアプリケーションでは、アプリケーションの初期化時にレンダラーをウォームアップすることで、この遅延がユーザー向けの操作に影響するのを防ぎます:
// Warm up at startup
new ChromePdfRenderer().RenderHtmlAsPdf("<html></html>");// Warm up at startup
new ChromePdfRenderer().RenderHtmlAsPdf("<html></html>");NReco.PdfGeneratorは、wkhtmltopdfプロセスをスポーンするときの初期化オーバーヘッドと、外部プロセス管理による継続的なメモリオーバーヘッドも持っています。
決断
NReco.PdfGeneratorとIronPdfのどちらを選ぶかは、あなたの特定の要件によります:
以下の場合はNReco.PdfGeneratorを検討してください:正しく動作する既存のwkhtmltopdfベースのワークフローがあり、セキュリティスキャナーの所見があなたの環境で許容でき、最新のCSSやJavaScriptの機能が必要なく、プラットフォーム固有のバイナリのデプロイメントを管理できます。
以下のような場合にIronPDFをご検討ください: セキュリティコンプライアンスでwkhtmltopdfのCVEに対応する必要がある場合、GridやFlexboxのようなモダンなCSS機能を使用している場合、Webアプリケーションで非同期/待ち受けのサポートが必要な場合、外部バイナリを排除してデプロイを簡素化したい場合、透明なライセンスと価格を希望する場合。
2025年に最新 for .NETアプリケーションを構築し、2026年に向けて計画しているチームにとって、IronPDFの活発にメンテナンスされているChromiumエンジンは、現在と将来のWeb標準の互換性のための基盤を提供します。
IronPDFを始める
IronPDFをPDF生成のニーズに合わせて評価する:
- IronPDF NuGetパッケージをインストールします:
Install-Package IronPdf2.基本的な変換パターンについては、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 生成のニーズと近代化の目標に沿った、十分な情報に基づいた決定を下すことができます。
