C#でNReco PDFジェネレーターからIronPDFへ移行する方法
なぜ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を使用しない
- 最新 for JavaScript(ES6+)は使用しないでください。
- 貧弱なウェブフォントサポート
- CSS変数やカスタムプロパティを使用しない
3.外部バイナリ依存関係:プラットフォームごとに wkhtmltopdf バイナリを管理する必要があります (wkhtmltox.dll)。
4.アクティブな開発なし:ラッパーは、基盤となるエンジンの更新なしでメンテナンスを受けます。
5.非同期サポートの制限:同期 API は Web アプリケーション内のスレッドをブロックします。
NReco PDF GeneratorとIronPDFの比較
| アスペクト | NReco PDFジェネレータ | IronPDF |
|---|---|---|
| レンダリングエンジン | WebKit Qt (2012) | Chromium(現在) |
| セキュリティ | 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はアクティブな開発と最新のレンダリング機能を備えた将来性のある基盤を提供します。
始める前に
前提条件
- .NET環境: .NET Framework 4.6.2+ または.NET Core 3.1+ / .NET 5/6/7/8/9+
- NuGetアクセス: NuGetパッケージをインストールする機能
- IronPDFライセンス: IronPDFからライセンスキーを取得します。
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
また、配備からwkhtmltopdfバイナリを削除してください:
- プロジェクトから
wkhtmltox.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";
' Add at application startup (Program.vb or Startup.vb)
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"
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" .
完全な API リファレンス
コア クラス マッピング
| NReco PDFジェネレータ | IronPDF |
|---|---|
HtmlToPdfConverter |
ChromePdfRenderer |
PageMargins |
個々のマージン特性 |
PageOrientation |
PdfPaperOrientation |
PageSize |
PdfPaperSize |
レンダリング メソッド マッピング
| NReco PDFジェネレータ | IronPDF |
|---|---|
GeneratePdf(html) |
RenderHtmlAsPdf(html) |
GeneratePdfFromFile(url, output) |
RenderUrlAsPdf(url) |
GeneratePdfFromFile(htmlPath, output) |
RenderHtmlFileAsPdf(path) |
| (非同期はサポートされていません)_。 | RenderHtmlAsPdfAsync(html) |
| (非同期はサポートされていません)_。 | RenderUrlAsPdfAsync(url) |
ページ構成マッピング
| NReco PDFジェネレータ | IronPDF |
|---|---|
PageWidth = 210 |
RenderingOptions.PaperSize = PdfPaperSize.A4 |
PageHeight = 297 |
RenderingOptions.SetCustomPaperSizeinMilimeters(w, h) |
Orientation = PageOrientation.Landscape |
RenderingOptions.PaperOrientation = PdfPaperOrientation.Landscape |
Size = PageSize.A4 |
RenderingOptions.PaperSize = PdfPaperSize.A4 |
マージン マッピング
| NReco PDFジェネレータ | IronPDF |
|---|---|
Margins.Top = 10 |
RenderingOptions.MarginTop = 10 |
Margins.Bottom = 10 |
RenderingOptions.MarginBottom = 10 |
Margins.Left = 10 |
RenderingOptions.MarginLeft = 10 |
Margins.Right = 10 |
RenderingOptions.MarginRight = 10 |
new PageMargins { ... } |
個々のプロパティ |
ヘッダー/フッター プレースホルダー マッピング
| NReco PDFジェネレータ(wkhtmltopdf) | IronPDF |
|---|---|
[page] |
{page} |
[topage] |
{total-pages} |
[date] |
{date} |
[time] |
{time} |
[title] |
{html-title} |
出力処理のマッピング
| NReco PDFジェネレータ | IronPDF |
|---|---|
byte[] pdfBytes = GeneratePdf(html) |
PdfDocument pdf = RenderHtmlAsPdf(html) |
File.WriteAllBytes(path, bytes) |
pdf.SaveAs(path) |
return pdfBytes |
return 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);
}
}
Imports NReco.PdfGenerator
Imports System.IO
Class Program
Shared Sub Main()
Dim htmlToPdf = New HtmlToPdfConverter()
Dim htmlContent = "<html><body><h1>Hello World</h1><p>This is a PDF document.</p></body></html>"
Dim pdfBytes = htmlToPdf.GeneratePdf(htmlContent)
File.WriteAllBytes("output.pdf", pdfBytes)
End Sub
End Class
翻訳後(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");
}
}
Imports IronPdf
Imports System.IO
Class Program
Shared Sub Main()
Dim renderer = New ChromePdfRenderer()
Dim htmlContent = "<html><body><h1>Hello World</h1><p>This is a PDF document.</p></body></html>"
Dim pdf = renderer.RenderHtmlAsPdf(htmlContent)
pdf.SaveAs("output.pdf")
End Sub
End Class
基本的な違いは、戻り値の型と保存パターンです。 NReco PDF ジェネレータの HtmlToPdfConverter.GeneratePdf() は、File.WriteAllBytes() を使用して手動でディスクに書き込む必要がある byte[] を返します。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);
}
}
Imports NReco.PdfGenerator
Imports System.IO
Class Program
Shared Sub Main()
Dim htmlToPdf = New HtmlToPdfConverter()
htmlToPdf.PageWidth = 210
htmlToPdf.PageHeight = 297
htmlToPdf.Margins = New PageMargins With {.Top = 10, .Bottom = 10, .Left = 10, .Right = 10}
Dim htmlContent = "<html><body><h1>Custom Page Size</h1><p>A4 size document with margins.</p></body></html>"
Dim pdfBytes = htmlToPdf.GeneratePdf(htmlContent)
File.WriteAllBytes("custom-size.pdf", pdfBytes)
End Sub
End Class
翻訳後(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");
}
}
Imports IronPdf
Imports IronPdf.Rendering
Class Program
Shared Sub Main()
Dim renderer = New ChromePdfRenderer()
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4
renderer.RenderingOptions.MarginTop = 10
renderer.RenderingOptions.MarginBottom = 10
renderer.RenderingOptions.MarginLeft = 10
renderer.RenderingOptions.MarginRight = 10
Dim htmlContent = "<html><body><h1>Custom Page Size</h1><p>A4 size document with margins.</p></body></html>"
Dim pdf = renderer.RenderHtmlAsPdf(htmlContent)
pdf.SaveAs("custom-size.pdf")
End Sub
End Class
NReco PDF Generator は数値ディメンション (PageHeight = 297) と PageMargins オブジェクトを使用します。IronPDFは、PdfPaperSize 列挙型 (A4、レター、リーガルなどの標準サイズを含む) と、RenderingOptions オブジェクトの個別の余白プロパティを使用します。
主な移行の変更点
PageHeight→RenderingOptions.PaperSize = PdfPaperSize.A4new PageMargins { Top = 10, ... }→ Individual properties:RenderingOptions.MarginTop = 10
列挙型でカバーされていないカスタム用紙サイズの場合は、RenderingOptions.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);
}
}
Imports NReco.PdfGenerator
Imports System.IO
Class Program
Shared Sub Main()
Dim htmlToPdf As New HtmlToPdfConverter()
Dim pdfBytes As Byte() = htmlToPdf.GeneratePdfFromFile("https://www.example.com", Nothing)
File.WriteAllBytes("webpage.pdf", pdfBytes)
End Sub
End Class
翻訳後(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");
}
}
Imports IronPdf
Class Program
Shared Sub Main()
Dim renderer As New ChromePdfRenderer()
Dim pdf = renderer.RenderUrlAsPdf("https://www.example.com")
pdf.SaveAs("webpage.pdf")
End Sub
End Class
NReco PDF Generator は、ローカル ファイルと URL の両方に、null 許容の 2 番目のパラメータを持つ、紛らわしい名前の GeneratePdfFromFile() メソッドを使用します。IronPDFは、URL の場合は RenderUrlAsPdf()、ローカル HTML ファイルの場合は RenderHtmlFileAsPdf() という専用のメソッドを提供します。
IronPDFのアプローチはよりクリーンで直感的です。非同期Webアプリケーションの場合は、await renderer.RenderUrlAsPdfAsync(url)を使用してスレッドのブロックを回避します。これはNReco PDF Generatorでは不可能です。
重要な移行に関する注意事項
ズーム値変換
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);
' NReco PDF Generator: Zoom = 0.9F (90%)
' IronPDF: Zoom = 90
' Conversion formula:
Dim ironPdfZoom As Integer = CInt(nrecoZoom * 100)
プレースホルダーの構文の更新
すべてのヘッダー/フッターのプレースホルダーを更新する必要があります:
| NReco PDFジェネレータ | IronPDF |
|---|---|
[page] |
{page} |
[topage] |
{total-pages} |
[date] |
{date} |
[title] |
{html-title} |
// 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
};
Imports NReco.PdfGenerator
Imports IronPdf
' NReco PDF Generator:
converter.PageFooterHtml = "<div>Page [page] of [topage]</div>"
' IronPDF:
renderer.RenderingOptions.HtmlFooter = New HtmlHeaderFooter With {
.HtmlFragment = "<div>Page {page} of {total-pages}</div>",
.MaxHeight = 20
}
返品タイプの変更
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;
' NReco PDFジェネレータpattern:
Dim pdfBytes As Byte() = converter.GeneratePdf(html)
File.WriteAllBytes("output.pdf", pdfBytes)
' IronPDFpattern:
Dim pdf = renderer.RenderHtmlAsPdf(html)
pdf.SaveAs("output.pdf")
' Or if you need bytes:
Dim pdfBytes As Byte() = renderer.RenderHtmlAsPdf(html).BinaryData
スレッドの安全性と再利用性
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;
}
Imports NReco.PdfGenerator
Imports IronPdf
' NReco PDFジェネレータpattern (creates new each time):
Public Function Generate(html As String) As Byte()
Dim converter As New HtmlToPdfConverter()
Return converter.GeneratePdf(html)
End Function
' IronPDFpattern (reuse renderer, thread-safe):
Private ReadOnly _renderer As New ChromePdfRenderer()
Public Function Generate(html As String) As Byte()
Return _renderer.RenderHtmlAsPdf(html).BinaryData
End Function
非同期サポート (新機能)
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;
}
Imports System.Threading.Tasks
' NReco PDF Generator: No async support available
' IronPDF: Full async support
Public Async Function GenerateAsync(html As String) As Task(Of Byte())
Dim pdf = Await _renderer.RenderHtmlAsPdfAsync(html)
Return pdf.BinaryData
End Function
トラブルシューティング
問題 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();
' NReco PDF Generator
Dim converter As New HtmlToPdfConverter()
' IronPDF
Dim renderer As New ChromePdfRenderer()
問題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;
' NReco PDF Generator
Dim pdfBytes As Byte() = converter.GeneratePdf(html)
' IronPDF
Dim pdfBytes As Byte() = renderer.RenderHtmlAsPdf(html).BinaryData
問題 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;
' NReco PDF Generator
converter.Margins = New PageMargins With {.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
課題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
};
Imports NReco.PdfGenerator
Imports IronPdf
converter.PageFooterHtml = "<div>Page [page] of [topage]</div>"
renderer.RenderingOptions.HtmlFooter = New HtmlHeaderFooter With {
.HtmlFragment = "<div>Page {page} of {total-pages}</div>",
.MaxHeight = 20
}
移行チェックリスト
移行前
- コードベース内のすべての
NReco.PdfGeneratorの使用箇所をインベントリします - すべての
CustomWkHtmlArgsおよびCustomWkHtmlPageArgsの値を文書化します - プレースホルダーを含むすべてのヘッダー/フッター HTML テンプレートを一覧表示します
- 非同期要件(Web コントローラー、サービス)を特定する
- ズームと余白の設定を確認する
- 比較のために既存のPDF出力をバックアップする
- IronPDFライセンスキーを取得する
パッケージの変更
NReco.PdfGeneratorNuGetパッケージを削除しますIronPdfNuGetパッケージをインストールします:dotnet add package IronPdf- 名前空間のインポートを
using NReco.PdfGenerator;からusing IronPdf;に更新します
コードの変更
- 起動時にライセンスキー設定を追加する
HtmlToPdfConverterをChromePdfRendererに置き換えますGeneratePdf(html)をRenderHtmlAsPdf(html)に置き換えますGeneratePdfFromFile(url, null)をRenderUrlAsPdf(url)に置き換えますPageMarginsオブジェクトを個別のマージンプロパティに変換します- ズーム値を浮動小数点数からパーセンテージに更新
- プレースホルダー構文を更新:
[page]→[topage]→{total-pages} File.WriteAllBytes()をpdf.SaveAs()に置き換えます- 有益な場合は同期呼び出しを非同期に変換する
移行後
- プロジェクト/デプロイメントからwkhtmltopdfバイナリを削除します
- Dockerファイルを更新してwkhtmltopdfのインストールを削除します
- PDF出力を比較する回帰テストを実行する
- ヘッダー/フッターのプレースホルダーが正しくレンダリングされることを確認する
- すべてのターゲットプラットフォーム(Windows、Linux、macOS)でテスト
- CI/CD パイプラインを更新して wkhtmltopdf ステップを削除します
- CVE の削除を確認するためにセキュリティスキャンを更新します

