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

C#でEasy PDF SDKからIronPDFへ移行する方法

Easy PDF SDKは、いくつかのレガシー技術に依存しており、最新の開発環境におけるデプロイとメンテナンスに大きな課題があります。

よくあるイージーPDF SDKデプロイメントの問題

開発者は、Easy PDF SDKを使用する際に、このような問題に頻繁に遭遇します:

  • bcl.easypdf.interop.easypdfprinter.dllのロードエラー
  • 基礎となるRCWから分離されたCOMオブジェクトは使用できません
  • 印刷ジョブの完了待ちのタイムアウトが切れました
  • `サービスが実行されていないため、プリンタの操作に失敗しました。
  • エラー:アクセスが拒否されました。
  • プリンタが見つかりません:BCL easyPDF プリンタ

これらのエラーは、Easy PDF SDKの基本的なアーキテクチャに起因しています。それは、仮想プリンタドライバ、COMインターオプ、およびインタラクティブなWindowsセッションを必要としますが、これらは単に最新のサーバ環境には存在しません。

Easy PDF SDKとIronPDFの比較:主な違い

フィーチャー イージーPDF SDK IronPDF
プラットフォーム Windowsのみ Windows、Linux、macOS、Docker
オフィス依存 必須 なし
インストール 複雑なMSI + プリンタドライバ + COM シンプルなNuGetパッケージ
サーバーサポート インタラクティブなセッションが必要 ヘッドレスで動作
HTMLレンダリング 基本(オフィスベース) フルChromium(CSS3、JS)
.NETサポート .NET Core限定 完全な.NET 5/6/7/8/9
非同期パターン コールバックベース ネイティブasync/await
コンテナサポート 実行不可 完全なDocker/Kubernetes

プラットフォームの制限

Easy PDF SDKは、変換のためにMicrosoft Officeのインストールを必要とするWindowsシステムに独占的に依存しているため、Linux、macOS、またはDockerのようなコンテナ化された環境のサポートは除外されています。 このような依存関係は、サーバーのセットアップを煩雑にし、Windows環境へのサービス導入を制限します。これは、マルチプラットフォームDevOpsを実践しているチームや、デプロイにコンテナを使用しているチームにとって大きな制約となります。

移行前の準備

前提条件

あなたの環境がこれらの要件を満たしていることを確認してください:

  • .NET Framework 4.6.2+または.NET Core 3.1 / .NET 5-9
  • Visual Studio 2019+またはC#拡張機能付きVS Code
  • NuGetパッケージマネージャへのアクセス
  • IronPDFライセンスキー (ironpdf.com にて無料トライアル可能)

かんたんPDF SDKの使用法</a

ソリューションディレクトリでこれらのコマンドを実行し、すべてのEasy PDF SDK参照を識別してください:

# Find all BCL using statements
grep -r "using BCL" --include="*.cs" .

# Find Printer/PDFDocument usage
grep -r "Printer\|PDFDocument\|PDFConverter\|HTMLConverter" --include="*.cs" .

# Find COM interop references
grep -r "easyPDF\|BCL.easyPDF" --include="*.csproj" .

# Find configuration settings
grep -r "PageOrientation\|TimeOut\|PrintOffice" --include="*.cs" .
# Find all BCL using statements
grep -r "using BCL" --include="*.cs" .

# Find Printer/PDFDocument usage
grep -r "Printer\|PDFDocument\|PDFConverter\|HTMLConverter" --include="*.cs" .

# Find COM interop references
grep -r "easyPDF\|BCL.easyPDF" --include="*.csproj" .

# Find configuration settings
grep -r "PageOrientation\|TimeOut\|PrintOffice" --include="*.cs" .
SHELL

予想される画期的な変更

Easy PDF SDKパターン 必要な変更
new Printer(). ChromePdfRendererを使用してください。
PrintOfficeDocToPDF()` Officeの変換は別扱い
RenderHTMLToPDF() RenderHtmlAsPdf()
COM相互運用リファレンス 完全に削除
プリンタドライバの設定 不要
BeginPrintToFile()コールバック ネイティブasync/await
インタラクティブセッションの要件 ヘッドレスで動作
1ベースのページインデックス 0ベースのインデックス
タイムアウト(秒 タイムアウト(ミリ秒

ステップごとの移行プロセス

ステップ1:Easy PDF SDKを削除する

Easy PDF SDKは通常、MSIインストーラ、手動DLL参照、またはGAC登録によってインストールされます。 すべての参照を削除してください:

1.プログラムと機能からBCL EasyPDF SDKをアンインストールする 2.プロジェクトからDLL参照を削除する 3.COMインターオプ参照を削除 4.GACエントリが存在する場合は、クリーンアップ

ステップ2: IronPDFをインストールする

# Install IronPDF
dotnet add package IronPdf
# Install IronPDF
dotnet add package IronPdf
SHELL

またはパッケージマネージャーコンソールから:

Install-Package IronPdf

ステップ 3: 名前空間参照の更新

Easy PDF SDKの名前空間をIronPDFに置き換えてください:

// Remove these
using BCL.easyPDF;
using BCL.easyPDF.Interop;
using BCL.easyPDF.PDFConverter;
using BCL.easyPDF.Printer;

// Add these
using IronPdf;
using IronPdf.Rendering;
// Remove these
using BCL.easyPDF;
using BCL.easyPDF.Interop;
using BCL.easyPDF.PDFConverter;
using BCL.easyPDF.Printer;

// Add these
using IronPdf;
using IronPdf.Rendering;
$vbLabelText   $csharpLabel

完全な API 移行のリファレンス

コア クラス マッピング

Easy PDF SDKクラス IronPDF 同等物 ノート
プリンタ ChromePdfRenderer 主な変換クラス
PDFドキュメント PdfDocument 文書操作
HTMLConverter ChromePdfRenderer HTML変換.
PrinterConfiguration ChromePdfRenderOptions レンダリングオプション
ページの向き PdfPaperOrientation ページの向き
ページサイズ PdfPaperSize 用紙サイズ
SecurityHandler PdfDocument.SecuritySettings セキュリティオプション

PDF作成方法

Easy PDF SDKの方法 IronPDF メソッド ノート
printer.RenderHTMLToPDF(html、path) renderer.RenderHtmlAsPdf(html).SaveAs(path) HTML文字列
printer.RenderUrlToPDF(url、パス) renderer.RenderUrlAsPdf(url).SaveAs(path)を実行します。 URL変換
htmlConverter.ConvertHTML(html, doc). renderer.RenderHtmlAsPdf(html). HTMLからPDFへ
htmlConverter.ConvertURL(url, doc). renderer.RenderUrlAsPdf(url)のようにします。 URLからPDFへ

PDF操作方法

Easy PDF SDKの方法 IronPDF メソッド ノート
doc.Append(doc2)を追加します。 PdfDocument.Merge(pdf1, pdf2). PDFをマージ
doc.ExtractPages(start, end)</code>|pdf.CopyPages(start, end)`. ページの抜粋
doc.DeletePage(インデックス) pdf.RemovePage(インデックス) ページを削除
doc.GetPageCount()|pdf.PageCount` ページ数
doc.Save(パス)を実行します。 pdf.SaveAs(path)のようにします。 PDFを保存
doc.Close() pdf.Dispose()またはusing クリーンアップ
doc.ExtractText() pdf.ExtractAllText()を使用してください。 テキスト抽出

設定オプション

簡単PDF SDKオプション IronPDF オプション ノート
config.TimeOut レンダリングオプション.タイムアウト タイムアウト (ms)
config.PageOrientation = Landscape (ページの向き) `RenderingOptions.PaperOrientation = Landscape. オリエンテーション
config.PageSize = A4 RenderingOptions.PaperSize=PdfPaperSize.A4 用紙サイズ
config.MarginTop/Bottom/Left/Right|RenderingOptions.MarginTop`など。 マージン

コード移行の例

HTML文字列をPDFに変換

簡単なPDF SDKの実装:

// NuGet: Install-Package BCL.EasyPDF
using BCL.EasyPDF;
using System;

class Program
{
    static void Main()
    {
        var pdf = new PDFDocument();
        var htmlConverter = new HTMLConverter();
        htmlConverter.ConvertHTML("<h1>Hello World</h1>", pdf);
        pdf.Save("output.pdf");
        pdf.Close();
    }
}
// NuGet: Install-Package BCL.EasyPDF
using BCL.EasyPDF;
using System;

class Program
{
    static void Main()
    {
        var pdf = new PDFDocument();
        var htmlConverter = new HTMLConverter();
        htmlConverter.ConvertHTML("<h1>Hello World</h1>", pdf);
        pdf.Save("output.pdf");
        pdf.Close();
    }
}
$vbLabelText   $csharpLabel

IronPDFの実装:

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

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderHtmlAsPdf("<h1>Hello World</h1>");
        pdf.SaveAs("output.pdf");
    }
}
// NuGet: Install-Package IronPdf
using IronPdf;
using System;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderHtmlAsPdf("<h1>Hello World</h1>");
        pdf.SaveAs("output.pdf");
    }
}
$vbLabelText   $csharpLabel

