移行ガイド C#でDinkToPdfからIronPdfに移行する方法 カーティス・チャウ 公開日:2026年1月11日 IronPDF をダウンロード NuGet ダウンロード DLL ダウンロード Windows 版 無料トライアル LLM向けのコピー LLM向けのコピー LLM 用の Markdown としてページをコピーする ChatGPTで開く このページについてChatGPTに質問する ジェミニで開く このページについてGeminiに問い合わせる Grokで開く このページについてGrokに質問する 困惑の中で開く このページについてPerplexityに問い合わせる 共有する Facebook で共有 Xでシェア(Twitter) LinkedIn で共有 URLをコピー 記事をメールで送る DinkToPdfはwkhtmltopdfをラップし、そのセキュリティの脆弱性と技術的な制限をすべて受け継いでいます。 これらの問題を理解することは、移行の緊急性を評価する上で非常に重要です。 重大なセキュリティ問題 DinkToPdfは、wkhtmltopdfからパッチ未適用の重大なセキュリティ脆弱性を継承しています: 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 にて無料トライアル可能) DinkToPdfの使用状況を確認する ソリューションディレクトリで以下のコマンドを実行し、すべてのDinkToPdf参照を識別してください: # 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*" # 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*" SHELL 予想される画期的な変更 変更 DinkToPdf IronPDF インパクト コンバーター SynchronizedConverter(新しいPdfTools())。 ChromePdfRenderer よりシンプルなインスタンス化 ドキュメント HtmlToPdfDocument 直接メソッド呼び出し ドキュメントオブジェクトなし 設定 GlobalSettings +オブジェクト設定です。 レンダリングオプション` 単一オプションオブジェクト リターンタイプ バイト[] PdfDocument より強力なオブジェクト バイナリ libwkhtmltox.dll/so なし(マネージド) ネイティブファイルの削除 スレッドセーフ。 SynchronizedConverterが必要です。 デフォルトでスレッドセーフ よりシンプルなコード DI シングルトン必須 生涯 柔軟性 ステップごとの移行プロセス ステップ 1: NuGet パッケージを更新する DinkToPdfを削除し、IronPdfをインストールしてください: # Remove DinkToPdf dotnet remove package DinkToPdf # Install IronPDF dotnet add package IronPdf # Remove DinkToPdf dotnet remove package DinkToPdf # Install IronPDF dotnet add package IronPdf SHELL ステップ 2: ネイティブ バイナリの削除 プロジェクトからこれらのプラットフォーム固有のファイルを削除してください: `libwkhtmltox.dll (Windows) libwkhtmltox.so (Linux) libwkhtmltox.dylib (macOS) IronPdfにはネイティブの依存関係はありません。 ステップ 3: 名前空間参照の更新 DinkToPdf名前空間をIronPdfに置き換えてください: // Remove these using DinkToPdf; using DinkToPdf.Contracts; // Add this using IronPdf; // Remove these using DinkToPdf; using DinkToPdf.Contracts; // Add this using IronPdf; $vbLabelText $csharpLabel ステップ 4: ライセンスの設定 // Add at application startup (Program.cs or Global.asax) IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"; // Add at application startup (Program.cs or Global.asax) IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"; $vbLabelText $csharpLabel 完全な API 移行のリファレンス コア クラス マッピング DinkToPdf IronPDF ノート SynchronizedConverter(シンクロナイズド・コンバーター ChromePdfRenderer` デフォルトでスレッドセーフ BasicConverter ChromePdfRenderer 同じクラスでよりシンプルに PdfTools 不要 内部化 HtmlToPdfDocument 不要 直接メソッド呼び出し グローバル設定 レンダリングオプション レンダラーの一部 オブジェクト設定 レンダリングオプション レンダラーの一部 マージン設定 個々のマージン特性 MarginTop、MarginBottomなど。 グローバル設定のマッピング DinkToPdf グローバル設定 IronPDF 同等物 ColorMode = ColorMode.Color です。 デフォルト(常にカラー) Orientation = Orientation.Portrait です。 PaperOrientation = PdfPaperOrientation.Portrait です。 Orientation = Orientation.Landscape. PaperOrientation = PdfPaperOrientation.Landscape です。 PaperSize = PaperKind.A4. PaperSize = PdfPaperSize.A4. Margins = new MarginSettings(). 個々のマージン特性 マージン設定のマッピング DinkToPdf のマージン IronPDF 同等物 マージン.トップ = 10 マージントップ = 10 Margins.Bottom = 10. MarginBottom = 10. Margins.Left = 15. MarginLeft = 15. Margins.Right = 15. MarginRight = 15. コード移行の例 基本的な HTML から PDF 基本的な変換は、DinkToPdfの冗長な設定からIronPdfの合理化されたAPIへの劇的な単純化を示しています。 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 = "<h1>Hello World</h1><p>This is a PDF from HTML.</p>", WebSettings = { DefaultEncoding = "utf-8" } } } }; 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 = "<h1>Hello World</h1><p>This is a PDF from HTML.</p>", WebSettings = { DefaultEncoding = "utf-8" } } } }; byte[] pdf = converter.Convert(doc); File.WriteAllBytes("output.pdf", pdf); } } $vbLabelText $csharpLabel IronPDFの実装:。 // NuGet: Install-Package IronPdf using IronPdf; using System; class Program { static void Main() { var renderer = new ChromePdfRenderer(); var pdf = renderer.RenderHtmlAsPdf("<h1>Hello World</h1><p>This is a PDF from HTML.</p>"); pdf.SaveAs("output.pdf"); } } // NuGet: Install-Package IronPdf using IronPdf; using System; class Program { static void Main() { var renderer = new ChromePdfRenderer(); var pdf = renderer.RenderHtmlAsPdf("<h1>Hello World</h1><p>This is a PDF from HTML.</p>"); pdf.SaveAs("output.pdf"); } } $vbLabelText $csharpLabel IronPdfは20行のDinkToPdf設定を4行に減らします。 SynchronizedConverterも、PdfToolsも、HtmlToPdfDocumentも、ObjectSettingsもありません。 その他のオプションについては、HTML to PDF documentationを参照してください。 URLからPDFへの変換 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); } } $vbLabelText $csharpLabel 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"); } } $vbLabelText $csharpLabel IronPDFのRenderUrlAsPdfは入れ子になったObjectSettings.Pageの設定を直接メソッド呼び出しに置き換えます。 その他のオプションについては、URL to PDF documentationを参照してください。 ランドスケープと余白のカスタム設定 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.A4, Margins = new MarginSettings { Top = 10, Bottom = 10, Left = 15, Right = 15 } }, Objects = { new ObjectSettings() { HtmlContent = "<h1>Custom PDF</h1><p>Landscape orientation with custom margins.</p>", WebSettings = { DefaultEncoding = "utf-8" } } } }; byte[] pdf = converter.Convert(doc); File.WriteAllBytes("custom.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.A4, Margins = new MarginSettings { Top = 10, Bottom = 10, Left = 15, Right = 15 } }, Objects = { new ObjectSettings() { HtmlContent = "<h1>Custom PDF</h1><p>Landscape orientation with custom margins.</p>", WebSettings = { DefaultEncoding = "utf-8" } } } }; byte[] pdf = converter.Convert(doc); File.WriteAllBytes("custom.pdf", pdf); } } $vbLabelText $csharpLabel IronPDFの実装:。 // 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("<h1>Custom PDF</h1><p>Landscape orientation with custom margins.</p>"); pdf.SaveAs("custom.pdf"); } } // 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("<h1>Custom PDF</h1><p>Landscape orientation with custom margins.</p>"); pdf.SaveAs("custom.pdf"); } } $vbLabelText $csharpLabel IronPDFのRenderingOptionsはGlobalSettingsとMarginSettingsの両方を置き換え、統一された流暢なAPIを提供します。 その他の設定オプションについては、rendering options documentationを参照してください。 重要な移行に関する注意事項 ネイティブ バイナリの削除 最も重要なクリーンアップステップは、wkhtmltopdfネイティブバイナリを削除することです。 IronPDFにはネイティブの依存関係はありません: # Delete native binaries rm libwkhtmltox.* 2>/dev/null # Delete native binaries rm libwkhtmltox.* 2>/dev/null SHELL シングルトンは必要ありません DinkToPdf の SynchronizedConverter は、クラッシュを避けるためにシングルトンとして登録する必要がありました。 IronPDFのChromePdfRendererはDIのライフタイムに関係なくスレッドセーフです: //DinkToPdf- MUST be singleton services.AddSingleton(typeof(IConverter), new SynchronizedConverter(new PdfTools())); //IronPDF- any lifetime works services.AddScoped<ChromePdfRenderer>(); // Or just create inline: var renderer = new ChromePdfRenderer(); //DinkToPdf- MUST be singleton services.AddSingleton(typeof(IConverter), new SynchronizedConverter(new PdfTools())); //IronPDF- any lifetime works services.AddScoped<ChromePdfRenderer>(); // Or just create inline: var renderer = new ChromePdfRenderer(); $vbLabelText $csharpLabel リチャーリターンタイプ DinkToPdfはbyte[]を返します。 IronPDFは操作可能なPdfDocumentを返します: //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"); //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"); $vbLabelText $csharpLabel 完全なCSS3サポート DinkToPdfでは失敗するモダンレイアウトもIronPdfでは完璧に機能します: //DinkToPdf- doesn't work (wkhtmltopdf uses 2015 WebKit) var html = "<div style='display: flex;'>...</div>"; // Broken! //IronPDF- full support (modern Chromium) var html = @" <div style='display: flex; justify-content: space-between;'> <div>Left</div> <div>Right</div> </div>"; var pdf = renderer.RenderHtmlAsPdf(html); // Works! //DinkToPdf- doesn't work (wkhtmltopdf uses 2015 WebKit) var html = "<div style='display: flex;'>...</div>"; // Broken! //IronPDF- full support (modern Chromium) var html = @" <div style='display: flex; justify-content: space-between;'> <div>Left</div> <div>Right</div> </div>"; var pdf = renderer.RenderHtmlAsPdf(html); // Works! $vbLabelText $csharpLabel 移行後のチェックリスト コードの移行が完了したら、以下を確認してください: すべてのユニットテストを実行して、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ドキュメント. HTMLからPDFへのチュートリアル。 APIリファレンス. NuGetパッケージ。 ライセンスオプション。 DinkToPdfからIronPdfに移行することで、重大なセキュリティ脆弱性(CVE-2022-35583)、スレッドセーフのクラッシュ、ネイティブバイナリの展開の複雑さ、時代遅れのCSSレンダリングがなくなります。 最新のChromiumエンジンへの移行は、完全なCSS3サポート、信頼性の高いJavaScriptの実行、積極的にメンテナンスされるライブラリから得られる安心感を提供します。 カーティス・チャウ 今すぐエンジニアリングチームとチャット テクニカルライター Curtis Chauは、カールトン大学でコンピュータサイエンスの学士号を取得し、Node.js、TypeScript、JavaScript、およびReactに精通したフロントエンド開発を専門としています。直感的で美しいユーザーインターフェースを作成することに情熱を持ち、Curtisは現代のフレームワークを用いた開発や、構造の良い視覚的に魅力的なマニュアルの作成を楽しんでいます。開発以外にも、CurtisはIoT(Internet of Things)への強い関心を持ち、ハードウェアとソフトウェアの統合方法を模索しています。余暇には、ゲームをしたりDiscordボットを作成したりして、技術に対する愛情と創造性を組み合わせています。 関連する記事 公開日 2026年2月1日 C#でZetPDFからIronPDFに移行する方法 この完全なC#ガイドでZetPDFからIronPDFへの移行をマスターしてください。座標ベースのライブラリから最新のHTML-to-PDFソリューションに切り替えます。HTML変換、PDFのマージ、PDFSharpの依存関係の削除のコード例が含まれています。 詳しく読む 公開日 2026年2月1日 C#でScryber.CoreからIronPDFに移行する方法 この完全なC#ガイドでScryber.CoreからIronPDFへの移行をマスターしてください。カスタムXML/HTMLパースから最新のChromiumレンダラーに切り替えます。HTML変換、URLレンダリング、独自のバインディングを置き換えるコード例を含みます。 詳しく読む 公開日 2026年2月1日 C#でXFINIUM.PDFからIronPdfへ移行する方法 この完全なC#ガイドでXFINIUM.PDFからIronPDFへの移行をマスターしてください。座標ベースの手動ポジショニングから宣言的なHTML/CSSレンダリングに切り替えます。グラフィックスプリミティブの置き換えと自動レイアウトのコード例を含みます。 詳しく読む C#でDynamicPDFからIronPDFに移行する方法C#でCraftMyPDFからIronPDFに移...
公開日 2026年2月1日 C#でZetPDFからIronPDFに移行する方法 この完全なC#ガイドでZetPDFからIronPDFへの移行をマスターしてください。座標ベースのライブラリから最新のHTML-to-PDFソリューションに切り替えます。HTML変換、PDFのマージ、PDFSharpの依存関係の削除のコード例が含まれています。 詳しく読む
公開日 2026年2月1日 C#でScryber.CoreからIronPDFに移行する方法 この完全なC#ガイドでScryber.CoreからIronPDFへの移行をマスターしてください。カスタムXML/HTMLパースから最新のChromiumレンダラーに切り替えます。HTML変換、URLレンダリング、独自のバインディングを置き換えるコード例を含みます。 詳しく読む
公開日 2026年2月1日 C#でXFINIUM.PDFからIronPdfへ移行する方法 この完全なC#ガイドでXFINIUM.PDFからIronPDFへの移行をマスターしてください。座標ベースの手動ポジショニングから宣言的なHTML/CSSレンダリングに切り替えます。グラフィックスプリミティブの置き換えと自動レイアウトのコード例を含みます。 詳しく読む