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

C#でwkhtmltopdfからIronPDFに移行する方法

wkhtmltopdfからIronPDFへの移行:完全なC#開発者ガイド

wkhtmltopdfは、Qt WebKitを使ってHTML文書をPDFに変換するツールとして広く使われてきました。 コマンドライン機能と無償ライセンスで開発者の間で人気があるにもかかわらず、このプロジェクトは現在、もはや無視できない重大なセキュリティリスクを抱えています。 このライブラリは2016年から2017年にかけて公式に放棄され、重大度CRITICALの脆弱性(CVE-2022-35583)は永久にパッチが適用されていません。

このガイドでは、アプリケーションからこのセキュリティリスクを排除する必要のあるプロの.NET開発者のために、ステップバイステップの手順、コード比較、実用的な例を用いて、wkhtmltopdfからIronPDFへの完全な移行パスを提供します。

重大なセキュリティ警告:CVE-2022-35583

wkhtmltopdfには、修正されることのない重大なセキュリティ脆弱性が含まれています:

問題重要度ステータス
CVE-2022-35583クリティカル (9.8/10)UNPATCHED
SSRFの脆弱性についてインフラ買収リスクUNPATCHED
最終更新2016-2017ABANDONED
WebKitバージョン2015 (Qt WebKit)OBSOLETE
CSSグリッドサポートなしブロークン
Flexboxサポート部分的ブロークン
ES6+のJavaScriptなしブロークン

SSRF攻撃の仕組み

Server-Side Request Forgery 脆弱性は、攻撃者が細工した HTML を通して内部サービスにアクセスし、認証情報を盗み、内部ネットワークをスキャンし、機密データを流出させることを可能にします:

<!-- Malicious HTML submitted to your PDF generator -->
<iframe src="http://169.254.169.254/latest/meta-data/iam/security-credentials/"></iframe>
<img src="http://internal-database:5432/admin"/>
<!-- Malicious HTML submitted to your PDF generator -->
<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を取得します。

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

wkhtmltopdfのすべての.NETラッパーは、これらの脆弱性を継承しています:

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

これらのライブラリのいずれかを使用している場合、CVE-2022-35583.に対する脆弱性があります。

IronPDFとwkhtmltopdfの比較:機能の比較

アーキテクチャの違いを理解することは、技術的な意思決定者が移行への投資を評価するのに役立ちます:

フィーチャーwkhtmltopdfIronPDF
ライセンスについてLGPLv3 (無料)商用
レンダリングエンジンQt WebKit (2015)現在のChromiumエンジン
セキュリティの脆弱性CVE-2022-35583、パッチが適用されていない主な問題既知のCVEはありません
アクティブなメンテナンス2017年以降、意味のある更新がなく、放棄されました。定期的なリリースによる積極的なメンテナンス
最新ウェブ標準のサポート制限付き(broken flexbox、CSS Gridなし)フルサポート
統合とサポートコミュニティフォーラム限定豊富なドキュメントと専用サポート
CSSグリッド❌ 未対応フルサポート
Flexbox(フレックスボックス⚠️ 壊れたフルサポート
ES6+のJavaScript❌ 未対応フルサポート
非同期/待機❌ 未対応フルサポート
PDF操作❌ 未対応フルサポート
デジタル署名❌ 未対応フルサポート
PDF/Aコンプライアンス❌ 未対応フルサポート

クイックスタート:wkhtmltopdfからIronPDFへのマイグレーション

これらの基本的なステップを踏めば、すぐにでも移行を開始できます。

ステップ 1:wkhtmltopdfパッケージとバイナリを削除する。

すべてのwkhtmltopdfラッパー・パッケージを削除してください:

# Remove wkhtmltopdf wrapper (whichever you're using)
dotnet remove package WkHtmlToPdf-DotNet
dotnet remove package DinkToPdf
dotnet remove package TuesPechkin
dotnet remove package Rotativa
dotnet remove package Rotativa.AspNetCore
dotnet remove package NReco.PdfGenerator

# Remove wkhtmltopdf binary from your deployment
# Delete wkhtmltopdf.exe, wkhtmltox.dll, etc.
# Remove wkhtmltopdf wrapper (whichever you're using)
dotnet remove package WkHtmlToPdf-DotNet
dotnet remove package DinkToPdf
dotnet remove package TuesPechkin
dotnet remove package Rotativa
dotnet remove package Rotativa.AspNetCore
dotnet remove package NReco.PdfGenerator

# Remove wkhtmltopdf binary from your deployment
# Delete wkhtmltopdf.exe, wkhtmltox.dll, etc.
SHELL

ステップ2: IronPDFをインストールする

# AddIronPDF(secure, modern alternative)
dotnet add package IronPdf
# AddIronPDF(secure, modern alternative)
dotnet add package IronPdf
SHELL

ステップ 3: 名前空間の更新

wkhtmltopdf名前空間をIronPdf名前空間に置き換えてください:

// Before (wkhtmltopdf)
using WkHtmlToPdfDotNet;
using WkHtmlToPdfDotNet.Contracts;

// After (IronPDF)
using IronPdf;
// Before (wkhtmltopdf)
using WkHtmlToPdfDotNet;
using WkHtmlToPdfDotNet.Contracts;

// After (IronPDF)
using IronPdf;
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

ステップ 4: ライセンスの初期化

アプリケーション起動時のライセンス初期化を追加します:

IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"
$vbLabelText   $csharpLabel

コード移行の例

HTML を PDF に変換する

最も基本的な操作は、これらの.NET PDFアプローチの複雑さの違いを明らかにします。

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.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.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);
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$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");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

