Haukcode.DinkToPdfからIronPdfへの移行
Haukcode.DinkToPdfからIronPdfへの移行:完全なC#開発者ガイド
Haukcode.DinkToPdfは、.NETアプリケーションにHTMLからPDFへの変換機能を提供するwkhtmltopdfバイナリをラップした、以前人気のあったDinkToPdfライブラリのフォークです。 Haukcode.DinkToPdfは、オリジナルのDinkToPdfプロジェクトが停滞した後も.NET Coreとの互換性を維持していますが、上流の依存関係から重大なセキュリティ脆弱性を引き継いでいます。 基礎となるwkhtmltopdfプロジェクトは2023年1月にアーカイブされたため、これらの脆弱性にパッチが適用されることはありません。
このガイドでは、PDF生成ワークフローからセキュリティリスクを排除する必要のあるプロの.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(ジャバスクリプト | 限定的で安全ではない | フル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 RenderingOptionsIRON VB CONVERTER ERROR developers@ironsoftware.comステップ 4: ライセンスの初期化
アプリケーション起動時のライセンス初期化を追加します:
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"コード移行の例
基本的なHTMLからPDFへの変換
最も基本的な操作は、これらの.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);
}
}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 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");
}
}IRON VB CONVERTER ERROR developers@ironsoftware.comHaukcode.DinkToPdfは、PdfToolsでSynchronizedConverterを作成し、入れ子になったGlobalSettingsとObjectsでHtmlToPdfDocumentを構成し、HtmlContentでObjectSettingsを追加し、converter.Convert()を呼び出す必要があります。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);
}
}IRON VB CONVERTER ERROR developers@ironsoftware.comIronPDFのアプローチ:
// 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");
}
}IRON VB CONVERTER ERROR developers@ironsoftware.comHaukcode.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);
}
}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.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");
}
}IRON VB CONVERTER ERROR developers@ironsoftware.comHaukcode.DinkToPdfは、GlobalSettings内の設定を、別のMarginSettingsオブジェクトでネストします。 IronPDFはPaperSize、PaperOrientation、そして個々のマージンプロパティのような明確な名前のRenderingOptionsプロパティを直接提供します。
Haukcode.DinkToPdf APIからIronPdfへのマッピングリファレンス
このマッピングは、APIと同等のものを直接示すことで、移行を加速します:
コンバーター・クラスのマッピング
| Haukcode.DinkToPdf | IronPDF | ノート |
|---|---|---|
SynchronizedConverter(シンクロナイズド・コンバーター | <コード>ChromePdfRenderer</コード | スレッドセーフ、シングルトン不要 |
| <コード>BasicConverter</コード | <コード>ChromePdfRenderer</コード | 同じクラスで両方を処理 |
| <コード>PdfTools</コード | 該当なし | 不要 |
| <コード>IConverter</コード | 該当なし | レンダラーを直接使用する |
ドキュメント構成マッピング
| Haukcode.DinkToPdf | IronPDF | ノート |
|---|---|---|
| <コード>HtmlToPdfDocument</コード | メソッドコール | RenderHtmlAsPdf()を直接使用してください。 |
| <コード>グローバル設定</コード | <コード>レンダリングオプション</コード | レンダリング前の設定 |
| <コード>オブジェクト設定</コード | <コード>レンダリングオプション</コード | 1つにまとめる |
converter.Convert(doc). | renderer.RenderHtmlAsPdf(html). | PdfDocument<//code> を返します。 |
GlobalSettingsプロパティのマッピング
| GlobalSettings プロパティ | IronPDF プロパティ | ノート |
|---|---|---|
カラーモード | RenderingOptions.GrayScale(レンダリングオプション.グレイスケール | ブール値、グレースケールにはtrueを設定します。 |
| <コード>オリエンテーション</コード | <コード>RenderingOptions.PaperOrientation</コード | ポートレートまたは風景 |
| <コード>用紙サイズ</コード | <コード>RenderingOptions.PaperSize</コード | PdfPaperSize列挙型を使用してください。 |
| <コード>マージン.トップ</コード | RenderingOptions.MarginTop。 | 単位:ミリメートル |
| <コード>マージン.ボトム</コード | RenderingOptions.MarginBottom。 | 単位:ミリメートル |
| <コード>マージン.左</コード | RenderingOptions.MarginLeft(レンダリングオプション.マージンレフト)。 | 単位:ミリメートル |
| <コード>マージン.Right</コード | <コード>RenderingOptions.MarginRight</コード | 単位:ミリメートル |
オブジェクト設定プロパティのマッピング
| オブジェクト設定プロパティ | IronPDF 同等物 | ノート |
|---|---|---|
| <コード>HtmlContent</コード | RenderHtmlAsPdf()の最初のパラメータ | 直接パラメータ |
| <コード>ページ</コード> (URL) | renderer.RenderUrlAsPdf(url)のようにします。 | 別メソッド |
HeaderSettings.Right = "[ページ]"。 | TextHeader.RightText = "{page}". | さまざまなプレースホルダ構文 |
プレースホルダーの構文の移行
| Haukcode.DinkToPdf | IronPDF | ノート |
|---|---|---|
| <コード>[ページ]</コード | <コード>{ページ}</コード | 現在のページ番号 |
| <コード>[toPage]</コード | <コード>{総ページ数}</コード | 総ページ数 |
| <コード>[日付]</コード | {date}<//code> | 現在の日付 |
一般的な移行の問題と解決策
課題 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!IRON VB CONVERTER ERROR developers@ironsoftware.com課題 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 directlyvar pdf = renderer.RenderHtmlAsPdf(html);
byte[] bytes = pdf.BinaryData; // Get bytes
pdf.SaveAs("output.pdf"); // Or save directlyIRON VB CONVERTER ERROR developers@ironsoftware.com課題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}"
};IRON VB CONVERTER ERROR developers@ironsoftware.comHaukcode.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<//code> と ObjectSettings<//code> の設定を文書化します。 削除可能なネイティブライブラリのロードコードを特定する。
コード更新タスク
1.DinkToPdf NuGet パッケージの削除 2.IronPdf NuGetパッケージをインストールする 3.名前空間のインポートをDinkToPdfからIronPdfに更新してください。 4.SynchronizedConverterをChromePdfRendererに置き換えてください。 5.HtmlToPdfDocumentパターンを直接メソッド呼び出しに変換する 6.GlobalSettingsをRenderingOptionsに変換してください。 7.ObjectSettings<//code> を RenderingOptions<//code> に変換してください。 8.プレースホルダの構文を更新 ([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())。
アクティブ開発:2026年まで.NET 10とC# 14の採用が増加する中、IronPDFの定期的なアップデートは現在と将来の.NETバージョンとの互換性を保証します。
結論
Haukcode.DinkToPdfは、wkhtmltopdfベースのPDF生成のための.NET Core互換性を維持し、DinkToPdfプロジェクトの継続として機能しました。 しかし、基礎となるwkhtmltopdfバイナリは2023年にアーカイブされ、CVE-2022-35583のような重大なセキュリティ脆弱性が永久にパッチされないままになっている。 毎日アプリケーションがHaukcode.DinkToPdfを使い続けることで、インフラはSSRF攻撃のリスクにさらされ続けます。
IronPdfは最新のウェブ標準を扱うChromiumレンダリングエンジンを搭載し、現代的で安全な代替手段を提供します。 DinkToPdfのパッケージとネイティブ・バイナリを削除し、ドキュメントの作成を直接レンダリングする方法に置き換え、プレースホルダーの構文を更新します。
IronPDFの無料トライアルで今すぐ移行を開始し、wkhtmltopdfベースのソリューションに内在するセキュリティの脆弱性を排除しましょう。
包括的な実装ガイダンスについては、IronPDFドキュメントとチュートリアルをご覧ください。






