比較

wkhtmltopdfとIronPDFの比較:技術比較ガイド

.NET開発者がHTMLをPDFに変換する必要がある場合、wkhtmltopdfはオープンソースの性質とコマンドラインのシンプルさにより、歴史的に人気のある選択肢です。 しかし、プロジェクトの放棄と重大なセキュリティの脆弱性により、多くのチームが最新の代替手段を評価するようになりました。 この技術比較ではwkhtmltopdfとIronPDFを比較することで、アーキテクトや開発者がセキュリティ体制、レンダリング機能、長期的な利用可能性における大きな違いを理解できるようにします。

wkhtmltopdfの理解

wkhtmltopdfはHTMLをPDF文書に変換するツールで、コマンドラインから直接操作でき、Qt WebKitを活用してHTMLコンテンツを処理します。 長年の活発な開発の間に、ライブラリはその自由なLGPLv3ライセンスとクロスプラットフォームで利用できることで人気を博しました。

しかし、wkhtmltopdfは現在、無視できない重要な課題を突きつけています:

  • プロジェクトの放棄: 最後の有意義なソフトウェアアップデートは2016年から2017年頃に行われました。
  • クリティカルなセキュリティ脆弱性: CVE-2022-35583 (CVSS 9.8 severity) は SSRF の脆弱性で、パッチが適用されていません。
  • 時代遅れのレンダリングエンジン: 2015年のQt WebKitに依存しています。
  • 限定的なモダンウェブサポート: CSSグリッドのサポートなし、壊れたFlexboxの実装、ES6+ JavaScriptなし。
  • エコシステムの停滞:すべての.NETラッパーライブラリ(DinkToPdf、Rotativa、TuesPechkin、WkHtmlToPdf-DotNet、NReco.PdfGenerator)は、これらの脆弱性を継承しています。

CVE-2022-35583セキュリティ危機

wkhtmltopdfのサーバサイドリクエストフォージェリ(SSRF)の脆弱性により、攻撃者は以下のことが可能になります:

  • 内部サービスへのアクセス: ファイアウォールの背後にある内部API、データベース、サービスにアクセスする。
  • 認証情報を盗む:クラウドメタデータエンドポイント(AWS、GCP、Azure)にアクセスし、IAM認証情報を盗む。
  • ポートスキャン: インフラストラクチャ内から内部ネットワークをスキャンする。
  • Data Exfiltration:細工したHTML/CSSを通して機密データを抽出する。

攻撃ベクトルは単純で、悪意のある HTML を PDF ジェネレーターに送信するものです:


<iframe src="http://169.254.169.254/latest/meta-data/iam/security-credentials/"></iframe>
<img src="http://internal-database:5432/admin"/>

<iframe src="http://169.254.169.254/latest/meta-data/iam/security-credentials/"></iframe>
<img src="http://internal-database:5432/admin"/>
HTML

wkhtmltopdfがこのHTMLをレンダリングする際、ファイアウォールやセキュリティコントロールをバイパスして、サーバーのネットワークコンテキストからこれらのURLを取得します。 プロジェクトが正式に放棄されたため、この脆弱性にパッチが適用されることはありません。

IronPDFの理解

IronPDFはwkhtmltopdfの欠点に対処する強固な代替手段を提供します。 積極的なメンテナンス、定期的なアップデート、最新のChromiumレンダリングエンジンへの依存により、IronPDFはセキュリティと最新のWeb標準への準拠の両方を提供します。

主な特徴は以下のとおりです:

  • 最新のChromiumエンジン: ES2024 JavaScriptを完全にサポートする最新のChromiumレンダリングエンジンを使用しています。
  • 既知のCVEはありません: 既知のセキュリティ脆弱性はゼロです。
  • 積極的な開発: セキュリティアップデートや機能強化を含む定期的なリリース。
  • 完全なCSSサポート:完全なCSSグリッド、Flexbox、およびモダンレイアウトシステム。
  • 包括的なPDFの機能:デジタル署名、PDF/Aコンプライアンス、PDF操作機能
  • プロフェッショナルサポート: 豊富なドキュメントと専用サポートチャンネル

機能比較

以下の表はwkhtmltopdfとIronPDFの基本的な違いを示しています:

フィーチャーwkhtmltopdfIronPDF
ライセンスについてLGPLv3 (無料)商用
レンダリングエンジンQt WebKit (2015)現在のChromiumエンジン
セキュリティステータスcve-2022-35583 重要 (9.8) パッチ未適用既知のCVEはありません
重要な最終更新2016-2017アクティブな開発
CSSグリッドサポートされていませんサポート対象
Flexbox(フレックスボックスブロークンサポート対象
ES6+のJavaScriptサポートされていませんサポート対象
非同期/待機サポートされていませんサポート対象
PDF操作サポートされていませんサポート対象
デジタル署名サポートされていませんサポート対象
PDF/Aコンプライアンスサポートされていませんサポート対象
プロフェッショナルサポートなし(断念)SLA付き商用
C#インテグレーションサードパーティのラッパー経由直接、定期的に更新

影響を受けるラッパー・ライブラリについて

wkhtmltopdfのすべての.NETラッパーは、同じ脆弱性を継承します:

ラッパー・ライブラリステータスセキュリティリスク
DinkToPdfを使用してください。中止重要
Rotativa(ロータティバ中止重要
TuesPechkinさん中止重要
WkHtmlToPdf-DotNet中止重要
NReco.PdfGenerator(英語wkhtmltopdfを使用重要

あなたのアプリケーションがこれらのライブラリのいずれかを使用している場合、CVE-2022-35583 の脆弱性があります。

APIアーキテクチャの違い

wkhtmltopdfラッパーとIronPDFのAPIパターンを比較すると、複雑さと使いやすさに大きな違いがあることがわかります。

wkhtmltopdf構成パターン

wkhtmltopdfラッパーは、ネスト化された設定コンフィギュレーションを持つドキュメントオブジェクトを作成する必要があります:

// NuGet: Install-Package WkHtmlToPdf-DotNet
using WkHtmlToPdfDotNet;
using WkHtmlToPdfDotNet.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>"
                }
            }
        };
        byte[] pdf = converter.Convert(doc);
        File.WriteAllBytes("output.pdf", pdf);
    }
}
// NuGet: Install-Package WkHtmlToPdf-DotNet
using WkHtmlToPdfDotNet;
using WkHtmlToPdfDotNet.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>"
                }
            }
        };
        byte[] pdf = converter.Convert(doc);
        File.WriteAllBytes("output.pdf", pdf);
    }
}
' NuGet: Install-Package WkHtmlToPdf-DotNet
Imports WkHtmlToPdfDotNet
Imports WkHtmlToPdfDotNet.Contracts
Imports System.IO

Class Program
    Shared 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 ObjectSettings() With {
                    .HtmlContent = "<h1>Hello World</h1><p>This is a PDF from HTML.</p>"
                }
            }
        }
        Dim pdf As Byte() = converter.Convert(doc)
        File.WriteAllBytes("output.pdf", pdf)
    End Sub
End Class
$vbLabelText   $csharpLabel

このパターンでは、PdfToolsSynchronizedConverterを作成し、GlobalSettingsObjectsコレクションでHtmlToPdfDocumentを構築し、手作業でバイト配列をファイルに書き込む必要があります。

IronPDF簡易パターン

IronPdfはChromePdfRendererクラスで合理的なアプローチを使用しています:

// 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");
    }
}
Imports IronPdf
Imports System

Class Program
    Shared Sub Main()
        Dim renderer = New ChromePdfRenderer()
        Dim pdf = renderer.RenderHtmlAsPdf("<h1>Hello World</h1><p>This is a PDF from HTML.</p>")
        pdf.SaveAs("output.pdf")
    End Sub
End Class
$vbLabelText   $csharpLabel

ChromePdfRendererクラスはネストした設定オブジェクトを排除し、組み込みの保存メソッドを持つPdfDocumentを返します。 包括的なHTML変換ガイダンスについては、HTML to PDFチュートリアルをご覧ください。

URLからPDFへの変換

ウェブページをPDFに変換することで、アプローチの複雑さの違いがわかります。

wkhtmltopdfの実装

wkhtmltopdfは、ObjectSettings内のPageプロパティを使用してURLを指定します:

