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

ActivePDFからIronPDFへの移行:(.NET ガイド)

ActivePDFからIronPDFへの移行:完全なC#移行ガイド

ActivePDFは、.NET開発者のための信頼できるPDF操作ツールキットとして長い間役立ってきました。 しかし、Foxitによる買収以来、多くの開発チームは、プラットフォームの将来の方向性、ライセンス条件、継続的な技術革新について不確実性に直面しています。 このガイドでは、ActivePDFから.NET Framework 4.6.2から.NET 9以降をフルサポートし、アクティブにメンテナンスされている最新の.NET PDFライブラリであるIronPDFへの包括的でステップバイステップの移行パスを提供します。

ActivePDFから移行する理由

FoxitによるActivePDFの買収は、.NETアプリケーションでPDF生成・操作ソリューションを構築する開発者に影響を与えるいくつかの課題をもたらしました。

不確かな製品の将来

ActivePDFがFoxitの所有下に移行したことで、ツールキットの長期的な開発軌道について正当な疑問が生じました。 ActivePDFに依存している開発者は、ライブラリがレガシー製品となり、サポートが低下し、技術革新が停滞する潜在的なリスクに直面しています。 2025年や2026年まで続くプロジェクトを計画しているチームにとって、この不確実性は大きな技術的リスクとなります。

ライセンスの複雑さ

この買収により、ライセンスの不確実性が導入され、導入が複雑化する可能性があります。 ActivePDFの伝統的なマシンロック型のライセンスモデルは、アプリケーションがインフラ全体で動的に拡張される最新のクラウドやコンテナ化された環境では摩擦を生みます。

レガシー

アーキテクチャパターン

ActivePDFのアーキテクチャは、ステートフルツールキットのパターンを中心とした古い設計思想を反映しています。 OpenOutputFile/CloseOutputFileワークフローでは、明示的なファイルハンドル管理が必要ですが、これは最新のC#の規約と一致しておらず、慎重に扱わないとリソース管理の問題を引き起こす可能性があります。

インストールと設定のオーバーヘッド

現代のNuGetベースのパッケージ管理とは異なり、ActivePDFではツールキットをインスタンス化する際に、DLLの参照や明示的なパス設定を手動で行う必要があります。

ActivePDFとIronPDFの比較:主な違い

移行プロセスに入る前に、ActivePDFとIronPdfの基本的な違いを理解することで、必要なコード変更に対する期待値を設定することができます。

アスペクトアクティブPDFIronPDF
会社ステータスFoxit に買収される(将来は不透明)独立した明確な開発ロードマップ
インストールマニュアルDLLリファレンスシンプルなNuGetパッケージ
APIパターンステートフル (OpenOutputFile/CloseOutputFile)流暢で機能的なAPI
ライセンスモデルマシンロックコードベースのキー
.NETサポートレガシー.NET Frameworkフォーカス.NET Framework 4.6.2 から .NET 9+ へ
エラー処理整数のリターンコード最新の例外ベース
非同期サポートについて不可完全なasync/awaitのサポート

移行前の準備

コードベースの監査

移行を開始する前に、ソリューション全体にわたるすべてのActivePDFの使用状況を確認してください。 ソリューションディレクトリで以下のコマンドを実行してください:

grep -r "using ActivePDF" --include="*.cs" .
grep -r "using APToolkitNET" --include="*.cs" .
grep -r "APToolkitNET" --include="*.csproj" .
grep -r "using ActivePDF" --include="*.cs" .
grep -r "using APToolkitNET" --include="*.cs" .
grep -r "APToolkitNET" --include="*.csproj" .
SHELL

ドキュメントの変更

基本的なAPIの違いを理解することは、移行戦略の立案に役立ちます:

カテゴリActivePDF の動作IronPDF の動作移行作業
オブジェクトモデル単一の ツールキット オブジェクト<コード>ChromePdfRenderer</コード> + <コード>PdfDocument</コード懸念事項
ファイル操作OpenOutputFile()/CloseOutputFile()直接 <コード>SaveAs()</コードopen/closeコールの削除
ページ作成NewPage()メソッドHTMLからの自動翻訳ページ作成コールの削除
戻り値整数エラーコード例外try/catchの実装
ページサイズ単位ポイント (612x792 = 文字)列挙型またはミリメートル測定値の更新