wkhtmltopdfでは、PdfToolsSynchronizedConverterを作成し、GlobalSettingsObjectsHtmlToPdfDocumentを構成し、ColorModeOrientationPaperSizeなどのプロパティを設定し、converter.Convert()を呼び出して生のバイトを取得し、File.WriteAllBytes()で手動でファイルに書き込む。

IronPDFはこの儀式を完全に排除します。ChromePdfRendererを作成し、RenderHtmlAsPdf()を呼び出し、組み込みのSaveAs()メソッドを使用します。

高度なHTMLからPDFへのシナリオについては、HTMLからPDFへの変換ガイドをご覧ください。

URLをPDFに変換する

URLからPDFへの変換も、似たような複雑さのパターンを示しています。

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.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.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.com
$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");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

wkhtmltopdfは、ObjectSettingsPageプロパティを使用してURLを指定するため、同じドキュメント構築パターンを必要とします。 IronPDFは意図を明確に表現する専用のRenderUrlAsPdf()メソッドを提供します。

認証とカスタムヘッダーオプションについては、URL to PDF documentationを参照してください。

カスタム設定:ページ構成を含むHTMLファイル

方向、余白、用紙サイズの設定には、さまざまなアプローチが必要です。

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.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.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);
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$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 = 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");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

wkhtmltopdfは、GlobalSettingsObjectsの中に設定を入れ子にし、MarginSettingsは別のオブジェクトにします。 IronPDFはPaperOrientation, MarginTop, PaperSizeのような明確な名前のRenderingOptionsプロパティを直接提供します。

wkhtmltopdf APIからIronPDFへのマッピングリファレンス

このマッピングは、APIと同等のものを直接示すことで、移行を加速します:

CLIからIronPDFへのマッピング