// NuGet: Install-Package WkHtmlToPdf-DotNet
using WkHtmlToPdfDotNet;
using WkHtmlToPdfDotNet.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 WkHtmlToPdf-DotNet
using WkHtmlToPdfDotNet;
using WkHtmlToPdfDotNet.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 WkHtmlToPdf-DotNet
Imports WkHtmlToPdfDotNet
Imports WkHtmlToPdfDotNet.Contracts
Imports System.IO

Module Program
    Sub Main()
        Dim converter As New SynchronizedConverter(New PdfTools())
        Dim doc As New HtmlToPdfDocument() With {
            .GlobalSettings = New GlobalSettings() With {
                .ColorMode = ColorMode.Color,
                .Orientation = Orientation.Portrait,
                .PaperSize = PaperKind.A4
            },
            .Objects = {
                New ObjectSettings() With {
                    .Page = "https://www.example.com"
                }
            }
        }
        Dim pdf As Byte() = converter.Convert(doc)
        File.WriteAllBytes("webpage.pdf", pdf)
    End Sub
End Module
$vbLabelText   $csharpLabel

IronPDFの実装

IronPDFは専用のRenderUrlAsPdfメソッドを提供します:

// 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
$vbLabelText   $csharpLabel

RenderUrlAsPdfメソッドは、Chromiumエンジンを活用して、完全なJavaScriptの実行とモダンなCSSサポート-wkhtmltopdfの2015 WebKitエンジンによって制限された機能-でページをレンダリングします。

カスタムPDF設定

ページの寸法、余白、向きを設定することで、API間の構造的な違いが明らかになります。

wkhtmltopdfのカスタム設定

wkhtmltopdfは、MarginSettingsオブジェクトとネストされたGlobalSettingsを必要とします:

// NuGet: Install-Package WkHtmlToPdf-DotNet
using WkHtmlToPdfDotNet;
using WkHtmlToPdfDotNet.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 = 10, Right = 10 }
            },
            Objects = {
                new ObjectSettings()
                {
                    Page = "input.html",
                    WebSettings = { DefaultEncoding = "utf-8" }
                }
            }
        };
        byte[] pdf = converter.Convert(doc);
        File.WriteAllBytes("custom-output.pdf", pdf);
    }
}
// NuGet: Install-Package WkHtmlToPdf-DotNet
using WkHtmlToPdfDotNet;
using WkHtmlToPdfDotNet.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 = 10, Right = 10 }
            },
            Objects = {
                new ObjectSettings()
                {
                    Page = "input.html",
                    WebSettings = { DefaultEncoding = "utf-8" }
                }
            }
        };
        byte[] pdf = converter.Convert(doc);
        File.WriteAllBytes("custom-output.pdf", pdf);
    }
}
' NuGet: Install-Package WkHtmlToPdf-DotNet
Imports WkHtmlToPdfDotNet
Imports WkHtmlToPdfDotNet.Contracts
Imports System.IO

Class Program
    Shared Sub Main()
        Dim converter As New SynchronizedConverter(New PdfTools())
        Dim doc As New HtmlToPdfDocument() With {
            .GlobalSettings = New GlobalSettings() With {
                .ColorMode = ColorMode.Color,
                .Orientation = Orientation.Landscape,
                .PaperSize = PaperKind.A4,
                .Margins = New MarginSettings() With {.Top = 10, .Bottom = 10, .Left = 10, .Right = 10}
            },
            .Objects = {
                New ObjectSettings() With {
                    .Page = "input.html",
                    .WebSettings = New WebSettings() With {.DefaultEncoding = "utf-8"}
                }
            }
        }
        Dim pdf As Byte() = converter.Convert(doc)
        File.WriteAllBytes("custom-output.pdf", pdf)
    End Sub
End Class
$vbLabelText   $csharpLabel

IronPDFカスタム設定

IronPDFは直接設定するためにRenderingOptionsプロパティを使用します:

// 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 = 10;
        renderer.RenderingOptions.MarginRight = 10;
        renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;

        var pdf = renderer.RenderHtmlFileAsPdf("input.html");
        pdf.SaveAs("custom-output.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 = 10;
        renderer.RenderingOptions.MarginRight = 10;
        renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;

        var pdf = renderer.RenderHtmlFileAsPdf("input.html");
        pdf.SaveAs("custom-output.pdf");
    }
}
Imports IronPdf
Imports IronPdf.Rendering
Imports System