IronPdfは個別のHTMLConverterクラスと手動のClose()コールを排除し、よりクリーンで保守性の高いコードを実現します。

URLからPDFへの変換

簡単なPDF SDKの実装:

// NuGet: Install-Package BCL.EasyPDF
using BCL.EasyPDF;
using System;

class Program
{
    static void Main()
    {
        var pdf = new PDFDocument();
        var htmlConverter = new HTMLConverter();
        htmlConverter.ConvertURL("https://example.com", pdf);
        pdf.Save("webpage.pdf");
        pdf.Close();
    }
}
// NuGet: Install-Package BCL.EasyPDF
using BCL.EasyPDF;
using System;

class Program
{
    static void Main()
    {
        var pdf = new PDFDocument();
        var htmlConverter = new HTMLConverter();
        htmlConverter.ConvertURL("https://example.com", pdf);
        pdf.Save("webpage.pdf");
        pdf.Close();
    }
}
$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://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://example.com");
        pdf.SaveAs("webpage.pdf");
    }
}
$vbLabelText   $csharpLabel

複数のPDFをマージする

簡単なPDF SDKの実装:

// NuGet: Install-Package BCL.EasyPDF
using BCL.EasyPDF;
using System;

class Program
{
    static void Main()
    {
        var pdf1 = new PDFDocument("document1.pdf");
        var pdf2 = new PDFDocument("document2.pdf");
        pdf1.Append(pdf2);
        pdf1.Save("merged.pdf");
        pdf1.Close();
        pdf2.Close();
    }
}
// NuGet: Install-Package BCL.EasyPDF
using BCL.EasyPDF;
using System;