前提条件

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

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

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

ステップ 1: NuGet パッケージを更新する。

ActivePDFパッケージを削除し、IronPDFをインストールしてください:

# RemoveアクティブPDFpackage
dotnet remove package APToolkitNET

# Install IronPDF
dotnet add package IronPdf
# RemoveアクティブPDFpackage
dotnet remove package APToolkitNET

# Install IronPDF
dotnet add package IronPdf
SHELL

または、Visual Studioパッケージマネージャーコンソールを使用してください:

Uninstall-Package APToolkitNET
Install-Package IronPdf

手動のDLL参照があるプロジェクトでは、.csprojファイルから参照を削除してください:

<!-- Remove this block -->
<Reference Include="APToolkitNET">
    <HintPath>path\to\APToolkitNET.dll</HintPath>
</Reference>
<!-- Remove this block -->
<Reference Include="APToolkitNET">
    <HintPath>path\to\APToolkitNET.dll</HintPath>
</Reference>
XML

ステップ 2: ライセンス キーの設定

IronPDFライセンスキーはアプリケーション起動時、PDF操作の前に追加してください:

// Add at application startup (Program.cs or Startup.cs)
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";

// Verify license status
bool isLicensed = IronPdf.License.IsLicensed;
// Add at application startup (Program.cs or Startup.cs)
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";

// Verify license status
bool isLicensed = IronPdf.License.IsLicensed;
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

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

ソリューション全体でグローバルな検索と置換を実行してください:

検索置換対象
ActivePDF.Toolkitを使用しています。IronPdf;を使用しています。
APToolkitNETを使用しています。IronPdf;を使用しています。
APToolkitNET.PDFObjectsを使用しています。IronPdf;を使用しています。
APToolkitNET.Common;を使用しています。IronPdf;を使用しています。

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

ドキュメント作成方法

ActivePDFメソッドIronPDF 同等物ノート
new Toolkit().new ChromePdfRenderer().レンダラでPDFを作成
toolkit.OpenOutputFile(パス)同等のものは不要最後にSaveAs()を呼び出すだけです。
toolkit.CloseOutputFile()同等のものは不要自動クリーンアップ
toolkit.AddHTML(html)を使用してください。renderer.RenderHtmlAsPdf(html).PdfDocument<//code> を返します。
<コード>toolkit.AddURL(url)<コード></コードrenderer.RenderUrlAsPdf(url)のようにします。URLからPDFへの変換
toolkit.SaveAs(パス)pdf.SaveAs(path)のようにします。ファイルに保存

ファイル操作

ActivePDFメソッドIronPDF 同等物ノート
toolkit.OpenInputFile(path)を実行します。PdfDocument.FromFile(パス)既存のPDFを読み込む.
toolkit.AddPDF(パス)PdfDocument.Merge()を使用してください。マージ作業
toolkit.GetPageCount()<コード>pdf.PageCount</コードプロパティアクセス
<コード>toolkit.GetText()</コードpdf.ExtractAllText()を使用してください。テキスト抽出

ページ構成

ActivePDFメソッドIronPDF 同等物
toolkit.SetPageSize(612,792)を使用してください。RenderingOptions.PaperSize=PdfPaperSize.Letter
toolkit.SetOrientation("Landscape").RenderingOptions.PaperOrientation=PdfPaperOrientation.Landscape
toolkit.SetMargins(t、b、l、r)RenderingOptions.MarginTop/Bottom/Left/Right

セキュリティ手法

ActivePDFメソッドIronPDF 同等物
<コード>toolkit.Encrypt(password)</コード>。pdf.SecuritySettings.OwnerPassword
toolkit.SetUserPassword(pwd)を使用してください。pdf.SecuritySettings.UserPassword
toolkit.SetPermissions(flags).pdf.SecuritySettings.AllowUserXxx
toolkit.AddWatermark(text).pdf.ApplyWatermark(html).

