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

C#でNReco PDFジェネレーターからIronPDFへ移行する方法

NRecoPDFジェネレーターからIronPDFへの移行:完全なC#移行ガイド

NReco PDF GeneratorからIronPDFに移行することで、wkhtmltopdfから受け継いだ重大なセキュリティ脆弱性を排除し、.NET PDFワークフローを非推奨のWebKit Qtエンジン(2012年頃)からCSS3とJavaScriptをフルサポートした最新のChromiumベースのレンダラーにアップグレードします。 このガイドは、NReco PDF Generatorのセキュリティ上の懸念とレンダリングの制限の両方に対処する、包括的で段階的な移行パスを提供します。

なぜNReco PDFジェネレーターからIronPDFへ移行するのか

NRecoPDFジェネレータの重大なセキュリティ問題

NReco PDF Generatorは、非推奨のwkhtmltopdfバイナリをラップし、そのセキュリティ脆弱性をすべて継承しています。 これは机上の空論ではありません。wkhtmltopdfが2020年に放棄されて以来、20以上のCVEが文書化されており、パッチは提供されていません:

  • CVE-2020-21365: サーバサイドリクエストフォージェリ (SSRF)
  • CVE-2022-35583:HTML インジェクションによるローカルファイルの読み取り
  • CVE-2022-35580:リモートコード実行の可能性

基礎となるwkhtmltopdfプロジェクトはもはや保守されていないため、これらの脆弱性にパッチを当てることはできません。

追加の NReco PDF ジェネレーターの制限

1.ウォーターマーク付き無料版:本番使用には、販売に連絡する必要がある不透明な価格設定の有料ライセンスが必要です。

2.非推奨レンダリングエンジン:WebKit Qt (2012 年頃) は、限られた最新の Web サポートしか提供しません:

  • CSSグリッドやFlexboxを使用しない
  • 最新のJavaScript(ES6+)は使用しないでください。
  • 貧弱なウェブフォントサポート
  • CSS変数やカスタムプロパティを使用しない

3.外部バイナリ依存:プラットフォームごとにwkhtmltopdfバイナリを管理する必要があります(wkhtmltopdf.exe, wkhtmltox.dll)。

4.アクティブな開発なし: ラッパーは、基礎となるエンジンのアップデートなしでメンテナンスを受けます。

5.限定された非同期サポート: 同期APIは、Webアプリケーションのスレッドをブロックします。

NReco PDF GeneratorとIronPDFの比較

アスペクトNReco PDFジェネレータIronPDF
レンダリングエンジンWebKit Qt (2012)クロミウム(現在)
セキュリティ20以上のCVE、パッチなしアクティブなセキュリティアップデート
CSSサポートCSS2.1、限定的なCSS3フルCSS3、グリッド、フレックスボックス
JavaScript基本的なES5完全なES6+、async/await
依存関係外部wkhtmltopdfバイナリ自己完結型
非同期サポート同期のみ完全なasync/await
ウェブフォント制限的フルGoogleフォント、@font-face
ライセンス価格は不明です。透明性のある価格設定
無料トライアル透かし入り全機能

2025年、2026年まで.NET 10とC# 14の採用を計画しているチームにとって、IronPDFはアクティブな開発と最新のレンダリング機能を備えた将来性のある基盤を提供します。


始める前に

前提条件

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 NReco.PdfGenerator
dotnet remove package NReco.PdfGenerator

# Install IronPDF
dotnet add package IronPdf
# Remove NReco.PdfGenerator
dotnet remove package NReco.PdfGenerator

# Install IronPDF
dotnet add package IronPdf
SHELL

また、配備からwkhtmltopdfバイナリを削除してください:

  • wkhtmltopdf.exewkhtmltox.dllをプロジェクトから削除してください。
  • wkhtmltopdfインストールスクリプトの削除
  • プラットフォーム固有のバイナリフォルダの削除

ライセンス構成

// Add at application startup (Program.cs or Startup.cs)
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
// Add at application startup (Program.cs or Startup.cs)
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

NRecoPDFジェネレーターの使用法を特定する