class Program
{
    static void Main()
    {
        var pdf1 = new PDFDocument("document1.pdf");
        var pdf2 = new PDFDocument("document2.pdf");
        pdf1.Append(pdf2);
        pdf1.Save("merged.pdf");
        pdf1.Close();
        pdf2.Close();
    }
}
$vbLabelText   $csharpLabel

IronPDFの実装:

// NuGet: Install-Package IronPdf
using IronPdf;
using System;
using System.Collections.Generic;

class Program
{
    static void Main()
    {
        var pdfs = new List<PdfDocument>
        {
            PdfDocument.FromFile("document1.pdf"),
            PdfDocument.FromFile("document2.pdf")
        };
        var merged = PdfDocument.Merge(pdfs);
        merged.SaveAs("merged.pdf");
    }
}
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
using System.Collections.Generic;

class Program
{
    static void Main()
    {
        var pdfs = new List<PdfDocument>
        {
            PdfDocument.FromFile("document1.pdf"),
            PdfDocument.FromFile("document2.pdf")
        };
        var merged = PdfDocument.Merge(pdfs);
        merged.SaveAs("merged.pdf");
    }
}
$vbLabelText   $csharpLabel

IronPDFの静的なMergeメソッドは複数のドキュメントを直接受け入れるので、手作業によるAppendループパターンは不要です。

パスワード保護

IronPDFの実装:

using IronPdf;

var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<h1>Confidential</h1>");

// Set security
pdf.SecuritySettings.UserPassword = "user123";
pdf.SecuritySettings.OwnerPassword = "owner456";
pdf.SecuritySettings.AllowUserPrinting = PdfPrintSecurity.NoPrint;
pdf.SecuritySettings.AllowUserCopyPasteContent = false;
pdf.SecuritySettings.AllowUserEdits = PdfEditSecurity.NoEdit;

pdf.SaveAs("protected.pdf");
using IronPdf;

var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<h1>Confidential</h1>");

// Set security
pdf.SecuritySettings.UserPassword = "user123";
pdf.SecuritySettings.OwnerPassword = "owner456";
pdf.SecuritySettings.AllowUserPrinting = PdfPrintSecurity.NoPrint;
pdf.SecuritySettings.AllowUserCopyPasteContent = false;
pdf.SecuritySettings.AllowUserEdits = PdfEditSecurity.NoEdit;

pdf.SaveAs("protected.pdf");
$vbLabelText   $csharpLabel

ヘッダーとフッター

Easy PDF SDKは、ネイティブのヘッダー/フッターサポートを持っていません-ヘッダーとフッターは、ソースHTMLに含める必要があります。 IronPDFは専用の機能を提供します:

using IronPdf;

var renderer = new ChromePdfRenderer();

renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter
{
    HtmlFragment = @"
        <div style='text-align:center; font-size:12px; font-family:Arial;'>
            Company Name - Confidential
        </div>",
    DrawDividerLine = true,
    MaxHeight = 30
};

renderer.RenderingOptions.HtmlFooter = new HtmlHeaderFooter
{
    HtmlFragment = @"
        <div style='text-align:center; font-size:10px;'>
            Page {page} of {total-pages}
        </div>",
    DrawDividerLine = true,
    MaxHeight = 25
};

var pdf = renderer.RenderHtmlAsPdf("<h1>Content</h1>");
pdf.SaveAs("with_headers.pdf");
using IronPdf;

var renderer = new ChromePdfRenderer();

renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter
{
    HtmlFragment = @"
        <div style='text-align:center; font-size:12px; font-family:Arial;'>
            Company Name - Confidential
        </div>",
    DrawDividerLine = true,
    MaxHeight = 30
};

renderer.RenderingOptions.HtmlFooter = new HtmlHeaderFooter
{
    HtmlFragment = @"
        <div style='text-align:center; font-size:10px;'>
            Page {page} of {total-pages}
        </div>",
    DrawDividerLine = true,
    MaxHeight = 25
};

var pdf = renderer.RenderHtmlAsPdf("<h1>Content</h1>");
pdf.SaveAs("with_headers.pdf");
$vbLabelText   $csharpLabel

その他のオプションについては、headers and footers documentationを参照してください。

現代のアプリケーションはノンブロッキングオペレーションを必要とします。

Easy PDF SDKは、コールバックベースの非同期パターンを使用します。 IronPdfはネイティブのasync/awaitをサポートしています:

簡単なPDF SDKの実装:

using BCL.easyPDF;

Printer printer = new Printer();

// BCL uses callback-based async
printer.BeginPrintToFile(
    "https://example.com",
    "output.pdf",
    OnPrintComplete,
    OnPrintError
);

Console.ReadLine();
printer.Dispose();
using BCL.easyPDF;

Printer printer = new Printer();

// BCL uses callback-based async
printer.BeginPrintToFile(
    "https://example.com",
    "output.pdf",
    OnPrintComplete,
    OnPrintError
);

Console.ReadLine();
printer.Dispose();
$vbLabelText   $csharpLabel

IronPDFの実装:

using IronPdf;
using System.Threading.Tasks;

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

        // Native async/await
        var pdf = await renderer.RenderUrlAsPdfAsync("https://example.com");
        await pdf.SaveAsAsync("output.pdf");

        Console.WriteLine("PDF created: output.pdf");
    }
}
using IronPdf;
using System.Threading.Tasks;

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

        // Native async/await
        var pdf = await renderer.RenderUrlAsPdfAsync("https://example.com");
        await pdf.SaveAsAsync("output.pdf");

        Console.WriteLine("PDF created: output.pdf");
    }
}
$vbLabelText   $csharpLabel

重要な移行に関する注意事項

ページ索引の変更

Easy PDF SDKは1ベースのインデックスを使用します。 IronPDFは0ベースのインデックスを使用しています:

// Easy PDF SDK: 1-based
doc.ExtractPages(1, 5);

// IronPDF: 0-based
pdf.CopyPages(0, 4);
// Easy PDF SDK: 1-based
doc.ExtractPages(1, 5);

// IronPDF: 0-based
pdf.CopyPages(0, 4);
$vbLabelText   $csharpLabel

タイムアウト (ミリ秒単位)

Easy PDF SDKはタイムアウト値に秒を使用します。 IronPDFはミリ秒を使用しています:

// Easy PDF SDK: seconds
config.TimeOut = 120;

// IronPDF: milliseconds
renderer.RenderingOptions.Timeout = 120000;
// Easy PDF SDK: seconds
config.TimeOut = 120;

// IronPDF: milliseconds
renderer.RenderingOptions.Timeout = 120000;
$vbLabelText   $csharpLabel

.NETコアの統合

Easy PDF SDKは、インタラクティブなセッションが要求されるため、Webコンテキストでは苦労します。

IronPDFパターン:

[ApiController]
[Route("[controller]")]
public class PdfController : ControllerBase
{
    [HttpGet("generate")]
    public IActionResult GeneratePdf()
    {
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderHtmlAsPdf("<h1>Report</h1>");

        return File(pdf.BinaryData, "application/pdf", "report.pdf");
    }