コード移行の例

HTMLからPDFへの変換

HTML文字列をPDF文書に変換することは、最も一般的なPDF生成シナリオの1つです。 以下は、移行中にコードがどのように変化するかです。

// NuGet: Install-Package APToolkitNET
using ActivePDF.Toolkit;
using System;

class Program
{
    static void Main()
    {
        Toolkit toolkit = new Toolkit();

        string htmlContent = "<html><body><h1>Hello World</h1></body></html>";

        if (toolkit.OpenOutputFile("output.pdf") == 0)
        {
            toolkit.AddHTML(htmlContent);
            toolkit.CloseOutputFile();
            Console.WriteLine("PDF created successfully");
        }
    }
}
// NuGet: Install-Package APToolkitNET
using ActivePDF.Toolkit;
using System;

class Program
{
    static void Main()
    {
        Toolkit toolkit = new Toolkit();

        string htmlContent = "<html><body><h1>Hello World</h1></body></html>";

        if (toolkit.OpenOutputFile("output.pdf") == 0)
        {
            toolkit.AddHTML(htmlContent);
            toolkit.CloseOutputFile();
            Console.WriteLine("PDF created successfully");
        }
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

IronPDFの実装:

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

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

        string htmlContent = "<html><body><h1>Hello World</h1></body></html>";

        var pdf = renderer.RenderHtmlAsPdf(htmlContent);
        pdf.SaveAs("output.pdf");

        Console.WriteLine("PDF created successfully");
    }
}
// NuGet: Install-Package IronPdf
using IronPdf;
using System;

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

        string htmlContent = "<html><body><h1>Hello World</h1></body></html>";

        var pdf = renderer.RenderHtmlAsPdf(htmlContent);
        pdf.SaveAs("output.pdf");

        Console.WriteLine("PDF created successfully");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

IronPDFのアプローチは、よりクリーンで読みやすいコードを提供しながら、明示的なファイルハンドル管理を排除します。 高度なHTML to PDFシナリオのために、IronPDFのChromePdfRendererはピクセルパーフェクトなCSSとJavaScriptサポートのためにChromiumベースのレンダリングエンジンを使用しています。

URLからPDFへの変換

Web ページを PDF ドキュメントとしてキャプチャする場合も、同様の近代化パターンに従います。

using ActivePDF.Toolkit;
using System;

class Program
{
    static void Main()
    {
        Toolkit toolkit = new Toolkit();

        string url = "https://www.example.com";

        if (toolkit.OpenOutputFile("webpage.pdf") == 0)
        {
            toolkit.AddURL(url);
            toolkit.CloseOutputFile();
            Console.WriteLine("PDF from URL created successfully");
        }
    }
}
using ActivePDF.Toolkit;
using System;

class Program
{
    static void Main()
    {
        Toolkit toolkit = new Toolkit();

        string url = "https://www.example.com";

        if (toolkit.OpenOutputFile("webpage.pdf") == 0)
        {
            toolkit.AddURL(url);
            toolkit.CloseOutputFile();
            Console.WriteLine("PDF from URL created successfully");
        }
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

IronPDFの実装:

using IronPdf;
using System;

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

        string url = "https://www.example.com";

        var pdf = renderer.RenderUrlAsPdf(url);
        pdf.SaveAs("webpage.pdf");

        Console.WriteLine("PDF from URL created successfully");
    }
}
using IronPdf;
using System;

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

        string url = "https://www.example.com";

        var pdf = renderer.RenderUrlAsPdf(url);
        pdf.SaveAs("webpage.pdf");

        Console.WriteLine("PDF from URL created successfully");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

複数のPDFをマージする

複数のPDFドキュメントを1つのファイルに結合することで、IronPDFのドキュメント操作に対する機能的なアプローチを示しています。

using ActivePDF.Toolkit;
using System;

class Program
{
    static void Main()
    {
        Toolkit toolkit = new Toolkit();

        if (toolkit.OpenOutputFile("merged.pdf") == 0)
        {
            toolkit.AddPDF("document1.pdf");
            toolkit.AddPDF("document2.pdf");
            toolkit.CloseOutputFile();
            Console.WriteLine("PDFs merged successfully");
        }
    }
}
using ActivePDF.Toolkit;
using System;

