IRONSOFTWAREHOME
ビデオ

How to use Java Script With HTML to PDF using C#

Curtis Chau
Curtis Chau
Updated: 2026年5月18日

Haukcode.DinkToPdf は、かつて人気のあった DinkToPdf ライブラリのコミュニティフォークであり、wkhtmltopdf バイナリをラップして .NET アプリケーション用に HTML を PDF に変換します。 フォークは後にHaukcode.WkHtmlToPdfDotNetに改名され、最新リリース1.5.95は2024年10月22日にLGPL-3.0-or-laterの下で公開されました。 フォークはオリジナルのDinkToPdf(1.0.8、2017年4月18日)が放棄された後もNuGet上でパッケージを存続させましたが、依然として親と同じアーカイブされたwkhtmltopdfバイナリに依存しています。 wkhtmltopdf GitHub組織全体は2024年7月10日にアーカイブされたため、上流の問題は修正されません。

このガイドはHaukcode.DinkToPdf / Haukcode.WkHtmlToPdfDotNetからIronPDFへの移行パスを提供し、.NET開発者がアーカイブされたwkhtmltopdfバイナリを移行するためのステップバイステップの手順、コード比較、実用的な例を含みます。

セキュリティアドバイザリ: CVE-2022-35583

Haukcode.DinkToPdf は、その上流の wkhtmltopdf バイナリに対して出されたセキュリティアドバイザリを継承しています。

CVE-2022-35583 — wkhtmltopdf 0.12.6 に対する SSRF アドバイザリ

サーバーサイドリクエストフォージェリ (SSRF) アドバイザリが wkhtmltopdf 0.12.6 に対して公開されています (NVD の CVSS 9.8; 上流の wkhtmltopdf プロジェクトは、これをライブラリのバグではなく、アプリケーション側の入力サニタイズの問題と見なしています)。 いずれにせよ、パッチは適用されません — 上流はアーカイブ済みです。 公開された議論で指摘された典型的な暴露パターンには以下が含まれます。

  • 攻撃ベクトル: 信頼されていない HTML コンテンツが変換中に内部リソースをフェッチする原因となる可能性があります
  • AWSメタデータ: http://169.254.169.254へのリクエストは、レンダラがEC2上で実行されている場合、インスタンスメタデータを返す可能性があります。
  • 内部ネットワークアクセス: 内部サービスがレンダリングホストから到達可能である可能性があります
  • ローカルファイルの包含: file://プロトコルを介してローカルファイルを読み取ることができるかもしれません。

上流パッチは期待されていません — wkhtmltopdf リポジトリは 2023 年 1 月 2 日にアーカイブされ、最後のリリース (0.12.6) は 2020 年 6 月です。

##IronPDFvs Haukcode.DinkToPdf:機能比較

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

アスペクトHaukcode.DinkToPdfIronPDF
基盤エンジンwkhtmltopdf (QtWebKit フォーク、約 2015)モダンChromium
セキュリティステータスCVE-2022-35583 アドバイザリ (未修正/上流で争われている)既知の重大な CVE なし
プロジェクトステータスコミュニティフォーク; 上流の wkhtmltopdf はアーカイブされました積極的なメンテナンス
HTML5/CSS3現代的な Flexbox/Grid なし完全なCSS3
JavaScript(JavaScript限定的で一貫性がないフルサポート
ネイティブバイナリプラットフォームごとのlibwkhtmltox.dll/.so/.dylib管理された NuGet パッケージ
スレッドセーフティSynchronizedConverterが呼び出しをシリアライズしますスレッドセーフ設計
サポートコミュニティプロフェッショナルサポート
更新情報フォークの最新リリース 1.5.95 (2024 年 10 月 22 日); 上流の wkhtmltopdf 0.12.6 (2020 年 6 月)定期リリース
ライセンスLGPL-3.0-or-later (フォーク) / MIT (オリジナル DinkToPdf)無料トライアル付き商用

クイックスタート: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
SHELL

プロジェクトからネイティブバイナリを削除する:

  • libwkhtmltox.dll (Windows)
  • libwkhtmltox.so (Linux)
  • libwkhtmltox.dylib (macOS)

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

# Install IronPDF
dotnet add package IronPdf
SHELL

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

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

// Before (Haukcode.DinkToPdf)
using DinkToPdf;
using DinkToPdf.Contracts;

// After (IronPDF)
using IronPdf;
using IronPdf.Rendering;  // For RenderingOptions

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

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

IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";

コード移行の例

基本的なHTMLからPDFへの変換

最も基本的な操作は、これら for .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);
    }
}

IronPDFのアプローチ:

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

Haukcode.DinkToPdfは、File.WriteAllBytes()でファイルに手動で書き込みます。

IronPDFはこれを3行に簡略化: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);
    }
}

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");
    }
}

Haukcode.DinkToPdfはObjectSettings.PageでURLを使用した同じドキュメント構築パターンを使用します。 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);
    }
}

IronPDFのアプローチ:

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