    [HttpGet("generate-async")]
    public async Task<IActionResult> GeneratePdfAsync()
    {
        var renderer = new ChromePdfRenderer();
        var pdf = await renderer.RenderHtmlAsPdfAsync("<h1>Report</h1>");

        return File(pdf.Stream, "application/pdf", "report.pdf");
    }
}
[ApiController]
[Route("[controller]")]
public class PdfController : ControllerBase
{
    [HttpGet("generate")]
    public IActionResult GeneratePdf()
    {
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderHtmlAsPdf("<h1>Report</h1>");

        return File(pdf.BinaryData, "application/pdf", "report.pdf");
    }

    [HttpGet("generate-async")]
    public async Task<IActionResult> GeneratePdfAsync()
    {
        var renderer = new ChromePdfRenderer();
        var pdf = await renderer.RenderHtmlAsPdfAsync("<h1>Report</h1>");

        return File(pdf.Stream, "application/pdf", "report.pdf");
    }
}
$vbLabelText   $csharpLabel

Dockerの展開

Easy PDF SDKはDockerコンテナでは実行できません。Windowsコンテナ、Microsoft Office、仮想プリンタドライバ、およびインタラクティブデスクトップセッションが必要です。 これは、コンテナ化とは根本的に相容れないものです。

IronPdfのDocker設定:

FROM mcr.microsoft.com/dotnet/aspnet:8.0

# Install Chromium dependencies
RUN apt-get update && apt-get install -y \
    libc6 libgdiplus libx11-6 libxcomposite1 \
    libxdamage1 libxrandr2 libxss1 libxtst6 \
    libnss3 libatk-bridge2.0-0 libgtk-3-0 \
    libgbm1 libasound2 fonts-liberation \
    && rm -rf /var/lib/apt/lists/*

WORKDIR /app
COPY . .
ENTRYPOINT ["dotnet", "MyApp.dll"]

よくある移行の問題のトラブルシューティング

問題です:プリンタが見つかりません

症状: プリンターが見つかりません:BCL easyPDF Printer プリンタが見つかりません。

ソリューション: IronPDFはプリンタドライバを必要としません:

// Just use the renderer directly
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(html);
// Just use the renderer directly
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(html);
$vbLabelText   $csharpLabel

課題COM 相互接続エラー

症状: DLLの読み込みエラー または RCWエラー

解決策: すべてのCOM参照を削除し、IronPdfのマネージドAPIを使用してください。

課題サーバーのタイムアウト

症状: PDF生成がWebサーバー上でハングする。

ソリューション: IronPDFはインタラクティブセッションなしでヘッドレスで動作します:

var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.Timeout = 60000; // Reliable timeout
var pdf = renderer.RenderHtmlAsPdf(html);
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.Timeout = 60000; // Reliable timeout
var pdf = renderer.RenderHtmlAsPdf(html);
$vbLabelText   $csharpLabel

問題背景が印刷されない

症状: CSSの背景が欠けている。

解決策:バックグラウンド印刷を有効にする:

renderer.RenderingOptions.PrintHtmlBackgrounds = true;
renderer.RenderingOptions.PrintHtmlBackgrounds = true;
$vbLabelText   $csharpLabel

移行後のチェックリスト

コードの移行が完了したら、以下を確認してください:

  • IronPDFのChromiumエンジンでPDF出力の品質を検証
  • 複雑な HTML/CSS を含むすべてのエッジケースをテストします
  • 対話型セッションなしでサーバーの展開が機能することを検証する
  • Docker/コンテナのデプロイメントをテストする
  • デプロイメントから BCL EasyPDF インストーラーを削除します
  • サーバーから Office のインストールを削除します (不要になりました)
  • 新しい NuGet パッケージで CI/CD パイプラインを更新する

PDFインフラストラクチャの将来性を確保する

.NET 10が目前に迫り、C# 14が新しい言語機能を導入する中、クロスプラットフォームのPDFライブラリを選択することで、進化するデプロイメントモデルとの互換性を確保することができます。 IronPdf.Linux、Docker、クラウドネイティブアーキテクチャのサポートは、Easy PDF SDKのWindowsのみの制約を受けることなく、プロジェクトが2025年、2026年に拡張されたときに、移行への投資が報われることを意味します。

その他のリソース


Easy PDF SDKからIronPdfに移行することで、仮想プリンター依存、COMインターオプの問題、Windowsのみの制約がなくなります。 Chromiumベースのレンダリングへの移行により、優れたCSS3とJavaScriptのサポートが実現され、Easy PDF SDKのレガシーアーキテクチャでは不可能であったDocker、Kubernetes、クラウド環境へのデプロイが可能になりました。

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

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

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