フッターコンテンツにスキップ
ビデオ

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

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.DinkToPdf IronPDF
基盤エンジン 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
# 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
# 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
// Before (Haukcode.DinkToPdf)
using DinkToPdf;
using DinkToPdf.Contracts;

// After (IronPDF)
using IronPdf;
using IronPdf.Rendering;  // For RenderingOptions
Imports IronPdf
Imports IronPdf.Rendering
$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への変換

最も基本的な操作は、これら 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);
    }
}
// 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);
    }
}
Imports DinkToPdf
Imports DinkToPdf.Contracts
Imports System.IO

Module Program
    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 List(Of ObjectSettings) From {
                New ObjectSettings() With {
                    .HtmlContent = "<html><body><h1>Hello World</h1></body></html>"
                }
            }
        }

        Dim pdf As Byte() = converter.Convert(doc)
        File.WriteAllBytes("output.pdf", pdf)
    End Sub
End Module
$vbLabelText   $csharpLabel

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

Class Program
    Shared Sub Main()
        Dim renderer = New ChromePdfRenderer()

        Dim pdf = renderer.RenderHtmlAsPdf("<html><body><h1>Hello World</h1></body></html>")

        pdf.SaveAs("output.pdf")
    End Sub
End Class
$vbLabelText   $csharpLabel

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);
    }
}
// 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);
    }
}
Imports DinkToPdf
Imports DinkToPdf.Contracts
Imports System.IO

Module Program
    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 List(Of ObjectSettings) From {
                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のアプローチ:

// 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

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);
    }
}
// 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);
    }
}
Imports DinkToPdf
Imports DinkToPdf.Contracts
Imports System.IO

Module Program
    Sub Main()
        Dim converter = New SynchronizedConverter(New PdfTools())

        Dim doc = New HtmlToPdfDocument() With {
            .GlobalSettings = New GlobalSettings() With {
                .ColorMode = ColorMode.Color,
                .Orientation = Orientation.Landscape,
                .PaperSize = PaperKind.Letter,
                .Margins = New MarginSettings() With {.Top = 10, .Bottom = 10, .Left = 10, .Right = 10}
            },
            .Objects = {
                New ObjectSettings() With {
                    .HtmlContent = "<html><body><h1>Landscape Document</h1><p>Custom page settings</p></body></html>"
                }
            }
        }

        Dim pdf As Byte() = converter.Convert(doc)
        File.WriteAllBytes("landscape.pdf", pdf)
    End Sub
End Module
$vbLabelText   $csharpLabel

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

Class Program
    Shared Sub Main()
        Dim 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

        Dim pdf = renderer.RenderHtmlAsPdf("<html><body><h1>Landscape Document</h1><p>Custom page settings</p></body></html>")

        pdf.SaveAs("landscape.pdf")
    End Sub
End Class
$vbLabelText   $csharpLabel

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

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

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

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

Haukcode.DinkToPdf IronPDF
SynchronizedConverter ChromePdfRenderer
BasicConverter ChromePdfRenderer
PdfTools 該当なし
IConverter 該当なし

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

Haukcode.DinkToPdf IronPDF
HtmlToPdfDocument メソッドコール
GlobalSettings RenderingOptions
ObjectSettings RenderingOptions
converter.Convert(doc) renderer.RenderHtmlAsPdf(html)

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

GlobalSettings プロパティ IronPDF プロパティ
ColorMode RenderingOptions.GrayScale
Orientation RenderingOptions.PaperOrientation
PaperSize RenderingOptions.PaperSize
Margins.Top RenderingOptions.MarginTop
Margins.Bottom RenderingOptions.MarginBottom
Margins.Left RenderingOptions.MarginLeft
Margins.Right RenderingOptions.MarginRight

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

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

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

Haukcode.DinkToPdf IronPDF
[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!
// 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!
' Before (DinkToPdf) - MUST be singleton
services.AddSingleton(GetType(IConverter), New SynchronizedConverter(New PdfTools()))

' After (IronPDF) - Can be singleton or transient (both work)
services.AddSingleton(Of IPdfService, IronPdfService)()
' Or services.AddTransient(Of IPdfService, IronPdfService)() - both are safe!
$vbLabelText   $csharpLabel

課題 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
var pdf = renderer.RenderHtmlAsPdf(html);
byte[] bytes = pdf.BinaryData;  // Get bytes
pdf.SaveAs("output.pdf");       // Or save directly
Dim pdf = renderer.RenderHtmlAsPdf(html)
Dim bytes As Byte() = pdf.BinaryData  ' Get bytes
pdf.SaveAs("output.pdf")  ' Or save directly
$vbLabelText   $csharpLabel

課題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>"
};
// 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>"
};
' Before (DinkToPdf)
HeaderSettings = New With {.Right = "Page [page] of [toPage]"}

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

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" .
# 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 パッケージをインストールします

  1. 名前空間のインポートをIronPdfに更新します。
  2. ChromePdfRendererに置き換え。
  3. HtmlToPdfDocumentパターンを直接メソッド呼び出しに変換。
  4. RenderingOptionsに変換します。
  5. RenderingOptionsに変換します。
  6. プレースホルダー構文を更新します([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は現代のフレームワークを用いた開発や、構造の良い視覚的に魅力的なマニュアルの作成を楽しんでいます。

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

アイアンサポートチーム

私たちは週5日、24時間オンラインで対応しています。
チャット
メール
電話してね