# Find all NReco.PdfGenerator references
grep -r "NReco.PdfGenerator\|HtmlToPdfConverter\|GeneratePdf" --include="*.cs" .
# Find all NReco.PdfGenerator references
grep -r "NReco.PdfGenerator\|HtmlToPdfConverter\|GeneratePdf" --include="*.cs" .
SHELL

完全な API リファレンス

コア クラス マッピング

NReco PDFジェネレータIronPDFノート
<コード>HtmlToPdfConverter</コード<コード>ChromePdfRenderer</コードメインレンダラー
<コード>ページマージン</コード個々のマージン特性MarginTop、MarginBottomなど。
<コード>ページの向き</コード<コード>PdfPaperOrientation</コード列挙
<コード>ページサイズ</コード<コード>PdfPaperSize</コード列挙

レンダリング メソッド マッピング

NReco PDFジェネレータIronPDFノート
GeneratePdf(html)を実行してください。RenderHtmlAsPdf(html)を使用してください。PdfDocument を返します。
<コード>GeneratePdfFromFile(url, output)RenderUrlAsPdf(url)を使用してください。直接URLサポート
<コード>GeneratePdfFromFile(htmlPath, output)RenderHtmlFileAsPdf(path)を実行してください。ファイルパス
(非同期はサポートされていません)_。RenderHtmlAsPdfAsync(html)非同期バージョン
(非同期はサポートされていません)_。RenderUrlAsPdfAsync(url)を使用してください。非同期バージョン

ページ構成マッピング

NReco PDFジェネレータIronPDFノート
ページ幅 = 210RenderingOptions.PaperSize=PdfPaperSize.A4enum または SetCustomPaperSize を使用してください。
PageHeight = 297RenderingOptions.SetCustomPaperSizeinMilimeters(w, h).カスタムサイズ
Orientation = PageOrientation.Landscape です。RenderingOptions.PaperOrientation=PdfPaperOrientation.Landscape風景
<コード>サイズ = PageSize.A4RenderingOptions.PaperSize=PdfPaperSize.A4用紙サイズ列挙

マージン マッピング

NReco PDFジェネレータIronPDFノート
マージン.トップ = 10RenderingOptions.MarginTop = 10.単位:ミリメートル
Margins.Bottom = 10.RenderingOptions.MarginBottom = 10<//code>.単位:ミリメートル
Margins.Left = 10.RenderingOptions.MarginLeft = 10<//code>.単位:ミリメートル
Margins.Right = 10.RenderingOptions.MarginRight = 10.単位:ミリメートル
new PageMargins { ... }個々のプロパティマージンなし

ヘッダー/フッター プレースホルダー マッピング

NReco PDFジェネレータ(wkhtmltopdf)IronPDFノート
<コード>[ページ]</コード<コード>{ページ}</コード現在のページ番号
<コード>[トップページ]</コード<コード>{総ページ数}</コード総ページ数
<コード>[日付]</コード{date}<//code>現在の日付
<コード>[時間]</コード<コード>{時間}</コード現在の時間
<コード>[タイトル]</コード{html-title}<//code>文書タイトル

出力処理のマッピング

NReco PDFジェネレータIronPDFノート
byte[] pdfBytes = GeneratePdf(html).PdfDocument pdf = RenderHtmlAsPdf(html).オブジェクトを返します
File.WriteAllBytes(path, bytes).pdf.SaveAs(path)のようにします。直接保存
pdfBytesを返すpdf.BinaryDataを返すバイト配列を取得
new MemoryStream(pdfBytes).<コード>pdf.Stream</コードストリーム

コード移行の例

例1: 基本的なHTMLからPDFへ

翻訳前 (NReco PDF Generator):

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

基本的な違いは、戻り値の型と保存パターンです。 NReco PDF GeneratorのHtmlToPdfConverter.GeneratePdf()は、Byte[]を返すので、File.WriteAllBytes()を使って手動でディスクに書き込む必要があります。 IronPDFのChromePdfRenderer.RenderHtmlAsPdf()は組み込みのSaveAs()メソッドを持つPdfDocumentオブジェクトを返します。

