How to use Java Script With HTML to PDF using C#
Haukcode.DinkToPdf は、かつて人気のあった DinkToPdf ライブラリのコミュニティフォークであり、wkhtmltopdf バイナリをラップして .NET アプリケーション用に HTML を PDF に変換します。 フォークは後にHaukcode.WkHtmlToPdfDotNetに改名され、最新リリース1.5.95は2024年10月22日にLGPL-3.0-or-laterの下で公開されました。 フォークはオリジナルのDinkToPdf(1.0.8、2017年4月18日)が放棄された後もNuGet上でパッケージを存続させましたが、依然として親と同じアーカイブされたwkhtmltopdfバイナリに依存しています。 wkhtmltopdf GitHub組織全体は2024年7月10日にアーカイブされたため、上流の問題は修正されません。
このガイドはHaukcode.DinkToPdf / Haukcode.WkHtmlToPdfDotNetからIronPDFへの移行パスを提供し、.NET開発者がアーカイブされたwkhtmltopdfバイナリを移行するためのステップバイステップの手順、コード比較、実用的な例を含みます。
セキュリティアドバイザリ: CVE-2022-35583
Haukcode.DinkToPdf は、その上流の wkhtmltopdf バイナリに対して出されたセキュリティアドバイザリを継承しています。
CVE-2022-35583 — wkhtmltopdf 0.12.6 に対する SSRF アドバイザリ
サーバーサイドリクエストフォージェリ (SSRF) アドバイザリが wkhtmltopdf 0.12.6 に対して公開されています (NVD の CVSS 9.8; 上流の wkhtmltopdf プロジェクトは、これをライブラリのバグではなく、アプリケーション側の入力サニタイズの問題と見なしています)。 いずれにせよ、パッチは適用されません — 上流はアーカイブ済みです。 公開された議論で指摘された典型的な暴露パターンには以下が含まれます。
- 攻撃ベクトル: 信頼されていない HTML コンテンツが変換中に内部リソースをフェッチする原因となる可能性があります
- AWSメタデータ:
http://169.254.169.254へのリクエストは、レンダラがEC2上で実行されている場合、インスタンスメタデータを返す可能性があります。 - 内部ネットワークアクセス: 内部サービスがレンダリングホストから到達可能である可能性があります
- ローカルファイルの包含:
file://プロトコルを介してローカルファイルを読み取ることができるかもしれません。
上流パッチは期待されていません — wkhtmltopdf リポジトリは 2023 年 1 月 2 日にアーカイブされ、最後のリリース (0.12.6) は 2020 年 6 月です。
IronPDFvs Haukcode.DinkToPdf:機能比較
アーキテクチャの違いを理解することは、技術的な意思決定者が移行への投資を評価するのに役立ちます:
| アスペクト | Haukcode.DinkToPdf | IronPDF |
|---|---|---|
| 基盤エンジン | wkhtmltopdf (QtWebKit フォーク、約 2015) | モダンChromium |
| セキュリティステータス | CVE-2022-35583 アドバイザリ (未修正/上流で争われている) | 既知の重大な CVE なし |
| プロジェクトステータス | コミュニティフォーク; 上流の wkhtmltopdf はアーカイブされました | 積極的なメンテナンス |
| HTML5/CSS3。 | 現代的な Flexbox/Grid なし | 完全なCSS3 |
| JavaScript(JavaScript | 限定的で一貫性がない | フルサポート |
| ネイティブバイナリ | プラットフォームごとのlibwkhtmltox.dll/.so/.dylib |
管理された NuGet パッケージ |
| スレッドセーフティ | SynchronizedConverterが呼び出しをシリアライズします |
スレッドセーフ設計 |
| サポート | コミュニティ | プロフェッショナルサポート |
| 更新情報 | フォークの最新リリース 1.5.95 (2024 年 10 月 22 日); 上流の wkhtmltopdf 0.12.6 (2020 年 6 月) | 定期リリース |
| ライセンス | LGPL-3.0-or-later (フォーク) / MIT (オリジナル DinkToPdf) | 無料トライアル付き商用 |
クイックスタート: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は、File.WriteAllBytes()でファイルに手動で書き込みます。
IronPDFはこれを3行に簡略化: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はObjectSettings.PageでURLを使用した同じドキュメント構築パターンを使用します。 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は、別のGlobalSettings内に設定をネストします。 IronPDFは、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]" |
{page} |
プレースホルダーの構文の移行
| Haukcode.DinkToPdf | IronPDF |
|---|---|
[page] |
{page} |
[toPage] |
{total-pages} |
[date] |
{date} |
一般的な移行の問題と解決策
課題 1: シングルトンの要件
Haukcode.DinkToPdf: ネイティブwkhtmltopdfバイナリとのスレッドセーフティの問題のため、シングルトンとしてSynchronizedConverterが必要です。
Solution: 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:byte[]を返します。
Solution: 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.HtmlHeader = new HtmlHeaderFooter
{
HtmlFragment = "<span style='float:right'>Page {page} of {total-pages}</span>"
};
// Before (DinkToPdf)
HeaderSettings = { Right = "Page [page] of [toPage]" }
// After (IronPDF)
renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter
{
HtmlFragment = "<span style='float:right'>Page {page} of {total-pages}</span>"
};
' Before (DinkToPdf)
HeaderSettings = New With {.Right = "Page [page] of [toPage]"}
' After (IronPDF)
renderer.RenderingOptions.HtmlHeader = New HtmlHeaderFooter With {
.HtmlFragment = "<span style='float:right'>Page {page} of {total-pages}</span>"
}
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" .
現在のObjectSettingsの設定を文書化。 削除可能なネイティブライブラリのロードコードを特定する。
コード更新タスク
1.DinkToPdf NuGet パッケージの削除 2.IronPDFNuGet パッケージをインストールします
- 名前空間のインポートを
IronPdfに更新します。 ChromePdfRendererに置き換え。HtmlToPdfDocumentパターンを直接メソッド呼び出しに変換。RenderingOptionsに変換します。RenderingOptionsに変換します。- プレースホルダー構文を更新します(
[page]→{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: 複雑なドキュメントオブジェクトの構築の代わりに、直接的なメソッド呼び出し(RenderHtmlAsPdf(), RenderUrlAsPdf())を利用。
積極的な開発:IronPDFの定期的なリリースサイクルは、.NET Framework 4.6.2+、.NET Core 3.1+、および .NET 5/6/7/8/9/10 などの現在の .NET バージョンとの互換性を保ちます。

