フッターコンテンツにスキップ
移行ガイド

C#でSpire.PDFからIronPDFへ移行する方法

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
SHELL

ライセンス構成

// Add at application startup
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
// Add at application startup
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
$vbLabelText   $csharpLabel

完全な 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;
$vbLabelText   $csharpLabel

コア 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</code> + <code>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();
    }
}
$vbLabelText   $csharpLabel

翻訳後(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");
    }
}
$vbLabelText   $csharpLabel

この例は、HTMLレンダリングの基本的な違いを示しています。 Spire.PDFは、PdfHtmlLayoutFormatオブジェクトでLoadFromHTML()を使用し、多くの場合、テキストをビットマップ画像としてレンダリングします。 その結果、ユーザーがテキストを選択、コピー、検索できないPDFが出来上がりました。

IronPDFはChromePdfRendererRenderHtmlAsPdf()を使用し、完全に選択可能で、検索可能で、アクセス可能な真のテキストを生成します。 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();
    }
}
$vbLabelText   $csharpLabel

翻訳後(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");
    }
}
$vbLabelText   $csharpLabel

Spire.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();
    }
}
$vbLabelText   $csharpLabel

翻訳後(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");
    }
}
$vbLabelText   $csharpLabel

Spire.PDFは、PdfFontPdfBrush、およびpage.Canvas.DrawString()によるキャンバスベースの描画モデルを使用し、PointFを使用して特定の座標にテキストを配置します。

IronPDFはTextFontSizeVerticalOffsetHorizontalOffsetのような直感的なプロパティを持つTextStamperオブジェクトを使用し、それをApplyStamp()で適用します。 このアプローチは、より宣言的で保守が容易です。


画像としてのテキスト問題

これが重要な理由

Spire.PDFが画像ベースのレンダリングを使用してHTMLをPDFに変換する場合、ドキュメントは本質的な機能を失います:

1. テキスト検索なし:ユーザーは Ctrl+F を使用してテキストを検索できません。 文書管理システムは、コンテンツにインデックスを付けることができません。

2. テキストの選択/コピー不可:引用、参照、またはデータをコピーしようとするユーザーは、テキストを選択できません (画像です)。

3. アクセシビリティ違反:画像ベースの PDF は、WCAG 2.1 準拠、Section 508 準拠 (米国政府)、ADA 要件、およびスクリーン リーダーの互換性を満たしていません。

4. 大きなファイル サイズ:同じコンテンツの比較では、Spire.PDF (画像ベース) はIronPDF(テキストベース) よりも最大 16 倍大きいファイルを生成します。

検出:あなたのPDFは画像ベースですか?

Spire.PDFで作成したドキュメントを開き、以下のテストをお試しください:

1.テキストの選択:テキストをクリックしてドラッグします。 何もハイライトがない場合 → IMAGE-BASED

  1. Ctrl+F 検索:ページ上の任意の単語を検索します。 該当するものがない"場合 → IMAGE-BASED 3.コピー/貼り付け:テキストを選択してメモ帳にコピーします。 何も貼り付けられない場合 → IMAGE-BASED

インターネット エクスプローラーの問題

Spire.PDFのレンダリングエンジンについて

Spire.PDFは、環境によってはHTMLレンダリングをInternet Explorer/Edge Legacyに依存しています。 IEは2022年に非推奨となり、モダンなCSSは機能せず、JavaScriptのサポートは限られており、レンダリングはシステム間で一貫性がありません。

スパイアで失敗するモダン CSS.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>

<style>
:root { --primary-color: #007bff; }
h1 { color: var(--primary-color); }
</style>

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

<style>
:root { --primary-color: #007bff; }
h1 { color: var(--primary-color); }
</style>
HTML

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 clear
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 clear
$vbLabelText   $csharpLabel

最新の 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!
$vbLabelText   $csharpLabel

HTMLベースの透かし

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>");
$vbLabelText   $csharpLabel

移行チェックリスト

移行前

  • コードベース内のすべての Spire.PDF の使用状況を一覧表示する
  • 既存のPDFのテキスト選択可能性をテストする(重大な問題の検出)
  • ドキュメントのLoadFromHTML()呼び出し (これらは修正の優先事項です)
  • ironpdf.comからIronPDFライセンスキーを取得します

コードの更新

  • Spire.PDF NuGet パッケージを削除します (無料版を使用している場合はFreeSpire.PDFも削除します)
  • IronPdf NuGetパッケージをインストールする
  • 名前空間のインポートを更新します ( using Spire.Pdf;using IronPdf; )
  • LoadFromHTML()RenderHtmlAsPdf()に置き換えます (重要な修正) -new PdfDocument().+ LoadFromFile()PdfDocument.FromFile()に置き換えます
  • InsertPageRange() PdfDocument.Merge()に置き換えます
  • Canvas.DrawString()TextStamper + ApplyStamp()に置き換えます。
  • SaveToFile()SaveAs()に置き換えます
  • すべてのClose()呼び出しを削除します (IronPDF では必要ありません)
  • アプリケーションの起動時にライセンスの初期化を追加

テスティング

  • 生成されたPDFでテキストが選択可能であることを確認する(CRITICAL TEST)
  • CSS レンダリングの改善を検証 (Flexbox/Grid が動作するようになりました)
  • ファイルサイズが小さいことを確認する
  • スクリーンリーダーでアクセシビリティをテストする
  • パフォーマンス比較

カーティス・チャウ
テクニカルライター

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

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