wkhtmltopdfのCLIオプションIronPDF 同等物ノート
<コード>wkhtmltopdf input.html output.pdfrenderer.RenderHtmlFileAsPdf()を使用してください。ファイルからPDFへ
<コード>wkhtmltopdf URL output.pdfrenderer.RenderUrlAsPdf()を使用してください。URLからPDFへ
<コード>--ページサイズ A4RenderingOptions.PaperSize=PdfPaperSize.A4用紙サイズ
<コード>--ページサイズ LetterRenderingOptions.PaperSize=PdfPaperSize.LetterUSレター
<コード>--オリエンテーション LandscapeRenderingOptions.PaperOrientation = Landscape<//code>.オリエンテーション
<コード>--マージントップ10mm</コードRenderingOptions.MarginTop = 10.マージン(mm
<コード>--マージン下10mm</コードRenderingOptions.MarginBottom = 10<//code>.
--margin-left 10mmRenderingOptions.MarginLeft = 10<//code>.
--margin-right 10mmRenderingOptions.MarginRight = 10.
<コード>--header-html header.html<コード>RenderingOptions.HtmlHeader</コードHTMLヘッダー
--footer-center "[ページ]"<コード>{ページ}</コード>プレースホルダページ数
--footer-center "[toPage]"{総ページ数}プレースホルダ総ページ数
<コード>--enable-javascript</コードデフォルトで有効JavaScript
<コード>--javascript-delay 500RenderingOptions.WaitFor.RenderDelay = 500<//code>.JS遅延
<コード>--dpi 300RenderingOptions.Dpi = 300.DPI設定
<コード>--グレースケール</コードRenderingOptions.GrayScale = true.グレースケール

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

wkhtmltopdfラッパーIronPDFノート
SynchronizedConverter(シンクロナイズド・コンバーター<コード>ChromePdfRenderer</コードメインレンダラー
<コード>HtmlToPdfDocument</コード<コード>レンダリングオプション</コード構成
<コード>GlobalSettings.Out</コード<コード>pdf.SaveAs()</コード出力ファイル
<コード>GlobalSettings.PaperSize</コード<コード>RenderingOptions.PaperSize</コード用紙サイズ
<コード>GlobalSettings.Orientation</コード<コード>RenderingOptions.PaperOrientation</コードオリエンテーション
グローバル設定.マージンレンダリングオプション.マージン*個々の余白
<コード>オブジェクト設定.ページ</コード<コード>RenderHtmlFileAsPdf()</コードファイル入力
<コード>ObjectSettings.HtmlContent</コード<コード>RenderHtmlAsPdf()</コードHTML文字列
converter.Convert(doc).<コード>renderer.RenderHtmlAsPdf()</コードPDFの作成

プレースホルダーの構文の移行

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

一般的な移行の問題と解決策

課題 1: ヘッダー/フッターのプレースホルダーの構文

wkhtmltopdf:[page][toPage]のような角括弧構文を使用します。

解決策: IronPDFの中括弧プレースホルダーを更新しました:

// Before (wkhtmltopdf)
FooterSettings = { Left = "Page [page] of [toPage]" }

// After (IronPDF)
renderer.RenderingOptions.HtmlFooter = new HtmlHeaderFooter
{
    HtmlFragment = "<div style='text-align:left;'>Page {page} of {total-pages}</div>",
    MaxHeight = 25
};
// Before (wkhtmltopdf)
FooterSettings = { Left = "Page [page] of [toPage]" }

// After (IronPDF)
renderer.RenderingOptions.HtmlFooter = new HtmlHeaderFooter
{
    HtmlFragment = "<div style='text-align:left;'>Page {page} of {total-pages}</div>",
    MaxHeight = 25
};
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

課題 2:JavaScript遅延設定

wkhtmltopdf:信頼性の低いJavascriptDelayプロパティを使用しています。

ソリューション: IronPDFは複数のオプションを提供します:

renderer.RenderingOptions.EnableJavaScript = true;

// Option 1: Fixed delay
renderer.RenderingOptions.WaitFor.RenderDelay(500);

// Option 2: Wait for specific element (more reliable)
renderer.RenderingOptions.WaitFor.HtmlElementById("content-loaded");

// Option 3: Wait forJavaScriptcondition
renderer.RenderingOptions.WaitFor.JavaScript("window.renderComplete === true");
renderer.RenderingOptions.EnableJavaScript = true;

// Option 1: Fixed delay
renderer.RenderingOptions.WaitFor.RenderDelay(500);

// Option 2: Wait for specific element (more reliable)
renderer.RenderingOptions.WaitFor.HtmlElementById("content-loaded");

// Option 3: Wait forJavaScriptcondition
renderer.RenderingOptions.WaitFor.JavaScript("window.renderComplete === true");
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

課題3: モダンなCSSがレンダリングされない

症状: CSS Grid および Flexbox レイアウトがwkhtmltopdfで正しく表示されません。

ソリューション: IronPdfのChromiumエンジンは最新のCSSを正しく処理します:

// This CSS now works with IronPDF
var html = @"
<style>
    .grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 10px; }
    .flex { display: flex; justify-content: space-between; align-items: center; }
</style>
<div class='grid'>
    <div>Column 1</div>
    <div>Column 2</div>
    <div>Column 3</div>
</div>";

var pdf = renderer.RenderHtmlAsPdf(html);
// This CSS now works with IronPDF
var html = @"
<style>
    .grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 10px; }
    .flex { display: flex; justify-content: space-between; align-items: center; }
</style>
<div class='grid'>
    <div>Column 1</div>
    <div>Column 2</div>
    <div>Column 3</div>
</div>";

var pdf = renderer.RenderHtmlAsPdf(html);
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

課題 4: 同期レンダリングと非同期レンダリング

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;
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

wkhtmltopdf移行チェックリスト

マイグレーション前のタスク

コードベースを監査して、wkhtmltopdfの使用法をすべて特定してください:

# Find all wkhtmltopdf references
grep -r "WkHtmlToPdfDotNet\|DinkToPdf\|TuesPechkin\|Rotativa" --include="*.cs" .
grep -r "wkhtmltopdf" --include="*.yml" --include="*.yaml" --include="Dockerfile" .
# Find all wkhtmltopdf references
grep -r "WkHtmlToPdfDotNet\|DinkToPdf\|TuesPechkin\|Rotativa" --include="*.cs" .
grep -r "wkhtmltopdf" --include="*.yml" --include="*.yaml" --include="Dockerfile" .
SHELL

