Haukcode.DinkToPdfからIronPDFへの移行
Haukcode.DinkToPdf は、かつて人気があった DinkToPdf ライブラリの続編であり、wkhtmltopdf バイナリを使用して.NETアプリケーション用に HTML を PDF に変換します。 Haukcode.DinkToPdf は、元のプロジェクトが中断された後も.NET Coreに追従し続けましたが、上流の依存関係に起因する重大なセキュリティ問題を抱えています。 wkhtmltopdf プロジェクトは 2023 年 1 月にアーカイブされたため、これらの問題は解決されません。
このガイドでは、PDF 生成ワークフローからセキュリティ リスクを排除することを目指すプロ for .NET開発者向けに、Haukcode.DinkToPdf からIronPDFへの徹底的な移行パス、ステップバイステップの手順、コード比較、実用的な例が提供されます。
重大なセキュリティ警告:CVE-2022-35583
Haukcode.DinkToPdf は、対処できない重大なセキュリティ脆弱性を wkhtmltopdf から継承しています。
CVE-2022-35583 - 重大な SSRF の脆弱性 (CVSS 9.8)
wkhtmltopdfライブラリ(およびHaukcode.DinkToPdfを含むすべてのラッパー)は、Server-Side Request Forgery(SSRF)の脆弱性があります:
-攻撃ベクトル:悪意のあるHTMLコンテンツにより、サーバーが内部リソースを取得する可能性がある
- AWS メタデータ攻撃:
http://169.254.169.254にアクセスして AWS 認証情報を盗むことができます -内部ネットワークアクセス:内部サービスをスキャンしてアクセスできます -ローカルファイルのインクルード:file://プロトコル経由でローカルファイルを読み取ることができます -影響:完全なインフラの乗っ取りが可能
この脆弱性に対する修正はありません なぜならwkhtmltopdfは放棄され、2023年にアーカイブされたからです。最後のリリースは 2020 年のバージョン 0.12.6 です。
IronPDFvs Haukcode.DinkToPdf:機能比較
アーキテクチャの違いを理解することは、技術的な意思決定者が移行への投資を評価するのに役立ちます:
| アスペクト | Haukcode.DinkToPdf | IronPDF |
|---|---|---|
| 基盤エンジン | wkhtmltopdf(Qt WebKit ~2015) | Chromium (定期的に更新) |
| セキュリティステータス | CVE-2022-35583 (CRITICAL、未修正) | 積極的にパッチを適用 |
| プロジェクトステータス | 放棄されたプロジェクトのフォーク | 積極的に開発 |
| HTML5/CSS3。 | 制限的 | サポート対象 |
| JavaScript(JavaScript | 限定的で安全ではない | フルV8エンジン |
| ネイティブバイナリ | 必須(プラットフォーム固有) | 自己完結型 |
| スレッドセーフティ | シングルトンパターンが必要 | スレッドセーフ設計 |
| サポート | コミュニティ限定 | プロフェッショナルサポート |
| 更新情報 | 特になし | 定期リリース |
| ライセンス | MIT (無料) | 無料トライアル付き商用 |
クイックスタート:Haukcode.DinkToPdfからIronPDFへの移行
これらの基本的なステップを踏めば、すぐにでも移行を開始できます。
ステップ 1: DinkToPdf とネイティブ バイナリを削除する
Haukcode.DinkToPdf NuGetパッケージを削除してください:
# Remove NuGet packages
dotnet remove package DinkToPdf
dotnet remove package Haukcode.DinkToPdf
dotnet remove package Haukcode.WkHtmlToPdf-DotNet
# Remove NuGet packages
dotnet remove package DinkToPdf
dotnet remove package Haukcode.DinkToPdf
dotnet remove package Haukcode.WkHtmlToPdf-DotNet
プロジェクトからネイティブバイナリを削除する:。
libwkhtmltox.dll(Windows)libwkhtmltox.so(Linux)libwkhtmltox.dylib(macOS)
ステップ2: IronPDFをインストールする
# Install IronPDF
dotnet add package IronPdf
# Install IronPDF
dotnet add package IronPdf
ステップ 3: 名前空間の更新
DinkToPdf名前空間をIronPdfに置き換えてください:
// Before (Haukcode.DinkToPdf)
using DinkToPdf;
using DinkToPdf.Contracts;
// After (IronPDF)
using IronPdf;
using IronPdf.Rendering; // For RenderingOptions
// Before (Haukcode.DinkToPdf)
using DinkToPdf;
using DinkToPdf.Contracts;
// After (IronPDF)
using IronPdf;
using IronPdf.Rendering; // For RenderingOptions
Imports IronPdf
Imports IronPdf.Rendering
ステップ 4: ライセンスの初期化
アプリケーション起動時のライセンス初期化を追加します:
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"
コード移行の例
基本的なHTMLからPDFへの変換
最も基本的な操作は、これら for .NET PDFライブラリの複雑さの違いを明らかにします。
Haukcode.DinkToPdfのアプローチ:
// NuGet: Install-Package DinkToPdf
using DinkToPdf;
using DinkToPdf.Contracts;
using System.IO;
class Program
{
static void Main()
{
var converter = new SynchronizedConverter(new PdfTools());
var doc = new HtmlToPdfDocument()
{
GlobalSettings = {
ColorMode = ColorMode.Color,
Orientation = Orientation.Portrait,
PaperSize = PaperKind.A4,
},
Objects = {
new ObjectSettings() {
HtmlContent = "<html><body><h1>Hello World</h1></body></html>",
}
}
};
byte[] pdf = converter.Convert(doc);
File.WriteAllBytes("output.pdf", pdf);
}
}
// NuGet: Install-Package DinkToPdf
using DinkToPdf;
using DinkToPdf.Contracts;
using System.IO;
class Program
{
static void Main()
{
var converter = new SynchronizedConverter(new PdfTools());
var doc = new HtmlToPdfDocument()
{
GlobalSettings = {
ColorMode = ColorMode.Color,
Orientation = Orientation.Portrait,
PaperSize = PaperKind.A4,
},
Objects = {
new ObjectSettings() {
HtmlContent = "<html><body><h1>Hello World</h1></body></html>",
}
}
};
byte[] pdf = converter.Convert(doc);
File.WriteAllBytes("output.pdf", pdf);
}
}
Imports DinkToPdf
Imports DinkToPdf.Contracts
Imports System.IO
Module Program
Sub Main()
Dim converter = New SynchronizedConverter(New PdfTools())
Dim doc = New HtmlToPdfDocument() With {
.GlobalSettings = New GlobalSettings() With {
.ColorMode = ColorMode.Color,
.Orientation = Orientation.Portrait,
.PaperSize = PaperKind.A4
},
.Objects = New List(Of ObjectSettings) From {
New ObjectSettings() With {
.HtmlContent = "<html><body><h1>Hello World</h1></body></html>"
}
}
}
Dim pdf As Byte() = converter.Convert(doc)
File.WriteAllBytes("output.pdf", pdf)
End Sub
End Module
IronPDFのアプローチ:
// NuGet: Install-Package IronPdf
using IronPdf;
using System.IO;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<html><body><h1>Hello World</h1></body></html>");
pdf.SaveAs("output.pdf");
}
}
// NuGet: Install-Package IronPdf
using IronPdf;
using System.IO;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<html><body><h1>Hello World</h1></body></html>");
pdf.SaveAs("output.pdf");
}
}
Imports IronPdf
Imports System.IO
Class Program
Shared Sub Main()
Dim renderer = New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf("<html><body><h1>Hello World</h1></body></html>")
pdf.SaveAs("output.pdf")
End Sub
End Class
Haukcode.DinkToPdf では、PdfTools を使用して SynchronizedConverter を作成し、ネストされた GlobalSettings および Objects を使用して HtmlToPdfDocument を構築し、HtmlContent を使用して ObjectSettings を追加し、生のバイトを取得するために converter.Convert() を呼び出して、File.WriteAllBytes() を使用してファイルに手動で書き込む必要があります。
IronPDF はこれを 3 行に簡略化します: ChromePdfRenderer を作成し、RenderHtmlAsPdf() を呼び出し、組み込みの SaveAs() メソッドを使用します。
高度なHTMLからPDFへのシナリオについては、HTMLからPDFへの変換ガイドをご覧ください。
URLをPDFに変換する
URLからPDFへの変換でも、同様のパターンの違いが見られます。
Haukcode.DinkToPdfのアプローチ:
// NuGet: Install-Package DinkToPdf
using DinkToPdf;
using DinkToPdf.Contracts;
using System.IO;
class Program
{
static void Main()
{
var converter = new SynchronizedConverter(new PdfTools());
var doc = new HtmlToPdfDocument()
{
GlobalSettings = {
ColorMode = ColorMode.Color,
Orientation = Orientation.Portrait,
PaperSize = PaperKind.A4,
},
Objects = {
new ObjectSettings() {
Page = "https://www.example.com",
}
}
};
byte[] pdf = converter.Convert(doc);
File.WriteAllBytes("webpage.pdf", pdf);
}
}
// NuGet: Install-Package DinkToPdf
using DinkToPdf;
using DinkToPdf.Contracts;
using System.IO;
class Program
{
static void Main()
{
var converter = new SynchronizedConverter(new PdfTools());
var doc = new HtmlToPdfDocument()
{
GlobalSettings = {
ColorMode = ColorMode.Color,
Orientation = Orientation.Portrait,
PaperSize = PaperKind.A4,
},
Objects = {
new ObjectSettings() {
Page = "https://www.example.com",
}
}
};
byte[] pdf = converter.Convert(doc);
File.WriteAllBytes("webpage.pdf", pdf);
}
}
Imports DinkToPdf
Imports DinkToPdf.Contracts
Imports System.IO
Module Program
Sub Main()
Dim converter = New SynchronizedConverter(New PdfTools())
Dim doc = New HtmlToPdfDocument() With {
.GlobalSettings = New GlobalSettings() With {
.ColorMode = ColorMode.Color,
.Orientation = Orientation.Portrait,
.PaperSize = PaperKind.A4
},
.Objects = New List(Of ObjectSettings) From {
New ObjectSettings() With {
.Page = "https://www.example.com"
}
}
}
Dim pdf As Byte() = converter.Convert(doc)
File.WriteAllBytes("webpage.pdf", pdf)
End Sub
End Module
IronPDFのアプローチ:
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
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;
using System;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderUrlAsPdf("https://www.example.com");
pdf.SaveAs("webpage.pdf");
}
}
Imports IronPdf
Imports System
Class Program
Shared Sub Main()
Dim renderer = New ChromePdfRenderer()
Dim pdf = renderer.RenderUrlAsPdf("https://www.example.com")
pdf.SaveAs("webpage.pdf")
End Sub
End Class
Haukcode.DinkToPdf は、URL に ObjectSettings.Page と同じドキュメント構築パターンを使用します。IronPDFは、意図を明確に表現する専用の RenderUrlAsPdf() メソッドを提供します。
認証とカスタムヘッダーオプションについては、URL to PDF documentationを参照してください。
カスタムページ設定
方向、用紙サイズ、余白の設定には、さまざまなアプローチが必要です。
Haukcode.DinkToPdfのアプローチ:
// NuGet: Install-Package DinkToPdf
using DinkToPdf;
using DinkToPdf.Contracts;
using System.IO;
class Program
{
static void Main()
{
var converter = new SynchronizedConverter(new PdfTools());
var doc = new HtmlToPdfDocument()
{
GlobalSettings = {
ColorMode = ColorMode.Color,
Orientation = Orientation.Landscape,
PaperSize = PaperKind.Letter,
Margins = new MarginSettings() { Top = 10, Bottom = 10, Left = 10, Right = 10 }
},
Objects = {
new ObjectSettings() {
HtmlContent = "<html><body><h1>Landscape Document</h1><p>Custom page settings</p></body></html>",
}
}
};
byte[] pdf = converter.Convert(doc);
File.WriteAllBytes("landscape.pdf", pdf);
}
}
// NuGet: Install-Package DinkToPdf
using DinkToPdf;
using DinkToPdf.Contracts;
using System.IO;
class Program
{
static void Main()
{
var converter = new SynchronizedConverter(new PdfTools());
var doc = new HtmlToPdfDocument()
{
GlobalSettings = {
ColorMode = ColorMode.Color,
Orientation = Orientation.Landscape,
PaperSize = PaperKind.Letter,
Margins = new MarginSettings() { Top = 10, Bottom = 10, Left = 10, Right = 10 }
},
Objects = {
new ObjectSettings() {
HtmlContent = "<html><body><h1>Landscape Document</h1><p>Custom page settings</p></body></html>",
}
}
};
byte[] pdf = converter.Convert(doc);
File.WriteAllBytes("landscape.pdf", pdf);
}
}
Imports DinkToPdf
Imports DinkToPdf.Contracts
Imports System.IO
Module Program
Sub Main()
Dim converter = New SynchronizedConverter(New PdfTools())
Dim doc = New HtmlToPdfDocument() With {
.GlobalSettings = New GlobalSettings() With {
.ColorMode = ColorMode.Color,
.Orientation = Orientation.Landscape,
.PaperSize = PaperKind.Letter,
.Margins = New MarginSettings() With {.Top = 10, .Bottom = 10, .Left = 10, .Right = 10}
},
.Objects = {
New ObjectSettings() With {
.HtmlContent = "<html><body><h1>Landscape Document</h1><p>Custom page settings</p></body></html>"
}
}
}
Dim pdf As Byte() = converter.Convert(doc)
File.WriteAllBytes("landscape.pdf", pdf)
End Sub
End Module
IronPDFのアプローチ:
// NuGet: Install-Package IronPdf
using IronPdf;
using IronPdf.Rendering;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.PaperSize = PdfPaperSize.Letter;
renderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Landscape;
renderer.RenderingOptions.MarginTop = 10;
renderer.RenderingOptions.MarginBottom = 10;
renderer.RenderingOptions.MarginLeft = 10;
renderer.RenderingOptions.MarginRight = 10;
var pdf = renderer.RenderHtmlAsPdf("<html><body><h1>Landscape Document</h1><p>Custom page settings</p></body></html>");
pdf.SaveAs("landscape.pdf");
}
}
// NuGet: Install-Package IronPdf
using IronPdf;
using IronPdf.Rendering;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.PaperSize = PdfPaperSize.Letter;
renderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Landscape;
renderer.RenderingOptions.MarginTop = 10;
renderer.RenderingOptions.MarginBottom = 10;
renderer.RenderingOptions.MarginLeft = 10;
renderer.RenderingOptions.MarginRight = 10;
var pdf = renderer.RenderHtmlAsPdf("<html><body><h1>Landscape Document</h1><p>Custom page settings</p></body></html>");
pdf.SaveAs("landscape.pdf");
}
}
Imports IronPdf
Imports IronPdf.Rendering
Class Program
Shared Sub Main()
Dim renderer = New ChromePdfRenderer()
renderer.RenderingOptions.PaperSize = PdfPaperSize.Letter
renderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Landscape
renderer.RenderingOptions.MarginTop = 10
renderer.RenderingOptions.MarginBottom = 10
renderer.RenderingOptions.MarginLeft = 10
renderer.RenderingOptions.MarginRight = 10
Dim pdf = renderer.RenderHtmlAsPdf("<html><body><h1>Landscape Document</h1><p>Custom page settings</p></body></html>")
pdf.SaveAs("landscape.pdf")
End Sub
End Class
Haukcode.DinkToPdf は、別の MarginSettings オブジェクトを使用して、GlobalSettings 内に設定をネストします。IronPDFは、PaperOrientation のような明確な名前を持つ直接的な RenderingOptions プロパティと、個別の余白プロパティを提供します。
Haukcode.DinkToPdf APIからIronPdfへのマッピングリファレンス
このマッピングは、APIと同等のものを直接示すことで、移行を加速します:
コンバーター・クラスのマッピング
| Haukcode.DinkToPdf | IronPDF |
|---|---|
SynchronizedConverter |
ChromePdfRenderer |
BasicConverter |
ChromePdfRenderer |
PdfTools |
該当なし |
IConverter |
該当なし |
ドキュメント構成マッピング
| Haukcode.DinkToPdf | IronPDF |
|---|---|
HtmlToPdfDocument |
メソッドコール |
GlobalSettings |
RenderingOptions |
ObjectSettings |
RenderingOptions |
converter.Convert(doc) |
renderer.RenderHtmlAsPdf(html) |
GlobalSettingsプロパティのマッピング
| GlobalSettings プロパティ | IronPDF プロパティ |
|---|---|
ColorMode |
RenderingOptions.GrayScale |
Orientation |
RenderingOptions.PaperOrientation |
PaperSize |
RenderingOptions.PaperSize |
Margins.Top |
RenderingOptions.MarginTop |
Margins.Bottom |
RenderingOptions.MarginBottom |
Margins.Left |
RenderingOptions.MarginLeft |
Margins.Right |
RenderingOptions.MarginRight |
オブジェクト設定プロパティのマッピング
| オブジェクト設定プロパティ | IronPDF 同等物 |
|---|---|
HtmlContent |
最初のパラメータはRenderHtmlAsPdf() |
Page (URL) |
renderer.RenderUrlAsPdf(url) |
HeaderSettings.Right = "[page]" |
TextHeader.RightText = "{page}" |
プレースホルダーの構文の移行
| Haukcode.DinkToPdf | IronPDF |
|---|---|
[page] |
{page} |
[toPage] |
{total-pages} |
[date] |
{date} |
一般的な移行の問題と解決策
課題 1: シングルトンの要件
Haukcode.DinkToPdf:ネイティブ wkhtmltopdf バイナリのスレッド セーフティの問題のため、SynchronizedConverter をシングルトンとして必要とします。
解決策:IronPDFの ChromePdfRenderer は設計上スレッドセーフであり、シングルトンは必要ありません。
// Before (DinkToPdf) - MUST be singleton
services.AddSingleton(typeof(IConverter), new SynchronizedConverter(new PdfTools()));
// After (IronPDF) - Can be singleton or transient (both work)
services.AddSingleton<IPdfService, IronPdfService>();
// Or services.AddTransient<IPdfService, IronPdfService>() - both are safe!
// Before (DinkToPdf) - MUST be singleton
services.AddSingleton(typeof(IConverter), new SynchronizedConverter(new PdfTools()));
// After (IronPDF) - Can be singleton or transient (both work)
services.AddSingleton<IPdfService, IronPdfService>();
// Or services.AddTransient<IPdfService, IronPdfService>() - both are safe!
' Before (DinkToPdf) - MUST be singleton
services.AddSingleton(GetType(IConverter), New SynchronizedConverter(New PdfTools()))
' After (IronPDF) - Can be singleton or transient (both work)
services.AddSingleton(Of IPdfService, IronPdfService)()
' Or services.AddTransient(Of IPdfService, IronPdfService)() - both are safe!
課題 2: ネイティブのバイナリ依存
Haukcode.DinkToPdf:プラットフォーム固有のネイティブライブラリ(libwkhtmltox.dll/so/dylib)が必要です。
ソリューション: IronPDFはネイティブバイナリに依存せず、自己完結しています。 移行後、これらのファイルを削除してください:
libwkhtmltox.dll(Windows)libwkhtmltox.so(Linux)libwkhtmltox.dylib(macOS)
課題3:リターン・タイプの違い
Haukcode.DinkToPdf: converter.Convert() は byte[] を直接返します。
解決策:IronPDFは、複数の出力オプションを持つ PdfDocument オブジェクトを返します。
var pdf = renderer.RenderHtmlAsPdf(html);
byte[] bytes = pdf.BinaryData; // Get bytes
pdf.SaveAs("output.pdf"); // Or save directly
var pdf = renderer.RenderHtmlAsPdf(html);
byte[] bytes = pdf.BinaryData; // Get bytes
pdf.SaveAs("output.pdf"); // Or save directly
Dim pdf = renderer.RenderHtmlAsPdf(html)
Dim bytes As Byte() = pdf.BinaryData ' Get bytes
pdf.SaveAs("output.pdf") ' Or save directly
課題4:ヘッダー/フッターのプレースホルダーの構文
Haukcode.DinkToPdf: [page] や [toPage] のような角括弧構文を使用します。
解決策: IronPDFの中括弧プレースホルダーを更新しました:
// Before (DinkToPdf)
HeaderSettings = { Right = "Page [page] of [toPage]" }
// After (IronPDF)
renderer.RenderingOptions.TextHeader = new TextHeaderFooter
{
RightText = "Page {page} of {total-pages}"
};
// Before (DinkToPdf)
HeaderSettings = { Right = "Page [page] of [toPage]" }
// After (IronPDF)
renderer.RenderingOptions.TextHeader = new TextHeaderFooter
{
RightText = "Page {page} of {total-pages}"
};
' Before (DinkToPdf)
HeaderSettings = New With {.Right = "Page [page] of [toPage]"}
' After (IronPDF)
renderer.RenderingOptions.TextHeader = New TextHeaderFooter With {
.RightText = "Page {page} of {total-pages}"
}
Haukcode.DinkToPdf移行チェックリスト
マイグレーション前のタスク
コードベースを監査して、DinkToPdf の使用状況をすべて確認してください:
# Find DinkToPdf namespace usage
grep -r "using DinkToPdf\|using Haukcode" --include="*.cs" .
# Find converter usage
grep -r "SynchronizedConverter\|BasicConverter\|HtmlToPdfDocument" --include="*.cs" .
# Find native library loading
grep -r "wkhtmltopdf\|libwkhtmltox" --include="*.cs" --include="*.csproj" .
# Find GlobalSettings/ObjectSettings usage
grep -r "GlobalSettings\|ObjectSettings\|MarginSettings" --include="*.cs" .
# Find DinkToPdf namespace usage
grep -r "using DinkToPdf\|using Haukcode" --include="*.cs" .
# Find converter usage
grep -r "SynchronizedConverter\|BasicConverter\|HtmlToPdfDocument" --include="*.cs" .
# Find native library loading
grep -r "wkhtmltopdf\|libwkhtmltox" --include="*.cs" --include="*.csproj" .
# Find GlobalSettings/ObjectSettings usage
grep -r "GlobalSettings\|ObjectSettings\|MarginSettings" --include="*.cs" .
現在の GlobalSettings および ObjectSettings 構成を文書化します。 削除可能なネイティブライブラリのロードコードを特定する。
コード更新タスク
1.DinkToPdf NuGet パッケージの削除 2.IronPdf NuGetパッケージをインストールする
- 名前空間のインポートを
DinkToPdfからIronPdfに更新します。 SynchronizedConverterをChromePdfRendererに置き換えます。HtmlToPdfDocumentパターンを直接メソッド呼び出しに変換するGlobalSettingsをRenderingOptionsに変換します。ObjectSettingsをRenderingOptionsに変換します。- プレースホルダー構文を更新します (
[page]→[toPage]→{total-pages}) 9.起動時にIronPDFライセンスの初期化を追加する
インフラストラクチャのクリーンアップタスク
1.ネイティブバイナリの削除 (libwkhtmltox.*) 2.ネイティブライブラリの読み込みコードを削除 3.CustomAssemblyLoadContextが存在する場合は削除してください。 4.依存性注入の更新(シングルトンは不要になりました) 5.ネイティブバイナリのプラットフォーム検出コードの削除
移行後のテスト
移行後、これらの点を検証してください:
- HTMLからPDFへの変換テスト
- URLからPDFへの変換テスト
- ページ設定の確認(サイズ、向き、余白)
- プレースホルダーでヘッダーとフッターを確認する
- 実際のHTMLテンプレートでテスト
- 負荷テスト
IronPDFに移行する主な利点
Haukcode.DinkToPdfからIronPDFに移行することで、いくつかの重要な利点が得られます:
セキュリティ: CVE-2022-35583 (SSRF) およびパッチが適用されないその他の wkhtmltopdf の脆弱性を排除します。
最新のレンダリング エンジン: 2015 年に廃止された Qt WebKit の代わりに、積極的に更新されている Chromium を使用します。HTML5、CSS3、 JavaScript を完全にサポートします。
ネイティブ バイナリなし:プラットフォーム固有の DLL を管理する必要のない自己完結型ライブラリ。 Windows、Linux、macOSへの展開を簡素化します。
スレッド セーフティ:シングルトン要件はありません。リクエストごとのインスタンス化を含む任意のパターンで ChromePdfRenderer を自由に使用できます。
よりシンプルな API:複雑なドキュメント オブジェクトの構築の代わりに、直接メソッドを呼び出します (RenderUrlAsPdf())。
積極的な開発: .NET 10 と C# 14 の採用が 2026 年まで増加するにつれて、IronPDF の定期的な更新により、現在のおよび将来 for .NETバージョンとの互換性が確保されます。