Class Program
    Shared Sub Main()
        Dim renderer As New ChromePdfRenderer()
        renderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Landscape
        renderer.RenderingOptions.MarginTop = 10
        renderer.RenderingOptions.MarginBottom = 10
        renderer.RenderingOptions.MarginLeft = 10
        renderer.RenderingOptions.MarginRight = 10
        renderer.RenderingOptions.PaperSize = PdfPaperSize.A4

        Dim pdf = renderer.RenderHtmlFileAsPdf("input.html")
        pdf.SaveAs("custom-output.pdf")
    End Sub
End Class
$vbLabelText   $csharpLabel

APIマッピングリファレンス

wkhtmltopdfからIronPDFへの移行を検討しているチームは、このマッピングが概念の等価性を理解するのに役立つと思います:

CLI から C# API へのマッピング。

wkhtmltopdfのCLIオプションIronPDF 同等物
wkhtmltopdf input.html output.pdfrenderer.RenderHtmlFileAsPdf()を使用してください。
wkhtmltopdf URL output.pdfrenderer.RenderUrlAsPdf()を使用してください。
--ページサイズ A4RenderingOptions.PaperSize=PdfPaperSize.A4
--ページサイズ LetterRenderingOptions.PaperSize=PdfPaperSize.Letter
--オリエンテーション LandscapeRenderingOptions.PaperOrientation = Landscape<//code>.
--マージントップ10mm</codeRenderingOptions.MarginTop = 10.
--マージン下10mm</codeRenderingOptions.MarginBottom = 10<//code>.
--margin-left 10mmRenderingOptions.MarginLeft = 10<//code>.
--margin-right 10mmRenderingOptions.MarginRight = 10.
--header-html header.htmlRenderingOptions.HtmlHeader</code
--footer-html footer.htmlRenderingOptions.HtmlFooter</code
--footer-center "[ページ]"{ページ}プレースホルダ
--footer-center "[toPage]"{総ページ数}プレースホルダ
--enable-javascript</codeデフォルトで有効
--javascript-delay 500RenderingOptions.WaitFor.RenderDelay = 500<//code>.
--印刷メディアタイプ</codeRenderingOptions.CssMediaType = Print.
--dpi 300RenderingOptions.Dpi = 300.
--グレースケール</codeRenderingOptions.GrayScale = true.
--zoom 0.8RenderingOptions.Zoom = 80.

C#ラッパーAPIマッピング