このオブジェクト指向のアプローチは、保存する前にPDFを操作(透かしを追加したり、文書をマージしたり、セキュリティを追加したり)できるという、さらなる利点を提供します。 既存のコードとの互換性のために生のバイトが必要な場合は、pdf.BinaryDataを使用してください。 その他のレンダリングオプションについては、HTML to PDF documentationを参照してください。

例2: 余白を使ったカスタムページサイズ

翻訳前 (NReco PDF Generator):

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

NReco PDF Generatorは、数値寸法(PageWidth = 210, PageHeight=297)とPageMarginsオブジェクトを使用します。 IronPDFはPdfPaperSize列挙型(A4、レター、リーガルのような標準サイズを含む)とRenderingOptionsオブジェクトの個々のマージンプロパティを使用します。

主な移行の変更点

  • PageWidth/PageHeightRenderingOptions.PaperSize=PdfPaperSize.A4。です。
  • new PageMargins { Top = 10, ... }→ 個々のプロパティ:RenderingOptions.MarginTop = 10 です。

列挙でカバーされていないカスタム用紙サイズについては、RendereringOptions.SetCustomPaperSizeinMilimeters(width, height)を使用してください。 ページ構成オプションの詳細については、こちらをご覧ください。

例3: URLからPDFへの変換

翻訳前 (NReco PDF Generator):

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

翻訳後(IronPDF):

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

NReco PDF Generatorは、GeneratePdfFromFile()という紛らわしい名前のメソッドを、ローカルファイルとURLの両方に、NULL可能な第2引数付きで使用します。 IronPDFは専用のメソッドを提供します:RenderUrlAsPdf()はURLに対して、RenderHtmlFileAsPdf()はローカルのHTMLファイルに対してです。

IronPdfのアプローチはよりすっきりしていて直感的です。非同期ウェブアプリケーションでは、await renderer.RenderUrlAsPdfAsync(url) を使ってスレッドのブロックを避けてください。


重要な移行に関する注意事項

ズーム値変換

NReco PDF Generatorは浮動小数点数(0.0-2.0)を使用し、IronPDFはパーセント整数を使用します:

// NReco PDF Generator: Zoom = 0.9f (90%)
// IronPDF: Zoom = 90

// Conversion formula:
int ironPdfZoom = (int)(nrecoZoom * 100);
// NReco PDF Generator: Zoom = 0.9f (90%)
// IronPDF: Zoom = 90

// Conversion formula:
int ironPdfZoom = (int)(nrecoZoom * 100);
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

プレースホルダーの構文の更新

すべてのヘッダー/フッターのプレースホルダーを更新する必要があります:

NReco PDFジェネレータIronPDF
<コード>[ページ]</コード<コード>{ページ}</コード
<コード>[トップページ]</コード<コード>{総ページ数}</コード
<コード>[日付]</コード{date}<//code>
<コード>[タイトル]</コード{html-title}<//code>
// NReco PDF Generator:
converter.PageFooterHtml = "<div>Page [page] of [topage]</div>";

// IronPDF:
renderer.RenderingOptions.HtmlFooter = new HtmlHeaderFooter
{
    HtmlFragment = "<div>Page {page} of {total-pages}</div>",
    MaxHeight = 20
};
// NReco PDF Generator:
converter.PageFooterHtml = "<div>Page [page] of [topage]</div>";

// IronPDF:
renderer.RenderingOptions.HtmlFooter = new HtmlHeaderFooter
{
    HtmlFragment = "<div>Page {page} of {total-pages}</div>",
    MaxHeight = 20
};
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

返品タイプの変更

NReco PDF Generatorはbyte[]を直接返します; IronPDFはPdfDocumentを返します:

//NReco PDFジェネレータpattern:
byte[] pdfBytes = converter.GeneratePdf(html);
File.WriteAllBytes("output.pdf", pdfBytes);

//IronPDFpattern:
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("output.pdf");

// Or if you need bytes:
byte[] pdfBytes = renderer.RenderHtmlAsPdf(html).BinaryData;
//NReco PDFジェネレータpattern:
byte[] pdfBytes = converter.GeneratePdf(html);
File.WriteAllBytes("output.pdf", pdfBytes);

