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

C#でDinkToPdfからIronPdfに移行する方法

DinkToPdfからIronPdfへの移行:完全なC#移行ガイド

DinkToPdfは、HTMLからPDFへの変換を可能にする、wkhtmltopdfのオープンソース.NETラッパーです。 しかし、基盤となるwkhtmltopdfプロジェクトは2020年に放棄され、CVE-2022-35583(Server-Side Request Forgery)を含む重大なセキュリティ脆弱性が未パッチのまま残されています。 DinkToPdfは、プロダクション・クラッシュの原因となるスレッドセーフの問題や、モダンなCSSをサポートしない時代遅れのWebKitレンダリングエンジンと相まって、プロダクション・アプリケーションに重大なリスクをもたらします。 この包括的なガイドでは、DinkToPdfからIronPdf-最新のChromiumレンダリングとネイティブバイナリ依存のないスレッドセーフな.NET PDFライブラリへの移行パスをステップバイステップで提供します。

なぜDinkToPdfからIronPDFに移行するのですか? DinkToPdfはwkhtmltopdfをラップし、そのセキュリティの脆弱性と技術的な制限をすべて受け継いでいます。 これらの問題を理解することは、移行の緊急性を評価する上で非常に重要です。 ### 重大なセキュリティ問題 DinkToPdfは、wkhtmltopdfからパッチ未適用の重大なセキュリティ脆弱性を継承しています: 1.**CVE-2022-35583(SSRF)**:攻撃者に内部ネットワークリソースへのアクセスを許すサーバーサイドリクエストフォージェリ 2.**見捨てられたプロジェクト**: wkhtmltopdfは2020年からメンテナンスされていません。 3.**セキュリティパッチがない**: 既知の脆弱性が修正されることはありません。 ### 技術的な問題 | 問題 |インパクト| |-------|--------| |**スレッドセーフティ**|SynchronizedConverterが本番環境で並行負荷がかかるとクラッシュする| |**ネイティブバイナリ**|プラットフォーム固有の libwkhtmltox バイナリを使用した複雑なデプロイメント| |**CSSの制限事項**|Flexbox、Grid、モダンCSSのサポートはありません。| |**JavaScript**(ジャバスクリプト|一貫性のない実行、タイムアウト| |**レンダリング**。|旧式のWebKitエンジン(2015年頃)| |**メンテナンス**|最終更新: 2018| ### アーキテクチャの比較 |アスペクト|DinkToPdf|IronPDF| |--------|-----------|---------| |**セキュリティ**。|CVE-2022-35583 (SSRF)、パッチ未適用|既知の脆弱性なし| |**レンダリングエンジン** |時代遅れのWebKit(2015年)|モダンChromium| |**スレッドセーフティ**|同時使用時のクラッシュ|完全スレッドセーフ| |**ネイティブの依存関係**|プラットフォーム固有のバイナリ|純粋なNuGetパッケージ| | **CSSサポート** |フレックスボックス/グリッドなし|完全なCSS3| |**JavaScript**(ジャバスクリプト|限定的で一貫性がない|フルサポート| |**メンテナンス**|見捨てられた (2018)|積極的なメンテナンス| ### 機能比較 | フィーチャー |DinkToPdf|IronPDF| |---------|-----------|---------| |HTMLからPDFへ|✅ (古いエンジン)|✅ (Chromium)| |URLからPDFへ|✅|✅| |カスタムマージン|✅|✅| | ヘッダー/フッター |✅ (限定)|✅ (完全なHTML)| |CSS3|❌ 制限付き|フル| |フレックスボックス/グリッド|❌|✅| |JavaScript|⚠️ 有限会社|フル| |PDF操作|❌|✅| |フォーム入力|❌|✅| |デジタル署名|❌|✅| |暗号化|❌|✅| | 透かし |❌|✅| |マージ/スプリット|❌|✅| ## 移行前の準備 ### 前提条件 あなたの環境がこれらの要件を満たしていることを確認してください: - .NET Framework 4.6.2+または.NET Core 3.1 / .NET 5-9 - Visual Studio 2019+またはC#拡張機能付きVS Code - NuGetパッケージマネージャへのアクセス - IronPDFライセンスキー ([ironpdf.com](https://ironpdf.com/licensing/) にて無料トライアル可能) ### DinkToPdfの使用状況を確認する