wkhtmltopdfラッパーIronPDF
SynchronizedConverter(シンクロナイズド・コンバーターChromePdfRenderer</code
HtmlToPdfDocument</codeレンダリングオプション</code
GlobalSettings.Out</codepdf.SaveAs()</code
GlobalSettings.PaperSize</codeRenderingOptions.PaperSize</code
GlobalSettings.Orientation</codeRenderingOptions.PaperOrientation</code
グローバル設定.マージンレンダリングオプション.マージン*
オブジェクト設定.ページ</codeRenderHtmlFileAsPdf()</code
ObjectSettings.HtmlContent</codeRenderHtmlAsPdf()</code
ヘッダー設定.センターTextHeader.CenterText</code
FooterSettings.Center</codeTextFooter.CenterText</code
converter.Convert(doc).renderer.RenderHtmlAsPdf()</code

プレースホルダーの構文マッピング

wkhtmltopdfプレースホルダIronPDF プレースホルダー
[ページ]</code{ページ}</code
[toPage]</code{総ページ数}</code
[日付]</code{date}<//code>
[時間]</code{時間}</code
[タイトル]</code{html-title}<//code>
[URL]</code{url}<//code>

チームがwkhtmltopdfからIronPDFへの移行を検討するとき

開発チームがwkhtmltopdfの代替としてIronPDFを評価するシナリオはよくあります:

セキュリティ コンプライアンスの要件

セキュリティコンプライアンス要件(SOC 2、PCI DSS、HIPAA)を満たす組織は、既知の重大な脆弱性を持つアプリケーションを受け入れることはできません。 CVE-2022-35583の深刻度は9.8であり、ほとんどのセキュリティフレームワークにおいて、早急な改善が要求されます。

最新の CSS フレームワークの採用

Bootstrap 5、Tailwind CSS、またはカスタムCSSグリッドレイアウトを採用しているチームは、wkhtmltopdfがこれらを正しくレンダリングできないことがわかります。 2015年のWebKitエンジンは、CSSグリッドのサポートを完全に欠いており、Flexboxの実装が壊れています。

JavaScriptアプリケーションの要件

最新のJavaScript機能(arrow関数、async/await、クラス、テンプレートリテラルなど、ES6+の構文)を使用するアプリケーションでは、wkhtmltopdfの不具合が発生します。 IronPdfのChromiumエンジンはJavaScriptを完全にサポートします。

クラウドとコンテナのデプロイ

Docker、Kubernetes、またはクラウドプラットフォームを使用した最新のデプロイ戦略は、IronPdfのコンテナフレンドリーアーキテクチャの恩恵を受けます。 コンテナ内のwkhtmltopdfバイナリのセキュリティスキャンは、CVE脆弱性にフラグを立てます。

長期的なメンテナンスの懸念

wkhtmltopdfには将来的なアップデートが期待されていないため、ウェブ標準の進化に伴い、チームは技術的な負債を抱えることになります。 IronPDFの積極的な開発により、2026年に予定されている.NET 10を含む将来の.NETバージョンとの継続的な互換性が保証されます。

IronPDFの追加機能

HTMLからPDFへの変換にとどまらず、IronPDFはwkhtmltopdfでは提供できない文書操作機能を提供します:

非同期サポート

IronPdfはウェブアプリケーションのパフォーマンスのために非同期/待機サポートを提供します:

public async Task<byte[]> GeneratePdfAsync(string html)
{
    var renderer = new ChromePdfRenderer();
    var pdf = await renderer.RenderHtmlAsPdfAsync(html);
    return pdf.BinaryData;
}
public async Task<byte[]> GeneratePdfAsync(string html)
{
    var renderer = new ChromePdfRenderer();
    var pdf = await renderer.RenderHtmlAsPdfAsync(html);
    return pdf.BinaryData;
}
Imports System.Threading.Tasks

Public Async Function GeneratePdfAsync(html As String) As Task(Of Byte())
    Dim renderer As New ChromePdfRenderer()
    Dim pdf = Await renderer.RenderHtmlAsPdfAsync(html)
    Return pdf.BinaryData
End Function
$vbLabelText   $csharpLabel

これは、wkhtmltopdfの同期のみのラッパーでは利用できない機能です。

.NETの互換性と将来の準備

wkhtmltopdfの放棄は、互換性テストや新しい.NETバージョンへのアップデートがないことを意味します。 IronPDFは定期的なアップデートでアクティブな開発を維持し、.NET 8、.NET 9、そして2026年に予定されている.NET 10を含む将来のリリースとの互換性を保証します。ライブラリのAPI全体にわたるasync/awaitのサポートは、C# 14で予想される機能を含む最新のC#開発プラクティスに沿っています。

結論

wkhtmltopdfとIronPdfの乖離は、セキュリティ、レンダリング機能、長期的な実行可能性において顕著です。 wkhtmltopdfの重大なSSRF脆弱性(CVE-2022-35583)とプロジェクトの放棄が組み合わさることで、本番アプリケーションのセキュリティ態勢が維持できなくなります。 2015年のWebKitエンジンはモダンなCSS Gridを扱えず、Flexboxのサポートも壊れており、ES6+のJavaScriptでは失敗します。

IronPdfのChromiumベースのレンダリングエンジンは最新のウェブ標準を完全にサポートし、既知のCVEはゼロです。 その簡素化されたAPI設計-ネストされた設定オブジェクトの代わりにRenderHtmlAsPdf()SaveAs()のようなメソッド-は、wkhtmltopdfが提供できないPDF操作、デジタル署名、非同期サポートのような機能を追加しながら、コードの複雑さを軽減します。

現在wkhtmltopdfやそのラッパー・ライブラリ(DinkToPdf、Rotativa、TuesPechkin)を使用しているチームにとっては、セキュリティ上の問題があるため、代替ツールの評価を早急に行う必要があります。 wkhtmltopdfのCLIオプションとIronPDFのRenderingOptionsの間のAPIマッピングは簡単で、IronPDFは一貫してwkhtmltopdf特有のセキュリティリスクを排除しながら、より少ないコードで済みます。

その他の実装ガイダンスについては、IronPDFドキュメントチュートリアルを参照してください。