//IronPDFpattern:
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("output.pdf");

// Or if you need bytes:
byte[] pdfBytes = renderer.RenderHtmlAsPdf(html).BinaryData;
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

スレッドの安全性と再利用性

NReco PDF Generatorは通常、呼び出しごとに新しいコンバータを作成します。 IronPDFのChromePdfRendererはスレッドセーフで再利用可能です:

//NReco PDFジェネレータpattern (creates new each time):
public byte[] Generate(string html)
{
    var converter = new HtmlToPdfConverter();
    return converter.GeneratePdf(html);
}

//IronPDFpattern (reuse renderer, thread-safe):
private readonly ChromePdfRenderer _renderer = new ChromePdfRenderer();

public byte[] Generate(string html)
{
    return _renderer.RenderHtmlAsPdf(html).BinaryData;
}
//NReco PDFジェネレータpattern (creates new each time):
public byte[] Generate(string html)
{
    var converter = new HtmlToPdfConverter();
    return converter.GeneratePdf(html);
}

//IronPDFpattern (reuse renderer, thread-safe):
private readonly ChromePdfRenderer _renderer = new ChromePdfRenderer();

public byte[] Generate(string html)
{
    return _renderer.RenderHtmlAsPdf(html).BinaryData;
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

非同期サポート (新機能)

IronPDFはNReco PDF Generatorが提供できない非同期/待機パターンをサポートしています:

// NReco PDF Generator: No async support available

// IronPDF: Full async support
public async Task<byte[]> GenerateAsync(string html)
{
    var pdf = await _renderer.RenderHtmlAsPdfAsync(html);
    return pdf.BinaryData;
}
// NReco PDF Generator: No async support available

// IronPDF: Full async support
public async Task<byte[]> GenerateAsync(string html)
{
    var pdf = await _renderer.RenderHtmlAsPdfAsync(html);
    return pdf.BinaryData;
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

トラブルシューティング

問題 1: HtmlToPdfConverter が見つかりません。

問題HtmlToPdfConverterクラスがIronPdfに存在しません。

解決策ChromePdfRendererを使用してください:

// NReco PDF Generator
var converter = new HtmlToPdfConverter();

// IronPDF
var renderer = new ChromePdfRenderer();
// NReco PDF Generator
var converter = new HtmlToPdfConverter();

// IronPDF
var renderer = new ChromePdfRenderer();
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

問題2: GeneratePdfが間違った型を返す

問題:コードはbyte[]を期待するが、PdfDocumentが返ってくる。

ソリューション.BinaryDataプロパティにアクセスします:

// NReco PDF Generator
byte[] pdfBytes = converter.GeneratePdf(html);

// IronPDF
byte[] pdfBytes = renderer.RenderHtmlAsPdf(html).BinaryData;
// NReco PDF Generator
byte[] pdfBytes = converter.GeneratePdf(html);

// IronPDF
byte[] pdfBytes = renderer.RenderHtmlAsPdf(html).BinaryData;
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

問題 3: PageMargins オブジェクトが見つかりません

問題PageMarginsクラスがIronPDFに存在しません。

解決策:個々のマージンプロパティを使用します:

// NReco PDF Generator
converter.Margins = new PageMargins { Top = 10, Bottom = 10, Left = 10, Right = 10 };

// IronPDF
renderer.RenderingOptions.MarginTop = 10;
renderer.RenderingOptions.MarginBottom = 10;
renderer.RenderingOptions.MarginLeft = 10;
renderer.RenderingOptions.MarginRight = 10;
// NReco PDF Generator
converter.Margins = new PageMargins { Top = 10, Bottom = 10, Left = 10, Right = 10 };

// IronPDF
renderer.RenderingOptions.MarginTop = 10;
renderer.RenderingOptions.MarginBottom = 10;
renderer.RenderingOptions.MarginLeft = 10;
renderer.RenderingOptions.MarginRight = 10;
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

課題4:ページ番号が表示されない

問題[page][topage]プレースホルダが機能しません。

解決策:IronPDFプレースホルダーの構文を更新しました:

// NReco PDF Generator
converter.PageFooterHtml = "<div>Page [page] of [topage]</div>";

// IronPDF
renderer.RenderingOptions.HtmlFooter = new HtmlHeaderFooter
{
    HtmlFragment = "<div>Page {page} of {total-pages}</div>",
    MaxHeight = 20
};
// NReco PDF Generator
converter.PageFooterHtml = "<div>Page [page] of [topage]</div>";

// IronPDF
renderer.RenderingOptions.HtmlFooter = new HtmlHeaderFooter
{
    HtmlFragment = "<div>Page {page} of {total-pages}</div>",
    MaxHeight = 20
};
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

移行チェックリスト

移行前

  • [ ] コードベース内のすべてのNReco.PdfGeneratorの用法をインベントリ化する。
  • [ ] すべての CustomWkHtmlArgsCustomWkHtmlPageArgs の値を文書化する。
  • [プレースホルダを含むすべてのヘッダー/フッターHTMLテンプレートをリストアップしてください。
  • [非同期要件(ウェブコントローラ、サービス)の特定)
  • [ズームとマージンの設定を見直す
  • [比較のため、既存のPDF出力をバックアップしてください。
  • [IronPDF ライセンスキーの取得

パッケージの変更

  • [ ] NReco.PdfGenerator<//code> NuGetパッケージを削除する。
  • [ ] IronPdf NuGetパッケージをインストールします:dotnet add package IronPdf NuGetパッケージをインストールします。
  • [ ] 名前空間のインポートをusing NReco.PdfGenerator;からusing IronPdf;に更新してください。

コードの変更

  • [ ] 起動時にライセンスキー設定を追加する
  • [ ] HtmlToPdfConverterChromePdfRendererに置き換えてください。
  • [GeneratePdf(html)RenderHtmlAsPdf(html)を使用してください。に置き換えてください。
  • [ ] GeneratePdfFromFile(url, null)RenderUrlAsPdf(url)を使用してください。に置き換えてください。
  • [ ] PageMarginsオブジェクトを個々のマージンプロパティに変換する
  • [ ] ズーム値を float から percentage に更新する
  • [プレースホルダーの構文を更新してください:[page]{page}[topage]{total-pages}
  • [ ] File.WriteAllBytes()pdf.SaveAs()に置き換えてください。
  • [ ] 同期コールを非同期に変換する。

移行後

  • [ ] プロジェクト/デプロイメントからwkhtmltopdfバイナリを削除する
  • [ ] Dockerファイルを更新し、wkhtmltopdfのインストールを削除する。
  • [PDF 出力を比較する回帰テストの実行
  • [ヘッダー/フッターのプレースホルダーが正しくレンダリングされることを確認してください。
  • [すべてのターゲットプラットフォーム(Windows、Linux、macOS)でテストしてください。)
  • [] CI/CDパイプラインを更新してwkhtmltopdfステップを削除する
  • [セキュリティスキャンを更新し、CVE の除去を確認する。

結論

NReco PDF GeneratorからIronPDFへの移行は、レンダリングエンジンを非推奨の2012 WebKit Qtから最新のChromiumベースのソリューションにアップグレードしながら、重要なセキュリティ脆弱性に対処します。 この移行により、パッチが適用できない20以上のCVEが排除され、CSS3とES6+ JavaScriptの完全サポートが追加され、外部バイナリ依存が削除され、Webアプリケーションのパフォーマンス向上のための非同期/待機パターンが可能になります。

この移行における主な変更点は以下のとおりです: 1.セキュリティ: 20以上のCVEを排除 → アクティブなセキュリティアップデート 2.レンダリング:WebKit Qt (2012) → Chromium (現在) 3.依存関係: 外部wkhtmltopdf → 自己完結型 4.非同期: 同期のみ → 完全な非同期/待機 5.クラスHtmlToPdfConverterChromePdfRenderer 6.余白PageMarginsオブジェクト → 個別プロパティ 7.プレースホルダ[page]/[topage]{page}/{total-pages}となります。

IronPDFドキュメントチュートリアルAPIリファレンスをご覧いただき、NReco PDF Generatorへの移行を加速させてください。

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

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

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