C#でSpire.PDFからIronPDFへ移行する方法
Spire.PDFからIronPDFへの移行:完全なC#移行ガイド
Spire.PDFからIronPdfへの移行は、テキストを画像としてレンダリングするライブラリから、最新のChromiumレンダリングエンジンを使用して、選択可能で検索可能な真のテキストを生成するライブラリへとPDF生成ワークフローを変換します。このガイドでは、Spire.PDFの致命的なHTMLレンダリングの制限とフォント埋め込みの問題を解決する、完全でステップバイステップの移行パスを提供します。
なぜSpire.PDFからIronPDFへ移行するのか
スパイアを理解する.PDF
Spire.PDFは、.NET開発者がPDFドキュメントを効率的に扱えるように設計された、堅牢な商用PDFライブラリです。 Spire.PDFは、特にレガシーアプリケーションにおいて、その特異な機能によりプログラミングコミュニティでその名を知られており、その統合機能はE-iceblueツールセットの他のコンポーネントとシームレスに連携しています。
しかし、Spire.PDFには、特にHTMLからPDFへの変換や最新のWeb標準のサポートなど、実際の使用に影響するいくつかの根本的な問題があります。
重要な技術的問題
| 問題 | インパクト | IronPDF ソリューション |
|---|---|---|
| 画像としてレンダリングされたテキスト。 | PDFが検索できない、アクセスできない、テキストがコピーできない。 | リアルテキストレンダリング |
| インターネット・エクスプローラー依存性 | 時代遅れのレンダリング、セキュリティリスク | 最新のChromiumエンジン |
| フォント埋め込みに失敗しました。 | ドキュメントが他のシステムで間違って見える | 信頼性の高いフォント処理 |
| 大きなデプロイメントフットプリント。 | メモリ使用量が多く、起動が遅い | 効率的なデプロイメント |
| 限定的なCSSサポート。 | 最新のレイアウトが正しく表示されない | CSS3をフルサポート |
核となる問題:画像ベースのPDF
Spire.PDFの重大な欠点の1つは、HTMLドキュメント内のテキストを画像としてレンダリングする傾向があることです。 その結果、テキストを選択したり検索したりすることができないPDFができあがります。これは、検索機能や文書テキストのインタラクションが必要なアプリケーションにとっては重大な制限となります。
Spire.PDFのLoadFromHTML()メソッドを使用すると、テキストが実際のテキストではなくビットマップ画像としてレンダリングされることが多く、このような問題が発生します:
- テキストは選択できません
- テキストは検索できません
- テキストはコピーできません
- スクリーンリーダーでは読めません(アクセシビリティ違反)。
- ファイルサイズは非常に大きくなります。
- ズームするとピクセル化する
Spire.PDFとIronPDFの比較
| フィーチャー | Spire.PDF | IronPDF |
|---|---|---|
| HTMLからPDFへのレンダリング。 | 画像としてレンダリングされたテキスト | 真のテキストレンダリング(選択および検索可能) |
| レンダリングエンジン | Internet Explorerに依存するシステムもあります。 | Chromiumベース、最新のウェブ標準準拠 |
| フォントの扱い | フォント埋め込みに関する既知の問題 | 信頼性の高い堅牢なフォント処理 |
| CSS3のサポート。 | 制限的 | フル |
| フレックスボックス/グリッド | サポートされていません | フルサポート |
| JavaScript(ジャバスクリプト | 制限的 | 完全なES6 |
| PDFアクセシビリティ | 悪い(画像ベース) | 優秀 |
| APIデザイン。 | 複雑 | シンプルで直感的 |
| 展開フットプリント | 大規模 | 適度 |
| ライセンスについて | フリーミアム/商用 | 商用 |
2025年と2026年まで.NET 10とC# 14の採用を計画しているチームにとって、IronPDFはSpire.PDFのHTMLからPDFへの変換における重要な問題を解決し、テキストを画像ではなく実際に選択可能なテキストとしてレンダリングすることで、PDFの検索性とアクセス性を確保します。
始める前に
前提条件
1..NET環境: .NET Framework 4.6.2+ または .NET Core 3.1+ / .NET 5/6/7/8/9+. 2.NuGetアクセス:NuGetパッケージをインストールする能力。 3.IronPDFライセンス:ironPdf.comからライセンスキーを取得してください。
NuGetパッケージの変更
# Remove Spire.PDF
dotnet remove package Spire.PDF
dotnet remove package FreeSpire.PDF # If using free version
# Install IronPDF
dotnet add package IronPdf# Remove Spire.PDF
dotnet remove package Spire.PDF
dotnet remove package FreeSpire.PDF # If using free version
# Install IronPDF
dotnet add package IronPdfライセンス構成
// Add at application startup
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";// Add at application startup
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";IRON VB CONVERTER ERROR developers@ironsoftware.com完全な API リファレンス
名前空間の変更
// Before: Spire.PDF
using Spire.Pdf;
using Spire.Pdf.Graphics;
using Spire.Pdf.HtmlConverter;
// After: IronPDF
using IronPdf;
using IronPdf.Editing;// Before: Spire.PDF
using Spire.Pdf;
using Spire.Pdf.Graphics;
using Spire.Pdf.HtmlConverter;
// After: IronPDF
using IronPdf;
using IronPdf.Editing;IRON VB CONVERTER ERROR developers@ironsoftware.comコア API マッピング
| Spire.PDF | IronPDF | ノート |
|---|---|---|
new PdfDocument(). | new ChromePdfRenderer(). | HTMLレンダリング |
pdf.LoadFromHTML()を使用してください。 | <コード>renderer.RenderHtmlAsPdf()</コード | HTML変換 |
pdf.LoadFromFile()を使用してください。 | PdfDocument.FromFile()を使用してください。 | 既存のPDFを読み込む |
pdf.SaveToFile()を使用してください。 | <コード>pdf.SaveAs()</コード | ファイルに保存 |
| <コード>pdf.Close()</コード | 不要 | dispose パターンの使用 |
pdf.Pages.Add(). | <コード>renderer.RenderHtmlAsPdf()</コード | HTMLからページを作成 |
| <コード>pdf.InsertPageRange()</コード | PdfDocument.Merge()を使用してください。 | PDFのマージ |
page.Canvas.DrawString()。 | <コード>TextStamper</コード> + <コード>ApplyStamp()</コード | テキストの追加 |
| <コード>PdfFont</コード | HTMLのCSSスタイリング | フォント設定 |
| <コード>PdfBrush</コード | HTMLのCSSスタイリング | 色/塗りつぶし設定 |
コード移行の例
例1: HTMLからPDFへの変換
翻訳前 (Spire.PDF):
// NuGet: Install-Package Spire.PDF
using Spire.Pdf;
using Spire.Pdf.Graphics;
using System;
class Program
{
static void Main()
{
PdfDocument pdf = new PdfDocument();
PdfHtmlLayoutFormat htmlLayoutFormat = new PdfHtmlLayoutFormat();
string htmlString = "<html><body><h1>Hello World</h1><p>This is a PDF from HTML.</p></body></html>";
pdf.LoadFromHTML(htmlString, false, true, true);
pdf.SaveToFile("output.pdf");
pdf.Close();
}
}// NuGet: Install-Package Spire.PDF
using Spire.Pdf;
using Spire.Pdf.Graphics;
using System;
class Program
{
static void Main()
{
PdfDocument pdf = new PdfDocument();
PdfHtmlLayoutFormat htmlLayoutFormat = new PdfHtmlLayoutFormat();
string htmlString = "<html><body><h1>Hello World</h1><p>This is a PDF from HTML.</p></body></html>";
pdf.LoadFromHTML(htmlString, false, true, true);
pdf.SaveToFile("output.pdf");
pdf.Close();
}
}IRON VB CONVERTER ERROR developers@ironsoftware.com翻訳後(IronPDF):。
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
string htmlString = "<html><body><h1>Hello World</h1><p>This is a PDF from HTML.</p></body></html>";
var pdf = renderer.RenderHtmlAsPdf(htmlString);
pdf.SaveAs("output.pdf");
}
}// NuGet: Install-Package IronPdf
using IronPdf;
using System;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
string htmlString = "<html><body><h1>Hello World</h1><p>This is a PDF from HTML.</p></body></html>";
var pdf = renderer.RenderHtmlAsPdf(htmlString);
pdf.SaveAs("output.pdf");
}
}IRON VB CONVERTER ERROR developers@ironsoftware.comこの例は、HTMLレンダリングの基本的な違いを示しています。 Spire.PDFは、PdfHtmlLayoutFormatオブジェクトでLoadFromHTML()を使用し、多くの場合、テキストをビットマップ画像としてレンダリングします。 その結果、ユーザーがテキストを選択、コピー、検索できないPDFが出来上がりました。
IronPDFはChromePdfRendererとRenderHtmlAsPdf()を使用し、完全に選択可能で、検索可能で、アクセス可能な真のテキストを生成します。 Close()呼び出しは必要ありません-IronPDFは自動クリーンアップのためにdisposeパターンを使用します。HTML to PDF documentation を参照してください。
例2: 複数のPDFをマージする
翻訳前 (Spire.PDF):
// NuGet: Install-Package Spire.PDF
using Spire.Pdf;
using System;
class Program
{
static void Main()
{
PdfDocument pdf1 = new PdfDocument();
pdf1.LoadFromFile("document1.pdf");
PdfDocument pdf2 = new PdfDocument();
pdf2.LoadFromFile("document2.pdf");
pdf1.InsertPageRange(pdf2, 0, pdf2.Pages.Count - 1);
pdf1.SaveToFile("merged.pdf");
pdf1.Close();
pdf2.Close();
}
}// NuGet: Install-Package Spire.PDF
using Spire.Pdf;
using System;
class Program
{
static void Main()
{
PdfDocument pdf1 = new PdfDocument();
pdf1.LoadFromFile("document1.pdf");
PdfDocument pdf2 = new PdfDocument();
pdf2.LoadFromFile("document2.pdf");
pdf1.InsertPageRange(pdf2, 0, pdf2.Pages.Count - 1);
pdf1.SaveToFile("merged.pdf");
pdf1.Close();
pdf2.Close();
}
}IRON VB CONVERTER ERROR developers@ironsoftware.com翻訳後(IronPDF):。
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
class Program
{
static void Main()
{
var pdf1 = PdfDocument.FromFile("document1.pdf");
var pdf2 = PdfDocument.FromFile("document2.pdf");
var merged = PdfDocument.Merge(pdf1, pdf2);
merged.SaveAs("merged.pdf");
}
}// NuGet: Install-Package IronPdf
using IronPdf;
using System;
class Program
{
static void Main()
{
var pdf1 = PdfDocument.FromFile("document1.pdf");
var pdf2 = PdfDocument.FromFile("document2.pdf");
var merged = PdfDocument.Merge(pdf1, pdf2);
merged.SaveAs("merged.pdf");
}
}IRON VB CONVERTER ERROR developers@ironsoftware.comSpire.PDFでは、new PdfDocument() + LoadFromFile()で各ドキュメントを手動で読み込み、InsertPageRange()を使って挿入するページを指定し、最後に各ドキュメントでClose()を呼び出す必要があります。
IronPDFはよりシンプルなPdfDocument.FromFile()パターンと、複数のドキュメントを受け入れる静的なPdfDocument.Merge()メソッドを使用します。 Close()コールは不要です。 詳しくは、チュートリアルをご覧ください。
例3: PDFにテキストを追加する
翻訳前 (Spire.PDF):
// NuGet: Install-Package Spire.PDF
using Spire.Pdf;
using Spire.Pdf.Graphics;
using System.Drawing;
using System;
class Program
{
static void Main()
{
PdfDocument pdf = new PdfDocument();
PdfPageBase page = pdf.Pages.Add();
PdfFont font = new PdfFont(PdfFontFamily.Helvetica, 20);
PdfBrush brush = new PdfSolidBrush(Color.Black);
page.Canvas.DrawString("Hello from Spire.PDF!", font, brush, new PointF(50, 50));
pdf.SaveToFile("output.pdf");
pdf.Close();
}
}// NuGet: Install-Package Spire.PDF
using Spire.Pdf;
using Spire.Pdf.Graphics;
using System.Drawing;
using System;
class Program
{
static void Main()
{
PdfDocument pdf = new PdfDocument();
PdfPageBase page = pdf.Pages.Add();
PdfFont font = new PdfFont(PdfFontFamily.Helvetica, 20);
PdfBrush brush = new PdfSolidBrush(Color.Black);
page.Canvas.DrawString("Hello from Spire.PDF!", font, brush, new PointF(50, 50));
pdf.SaveToFile("output.pdf");
pdf.Close();
}
}IRON VB CONVERTER ERROR developers@ironsoftware.com翻訳後(IronPDF):。
// NuGet: Install-Package IronPdf
using IronPdf;
using IronPdf.Editing;
using System;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<html><body></body></html>");
var textStamper = new TextStamper()
{
Text = "Hello from IronPDF!",
FontSize = 20,
VerticalOffset = 50,
HorizontalOffset = 50
};
pdf.ApplyStamp(textStamper);
pdf.SaveAs("output.pdf");
}
}// NuGet: Install-Package IronPdf
using IronPdf;
using IronPdf.Editing;
using System;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<html><body></body></html>");
var textStamper = new TextStamper()
{
Text = "Hello from IronPDF!",
FontSize = 20,
VerticalOffset = 50,
HorizontalOffset = 50
};
pdf.ApplyStamp(textStamper);
pdf.SaveAs("output.pdf");
}
}IRON VB CONVERTER ERROR developers@ironsoftware.comSpire.PDFは、PdfFont、PdfBrush、およびpage.Canvas.DrawString()によるキャンバスベースの描画モデルを使用し、PointFを使用して特定の座標にテキストを配置します。
IronPDFはText、FontSize、VerticalOffset、HorizontalOffsetのような直感的なプロパティを持つTextStamperオブジェクトを使用し、それをApplyStamp()で適用します。 このアプローチは、より宣言的で保守が容易です。
画像としてのテキスト問題
これが重要な理由
Spire.PDFが画像ベースのレンダリングを使用してHTMLをPDFに変換する場合、ドキュメントは本質的な機能を失います:
1.テキスト検索ができない:ユーザーは Ctrl+F でテキストを検索できません。 文書管理システムは、コンテンツにインデックスを付けることができません。
2.テキスト選択/コピーの禁止:引用、参照、またはデータをコピーしようとするユーザーは、テキストを選択できません。
3.アクセシビリティ違反:画像ベースのPDFは、WCAG 2.1コンプライアンス、セクション508コンプライアンス(米国政府)、ADA要件、スクリーンリーダー互換性に違反しています。
4.ファイルサイズが大きい: 同じ内容の比較では、Spire.PDF(画像ベース)はIronPDF(テキストベース)より最大16倍大きなファイルを生成します。
検出:あなたのPDFは画像ベースですか?
Spire.PDFで作成したドキュメントを開き、以下のテストをお試しください:
1.テキスト選択:テキストをクリックしてドラッグします。 何もハイライトがない場合 → IMAGE-BASED 2.Ctrl+F検索: ページ上の任意の単語を検索します。 該当するものがない"場合 → IMAGE-BASED 3.コピー/貼り付け:テキストを選択してメモ帳にコピーします。 何も貼り付けられない場合 → IMAGE-BASED
インターネット エクスプローラーの問題
Spire.PDFのレンダリングエンジンについて
Spire.PDFは、環境によってはHTMLレンダリングをInternet Explorer/Edge Legacyに依存しています。 IEは2022年に非推奨となり、モダンなCSSは機能せず、JavaScriptのサポートは限られており、レンダリングはシステム間で一貫性がありません。
スパイアで失敗するモダン CSS.PDF
<!-- This HTML renders incorrectly in Spire.PDF -->
<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); gap: 10px;">
<div>Item 1</div>
<div>Item 2</div>
<div>Item 3</div>
</div>
<!-- CSS Variables don't work -->
<style>
:root { --primary-color: #007bff; }
h1 { color: var(--primary-color); }
</style><!-- This HTML renders incorrectly in Spire.PDF -->
<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); gap: 10px;">
<div>Item 1</div>
<div>Item 2</div>
<div>Item 3</div>
</div>
<!-- CSS Variables don't work -->
<style>
:root { --primary-color: #007bff; }
h1 { color: var(--primary-color); }
</style>IronPDFは最新のChromiumレンダリングを使用しているため、これらのCSS機能はすべて正しく動作します。
移行後の新機能
IronPdfに移行した後は、Spire.PDFでは提供できない機能を得ることができます:
選択可能で、検索可能なテキスト。
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<h1>Important Contract</h1>");
pdf.SaveAs("contract.pdf");
// Result:
// ✅ Text is fully selectable
// ✅ Text is searchable with Ctrl+F
// ✅ Text can be copied to clipboard
// ✅ Screen readers work perfectly
// ✅ File size is compact
// ✅ Zooming is crystal clearvar renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<h1>Important Contract</h1>");
pdf.SaveAs("contract.pdf");
// Result:
// ✅ Text is fully selectable
// ✅ Text is searchable with Ctrl+F
// ✅ Text can be copied to clipboard
// ✅ Screen readers work perfectly
// ✅ File size is compact
// ✅ Zooming is crystal clearIRON VB CONVERTER ERROR developers@ironsoftware.com最新の CSS サポート
var renderer = new ChromePdfRenderer();
var html = @"
<style>
:root { --primary: #007bff; }
.container { display: flex; gap: 20px; }
.grid { display: grid; grid-template-columns: repeat(3, 1fr); }
</style>
<div class='container'>
<div style='flex: 1; color: var(--primary)'>Column 1</div>
<div style='flex: 1'>Column 2</div>
</div>
<div class='grid'>
<div>Item 1</div>
<div>Item 2</div>
<div>Item 3</div>
</div>";
var pdf = renderer.RenderHtmlAsPdf(html);
// All modern CSS features render correctly!var renderer = new ChromePdfRenderer();
var html = @"
<style>
:root { --primary: #007bff; }
.container { display: flex; gap: 20px; }
.grid { display: grid; grid-template-columns: repeat(3, 1fr); }
</style>
<div class='container'>
<div style='flex: 1; color: var(--primary)'>Column 1</div>
<div style='flex: 1'>Column 2</div>
</div>
<div class='grid'>
<div>Item 1</div>
<div>Item 2</div>
<div>Item 3</div>
</div>";
var pdf = renderer.RenderHtmlAsPdf(html);
// All modern CSS features render correctly!IRON VB CONVERTER ERROR developers@ironsoftware.comHTMLベースの透かし
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.ApplyWatermark(@"
<div style='
font-size: 48px;
color: rgba(255, 0, 0, 0.5);
transform: rotate(-45deg);
'>DRAFT</div>");var pdf = renderer.RenderHtmlAsPdf(html);
pdf.ApplyWatermark(@"
<div style='
font-size: 48px;
color: rgba(255, 0, 0, 0.5);
transform: rotate(-45deg);
'>DRAFT</div>");IRON VB CONVERTER ERROR developers@ironsoftware.com移行チェックリスト
移行前
- [ ] コードベース内のすべてのSpire.PDFの使用状況をインベントリ化する。
- [既存のPDFのテキスト選択性のテスト(重大な問題の検出)
- [ ] ドキュメントの
LoadFromHTML()呼び出し(これらは優先的に修正する必要があります。) - [ironpdf.comからIronPDFライセンスキーを入手してください。
コードの更新
- [ ]
Spire.PDF<//code> NuGetパッケージを削除する(無料版を使用している場合は<code>FreeSpire.PDFも削除する)。 - [ ]
IronPdfNuGetパッケージをインストールしてください。 - [ ] 名前空間のインポートを更新する (
using Spire.Pdf;→using IronPdf;) - [ ]
LoadFromHTML()をRenderHtmlAsPdf()に置き換える (CRITICAL FIX) - [ ]
new PdfDocument().+LoadFromFile()をPdfDocument.FromFile()を使用してください。に置き換えてください。 - [ ]
InsertPageRange()をPdfDocument.Merge()に置き換えてください。 - [ ]
Canvas.DrawString()を<コード>TextStamper</コード> + <コード>ApplyStamp()</コードに置き換えてください。 - [
SaveToFile()をSaveAs()に置き換えてください。 - [ ] すべての
Close()呼び出しを削除する(IronPDFでは不要) - [アプリケーション起動時のライセンス初期化機能の追加
テスティング
- [生成されたPDFでテキストが選択可能であることを確認してください。
- [ ] CSSレンダリングの改善を確認する(Flexbox/Gridが動作するようになった)
- [ファイルサイズが小さいことを確認してください。
- [スクリーンリーダーによるアクセシビリティのテスト
- [性能比較
結論
Spire.PDFは、レガシーアプリケーションやスイートベースの操作に凝り固まった開発者にとって適切な一連の機能を提供する一方で、テキストレンダリングにおける制限、旧式のレンダリングエンジンへの依存、フォント処理の問題は重要な考慮事項です。 IronPdfは最新のレンダリング技術と堅牢なテキスト処理によって優れたHTMLからPDFへの変換機能を示し、競争力のある選択肢として際立っています。
この移行における主な変更点は以下のとおりです: 1.テキストレンダリング:画像ベース(選択不可)→真のテキスト(選択可能、検索可能) 2.レンダリングエンジン:Internet Explorer依存 → Modern Chromium 3.CSSサポート:限定的 → 完全な CSS3 (Flexbox, Grid, CSS Variables) 4.HTML変換:pdf.LoadFromHTML() → renderer.RenderHtmlAsPdf(). 5.既存のPDFを読み込む:new PdfDocument() + LoadFromFile() → PdfDocument.FromFile(). 6.PDFをマージする:InsertPageRange() → PdfDocument.Merge(). 7.テキストを追加する:Canvas.DrawString() with PdfFont/PdfBrush → TextStamper + ApplyStamp() 8.保存:SaveToFile() → SaveAs() です。 9.クリーンアップ:Close()必須 → 不要(disposeパターン) 10.ファイルサイズ:ラージ(画像ベース)→コンパクト(トゥルーPDF) 11.アクセシビリティ:悪い → 良い
PDF ライブラリを選択する際には、ドキュメントの忠実度、検索性、最新の Web との互換性などの要素を考慮し、手元のプロジェクトの具体的な要求に合わせて選択することが重要です。 これらのダイナミクスを理解することで、開発者は、ドキュメントの取り扱いとユーザーエクスペリエンスを最適化するための情報に基づいた意思決定を行うことができます。
IronPDFドキュメント、チュートリアル、APIリファレンスを参照して、Spire.PDFへの移行を加速してください。