ソリューションディレクトリで以下のコマンドを実行し、すべてのDinkToPdf参照を識別してください: ```bash # Find allDinkToPdfusages in your codebase grep -r "using DinkToPdf" --include="*.cs" . grep -r "SynchronizedConverter\|HtmlToPdfDocument\|ObjectSettings" --include="*.cs" . # Find NuGet package references grep -r "DinkToPdf" --include="*.csproj" . # Find wkhtmltopdf binaries find . -name "libwkhtmltox*" ``` ### 予想される画期的な変更

|変更|DinkToPdf|IronPDF|インパクト| |--------|-----------|---------|--------| |**コンバーター**|`SynchronizedConverter(新しいPdfTools())`。|<コード>ChromePdfRenderer|<コード>HtmlToPdfDocument|`GlobalSettings` +<コード>オブジェクト設定レンダリングオプション|<コード>バイト[]PdfDocumentバイナリlibwkhtmltox.dll/solibwkhtmltox.dll (Windows) - <コード>libwkhtmltox.so (Linux) - <コード>libwkhtmltox.dylib (macOS) IronPdfにはネイティブの依存関係はありません。 ### ステップ 3: 名前空間参照の更新 DinkToPdf名前空間をIronPdfに置き換えてください: ```csharp // Remove these using DinkToPdf; using DinkToPdf.Contracts; // Add this using IronPdf; ``` ### ステップ 4: ライセンスの設定 ```csharp // Add at application startup (Program.cs or Global.asax) IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"; ``` ## 完全な API 移行のリファレンス ### コア クラス マッピング |DinkToPdf|IronPDF|ノート| |-----------|---------|-------| |`SynchronizedConverter`(シンクロナイズド・コンバーター|<コード>ChromePdfRendererBasicConverterChromePdfRendererPdfToolsHtmlToPdfDocumentグローバル設定レンダリングオプションオブジェクト設定レンダリングオプションマージン設定 ```csharp // 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 = "

Hello World

This is a PDF from HTML.

", WebSettings = { DefaultEncoding = "utf-8" } } } }; byte[] pdf = converter.Convert(doc); File.WriteAllBytes("output.pdf", pdf); } } ``` **IronPDFの実装:**。 ```csharp // NuGet: Install-Package IronPdf using IronPdf; using System; class Program { static void Main() { var renderer = new ChromePdfRenderer(); var pdf = renderer.RenderHtmlAsPdf("

Hello World

This is a PDF from HTML.

"); pdf.SaveAs("output.pdf"); } } ``` IronPdfは20行のDinkToPdf設定を4行に減らします。 `SynchronizedConverter`も、`PdfTools`も、`HtmlToPdfDocument`も、`ObjectSettings`もありません。 その他のオプションについては、[HTML to PDF documentation](https://ironpdf.com/how-to/html-file-to-pdf/)を参照してください。 ### URLからPDFへの変換 **DinkToPdfの実装:** ```csharp // 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); } } ``` **IronPDFの実装:**。 ```csharp // 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"); } } ``` IronPDFの`RenderUrlAsPdf`は入れ子になった`ObjectSettings.Page`の設定を直接メソッド呼び出しに置き換えます。 その他のオプションについては、[URL to PDF documentation](https://ironpdf.com/how-to/url-to-pdf/)を参照してください。 ### ランドスケープと余白のカスタム設定 **DinkToPdfの実装:** ```csharp // 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.A4, Margins = new MarginSettings { Top = 10, Bottom = 10, Left = 15, Right = 15 } }, Objects = { new ObjectSettings() { HtmlContent = "

Custom PDF

Landscape orientation with custom margins.

", WebSettings = { DefaultEncoding = "utf-8" } } } }; byte[] pdf = converter.Convert(doc); File.WriteAllBytes("custom.pdf", pdf); } } ``` **IronPDFの実装:**。 ```csharp // NuGet: Install-Package IronPdf using IronPdf; using IronPdf.Rendering; using System; class Program { static void Main() { var renderer = new ChromePdfRenderer(); renderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Landscape; renderer.RenderingOptions.MarginTop = 10; renderer.RenderingOptions.MarginBottom = 10; renderer.RenderingOptions.MarginLeft = 15; renderer.RenderingOptions.MarginRight = 15; var pdf = renderer.RenderHtmlAsPdf("