class Program
{
    static void Main()
    {
        Toolkit toolkit = new Toolkit();

        if (toolkit.OpenOutputFile("merged.pdf") == 0)
        {
            toolkit.AddPDF("document1.pdf");
            toolkit.AddPDF("document2.pdf");
            toolkit.CloseOutputFile();
            Console.WriteLine("PDFs merged successfully");
        }
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

IronPDFの実装:

using IronPdf;
using System;
using System.Collections.Generic;

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");

        Console.WriteLine("PDFs merged successfully");
    }
}
using IronPdf;
using System;
using System.Collections.Generic;

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");

        Console.WriteLine("PDFs merged successfully");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

選択的なページ抽出を含む、より高度なマージシナリオについては、PDFマージドキュメントを参照してください。

ヘッダーとフッターの追加

using ActivePDF.Toolkit;

public void CreatePdfWithHeaderFooter(string html, string outputPath)
{
    Toolkit toolkit = new Toolkit();

    if (toolkit.OpenOutputFile(outputPath) == 0)
    {
        toolkit.SetHeader("My Document", 12, "Arial");
        toolkit.SetFooter("Page %p of %P", 10, "Arial");
        toolkit.AddHTML(html);
        toolkit.CloseOutputFile();
    }
}
using ActivePDF.Toolkit;

