C#で火PechkinからIronPDFに移行する方法
TuesPechkinからIronPDFへの移行:完全なC#開発者ガイド
TuesPechkin は、wkhtmltopdfライブラリのスレッドセーフなラッパーとして機能し、.NET開発者がHTMLをPDFに変換するのを何年も支援してきました。 しかし、基礎となるwkhtmltopdf技術は2015年を最後に更新されず、2022年12月に正式に放棄されました。このため、開発チームがもはや無視できない重大なセキュリティ、安定性、レンダリングの制限が生じています。
このガイドでは、.NET開発者が移行を検討するために、ステップバイステップの手順、コード比較、実用的な例を用いて、TuesPechkinからIronPDFへの完全な移行パスを提供します。
なぜ今TuesuesPechkinから移行するのか
セキュリティを重視する開発チームにとって、TuesPechkinからの移行はもはやオプションではありません。 基礎となるwkhtmltopdfライブラリには、パッチが適用されていない重大な脆弱性があり、今後も修正されることはないでしょう。
重大なセキュリティ脆弱性:CVE-2022-35583
| 属性 | 価値 |
|---|---|
| CVE ID | CVE-2022-35583 |
| 厳しさ | 重要(9.8/10)。 |
| アタックベクター | ネットワーク |
| <ステータス | パッチは適用されません。 |
| 影響を受ける言語 | すべての火曜日Pechkinバージョン |
wkhtmltopdfのメンテナは、セキュリティの脆弱性を修正しないと明言しています。火曜日を使用するすべてのアプリケーションは、Server-Side Request Forgery (SSRF) 攻撃に永久にさらされます。
攻撃の仕組み
ユーザーが提供したHTMLを処理する際、攻撃者は悪意のあるコンテンツを注入することができます:
<!-- Attacker submits this HTML to your PDF generator -->
<iframe src="http://169.254.169.254/latest/meta-data/iam/security-credentials/"></iframe>
<img src="http://internal-admin-panel:8080/api/users?export=all" /><!-- Attacker submits this HTML to your PDF generator -->
<iframe src="http://169.254.169.254/latest/meta-data/iam/security-credentials/"></iframe>
<img src="http://internal-admin-panel:8080/api/users?export=all" />これにより、攻撃者はAWS/Azure/GCPのメタデータエンドポイントにアクセスし、内部APIデータを盗み、内部ネットワークをポートスキャンし、機密設定を流出させることができます。
テクノロジーの危機
tuespechkinは、Qt WebKit 4.8を使用するwkhtmltopdfをラップしています。 これにより、以下が実現されます。
- Flexboxをサポートしていません
- CSSグリッドのサポートなし
- 壊れたJavaScriptの実行
- ES6+はサポートしません。
安定性の危機
宣伝されているThreadSafeConverterを使用しても、高負荷時に火曜日がクラッシュします:
// ❌火曜日- "ThreadSafeConverter" still crashes
var converter = new TuesPechkin.ThreadSafeConverter(
new TuesPechkin.RemotingToolset<PechkinBindings>());
// Under high load, you'll see:
// System.AccessViolationException: Attempted to read or write protected memory
// Process terminated unexpectedly
// Converter hangs indefinitely// ❌火曜日- "ThreadSafeConverter" still crashes
var converter = new TuesPechkin.ThreadSafeConverter(
new TuesPechkin.RemotingToolset<PechkinBindings>());
// Under high load, you'll see:
// System.AccessViolationException: Attempted to read or write protected memory
// Process terminated unexpectedly
// Converter hangs indefinitelyIRON VB CONVERTER ERROR developers@ironsoftware.comIronPDFとTuesPechkinの比較:機能の比較
アーキテクチャの違いを理解することは、技術的な意思決定者が移行への投資を評価するのに役立ちます:
| フィーチャー | 火曜日 | IronPDF |
|---|---|---|
| ライセンス | フリー(MITライセンス) | 商用 |
| スレッドセーフティ | マニュアル管理が必要 | ネイティブサポート |
| 通貨について | 制限あり、負荷でクラッシュする可能性あり | 堅牢で、高い並行性に対応 |
| 開発分野 | 2015年最終更新 | 積極的かつ継続的な改善 |
| 使いやすさ | 複雑なセットアップ | ユーザーフレンドリーなガイド |
| ドキュメント | 基本 | 豊富な例文 |
| セキュリティ。 | ❌ 重大な CVEs | ✅ 既知の脆弱性はありません。 |
| HTMLからPDFへ | ⚠️ 時代遅れの WebKit | ✅ モダンChromium |
| CSS3について | ❌ 部分的 | フルサポート |
| フレックスボックス/グリッド | ❌ 未対応 | フルサポート |
| JavaScript(ジャバスクリプト | ⚠️ 信頼できない | ✅ ES6+のフルバージョン |
| PDF操作 | ❌ 利用不可 | フル |
| デジタル署名。 | ❌ 利用不可 | フル |
| PDF/Aコンプライアンス | ❌ 利用不可 | フル |
| フォーム入力 | ❌ 利用不可 | フル |
| ウォーターマーク。 | ❌ 利用不可 | フル |
| マージ/スプリット | ❌ 利用不可 | フル |
クイックスタートTuesPechkinからIronPDFへの移行
これらの基本的なステップを踏めば、すぐにでも移行を開始できます。
ステップ 1: NuGet パッケージを置き換える。
すべての火曜日パッケージを削除します:
# Remove火曜日and all related packages
dotnet remove package TuesPechkin
dotnet remove package TuesPechkin.Wkhtmltox.Win64
dotnet remove package TuesPechkin.Wkhtmltox.Win32# Remove火曜日and all related packages
dotnet remove package TuesPechkin
dotnet remove package TuesPechkin.Wkhtmltox.Win64
dotnet remove package TuesPechkin.Wkhtmltox.Win32IronPDFをインストールします:
# Install IronPDF
dotnet add package IronPdf# Install IronPDF
dotnet add package IronPdfステップ 2: ネイティブ バイナリの削除
プロジェクトからこれらのファイルとフォルダを削除してください:
- <コード>wkhtmltox.dll</コード
- <コード>wkhtmltopdf.exe</コード
- すべての
wkhtmlto*ファイル TuesPechkin.Wkhtmltoxフォルダ
ステップ 3: 名前空間の更新
TuesPechkin名前空間をIronPdf名前空間に置き換えてください:
// Before (TuesPechkin)
using TuesPechkin;
using TuesPechkin.Wkhtmltox.Win64;
// After (IronPDF)
using IronPdf;// Before (TuesPechkin)
using TuesPechkin;
using TuesPechkin.Wkhtmltox.Win64;
// After (IronPDF)
using IronPdf;IRON VB CONVERTER ERROR developers@ironsoftware.comステップ 4: ライセンスの初期化
アプリケーション起動時のライセンス初期化を追加します:
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"コード移行の例
HTML を PDF に変換する
最も一般的な使用例は、これらの.NET PDFライブラリの複雑さの違いを示しています。
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.comIronPDFのアプローチ:
// 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.comTuesPechkinバージョンでは、複雑な初期化チェーンを持つStandardConverterを作成する必要があります:RemotingToolset、Win64EmbeddedDeployment、TempFolderDeploymentです。 また、手動でバイトをファイルに書き込む必要があります。
IronPDFはこの儀式を完全に排除します。 ChromePdfRendererを作成し、HTMLをレンダリングして保存します。 コードは自己文書化されており、デプロイツールセットやプラットフォーム固有のバイナリ管理について理解する必要はありません。
高度なHTMLからPDFへのシナリオについては、HTMLからPDFへの変換ガイドをご覧ください。
URLをPDFに変換する
URLからPDFへの変換でも、同様の複雑さの違いが見られます。
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())));
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.comIronPDFのアプローチ:
// 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.comTuesPechkinは、HtmlToPdfDocumentの中に入れ子になったObjectSettings.PageUrlを使用しています。 IronPDFは意図を明確に表現する専用のRenderUrlAsPdfメソッドを提供します。
認証とカスタムヘッダーオプションについては、URL to PDF documentationを参照してください。
カスタム レンダリング設定
ページの向き、用紙サイズ、余白には、さまざまな設定アプローチが必要です。
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>Custom PDF</h1></body></html>";
var document = new HtmlToPdfDocument
{
GlobalSettings = {
オリエンテーション= 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 = {
オリエンテーション= 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.comIronPDFのアプローチ:
// 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.comTuesPechkin は設定を、ドキュメント全体のオプションのための<コード>グローバル設定</コードと、コンテンツのための ObjectSettings に分けています。 IronPdfはすべてをRenderingOptionsに統合し、明確で発見しやすいプロパティ名にしています。
TuesPechkinAPIからIronPDFへのマッピングリファレンス
このマッピングは、APIと同等のものを直接示すことで、移行を加速します:
| 火曜日 | IronPDF | ノート |
|---|---|---|
| <コード>StandardConverter</コード | <コード>ChromePdfRenderer</コード | 複雑な初期化なし |
| <コード>ThreadSafeConverter</コード | <コード>ChromePdfRenderer</コード | ネイティブのスレッドセーフ |
| <コード>HtmlToPdfDocument</コード | メソッドのパラメータ | ドキュメントオブジェクト不要 |
| <コード>グローバル設定</コード | <コード>レンダリングオプション</コード | 設定オプション |
| <コード>ObjectSettings.HtmlText</コード | RenderHtmlAsPdf(html)を使用してください。 | 直接レンダリング |
| <コード>ObjectSettings.PageUrl</コード | RenderUrlAsPdf(url)を使用してください。 | URLレンダリング |
| <コード>GlobalSettings.PaperSize</コード | <コード>RenderingOptions.PaperSize</コード | 用紙サイズ |
| <コード>GlobalSettings.Orientation</コード | <コード>RenderingOptions.PaperOrientation</コード | オリエンテーション |
| <コード>マージン設定</コード | MarginTop、MarginBottomなど。 | 個々のマージン特性 |
| <コード>[ページ]</コード>プレースホルダ | <コード>{ページ}</コード>プレースホルダ | ページ番号構文 |
[toPage]プレースホルダ | {総ページ数}プレースホルダ | 総ページ数 |
| <コード>RemotingToolset</コード | 不要 | デプロイメント管理なし |
Win64EmbeddedDeployment(ウィン64エンベデッドデプロイメント) | 不要 | プラットフォームバイナリなし |
TempFolderDeployment(テンプフォルダーデプロイメント | 不要 | テンポラリフォルダ管理なし |
一般的な移行の問題と解決策
課題1: 複雑な初期化コード
問題: TuesPechkinは、デプロイツールセットによる複雑なコンバーターのセットアップを必要とします。
ソリューション: IronPDFはシンプルです:
// Before (TuesPechkin)
var converter = new StandardConverter(
new RemotingToolset<PdfToolset>(
new Win64EmbeddedDeployment(
new TempFolderDeployment())));
// After (IronPDF)
var renderer = new ChromePdfRenderer();
// That's it!// Before (TuesPechkin)
var converter = new StandardConverter(
new RemotingToolset<PdfToolset>(
new Win64EmbeddedDeployment(
new TempFolderDeployment())));
// After (IronPDF)
var renderer = new ChromePdfRenderer();
// That's it!IRON VB CONVERTER ERROR developers@ironsoftware.com問題 2: スレッドセーフティのクラッシュ
問題火曜日の ThreadSafeConverter<//code> は、高負荷時に AccessViolationException<//code> でクラッシュします。
ソリューション: IronPDFはネイティブのスレッドセーフを備えています:
//IronPDFis inherently thread-safe
var renderer = new ChromePdfRenderer();
// Use from any thread without crashes//IronPDFis inherently thread-safe
var renderer = new ChromePdfRenderer();
// Use from any thread without crashesIRON VB CONVERTER ERROR developers@ironsoftware.com課題3: ページ番号のプレースホルダーの構文
問題: TuesPechkinは[page]と[toPage]プレースホルダを使用しています。
解決策: IronPDFのプレースホルダー構文を更新しました:
// Before (TuesPechkin)
"Page [page] of [toPage]"
// After (IronPDF)
"Page {page} of {total-pages}"// Before (TuesPechkin)
"Page [page] of [toPage]"
// After (IronPDF)
"Page {page} of {total-pages}"IRON VB CONVERTER ERROR developers@ironsoftware.com課題4: CSSレイアウトが壊れています
問題:wkhtmltopdfがQt WebKit 4.8を使用しているため、FlexboxとGridレイアウトがTuesPechkinで動作しません。
ソリューション: IronPDFで適切なモダンCSSを使用してください:
// Remove table-based workarounds, use modern CSS
var html = @"
<div style='display: flex; justify-content: space-between;'>
<div>Left</div>
<div>Right</div>
</div>";
var pdf = renderer.RenderHtmlAsPdf(html);
// Works correctly with Chromium!// Remove table-based workarounds, use modern CSS
var html = @"
<div style='display: flex; justify-content: space-between;'>
<div>Left</div>
<div>Right</div>
</div>";
var pdf = renderer.RenderHtmlAsPdf(html);
// Works correctly with Chromium!IRON VB CONVERTER ERROR developers@ironsoftware.com第5号:ネイティブ・バイナリ管理
問題 TuesPechkinは、プラットフォーム固有のwkhtmltopdfバイナリとパス設定を必要とします。
ソリューション: IronPDFはNuGetを通してすべての依存関係を処理します:
# Just install the package
dotnet add package IronPdf
# No wkhtmltopdf binaries needed# Just install the package
dotnet add package IronPdf
# No wkhtmltopdf binaries neededTuesPechkin移行チェックリスト
マイグレーション前のタスク
コードベースを監査し、すべてのTuesPechkinの使用法を特定します:
grep -r "using TuesPechkin" --include="*.cs" .
grep -r "ThreadSafeConverter\|RemotingToolset" --include="*.cs" .grep -r "using TuesPechkin" --include="*.cs" .
grep -r "ThreadSafeConverter\|RemotingToolset" --include="*.cs" .現在のGlobalSettings設定(用紙サイズ、向き、余白)を文書化する。 ObjectSettings<//code> の設定を文書化します(HTML コンテンツ、URL)。 変換のためのヘッダー/フッター実装を特定する。 すべてのwkhtmltopdfバイナリを検索して削除してください。
コード更新タスク
1.TuesPechkin NuGet パッケージの削除 2.wkhtmltopdfネイティブバイナリの削除 3.IronPdf NuGetパッケージをインストールする 4.using文をTuesPechkinからIronPdfに更新してください。 5.起動時のライセンスキー初期化の追加 6.コンバーターを ChromePdfRenderer<//code> に置き換えてください。 7.GlobalSettingsをRenderingOptionsに変換してください。 8.ObjectSettingsをメソッドのパラメータに変換する 9.個々のプロパティへのマージン設定の更新 10.ヘッダー/フッター構文をHTMLベースのHtmlHeaderFooterに更新する。 11.ページのプレースホルダの構文を修正 ([page] → {page}) 12.すべてのデプロイメント/ツールセットコードを削除する
移行後のテスト
移行後、これらの点を検証してください:
- すべてのユニットテストを実行する
- スレッドセーフなシナリオをテストする(IronPDFはクラッシュすることなくマルチスレッドに対応します)
- PDF出力品質の比較(Chromiumの方が正確にレンダリングされる)
- CSSレンダリングの検証(FlexboxとGridが動作するようになりました)
- JavaScriptの実行テスト(ES6+に対応しました)
- ヘッダー/フッターレンダリングのテスト
- パフォーマンステストのバッチ操作
- wkhtmltopdfバイナリが残っていないことを確認するためのセキュリティスキャン
IronPDFに移行する主な利点
TuespechkinからIronPDFに移行することで、いくつかの重要な利点が得られます:
セキュリティ:CVE-2022-35583およびその他のwkhtmltopdfの脆弱性が取り除かれました。 IronPdfのChromiumエンジンは定期的にセキュリティアップデートを受けています。
ネイティブのスレッドセーフ: もう複雑な ThreadSafeConverter<//code> 設定は必要ありません。 もう AccessViolationException<//code> が負荷でクラッシュすることはありません。 IronPdfは自動的に並行処理を行います。
最新のレンダリングエンジン:完全な CSS3、Flexbox、Grid、および ES6+ JavaScript サポート。 PDFは、モダンブラウザで表示されるコンテンツとまったく同じようにレンダリングされます。
シンプルなデプロイ: プラットフォーム固有のバイナリを管理する必要はありません。 RemotingToolset、Win64EmbeddedDeployment、TempFolderDeployment のセレモニーはありません。 NuGetパッケージをインストールするだけです。
アクティブ開発:2026年まで.NET 10とC# 14の採用が増加する中、IronPDFの定期的なアップデートは現在と将来の.NETバージョンとの互換性を保証します。
拡張機能: TuesPechkinはHTMLをPDFに変換するだけです。 IronPdfはPDF操作、電子署名、PDF/Aコンプライアンス、フォーム入力、透かし、結合/分割操作を追加します。
結論
TuesPechkin は、wkhtmltopdfのスレッドセーフなラッパーとして、.NETコミュニティに貢献してきました。 しかし、2022年12月以降、基礎となる技術が放棄され、重大なセキュリティ脆弱性のパッチが適用されることはないため、使用を継続すると、本番アプリケーションに許容できないリスクが生じます。
IronPdfはよりシンプルなAPI、ネイティブのスレッドセーフ、最新のウェブ標準を扱うChromiumレンダリングエンジンを備えた、現代的で安全な代替手段を提供します。 NuGetパッケージを置き換え、ネイティブバイナリを排除し、コンバータコードを簡素化することです。
IronPDFの無料トライアルで今すぐ移行を開始し、wkhtmltopdfベースのソリューションに内在するセキュリティの脆弱性を排除しましょう。
包括的な実装ガイダンスについては、IronPDFドキュメントとチュートリアルをご覧ください。