Custom PDF

Landscape orientation with custom margins.

"); pdf.SaveAs("custom.pdf"); } } ``` IronPDFの`RenderingOptions`は`GlobalSettings`と`MarginSettings`の両方を置き換え、統一された流暢なAPIを提供します。 その他の設定オプションについては、[rendering options documentation](https://ironpdf.com/tutorials/)を参照してください。 ## 重要な移行に関する注意事項 ### ネイティブ バイナリの削除 最も重要なクリーンアップステップは、wkhtmltopdfネイティブバイナリを削除することです。 IronPDFにはネイティブの依存関係はありません: ```bash # Delete native binaries rm libwkhtmltox.* 2>/dev/null ``` ### シングルトンは必要ありません。 DinkToPdf の SynchronizedConverter は、クラッシュを避けるためにシングルトンとして登録する必要がありました。 IronPDFの`ChromePdfRenderer`はDIのライフタイムに関係なくスレッドセーフです: ```csharp //DinkToPdf- MUST be singleton services.AddSingleton(typeof(IConverter), new SynchronizedConverter(new PdfTools())); //IronPDF- any lifetime works services.AddScoped(); // Or just create inline: var renderer = new ChromePdfRenderer(); ``` ### リチャーリターンタイプ DinkToPdfは`byte[]`を返します。 IronPDFは操作可能な`PdfDocument`を返します: ```csharp //DinkToPdfreturns byte[] byte[] pdf = converter.Convert(doc); File.WriteAllBytes("output.pdf", pdf); return File(pdf, "application/pdf"); //IronPDFreturns PdfDocument var pdf = renderer.RenderHtmlAsPdf(html); pdf.SaveAs("output.pdf"); return File(pdf.BinaryData, "application/pdf"); ``` ### 完全なCSS3サポート。 DinkToPdfでは失敗するモダンレイアウトもIronPdfでは完璧に機能します: ```csharp //DinkToPdf- doesn't work (wkhtmltopdf uses 2015 WebKit) var html = "
...
"; // Broken! //IronPDF- full support (modern Chromium) var html = @"
Left
Right
"; var pdf = renderer.RenderHtmlAsPdf(html); // Works! ``` ## 移行後のチェックリスト コードの移行が完了したら、以下を確認してください: - [すべての単体テストを実行し、PDF生成が正しく動作することを確認する。 - [マルチスレッドシナリオのテスト(DinkToPdfでクラッシュしました。) - [PDF出力の品質を比較する(IronPDFのChromiumレンダリングが優れている) - [ ] CSSレンダリングの検証(Flexbox/Gridが動作するようになりました) - [ ] JavaScriptの実行テスト(IronPDFで信頼できるもの) - [ ] CI/CDパイプラインを更新してwkhtmltopdfのインストールを削除する - [ ] セキュリティ・スキャンがパスしたことを確認する(CVE-2022-35583 フラグがなくなったこと)。 - [ ] Docker/デプロイスクリプトからネイティブバイナリデプロイメントを削除する ## PDFインフラストラクチャの将来性を確保する

.NET 10が目前に迫り、C# 14では新しい言語機能が導入されるため、積極的にメンテナンスされているPDFライブラリを選択することで、長期的な互換性を確保できます。 IronPDFの最新のChromiumエンジンは定期的なアップデートを受けていますが、DinkToPdfの放棄されたwkhtmltopdfは2015年の機能のまま凍結されています。 ## その他のリソース - [IronPDFドキュメント](https://ironpdf.com/docs/). - [HTMLからPDFへのチュートリアル](https://ironpdf.com/tutorials/)。 - [APIリファレンス](https://ironpdf.com/object-reference/api/). - [NuGetパッケージ](https://www.nuget.org/packages/IronPdf/)。 - [ライセンスオプション](https://ironpdf.com/licensing/)。 --- DinkToPdfからIronPdfに移行することで、重大なセキュリティ脆弱性(CVE-2022-35583)、スレッドセーフのクラッシュ、ネイティブバイナリの展開の複雑さ、時代遅れのCSSレンダリングがなくなります。 最新のChromiumエンジンへの移行は、完全なCSS3サポート、信頼性の高いJavaScriptの実行、積極的にメンテナンスされるライブラリから得られる安心感を提供します。
カーティス・チャウ
テクニカルライター

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

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