削除するwkhtmltopdfバイナリファイルを探し出し、文書化する。 ドキュメントの現在の設定(用紙サイズ、余白、ヘッダー/フッター)。

コード更新タスク

1.すべてのwkhtmltopdfラッパーNuGetパッケージを削除する。 2.wkhtmltopdfバイナリを削除する (wkhtmltopdf.exe、wkhtmltox.dll) 3.IronPdf NuGetパッケージをインストールする 4.名前空間のインポートをWkHtmlToPdfDotNetからIronPdfに更新してください。 5.SynchronizedConverterChromePdfRendererに置き換えてください。 6.HtmlToPdfDocument<//code> パターンを直接レンダリング メソッドに変換する 7.GlobalSettings構成をRenderingOptionsに更新してください。 8.マージン設定をMarginSettingsから個々のプロパティに変換します。 9.プレースホルダの構文を更新 ([page]{page},<コード>[toPage]</コード→ {total-pages}) 10.起動時にIronPDFライセンスの初期化を追加する

移行後のテスト

移行後、これらの点を検証してください:

  • PDF出力の視覚的比較(最新のCSSサポートにより改善されるはずです)
  • 最新のCSSレンダリングの検証(CSS GridとFlexboxが動作するようになりました)
  • JavaScriptを多用するページのテスト
  • wkhtmltopdfバイナリが残っていないことを確認するためのセキュリティスキャン
  • パフォーマンス比較のための負荷テスト

セキュリティ検証

# Scan for any remaining wkhtmltopdf artifacts
find /var/www/ -name "*wkhtmlto*" 2>/dev/null
find /usr/local/bin/ -name "*wkhtmlto*" 2>/dev/null
docker images | grep wkhtmltopdf

# Check if any process is still using it
ps aux | grep wkhtmltopdf
# Scan for any remaining wkhtmltopdf artifacts
find /var/www/ -name "*wkhtmlto*" 2>/dev/null
find /usr/local/bin/ -name "*wkhtmlto*" 2>/dev/null
docker images | grep wkhtmltopdf

# Check if any process is still using it
ps aux | grep wkhtmltopdf
SHELL

IronPDFに移行する主な利点

wkhtmltopdfからIronPdfに移行することで、いくつかの重要な利点が得られます:

セキュリティ:CVE-2022-35583 およびすべてのwkhtmltopdfの脆弱性が取り除かれました。 IronPDFには既知のCVEはなく、定期的にセキュリティアップデートが行われます。

最新のレンダリングエンジン: IronPDFは最新のChromiumエンジンを使用しており、CSS3、CSS Grid、Flexbox、ES6+ JavaScriptを完全にサポートしています。 最新のフレームワークは正しくレンダリングされます。

簡素化されたAPI:直接的なレンダリング方法は、ドキュメントの構築パターンに取って代わります。 組み込みのSaveAs()メソッドにより、手動でのバイト処理が不要になります。

拡張機能:PDF操作、電子署名、PDF/A準拠、透かし、結合/分割操作は、wkhtmltopdfが提供できなかった組み込み機能です。

アクティブ開発:2026年まで.NET 10とC# 14の採用が増加する中、IronPDFの定期的なアップデートは現在と将来の.NETバージョンとの互換性を保証します。

非同期サポート:ネイティブの async/await サポートにより、高負荷の Web アプリケーションでのスレッドブロッキングを防ぎます。

結論

wkhtmltopdfは、無料のHTML-PDFコンバータとして.NETコミュニティに貢献しました。 しかし、このプロジェクトは2016年から2017年にかけて公式に放棄され、重大度がCRITICALなSSRFの脆弱性(CVE-2022-35583)はパッチが適用されることがないため、使用を継続すると、本番アプリケーションに許容できないセキュリティリスクが生じます。

IronPdfは最新のウェブ標準を扱うChromiumレンダリングエンジンを搭載し、現代的で安全な代替手段を提供します。 移行パスは簡単です:wkhtmltopdfパッケージとバイナリを削除し、IronPDFをインストールし、ドキュメントの構築パターンを直接レンダリングメソッドに置き換え、プレースホルダーの構文を更新します。

IronPDFの無料トライアルで今すぐ移行を開始し、wkhtmltopdfベースのソリューションに内在するセキュリティの脆弱性を排除しましょう。

包括的な実装ガイダンスについては、IronPdfドキュメントチュートリアルAPIリファレンスをご覧ください。

カーティス・チャウ
テクニカルライター

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

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