Haukcode.DinkToPdfは、別のGlobalSettings内に設定をネストします。 IronPDFは、RenderingOptionsプロパティを提供します。

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

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

コンバーター・クラスのマッピング

Haukcode.DinkToPdfIronPDF
SynchronizedConverterChromePdfRenderer
BasicConverterChromePdfRenderer
PdfTools該当なし
IConverter該当なし

ドキュメント構成マッピング

Haukcode.DinkToPdfIronPDF
HtmlToPdfDocumentメソッドコール
GlobalSettingsRenderingOptions
ObjectSettingsRenderingOptions
converter.Convert(doc)renderer.RenderHtmlAsPdf(html)

GlobalSettingsプロパティのマッピング

GlobalSettings プロパティIronPDF プロパティ
ColorModeRenderingOptions.GrayScale
OrientationRenderingOptions.PaperOrientation
PaperSizeRenderingOptions.PaperSize
Margins.TopRenderingOptions.MarginTop
Margins.BottomRenderingOptions.MarginBottom
Margins.LeftRenderingOptions.MarginLeft
Margins.RightRenderingOptions.MarginRight

オブジェクト設定プロパティのマッピング

オブジェクト設定プロパティIronPDF 同等物
HtmlContentRenderHtmlAsPdf()の最初のパラメータ
Page (URL)renderer.RenderUrlAsPdf(url)
HeaderSettings.Right = "[page]"{page}

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

Haukcode.DinkToPdfIronPDF
[page]{page}
[toPage]{total-pages}
[date]{date}

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

課題 1: シングルトンの要件

Haukcode.DinkToPdf: ネイティブwkhtmltopdfバイナリとのスレッドセーフティの問題のため、シングルトンとしてSynchronizedConverterが必要です。

Solution: 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!

課題 2: ネイティブのバイナリ依存

**Haukcode.DinkToPdf:**プラットフォーム固有のネイティブライブラリ(libwkhtmltox.dll/so/dylib)が必要です。

ソリューション: IronPDFはネイティブバイナリに依存せず、自己完結しています。 移行後、これらのファイルを削除してください:

  • libwkhtmltox.dll (Windows)
  • libwkhtmltox.so (Linux)
  • libwkhtmltox.dylib (macOS)

課題3:リターン・タイプの違い

Haukcode.DinkToPdf:byte[]を返します。

Solution: IronPDFはマルチ出力オプションを持つPdfDocumentオブジェクトを返します。

var pdf = renderer.RenderHtmlAsPdf(html);
byte[] bytes = pdf.BinaryData;  // Get bytes
pdf.SaveAs("output.pdf");       // Or save directly

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

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

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

// Before (DinkToPdf)
HeaderSettings = { Right = "Page [page] of [toPage]" }

// After (IronPDF)
renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter
{
    HtmlFragment = "<span style='float:right'>Page {page} of {total-pages}</span>"
};

Haukcode.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" .
SHELL

現在のObjectSettingsの設定を文書化。 削除可能なネイティブライブラリのロードコードを特定する。

コード更新タスク

1.DinkToPdf NuGet パッケージの削除 2.IronPDFNuGet パッケージをインストールします 3. 名前空間のインポートをIronPdfに更新します。 4. ChromePdfRendererに置き換え。 5. HtmlToPdfDocumentパターンを直接メソッド呼び出しに変換。 6. RenderingOptionsに変換します。 7. RenderingOptionsに変換します。 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())を利用。

**積極的な開発:**IronPDFの定期的なリリースサイクルは、.NET Framework 4.6.2+、.NET Core 3.1+、および .NET 5/6/7/8/9/10 などの現在の .NET バージョンとの互換性を保ちます。

ご注意: DinkToPdf、Haukcode.DinkToPdf、Haukcode.WkHtmlToPdfDotNet、wkhtmltopdf はそれぞれの所有者の商標または商品名です。 このサイトは、これらのプロジェクトと提携しておらず、サポートもされておらず、スポンサーでもありません。 すべての製品名、ロゴ、およびブランドは各所有者の所有物です。 比較は情報提供のみを目的としており、執筆時点で公開されている情報を反映しています。
Curtis Chau
テクニカルライター

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

...
詳しく読む

関連する記事

Key in blue circle

無料の30日間トライアルキーをすぐに入手してください。

Your trial license will be sent to your email address

制限なし。100% ロック解除済み。クレジットカード不要。

bullet_checkedクレジットカードやアカウントの作成は不要です。制限なし。100% ロック解除済み。クレジットカード不要。
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
無料のライブデモを予約する
Booking Badge

世界中の数百万人のエンジニアから信頼されています。

ライセンスはより安く
義務のない相談を受ける
下記のフォームを記入するか、sales@ironsoftware.comにメールしてください。
あなたの詳細は常に守秘されます。
世界中の数百万人のエンジニアから信頼されています。
ライセンスはより安く
あなたの無料30日間の試用キーをすぐに入手。
クレジットカードやアカウントの作成は不要です。