public void CreatePdfWithHeaderFooter(string html, string outputPath)
{
    Toolkit toolkit = new Toolkit();

    if (toolkit.OpenOutputFile(outputPath) == 0)
    {
        toolkit.SetHeader("My Document", 12, "Arial");
        toolkit.SetFooter("Page %p of %P", 10, "Arial");
        toolkit.AddHTML(html);
        toolkit.CloseOutputFile();
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

IronPDFの実装:

using IronPdf;

public void CreatePdfWithHeaderFooter(string html, string outputPath)
{
    var renderer = new ChromePdfRenderer();

    renderer.RenderingOptions.TextHeader = new TextHeaderFooter
    {
        CenterText = "My Document",
        FontSize = 12,
        FontFamily = "Arial"
    };

    renderer.RenderingOptions.TextFooter = new TextHeaderFooter
    {
        CenterText = "Page {page} of {total-pages}",
        FontSize = 10,
        FontFamily = "Arial"
    };

    using var pdf = renderer.RenderHtmlAsPdf(html);
    pdf.SaveAs(outputPath);
}
using IronPdf;

public void CreatePdfWithHeaderFooter(string html, string outputPath)
{
    var renderer = new ChromePdfRenderer();

    renderer.RenderingOptions.TextHeader = new TextHeaderFooter
    {
        CenterText = "My Document",
        FontSize = 12,
        FontFamily = "Arial"
    };

    renderer.RenderingOptions.TextFooter = new TextHeaderFooter
    {
        CenterText = "Page {page} of {total-pages}",
        FontSize = 10,
        FontFamily = "Arial"
    };

    using var pdf = renderer.RenderHtmlAsPdf(html);
    pdf.SaveAs(outputPath);
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

IronPdfはテキストベースとHTMLヘッダーとフッターの両方をサポートし、柔軟なデザインを提供します。

パスワード保護とセキュリティ

using ActivePDF.Toolkit;

public void ProtectPdf(string inputPath, string outputPath, string password)
{
    Toolkit toolkit = new Toolkit();

    if (toolkit.OpenInputFile(inputPath) == 0)
    {
        toolkit.Encrypt(password);
        toolkit.SetUserPassword(password);
        toolkit.SetPermissions(4); // Print only
        toolkit.SaveAs(outputPath);
        toolkit.CloseInputFile();
    }
}
using ActivePDF.Toolkit;

public void ProtectPdf(string inputPath, string outputPath, string password)
{
    Toolkit toolkit = new Toolkit();

    if (toolkit.OpenInputFile(inputPath) == 0)
    {
        toolkit.Encrypt(password);
        toolkit.SetUserPassword(password);
        toolkit.SetPermissions(4); // Print only
        toolkit.SaveAs(outputPath);
        toolkit.CloseInputFile();
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

IronPDFの実装:

using IronPdf;

public void ProtectPdf(string inputPath, string outputPath, string password)
{
    using var pdf = PdfDocument.FromFile(inputPath);

    pdf.SecuritySettings.OwnerPassword = password;
    pdf.SecuritySettings.UserPassword = password;
    pdf.SecuritySettings.AllowUserPrinting = PdfPrintSecurity.FullPrintRights;
    pdf.SecuritySettings.AllowUserCopyPasteContent = false;
    pdf.SecuritySettings.AllowUserEdits = PdfEditSecurity.NoEdit;

    pdf.SaveAs(outputPath);
}
using IronPdf;

public void ProtectPdf(string inputPath, string outputPath, string password)
{
    using var pdf = PdfDocument.FromFile(inputPath);

    pdf.SecuritySettings.OwnerPassword = password;
    pdf.SecuritySettings.UserPassword = password;
    pdf.SecuritySettings.AllowUserPrinting = PdfPrintSecurity.FullPrintRights;
    pdf.SecuritySettings.AllowUserCopyPasteContent = false;
    pdf.SecuritySettings.AllowUserEdits = PdfEditSecurity.NoEdit;

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

IronPdfのセキュリティ設定APIは、整数フラグの代わりに強く型付けされた列挙型を使って、ドキュメントのパーミッションをきめ細かく制御します。

テキスト抽出

using ActivePDF.Toolkit;

public string ExtractText(string pdfPath)
{
    Toolkit toolkit = new Toolkit();
    string text = "";

    if (toolkit.OpenInputFile(pdfPath) == 0)
    {
        int pageCount = toolkit.GetPageCount();
        for (int i = 1; i <= pageCount; i++)
        {
            text += toolkit.GetTextFromPage(i) + "\n";
        }
        toolkit.CloseInputFile();
    }

    return text;
}
using ActivePDF.Toolkit;

public string ExtractText(string pdfPath)
{
    Toolkit toolkit = new Toolkit();
    string text = "";

    if (toolkit.OpenInputFile(pdfPath) == 0)
    {
        int pageCount = toolkit.GetPageCount();
        for (int i = 1; i <= pageCount; i++)
        {
            text += toolkit.GetTextFromPage(i) + "\n";
        }
        toolkit.CloseInputFile();
    }

    return text;
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

IronPDFの実装:

using IronPdf;

public string ExtractText(string pdfPath)
{
    using var pdf = PdfDocument.FromFile(pdfPath);
    return pdf.ExtractAllText();
}
using IronPdf;

public string ExtractText(string pdfPath)
{
    using var pdf = PdfDocument.FromFile(pdfPath);
    return pdf.ExtractAllText();
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

IronPDFの実装は、複数行のテキスト抽出を単一のメソッド呼び出しに削減します。

透かしの追加

using ActivePDF.Toolkit;

public void AddWatermark(string inputPath, string outputPath, string watermarkText)
{
    Toolkit toolkit = new Toolkit();

    if (toolkit.OpenInputFile(inputPath) == 0)
    {
        int pageCount = toolkit.GetPageCount();
        for (int i = 1; i <= pageCount; i++)
        {
            toolkit.SetPage(i);
            toolkit.AddWatermark(watermarkText, 45, 0.5f);
        }
        toolkit.SaveAs(outputPath);
        toolkit.CloseInputFile();
    }
}
using ActivePDF.Toolkit;

public void AddWatermark(string inputPath, string outputPath, string watermarkText)
{
    Toolkit toolkit = new Toolkit();

    if (toolkit.OpenInputFile(inputPath) == 0)
    {
        int pageCount = toolkit.GetPageCount();
        for (int i = 1; i <= pageCount; i++)
        {
            toolkit.SetPage(i);
            toolkit.AddWatermark(watermarkText, 45, 0.5f);
        }
        toolkit.SaveAs(outputPath);
        toolkit.CloseInputFile();
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

IronPDFの実装:

using IronPdf;

public void AddWatermark(string inputPath, string outputPath, string watermarkText)
{
    using var pdf = PdfDocument.FromFile(inputPath);

    pdf.ApplyWatermark(
        $"<h1 style='color:lightgray;font-size:72px;'>{watermarkText}</h1>",
        rotation: 45,
        opacity: 50);

    pdf.SaveAs(outputPath);
}
using IronPdf;

public void AddWatermark(string inputPath, string outputPath, string watermarkText)
{
    using var pdf = PdfDocument.FromFile(inputPath);

    pdf.ApplyWatermark(
        $"<h1 style='color:lightgray;font-size:72px;'>{watermarkText}</h1>",
        rotation: 45,
        opacity: 50);

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

IronPDFのHTMLベースの透かしはCSSスタイリングを可能にし、ページごとの反復作業なしにデザインを完全にコントロールします。

.NETコアの統合

最新のウェブアプリケーションはIronPDFのすっきりとした統合パターンから大きな恩恵を受けています。

ActivePDFパターン:

[HttpPost]
public IActionResult GeneratePdf([FromBody] ReportRequest request)
{
    Toolkit toolkit = new Toolkit();

    if (toolkit.OpenOutputFile("temp.pdf") == 0)
    {
        toolkit.AddHTML(request.Html);
        toolkit.CloseOutputFile();

        byte[] bytes = System.IO.File.ReadAllBytes("temp.pdf");
        return File(bytes, "application/pdf", "report.pdf");
    }

    return BadRequest("PDF generation failed");
}
[HttpPost]
public IActionResult GeneratePdf([FromBody] ReportRequest request)
{
    Toolkit toolkit = new Toolkit();

    if (toolkit.OpenOutputFile("temp.pdf") == 0)
    {
        toolkit.AddHTML(request.Html);
        toolkit.CloseOutputFile();

        byte[] bytes = System.IO.File.ReadAllBytes("temp.pdf");
        return File(bytes, "application/pdf", "report.pdf");
    }

    return BadRequest("PDF generation failed");
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

IronPDFパターン:

[HttpPost]
public IActionResult GeneratePdf([FromBody] ReportRequest request)
{
    var renderer = new ChromePdfRenderer();
    using var pdf = renderer.RenderHtmlAsPdf(request.Html);

    return File(pdf.BinaryData, "application/pdf", "report.pdf");
}
[HttpPost]
public IActionResult GeneratePdf([FromBody] ReportRequest request)
{
    var renderer = new ChromePdfRenderer();
    using var pdf = renderer.RenderHtmlAsPdf(request.Html);

    return File(pdf.BinaryData, "application/pdf", "report.pdf");
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

IronPDFは一時ファイルの必要性をなくし、PDFバイナリデータをメモリから直接返します。

ウェブ

アプリケーションの非同期サポート

ActivePDFはネイティブの非同期サポートがありません。 IronPdfはスケーラブルなWebアプリケーションに不可欠な完全な非同期/待機機能を提供します:

using IronPdf;

public async Task<byte[]> GeneratePdfAsync(string html)
{
    var renderer = new ChromePdfRenderer();
    using var pdf = await renderer.RenderHtmlAsPdfAsync(html);
    return pdf.BinaryData;
}
using IronPdf;

public async Task<byte[]> GeneratePdfAsync(string html)
{
    var renderer = new ChromePdfRenderer();
    using var pdf = await renderer.RenderHtmlAsPdfAsync(html);
    return pdf.BinaryData;
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

依存性注入の構成

.NET 6+アプリケーションでは、IronPDFサービスをDIコンテナに登録してください:

// Program.cs (.NET 6+)
builder.Services.AddSingleton<ChromePdfRenderer>();

// Service wrapper
public interface IPdfService
{
    Task<byte[]> GeneratePdfAsync(string html);
    Task<byte[]> GeneratePdfFromUrlAsync(string url);
}

public class IronPdfService : IPdfService
{
    private readonly ChromePdfRenderer _renderer;

    public IronPdfService()
    {
        _renderer = new ChromePdfRenderer();
        _renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
    }

    public async Task<byte[]> GeneratePdfAsync(string html)
    {
        using var pdf = await _renderer.RenderHtmlAsPdfAsync(html);
        return pdf.BinaryData;
    }

    public async Task<byte[]> GeneratePdfFromUrlAsync(string url)
    {
        using var pdf = await _renderer.RenderUrlAsPdfAsync(url);
        return pdf.BinaryData;
    }
}
// Program.cs (.NET 6+)
builder.Services.AddSingleton<ChromePdfRenderer>();

// Service wrapper
public interface IPdfService
{
    Task<byte[]> GeneratePdfAsync(string html);
    Task<byte[]> GeneratePdfFromUrlAsync(string url);
}

public class IronPdfService : IPdfService
{
    private readonly ChromePdfRenderer _renderer;

    public IronPdfService()
    {
        _renderer = new ChromePdfRenderer();
        _renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
    }

    public async Task<byte[]> GeneratePdfAsync(string html)
    {
        using var pdf = await _renderer.RenderHtmlAsPdfAsync(html);
        return pdf.BinaryData;
    }

    public async Task<byte[]> GeneratePdfFromUrlAsync(string url)
    {
        using var pdf = await _renderer.RenderUrlAsPdfAsync(url);
        return pdf.BinaryData;
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

エラー処理の移行

ActivePDFは、ルックアップテーブルを必要とする整数のリターンコードを使用します。 IronPDFは最新の例外処理を使用します:

ActivePDFのエラー処理

Toolkit toolkit = new Toolkit();
int result = toolkit.OpenOutputFile(path);

if (result != 0)
{
    // Error - need to look up error code
    Console.WriteLine($"Error code: {result}");
}
Toolkit toolkit = new Toolkit();
int result = toolkit.OpenOutputFile(path);

if (result != 0)
{
    // Error - need to look up error code
    Console.WriteLine($"Error code: {result}");
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

IronPDFのエラーハンドリング:

try
{
    var renderer = new ChromePdfRenderer();
    using var pdf = renderer.RenderHtmlAsPdf(html);
    pdf.SaveAs(path);
}
catch (IronPdf.Exceptions.IronPdfProductException ex)
{
    Console.WriteLine($"IronPDF Error: {ex.Message}");
}
catch (Exception ex)
{
    Console.WriteLine($"General Error: {ex.Message}");
}
try
{
    var renderer = new ChromePdfRenderer();
    using var pdf = renderer.RenderHtmlAsPdf(html);
    pdf.SaveAs(path);
}
catch (IronPdf.Exceptions.IronPdfProductException ex)
{
    Console.WriteLine($"IronPDF Error: {ex.Message}");
}
catch (Exception ex)
{
    Console.WriteLine($"General Error: {ex.Message}");
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

パフォーマンス最適化のヒント

レンダラー インスタンスの再利用

新しいChromePdfRendererを作成するには、初期化のオーバーヘッドがあります。 バッチ処理では、単一のインスタンスを再利用します:

var renderer = new ChromePdfRenderer();
foreach (var html in htmlList)
{
    using var pdf = renderer.RenderHtmlAsPdf(html);
    pdf.SaveAs($"output_{i}.pdf");
}
var renderer = new ChromePdfRenderer();
foreach (var html in htmlList)
{
    using var pdf = renderer.RenderHtmlAsPdf(html);
    pdf.SaveAs($"output_{i}.pdf");
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Webアプリケーションで非同期を使用する

.NET Coreアプリケーションでは、非同期PDF生成によりスループットが向上します:

public async Task<IActionResult> GenerateReport()
{
    var renderer = new ChromePdfRenderer();
    using var pdf = await renderer.RenderHtmlAsPdfAsync(html);
    return File(pdf.BinaryData, "application/pdf");
}
public async Task<IActionResult> GenerateReport()
{
    var renderer = new ChromePdfRenderer();
    using var pdf = await renderer.RenderHtmlAsPdfAsync(html);
    return File(pdf.BinaryData, "application/pdf");
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

適切なリソースの処分

適切なクリーンアップを確実にするために、常にusing文を使用してください:

using var pdf = renderer.RenderHtmlAsPdf(html);
return pdf.BinaryData;
using var pdf = renderer.RenderHtmlAsPdf(html);
return pdf.BinaryData;
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

画像圧縮

画像圧縮で出力ファイルサイズを削減する:

using var pdf = renderer.RenderHtmlAsPdf(html);
pdf.CompressImages(85); // 85% quality
pdf.SaveAs("compressed.pdf");
using var pdf = renderer.RenderHtmlAsPdf(html);
pdf.CompressImages(85); // 85% quality
pdf.SaveAs("compressed.pdf");
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

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

課題ページサイズの違い

ActivePDFはポイント(612x792 = Letter)を使用し、IronPdfは列挙またはミリメートルを使用します:

// ActivePDF: Points
toolkit.SetPageSize(612, 792);

// IronPDF: Use enum
renderer.RenderingOptions.PaperSize = PdfPaperSize.Letter;
// Or custom in mm:
renderer.RenderingOptions.SetCustomPaperSizeInMillimeters(215.9, 279.4);
// ActivePDF: Points
toolkit.SetPageSize(612, 792);

// IronPDF: Use enum
renderer.RenderingOptions.PaperSize = PdfPaperSize.Letter;
// Or custom in mm:
renderer.RenderingOptions.SetCustomPaperSizeInMillimeters(215.9, 279.4);
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

問題CloseOutputFile と同等のものがありません。

IronPDFは明示的なファイルハンドル管理のない最新のパラダイムを使用しています:

// ActivePDF
toolkit.OpenOutputFile(path);
toolkit.AddHTML(html);
toolkit.CloseOutputFile(); // Required!

//IronPDF- no open/close needed
using var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs(path); // 'using' handles cleanup
// ActivePDF
toolkit.OpenOutputFile(path);
toolkit.AddHTML(html);
toolkit.CloseOutputFile(); // Required!

//IronPDF- no open/close needed
using var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs(path); // 'using' handles cleanup
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

問題です:PDFが真っ白にレンダリングされる

JavaScriptに依存するコンテンツが空白でレンダリングされる場合は、レンダリング遅延を設定してください:

var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.WaitFor.RenderDelay(2000);
// Or wait for element:
renderer.RenderingOptions.WaitFor.HtmlElementById("content-loaded");
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.WaitFor.RenderDelay(2000);
// Or wait for element:
renderer.RenderingOptions.WaitFor.HtmlElementById("content-loaded");
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

課題CSS/画像が読み込まれない

相対パス解決用にベースURLを設定します:

renderer.RenderingOptions.BaseUrl = new Uri("https://yourdomain.com/assets/");
renderer.RenderingOptions.BaseUrl = new Uri("https://yourdomain.com/assets/");
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

移行後のチェックリスト

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

  • [既存のすべての単体テストと統合テストを実行する。
  • [PDF 出力を以前のバージョンと視覚的に比較する。
  • [すべてのPDFワークフローをステージング環境でテストしてください。
  • [ ] ライセンスが正しく動作することを確認する (IronPdf.License.IsLicensed)
  • [以前の実装とのベンチマーク
  • [古いActivePDFのインストールファイルとDLLの参照を削除してください。
  • [CI/CD パイプラインの依存関係の更新
  • [ ] 開発チームのためのIronPDFパターンの文書化

PDFソリューションの将来性

.NET 10が目前に迫り、C# 14が新しい言語機能を導入する中、開発が活発な.NET PDFライブラリを選択することで、アプリケーションが進化するランタイム機能と互換性を保つことができます。 IronPDFは最新の.NETバージョンをサポートすることに専念しており、プロジェクトが2025年、2026年に拡張されたとしても、移行への投資は報われます。

その他のリソース


ActivePDFからIronPDFへの移行は、よりクリーンなAPI、より優れた.NET統合、積極的な長期サポートによってPDF生成インフラを近代化します。 移行への投資は、コードの保守性の向上、非同期機能、そしてPDFライブラリの継続的な開発への信頼という形で報われます。

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

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

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