NReco.PdfGenerator vs IronPdf:技術比較ガイド
NReco.PdfGeneratorとIronPDFの比較:wkhtmltopdfラッパーと最新のChromiumエンジンを比較する
.NET開発者がHTMLコンテンツをPDFドキュメントに変換する必要があるとき、彼らはしばしばNReco.PdfGeneratorに遭遇します。 しかし、基礎となる技術にはセキュリティや互換性に関する重大な懸念があり、多くのチームはIronPDFのような代替技術を評価することになります。 この比較では、開発者、アーキテクト、技術的な意思決定者がPDF生成ワークフローに適したツールを選択できるように、主要な技術的側面にわたって両ライブラリを検証します。
NReco.PdfGeneratorとは何ですか?
NReco.PdfGeneratorは、wkhtmltopdfコマンドラインツールをラップしてHTML文書をPDFに変換するために設計されたC#ライブラリです。 このライブラリは、HtmlToPdfConverterクラスを通じて使い慣れたAPIを提供し、内部的にwkhtmltopdfを呼び出して実際のレンダリングを実行します。
wkhtmltopdfツールは、WebKit Qtをレンダリングエンジンとして使用しています。このアプローチは広く採用されていますが、wkhtmltopdfの開発は2020年に終了しており、今後のセキュリティパッチや機能アップデートはありません。 この依存関係は、最新のCSSとJavaScriptの要件を備えた最新のアプリケーションを構築するチームにとって課題となります。
NReco.PdfGeneratorの無料版は、生成されたPDFに透かしを追加します。 商用ライセンスの価格設定には営業への問い合わせが必要であり、調達プロセスが複雑になる可能性があります。
IronPDFとは何ですか?
IronPDFは、最新のChromiumベースのレンダリングエンジンを使用してHTML、CSS、JavaScriptをPDFドキュメントに変換する.NETライブラリです。 ChromePdfRenderer クラスは、RenderingOptions プロパティによる広範な設定オプションで、HTML から PDF への変換のための主要なインターフェイスを提供します。
wkhtmltopdfラッパーとは異なり、IronPDFのレンダリングエンジンはセキュリティと互換性のために定期的に更新されます。 ライブラリは自己完結型であるため、異なるプラットフォーム間で外部バイナリの依存関係を管理する必要はありません。
IronPDFは全機能(透かしなし)の試用期間を提供しており、チームは購入前に機能を評価することができます。 商用ライセンスは、公開された透明性のある価格設定を使用します。
レンダリング エンジンの比較
これらのライブラリの基本的な違いは、レンダリングエンジンにあります。 この違いは、セキュリティの姿勢からCSSの互換性まで、あらゆることに影響します。
| アスペクト | NReco.PdfGenerator | IronPDF |
|---|---|---|
| レンダリングエンジン | 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);
}
}IRON VB CONVERTER ERROR developers@ironsoftware.comIronPDFのアプローチ:。
// 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");
}
}IRON VB CONVERTER ERROR developers@ironsoftware.comどちらのライブラリも、基本的な変換には最小限のコードしか必要としません。 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);
}
}IRON VB CONVERTER ERROR developers@ironsoftware.comIronPDFの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");
}
}IRON VB CONVERTER ERROR developers@ironsoftware.comNReco.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);
}
}IRON VB CONVERTER ERROR developers@ironsoftware.comIronPDFページ構成:。
// 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");
}
}IRON VB CONVERTER ERROR developers@ironsoftware.comNReco.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)を使用してください。 | PdfDocument を返します。 |
| <コード>GeneratePdfFromFile(url, output) | RenderUrlAsPdf(url)を使用してください。 | 直接URLサポート |
| <コード>GeneratePdfFromFile(path, output) | RenderHtmlFileAsPdf(path)を実行してください。 | ファイルパス |
| (サポートされていません) | RenderHtmlAsPdfAsync(html)。 | 非同期バージョン |
構成プロパティのマッピング
| NReco.PdfGenerator | IronPDF | ノート |
|---|---|---|
Orientation = PageOrientation.Landscape です。 | RenderingOptions.PaperOrientation=PdfPaperOrientation.Landscape。 | オリエンテーション |
| <コード>サイズ = PageSize.A4 | RenderingOptions.PaperSize=PdfPaperSize.A4。 | 用紙サイズ |
マージン.トップ = 10 | RenderingOptions.MarginTop = 10. | 個々のプロパティ |
ズーム = 0.9f | RenderingOptions.Zoom = 90. | フロートからパーセントへ |
PageHeaderHtml = "...". | <コード>RenderingOptions.HtmlHeader</コード | HtmlHeaderFooterオブジェクト |
PageFooterHtml = "...". | <コード>RenderingOptions.HtmlFooter</コード | HtmlHeaderFooterオブジェクト |
プレースホルダーの構文の違い
ヘッダーやフッターには、ページ番号のような動的コンテンツが含まれることがよくあります。 プレースホルダーの構文はライブラリによって異なります:
| NReco.PdfGenerator | IronPDF | 目的 |
|---|---|---|
| <コード>[ページ]</コード | <コード>{ページ}</コード | 現在のページ番号 |
| <コード>[トップページ]</コード | <コード>{総ページ数}</コード | 総ページ数 |
| <コード>[日付]</コード | {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);IRON VB CONVERTER ERROR developers@ironsoftware.com非同期サポートの比較
現代のウェブアプリケーションは、スレッドをブロックしない非同期操作の恩恵を受けています。 これは、同時リクエストを処理する.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 threadIRON VB CONVERTER ERROR developers@ironsoftware.comIronPdfは完全な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");IRON VB CONVERTER ERROR developers@ironsoftware.comHTTPリクエストに応答して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を評価するチームにはいくつかの要因があります:
セキュリティコンプライアンス:セキュリティ要件を持つ組織は、脆弱性スキャナがCVEを特定する際に課題に直面します。 IronPDFのChromiumエンジンは積極的にメンテナンスされ、セキュリティアップデートを受け取ります。
Modern CSS Requirements:CSS Grid、Flexbox、CSS 変数、またはその他のモダン CSS 機能を必要とするプロジェクトでは、wkhtmltopdfの 2012 年代の WebKit エンジンを使用できません。
JavaScriptとの互換性:JavaScriptでレンダリングされたコンテンツ(チャート、ダイナミックテーブル、計算値)を持つPDFを生成するアプリケーションは、最新のJavaScriptサポートが必要です。 wkhtmltopdfのES5の制限により、最新の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";IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"どちらのライブラリも.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>");IRON VB CONVERTER ERROR developers@ironsoftware.comNReco.PdfGeneratorは、wkhtmltopdfプロセスをスポーンするときの初期化オーバーヘッドと、外部プロセス管理による継続的なメモリオーバーヘッドも持っています。
決定する
NReco.PdfGeneratorとIronPdfのどちらを選ぶかは、あなたの特定の要件によります:
もしなら、NReco.PdfGeneratorを検討してください: 正常に動作する既存のwkhtmltopdfベースのワークフローがあり、セキュリティスキャナーの所見があなたの環境で許容でき、最新のCSSやJavaScriptの機能が必要なく、プラットフォーム固有のバイナリのデプロイメントを管理できます。
もし: セキュリティコンプライアンスでwkhtmltopdfのCVEに対応する必要がある場合、グリッドやFlexboxのようなモダンなCSS機能を使用している場合、Webアプリケーションで非同期/待ち受けのサポートが必要な場合、外部バイナリを排除してデプロイを簡素化したい場合、透明なライセンスと価格設定を希望する場合などは、IronPDFを検討してみてください。
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 生成のニーズと近代化の目標に沿った、十分な情報に基づいた決定を下すことができます。