比較

TuesPechkin vs IronPDF:技術比較ガイド

火曜日vs IronPDF:.NET PDF生成の技術比較

.NET開発者がHTMLをPDFに変換する必要がある場合、レガシーなレンダリングエンジンを中心に構築されたラッパーライブラリがいくつか選択肢として登場します。火曜日はそのようなソリューションの1つで、wkhtmltopdfライブラリをラッピングしてPDF生成機能を提供しています。 この技術比較では、アーキテクトや開発者がレガシーラッパーと最新のPDFライブラリのトレードオフを理解できるよう、IronPDFと並行してTuespechkinを検証しています。

TuesPechkinを理解する

TuesPechkin はスレッドセーフなwkhtmltopdfライブラリのラッパーで、開発者が HTML コンテンツから PDF ドキュメントを生成できるように設計されています。 このライブラリは、ThreadSafeConverter実装を提供することで、wkhtmltopdf固有の並行処理の課題に対処しようとしています。

しかし、Tuespechkinはその基礎となる技術から基本的な制限を受け継いでいます:

  • 見捨てられたファンデーション: TuesPechkinはwkhtmltopdfをラップしています。
  • 古いレンダリングエンジン:Chrome 時代以前のレンダリング エンジンである Qt WebKit 4.8 を使用しています。
  • 複雑なスレッド管理RemotingToolsetとデプロイメント パターンを通してスレッドの安全性を手動で設定する必要があります。
  • 負荷時の安定性: スレッドセーフな構成であっても、ライブラリは高い同時実行数の下でAccessViolationExceptionやプロセスハングでクラッシュすることがあります。
  • 限定的なCSSサポート: FlexboxやCSS Gridのような最新のCSS機能はサポートしていません。
  • JavaScriptの制限:ES6+をサポートしていない信頼性の低いJavaScriptの実行

セキュリティの考慮事項

TuesPechkin は、セキュリティの脆弱性をすべて w.NET から継承しています。 CVE-2022-35583 は Critical (9.8/10) と評価され、すべての火曜日バージョンに影響する Server-Side Request Forgery 脆弱性です。 wkhtmltopdfが放棄されたため、この脆弱性にパッチが適用されることはなく、TuesPechkinを使用するアプリケーションは永久に危険にさらされたままとなります。

IronPDFの理解

IronPdfはネイティブスレッドセーフとChromiumベースのレンダリングエンジンを備えた最新の商用PDFライブラリを提供することで、根本的に異なるアプローチを取っています。レガシーなツールをラッピングするのではなく、IronPDFはPDF生成に主眼を置いています。

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

  • 最新のChromiumエンジン:HTML5、CSS3、Flexbox、CSS Grid、および ES6+ JavaScript をフルサポート。
  • ネイティブ・スレッドセーフ: 手動でのスレッド管理が不要で、同時処理が自動的に動作します。
  • 積極的な開発:毎週の更新と継続的な改善
  • 包括的なPDFの機能: 生成だけでなく、操作、電子署名、PDF/Aコンプライアンス、フォーム入力も含まれます。
  • シンプルな統合: ネイティブのバイナリをデプロイすることなく、NuGetを簡単にインストールできます。

機能比較

以下の表は、TuespechkinとIronPDFの技術的な違いを示しています:

フィーチャー火曜日IronPDF
ライセンスフリー(MITライセンス)商用
スレッドセーフティマニュアル管理が必要ネイティブサポート
通貨について制限あり、負荷でクラッシュする可能性あり堅牢で、高い並行性に対応
開発ステータス2015年最終更新積極的かつ継続的な改善
使いやすさ複雑なセットアップユーザーフレンドリーなガイド
ドキュメント基本豊富な例文
レンダリングエンジンQt WebKit 4.8 (古い)モダンChromium
CSS3のサポート部分的フルサポート
フレックスボックス/グリッドサポートされていませんフルサポート
JavaScript(ジャバスクリプト信頼できない完全なES6
PDF操作不可フルサポート
デジタル署名不可フルサポート
PDF/Aコンプライアンス不可フルサポート
フォーム入力不可フルサポート
ウォーターマーク不可フルサポート
マージ/スプリット不可フルサポート
ヘッダー/フッター基本的なテキストのみHTMLフルサポート
セキュリティパッチ決して(放棄)定期的な更新

APIアーキテクチャの違い

初期化パターンと基本的な使い方を調べると、TuesPechkinとIronPDFのアーキテクチャの違いがすぐにわかります。

TuesPechkinの初期化の複雑さ

TuesPechkin は、コンバーター、ツールセット、デプロイ設定を含む複雑な初期化儀式を必要とします:

// NuGet: Install-Package TuesPechkin
using TuesPechkin;
using System.IO;

class Program
{
    static void Main()
    {
        var converter = new StandardConverter(
            new RemotingToolset<PdfToolset>(
                new Win64EmbeddedDeployment(
                    new TempFolderDeployment())));

        string html = "<html><body><h1>Hello World</h1></body></html>";
        byte[] pdfBytes = converter.Convert(new HtmlToPdfDocument
        {
            Objects = { new ObjectSettings { HtmlText = html } }
        });

        File.WriteAllBytes("output.pdf", pdfBytes);
    }
}
// NuGet: Install-Package TuesPechkin
using TuesPechkin;
using System.IO;

class Program
{
    static void Main()
    {
        var converter = new StandardConverter(
            new RemotingToolset<PdfToolset>(
                new Win64EmbeddedDeployment(
                    new TempFolderDeployment())));

        string html = "<html><body><h1>Hello World</h1></body></html>";
        byte[] pdfBytes = converter.Convert(new HtmlToPdfDocument
        {
            Objects = { new ObjectSettings { HtmlText = html } }
        });

        File.WriteAllBytes("output.pdf", pdfBytes);
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

このパターンでは、複数の入れ子になったクラスを理解する必要があります:StandardConverterRemotingToolsetWin64EmbeddedDeploymentTempFolderDeploymentです。 また、デプロイメントの構成は、ターゲットプラットフォームのアーキテクチャ(x86/x64)に合わせる必要があります。

IronPDFのシンプルなアプローチ

IronPdfはわかりやすいAPIによってデプロイの複雑さを完全に排除します:

// NuGet: Install-Package IronPdf
using IronPdf;
using System;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();

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

        pdf.SaveAs("output.pdf");
    }
}
// NuGet: Install-Package IronPdf
using IronPdf;
using System;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();

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

        pdf.SaveAs("output.pdf");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

ChromePdfRendererクラスは、プラットフォーム固有の設定なしにPDF生成への即時アクセスを提供します。 包括的なHTML変換ガイダンスについては、HTML to PDFチュートリアルをご覧ください。

URLからPDFへの変換

ウェブページをPDF文書に変換することで、2つのライブラリのAPIの使い勝手の違いを示します。

TuesPechkinの実装

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

// NuGet: Install-Package TuesPechkin
using TuesPechkin;
using System.IO;

class Program
{
    static void Main()
    {
        var converter = new StandardConverter(
            new RemotingToolset<PdfToolset>(
                new Win64EmbeddedDeployment(
                    new TempFolderDeployment())));

        byte[] pdfBytes = converter.Convert(new HtmlToPdfDocument
        {
            Objects = {
                new ObjectSettings {
                    PageUrl = "https://www.example.com"
                }
            }
        });

        File.WriteAllBytes("webpage.pdf", pdfBytes);
    }
}
// NuGet: Install-Package TuesPechkin
using TuesPechkin;
using System.IO;

class Program
{
    static void Main()
    {
        var converter = new StandardConverter(
            new RemotingToolset<PdfToolset>(
                new Win64EmbeddedDeployment(
                    new TempFolderDeployment())));

        byte[] pdfBytes = converter.Convert(new HtmlToPdfDocument
        {
            Objects = {
                new ObjectSettings {
                    PageUrl = "https://www.example.com"
                }
            }
        });

        File.WriteAllBytes("webpage.pdf", pdfBytes);
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

同じように初期化の複雑さが適用され、時代遅れのWebKitエンジンは、CSS3とJavaScriptのサポートが欠落しているため、最新のウェブサイトを正しくレンダリングできない可能性があります。

IronPDFの実装

IronPDFは最新のChromiumエンジンでURLレンダリングのための専用メソッドを提供します:

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

RenderUrlAsPdfメソッドは、ヘッドレスChromiumブラウザでページを読み込み、JavaScriptを実行し、すべてのモダンなCSSスタイルを正確に適用します。 これは、React、Angular、Vue.jsのようなフレームワークで構築されたウェブアプリケーションで、火ペチキンが正しくレンダリングできない場合に不可欠です。

カスタム レンダリング設定

ページの寸法、余白、向きを設定することで、ドキュメント設定に対するさまざまなアプローチが明らかになります。

TuesPechkinの構成

TuesPechkin は、GlobalSettingsObjectSettingsクラスをネストされた設定で使用しています:

// NuGet: Install-Package TuesPechkin
using TuesPechkin;
using System.IO;

class Program
{
    static void Main()
    {
        var converter = new StandardConverter(
            new RemotingToolset<PdfToolset>(
                new Win64EmbeddedDeployment(
                    new TempFolderDeployment())));

        string html = "<html><body><h1>Custom PDF</h1></body></html>";

        var document = new HtmlToPdfDocument
        {
            GlobalSettings = {
                Orientation = GlobalSettings.PdfOrientation.Landscape,
                PaperSize = GlobalSettings.PdfPaperSize.A4,
                Margins = new MarginSettings { Unit = Unit.Millimeters, Top = 10, Bottom = 10 }
            },
            Objects = {
                new ObjectSettings { HtmlText = html }
            }
        };

        byte[] pdfBytes = converter.Convert(document);
        File.WriteAllBytes("custom.pdf", pdfBytes);
    }
}
// NuGet: Install-Package TuesPechkin
using TuesPechkin;
using System.IO;

class Program
{
    static void Main()
    {
        var converter = new StandardConverter(
            new RemotingToolset<PdfToolset>(
                new Win64EmbeddedDeployment(
                    new TempFolderDeployment())));

        string html = "<html><body><h1>Custom PDF</h1></body></html>";

        var document = new HtmlToPdfDocument
        {
            GlobalSettings = {
                Orientation = GlobalSettings.PdfOrientation.Landscape,
                PaperSize = GlobalSettings.PdfPaperSize.A4,
                Margins = new MarginSettings { Unit = Unit.Millimeters, Top = 10, Bottom = 10 }
            },
            Objects = {
                new ObjectSettings { HtmlText = html }
            }
        };

        byte[] pdfBytes = converter.Convert(document);
        File.WriteAllBytes("custom.pdf", pdfBytes);
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

IronPDFの設定

IronPDFは直感的なプロパティ名でRenderingOptionsプロパティに設定を集中させます:

// NuGet: Install-Package IronPdf
using IronPdf;
using IronPdf.Engines.Chrome;
using System;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();

        renderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Landscape;
        renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
        renderer.RenderingOptions.MarginTop = 10;
        renderer.RenderingOptions.MarginBottom = 10;

        string html = "<html><body><h1>Custom PDF</h1></body></html>";
        var pdf = renderer.RenderHtmlAsPdf(html);

        pdf.SaveAs("custom.pdf");
    }
}
// NuGet: Install-Package IronPdf
using IronPdf;
using IronPdf.Engines.Chrome;
using System;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();

        renderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Landscape;
        renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
        renderer.RenderingOptions.MarginTop = 10;
        renderer.RenderingOptions.MarginBottom = 10;

        string html = "<html><body><h1>Custom PDF</h1></body></html>";
        var pdf = renderer.RenderHtmlAsPdf(html);

        pdf.SaveAs("custom.pdf");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

RenderingOptionsクラスは、マージン値がラッパーオブジェクトなしでミリメートル単位で直接指定される統一された設定アプローチを提供します。

スレッドセーフティと並行処理

スレッドセーフは、サーバーサイドPDF生成にとって重要な考慮事項であり、2つのライブラリは根本的に異なるアプローチをとります。

TuesPechkinスレッド管理

TuesPechkin は、ThreadSafeConverterを通じてスレッドセーフ動作を宣伝していますが、実装には文書化された制限があります:

//火曜日- Even with ThreadSafeConverter, crashes under load
var converter = new TuesPechkin.ThreadSafeConverter(
    new TuesPechkin.RemotingToolset<PechkinBindings>());

// Under high load, applications may experience:
// - System.AccessViolationException
// - StackOverflowException
// - Process hangs indefinitely
// - Memory corruption
//火曜日- Even with ThreadSafeConverter, crashes under load
var converter = new TuesPechkin.ThreadSafeConverter(
    new TuesPechkin.RemotingToolset<PechkinBindings>());

// Under high load, applications may experience:
// - System.AccessViolationException
// - StackOverflowException
// - Process hangs indefinitely
// - Memory corruption
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

基礎となるwkhtmltopdfライブラリは、高同期シナリオ用に設計されておらず、ラッパーレベルのスレッド管理であっても、大きな負荷がかかると安定性に問題が生じます。

IronPDFのネイティブ並行処理

IronPdfは設定なしでネイティブのスレッドセーフを提供します:

//IronPDF- Native thread safety
var renderer = new ChromePdfRenderer();

// Safe for concurrent use across multiple threads
// No AccessViolationException
// No process hangs
// Stable under high load
//IronPDF- Native thread safety
var renderer = new ChromePdfRenderer();

// Safe for concurrent use across multiple threads
// No AccessViolationException
// No process hangs
// Stable under high load
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

ChromePdfRendererは内部で並行処理を行うため、開発者はスレッドの同期よりもアプリケーションロジックに集中することができます。

最新の CSS と JavaScript のサポート。

TuespechkinとIronPDFのレンダリングエンジンの違いは、最新のウェブテクノロジーを使用する際に最も顕著に現れます。

TuesPechkinレンダリングの制限事項

TuesPechkin の Qt WebKit 4.8 エンジンは、最新の CSS レイアウトシステムよりも古いものです:

<!-- This modern CSS doesn't work in火曜日-->
<div style="display: flex; justify-content: space-between; gap: 20px;">
    <div style="flex: 1;">Column 1</div>
    <div style="flex: 1;">Column 2</div>
</div>

<div style="display: grid; grid-template-columns: repeat(3, 1fr);">
    <div>Grid Item 1</div>
    <div>Grid Item 2</div>
    <div>Grid Item 3</div>
</div>
<!-- This modern CSS doesn't work in火曜日-->
<div style="display: flex; justify-content: space-between; gap: 20px;">
    <div style="flex: 1;">Column 1</div>
    <div style="flex: 1;">Column 2</div>
</div>

<div style="display: grid; grid-template-columns: repeat(3, 1fr);">
    <div>Grid Item 1</div>
    <div>Grid Item 2</div>
    <div>Grid Item 3</div>
</div>
HTML

TuesPechkin を使用するアプリケーションは、複数カラムのデザインを実現するために、テーブルベースのレイアウトまたはその他の CSS2.1 回避策に頼らなければなりません。

IronPDFモダンレンダリング

IronPdfのChromiumエンジンはすべてのモダンなCSSとJavaScriptをサポートしています:

// Modern CSS works correctly with IronPDF
var html = @"
    <div style='display: flex; justify-content: space-between;'>
        <div>Left</div>
        <div>Right</div>
    </div>";

var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(html);
// Renders correctly with full Flexbox support
// Modern CSS works correctly with IronPDF
var html = @"
    <div style='display: flex; justify-content: space-between;'>
        <div>Left</div>
        <div>Right</div>
    </div>";

var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(html);
// Renders correctly with full Flexbox support
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

これにより、開発者は別々のテンプレートを維持することなく、ウェブ表示とPDF生成の両方に同じHTML/CSSを使用することができます。

チームがTuesPechkinの代替案を検討するとき

開発チームは、火ペチキンに代わる選択肢を検討する必要があります:

セキュリティ要件

CVE-2022-35583がCritical(9.8/10)と評価され、基礎となるwkhtmltopdfライブラリが公式に放棄されたため、セキュリティコンプライアンスの要件を持つ組織は、TuesPechkinを使い続けることはできません。 SSRFの脆弱性により、攻撃者は悪意のあるHTMLコンテンツを通じて内部ネットワークにアクセスし、認証情報を盗み、データを流出させることができます。

最新のウェブ技術の採用

最新のフロントエンドフレームワーク(React、Angular、Vue.js)やCSSレイアウトシステム(Flexbox、Grid)を採用しているチームは、TuesPechkinではコンテンツを正確にレンダリングできないことに気づきます。 時代遅れのWebKit 4.8エンジンでは、10年近く前から標準となっている技術のサポートが不足しています。

負荷時の安定性

サーバーサイドのアプリケーションで、クラッシュやハング、AccessViolationExceptionエラーが発生し、PDFの同時生成負荷がかかっている場合、多くの場合、このような問題の原因はTuespechkinのスレッド制限にあります。 ThreadSafeConverterを設定しても、基礎となるwkhtmltopdfライブラリは高同期環境用に設計されていません。

PDFの機能要件

TuesPechkinはHTMLからPDFへの変換のみを提供します。 PDF操作(結合、分割)、電子署名、PDF/Aコンプライアンス、フォーム入力、透かしを必要とするチームは、ライブラリを追加するか、IronPDFのようなこれらの機能をネイティブで提供する代替ツールを検討する必要があります。

シンプルな配置

RemotingToolsetWin64EmbeddedDeploymentTempFolderDeploymentによる火曜日初期化パターンは、デプロイメントを複雑にします。 プラットフォーム固有のネイティブバイナリは、各ターゲット環境に正しく設定されている必要があります。 IronPdfは標準的なNuGetインストールでこの複雑さを解消します。

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

IronPDFへの移行を検討しているチームは、このマッピングがコンセプトの等価性を理解するのに役立つと思われます:

火曜日IronPDFノート
StandardConverter / ThreadSafeConverter<コード>ChromePdfRenderer</コードスレッド管理不要
<コード>HtmlToPdfDocument</コードメソッドのパラメータHTML文字列の直接入力
<コード>GlobalSettings.PaperSize</コード<コード>RenderingOptions.PaperSize</コード同じ用紙サイズ
<コード>GlobalSettings.Orientation</コード<コード>RenderingOptions.PaperOrientation</コードポートレート/風景
グローバル設定.マージンRenderingOptions.MarginTop/Bottom/Left/Right直接ミリメートル値
<コード>ObjectSettings.HtmlText</コードRenderHtmlAsPdf(html)を使用してください。HTMLコンテンツパラメータ
<コード>ObjectSettings.PageUrl</コードRenderUrlAsPdf(url)を使用してください。URLレンダリング方法
RemotingToolset + Deployment です。不要自動デプロイメント
<コード>[ページ]</コード>プレースホルダ<コード>{ページ}</コード>プレースホルダページ番号構文
[toPage]プレースホルダ{総ページ数}プレースホルダ総ページ数

追加のPDF機能

HTMLからPDFへの変換にとどまらず、IronPDFはTuesPechkinが提供できないドキュメント操作機能を提供します:

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

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

結論

TuesPechkinとIronPDFは.NET PDF生成の異なる時代を表しています。火曜日は、wkhtmltopdfのラッパーを MIT ライセンスで無償提供していますが、重大なセキュリティ脆弱性、時代遅れのレンダリングエンジン、複雑なスレッド管理要件、負荷時の安定性の問題を引き継いでいます。 基礎となる技術は2022年に放棄され、セキュリティパッチも提供されていません。

IronPdfは最新のウェブテクノロジーをサポートするChromiumベースのレンダリングエンジンを搭載し、最新のアクティブにメンテナンスされた代替手段を提供します。 ネイティブのスレッドセーフ、包括的なPDF機能、わかりやすいAPI設計により、wkhtmltopdfラッパー固有の制限に対処しています。

現在、TuesPechkinを使用しているチームでは、セキュリティ要件、レンダリング品質のニーズ、安定性の懸念、または基本的なHTML変換を超えるPDF機能の要件から移行を決定することがよくあります。 2つのライブラリ間のAPIマッピングは簡単で、IronPDFは初期化と設定パターンが単純化されているため、一般的に必要なコードが少なくなっています。

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