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

Adobe PDF Library SDKからIronPdfへの移行方法

AdobePDFライブラリSDKからIronPDFへの移行:完全なC#移行ガイド

Datalogicsを通じて配布されるAdobe PDF Library SDKは、エンタープライズグレードの機能を備えた本物のAdobe PDFエンジンを提供します。 しかし、法外なライセンス費用、複雑なネイティブSDKの統合、低レベルのAPI設計により、ほとんどの開発チームにとって実用的ではありません。 この包括的なガイドでは、Adobe PDF Library SDKから.NET Framework 4.6.2から.NET 9と将来のバージョンをサポートする最新のコスト効率の良い.NET PDFライブラリであるIronPDFへの移行パスをステップバイステップで提供します。

なぜAdobe PDF Library SDKから移行するのですか?

Adobe PDF Library SDKは、本物のAdobe PDFエンジンを提供していますが、開発チームがPDFの生成と操作のニーズに対応するために代替ツールを求めるようになったのには、いくつかの要因があります。

高額なライセンス費用

Adobe PDF Library SDK は、通常、年間10,000ドルから50,000ドル以上のエンタープライズ価格で提供されています。 このコスト構造により、中小企業、新興企業、個人開発者、包括的なアドビエンジン機能が不可欠でないプロジェクトでは、SDKは実用的ではありません。

複雑なネイティブ SDK の統合

Adobe PDF Library SDKは、プラットフォーム固有のバイナリを必要とするネイティブC#++コードに基づいて構築されています。 開発者は、メモリを慎重に管理し、明示的な初期化と終了パターンを処理し、複雑なセットアップ手順をナビゲートする必要があります。 このため、開発のオーバーヘッドが大きくなり、CI/CDパイプラインが複雑になります。

低レベル API デザイン

Adobe PDF Library SDKでPDFを作成するには、ページ、コンテンツストリーム、テキストラン、フォントをプログラムで構築する必要があります。 HTMLコンテンツのレンダリングのような単純な作業は、座標計算、フォントの埋め込み、手作業によるコンテンツ要素の管理などを含む多段階の作業になります。

ライブラリのライフサイクル管理オーバーヘッド

すべての操作は、Library.Initialize()Library.Terminate()ブロックでコードをラップし、COMオブジェクトを注意深く処理する必要があります。 クリーンアップの手順を忘れると、リソースリークやアプリケーションの不安定につながります。

典型的なプロジェクトのためのやりすぎ

主にHTMLからPDFへの変換、基本的な文書操作、レポート生成を必要とするアプリケーションでは、Adobe PDFエンジンのフルバージョンは、よりシンプルなソリューションで同等の結果が得られるにもかかわらず、かなり過剰なエンジニアリングを意味します。

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

これらのライブラリ間の基本的なアーキテクチャの違いを理解することは、効果的な移行戦略を計画するのに役立ちます。

アスペクトAdobe PDF Library SDKIronPDF
価格について万ドル~5万ドル/年以上/企業手頃な価格の開発者向けライセンス
インストールネイティブDLL、プラットフォーム固有シンプルなNuGetパッケージ
ドキュメント作成低レベルのページ/コンテンツ構築HTML/CSSレンダリング
初期化Library.Initialize()/Terminate()は必須です。自動翻訳
座標システムポストスクリプトポイント、左下原点CSSベースのレイアウト
フォントの扱い手動での埋め込みが必要自動翻訳
メモリ管理COM オブジェクトの手動廃棄標準IDisposableパターン
非同期サポートについて不可完全なasync/awaitのサポート

移行前の準備

前提条件

移行を開始する前に、お使いの環境がこれらの要件を満たしていることを確認してください:

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

アドビ PDF ライブラリ SDK の使用状況を監査する。

ソ リ ュ ーシ ョ ンデ ィ レ ク ト リ 内で以下の コ マ ン ド を実行 し て、 すべてのAdobe PDF Library SDK参照を特定 し ます:

grep -r "using Datalogics" --include="*.cs" .
grep -r "Adobe.PDF.Library" --include="*.csproj" .
grep -r "Library.Initialize\|Library.Terminate" --include="*.cs" .
grep -r "using Datalogics" --include="*.cs" .
grep -r "Adobe.PDF.Library" --include="*.csproj" .
grep -r "Library.Initialize\|Library.Terminate" --include="*.cs" .
SHELL

予想される画期的な変更

カテゴリAdobe PDF Library SDKIronPDF移行作業
初期設定Library.Initialize() / Terminate().自動翻訳ライフサイクルコードの削除
ドキュメントの作成new Document() とページ構築<コード>ChromePdfRenderer</コードHTMLレンダリングを使用
座標系ポストスクリプトポイント、左下原点CSSベースのレイアウトHTML/CSSを使用
フォントの取り扱い手動によるフォントの作成と埋め込み自動翻訳フォントコードの削除
メモリ管理COM オブジェクトの手動廃棄標準IDisposableusingステートメントを使用してください。
ページ構成CreatePage()AddContent()HTMLからの自動翻訳大幅に簡素化

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

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

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

# Remove Adobe PDF Library
dotnet remove package Adobe.PDF.Library.LM.NET

# Install IronPDF
dotnet add package IronPdf
# Remove Adobe PDF Library
dotnet remove package Adobe.PDF.Library.LM.NET

# Install IronPDF
dotnet add package IronPdf
SHELL

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

AdobeのライセンスをIronPDFのコードベースのライセンスキーに置き換えてください:

// Replace Adobe's Library.LicenseKey withIronPDFlicense
// Add at application startup, before anyIronPDFoperations
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";

// Verify license status
bool isLicensed = IronPdf.License.IsLicensed;
// Replace Adobe's Library.LicenseKey withIronPDFlicense
// Add at application startup, before anyIronPDFoperations
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";

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

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

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

検索置換対象
Datalogics.PDFLを使用しています。IronPdf;を使用しています。
Datalogics.PDFL.Documentを使用しています。IronPdf;を使用しています。
Datalogics.PDFL.Pageを使用しています。IronPdf;を使用しています。
Datalogics.PDFL.Contentを使用しています。IronPdf;を使用しています。

ステップ 4: ライブラリ ライフサイクル コードを削除する

最も重要な簡素化のひとつは、初期化パターンと終了パターンの削除です:

//Adobe PDF Library SDK- REMOVE THIS PATTERN
Library.Initialize();
try
{
    // PDF operations
}
finally
{
    Library.Terminate(); // Must always terminate
}

//IronPDF- Just use directly
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(html);
//Adobe PDF Library SDK- REMOVE THIS PATTERN
Library.Initialize();
try
{
    // PDF operations
}
finally
{
    Library.Terminate(); // Must always terminate
}

//IronPDF- Just use directly
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(html);
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

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

ライブラリのライフサイクルメソッド

アドビ方式IronPDF 同等物ノート
<コード>Library.Initialize()</コード不要自動初期化
<コード>Library.Terminate()</コード不要自動クリーンアップ
Library.LicenseKey = "KEY".IronPdf.License.LicenseKey = "KEY".起動時に一度だけ設定
using (Library lib = new Library()).不要ラッパー不要

ドキュメント作成方法

アドビ方式IronPDF メソッドノート
new Document().new ChromePdfRenderer().HTML用レンダラ
new Document(path) とします。PdfDocument.FromFile(パス)既存のPDFを読み込む.
doc.CreatePage(index, rect).HTMLからの自動翻訳自動作成されるページ
doc.Save(SaveFlags.Full, path).pdf.SaveAs(path)のようにします。ファイルに保存
<コード>doc.NumPages</コード<コード>pdf.PageCount</コードページ数プロパティ
doc.GetPage(インデックス)<コード>pdf.Pages[index]</コードアクセスページ
doc.InsertPages(...)を使用してください。PdfDocument.Merge()を使用してください。ドキュメントをマージする.

コンテンツ作成(大きなパラダイムシフト)

Adobe PDF Library SDKは、低レベルのコンテンツ構築を必要とします。 IronPDFはHTML/CSSを使用しています:

アドビ方式IronPDF メソッドノート
new Text().HTMLの<p><h1>などを使用してください。HTMLタグ
text.AddRun(textRun)を実行します。HTMLを使用HTML経由のテキスト
new TextRun(text, font, size, point).CSSスタイリングCSSによるスタイル
new Font(名前, flags).CSS <コード>font-family</コードCSSによるフォント
<コード>new Image(path)HTML <img>タグHTML経由の画像
content.AddElement(...)を追加します。HTMLコンテンツHTMLで構築
page.UpdateContent()を実行します。不要自動翻訳

電子透かしとセキュリティ手法

アドビ方式IronPDF メソッドノート
new Watermark(doc, textParams, wmParams).pdf.ApplyWatermark(html).HTMLウォーターマーク
<コード>WatermarkParams.Opacity</コードCSS <コード>不透明度</コードCSSによる不透明度
new EncryptionHandler(user, owner, perms).<コード>pdf.SecuritySettings</コードセキュリティ設定
<コード>PermissionFlags.PrintDoc</コード<コード>AllowUserPrinting</コード印刷許可

テキスト抽出

アドビ方式IronPDF メソッドノート
new WordFinder(doc, config).pdf.ExtractAllText()を使用してください。簡単な抽出
wordFinder.GetWordList()pdf.Pages[i].Textページごとのテキスト
複雑な単語/文字の反復単一メソッド呼び出しもっとシンプルに

コード移行の例

HTMLからPDFへの変換

最も劇的な単純化は、コンテンツをPDFに変換するときに発生します。 Adobe PDF Library SDKでは、手動によるページ構築、フォント埋め込み、座標位置決めが必要です。

アドビ PDF ライブラリ SDK の実装:

// Adobe PDF Library SDK
using Datalogics.PDFL;
using System;

class AdobeHtmlToPdf
{
    static void Main()
    {
        using (Library lib = new Library())
        {
            // Adobe PDF Library requires complex setup with HTML conversion parameters
            HTMLConversionParameters htmlParams = new HTMLConversionParameters();
            htmlParams.PaperSize = PaperSize.Letter;
            htmlParams.Orientation = Orientation.Portrait;

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

            // Convert HTML to PDF
            Document doc = Document.CreateFromHTML(htmlContent, htmlParams);
            doc.Save(SaveFlags.Full, "output.pdf");
            doc.Dispose();
        }
    }
}
// Adobe PDF Library SDK
using Datalogics.PDFL;
using System;

class AdobeHtmlToPdf
{
    static void Main()
    {
        using (Library lib = new Library())
        {
            // Adobe PDF Library requires complex setup with HTML conversion parameters
            HTMLConversionParameters htmlParams = new HTMLConversionParameters();
            htmlParams.PaperSize = PaperSize.Letter;
            htmlParams.Orientation = Orientation.Portrait;

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

            // Convert HTML to PDF
            Document doc = Document.CreateFromHTML(htmlContent, htmlParams);
            doc.Save(SaveFlags.Full, "output.pdf");
            doc.Dispose();
        }
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

IronPDFの実装:

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

class IronPdfHtmlToPdf
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        string htmlContent = "<html><body><h1>Hello World</h1></body></html>";

        // Convert HTML to PDF with simple API
        var pdf = renderer.RenderHtmlAsPdf(htmlContent);
        pdf.SaveAs("output.pdf");
    }
}
// NuGet: Install-Package IronPdf
using IronPdf;
using System;

class IronPdfHtmlToPdf
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        string htmlContent = "<html><body><h1>Hello World</h1></body></html>";

        // Convert HTML to PDF with simple API
        var pdf = renderer.RenderHtmlAsPdf(htmlContent);
        pdf.SaveAs("output.pdf");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

IronPDFはライブラリライフサイクルラッパー、変換パラメータオブジェクト、明示的な廃棄を排除します。 ChromePdfRendererは、ピクセルパーフェクトなCSSとJavaScriptをサポートするためにChromiumベースのエンジンを使用しています。 高度なシナリオについては、HTML to PDF documentationを参照してください。

複数のPDFをマージする

PDFマージは、APIの複雑さの違いを明確に示します。

アドビ PDF ライブラリ SDK の実装:

// Adobe PDF Library SDK
using Datalogics.PDFL;
using System;

class AdobeMergePdfs
{
    static void Main()
    {
        using (Library lib = new Library())
        {
            // Open first PDF document
            Document doc1 = new Document("document1.pdf");
            Document doc2 = new Document("document2.pdf");

            // Insert pages from second document into first
            PageInsertParams insertParams = new PageInsertParams();
            insertParams.InsertFlags = PageInsertFlags.None;

            for (int i = 0; i < doc2.NumPages; i++)
            {
                Page page = doc2.GetPage(i);
                doc1.InsertPage(doc1.NumPages - 1, page, insertParams);
            }

            doc1.Save(SaveFlags.Full, "merged.pdf");
            doc1.Dispose();
            doc2.Dispose();
        }
    }
}
// Adobe PDF Library SDK
using Datalogics.PDFL;
using System;

class AdobeMergePdfs
{
    static void Main()
    {
        using (Library lib = new Library())
        {
            // Open first PDF document
            Document doc1 = new Document("document1.pdf");
            Document doc2 = new Document("document2.pdf");

            // Insert pages from second document into first
            PageInsertParams insertParams = new PageInsertParams();
            insertParams.InsertFlags = PageInsertFlags.None;

            for (int i = 0; i < doc2.NumPages; i++)
            {
                Page page = doc2.GetPage(i);
                doc1.InsertPage(doc1.NumPages - 1, page, insertParams);
            }

            doc1.Save(SaveFlags.Full, "merged.pdf");
            doc1.Dispose();
            doc2.Dispose();
        }
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

IronPDFの実装:

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

class IronPdfMergePdfs
{
    static void Main()
    {
        // Load PDF documents
        var pdf1 = PdfDocument.FromFile("document1.pdf");
        var pdf2 = PdfDocument.FromFile("document2.pdf");

        // Merge PDFs with simple method
        var merged = PdfDocument.Merge(pdf1, pdf2);
        merged.SaveAs("merged.pdf");
    }
}
// NuGet: Install-Package IronPdf
using IronPdf;
using System;

class IronPdfMergePdfs
{
    static void Main()
    {
        // Load PDF documents
        var pdf1 = PdfDocument.FromFile("document1.pdf");
        var pdf2 = PdfDocument.FromFile("document2.pdf");

        // Merge PDFs with simple method
        var merged = PdfDocument.Merge(pdf1, pdf2);
        merged.SaveAs("merged.pdf");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

アドビのアプローチでは、挿入パラメータを使用してページごとに反復する必要があります。 IronPDFは複数のドキュメントを受け入れる単一のMergeメソッドを提供します。

透かしの追加

透かしは、IronPDFがどのようにHTML/CSSを活用して柔軟なスタイリングを実現しているかを示しています。

アドビ PDF ライブラリ SDK の実装:

// Adobe PDF Library SDK
using Datalogics.PDFL;
using System;

class AdobeAddWatermark
{
    static void Main()
    {
        using (Library lib = new Library())
        {
            Document doc = new Document("input.pdf");

            // Create watermark with complex API
            WatermarkParams watermarkParams = new WatermarkParams();
            watermarkParams.Opacity = 0.5;
            watermarkParams.Rotation = 45.0;
            watermarkParams.VerticalAlignment = WatermarkVerticalAlignment.Center;
            watermarkParams.HorizontalAlignment = WatermarkHorizontalAlignment.Center;

            WatermarkTextParams textParams = new WatermarkTextParams();
            textParams.Text = "CONFIDENTIAL";

            Watermark watermark = new Watermark(doc, textParams, watermarkParams);

            doc.Save(SaveFlags.Full, "watermarked.pdf");
            doc.Dispose();
        }
    }
}
// Adobe PDF Library SDK
using Datalogics.PDFL;
using System;

class AdobeAddWatermark
{
    static void Main()
    {
        using (Library lib = new Library())
        {
            Document doc = new Document("input.pdf");

            // Create watermark with complex API
            WatermarkParams watermarkParams = new WatermarkParams();
            watermarkParams.Opacity = 0.5;
            watermarkParams.Rotation = 45.0;
            watermarkParams.VerticalAlignment = WatermarkVerticalAlignment.Center;
            watermarkParams.HorizontalAlignment = WatermarkHorizontalAlignment.Center;

            WatermarkTextParams textParams = new WatermarkTextParams();
            textParams.Text = "CONFIDENTIAL";

            Watermark watermark = new Watermark(doc, textParams, watermarkParams);

            doc.Save(SaveFlags.Full, "watermarked.pdf");
            doc.Dispose();
        }
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

IronPDFの実装:

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

class IronPdfAddWatermark
{
    static void Main()
    {
        var pdf = PdfDocument.FromFile("input.pdf");

        // Apply text watermark with simple API
        pdf.ApplyWatermark("<h1 style='color:red; opacity:0.5;'>CONFIDENTIAL</h1>",
            rotation: 45,
            verticalAlignment: VerticalAlignment.Middle,
            horizontalAlignment: HorizontalAlignment.Center);

        pdf.SaveAs("watermarked.pdf");
    }
}
// NuGet: Install-Package IronPdf
using IronPdf;
using IronPdf.Editing;
using System;

class IronPdfAddWatermark
{
    static void Main()
    {
        var pdf = PdfDocument.FromFile("input.pdf");

        // Apply text watermark with simple API
        pdf.ApplyWatermark("<h1 style='color:red; opacity:0.5;'>CONFIDENTIAL</h1>",
            rotation: 45,
            verticalAlignment: VerticalAlignment.Middle,
            horizontalAlignment: HorizontalAlignment.Center);

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

IronPdfのHTMLベースの透かしは、CSSスタイリングによる完全なデザインコントロールを提供し、個別のパラメーターオブジェクトを必要としません。

パスワード保護と暗号化

アドビ PDF ライブラリ SDK の実装:

using Datalogics.PDFL;

public void ProtectPdf(string inputPath, string outputPath, string password)
{
    Library.Initialize();
    try
    {
        using (Document doc = new Document(inputPath))
        {
            PermissionFlags permissions =
                PermissionFlags.PrintDoc |
                PermissionFlags.PrintFidelity;

            EncryptionHandler encHandler = new EncryptionHandler(
                password,      // User password
                password,      // Owner password
                permissions,
                EncryptionMethod.AES256);

            doc.SetEncryptionHandler(encHandler);
            doc.Save(SaveFlags.Full | SaveFlags.Encrypted, outputPath);
        }
    }
    finally
    {
        Library.Terminate();
    }
}
using Datalogics.PDFL;

public void ProtectPdf(string inputPath, string outputPath, string password)
{
    Library.Initialize();
    try
    {
        using (Document doc = new Document(inputPath))
        {
            PermissionFlags permissions =
                PermissionFlags.PrintDoc |
                PermissionFlags.PrintFidelity;

            EncryptionHandler encHandler = new EncryptionHandler(
                password,      // User password
                password,      // Owner password
                permissions,
                EncryptionMethod.AES256);

            doc.SetEncryptionHandler(encHandler);
            doc.Save(SaveFlags.Full | SaveFlags.Encrypted, outputPath);
        }
    }
    finally
    {
        Library.Terminate();
    }
}
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.UserPassword = password;
    pdf.SecuritySettings.OwnerPassword = 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.UserPassword = password;
    pdf.SecuritySettings.OwnerPassword = 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はビット単位のパーミッションフラグや暗号化ハンドラオブジェクトの代わりに、強く型付けされたプロパティを使用します。

テキスト抽出

アドビ PDF ライブラリ SDK の実装:

using Datalogics.PDFL;

public string ExtractText(string pdfPath)
{
    string extractedText = "";

    Library.Initialize();
    try
    {
        using (Document doc = new Document(pdfPath))
        {
            WordFinderConfig config = new WordFinderConfig();
            config.IgnoreCharGaps = true;

            for (int i = 0; i < doc.NumPages; i++)
            {
                using (WordFinder wordFinder = new WordFinder(doc, i, config))
                {
                    IList<Word> words = wordFinder.GetWordList();
                    foreach (Word word in words)
                    {
                        extractedText += word.Text + " ";
                    }
                    extractedText += "\n";
                }
            }
        }
    }
    finally
    {
        Library.Terminate();
    }

    return extractedText;
}
using Datalogics.PDFL;

public string ExtractText(string pdfPath)
{
    string extractedText = "";

    Library.Initialize();
    try
    {
        using (Document doc = new Document(pdfPath))
        {
            WordFinderConfig config = new WordFinderConfig();
            config.IgnoreCharGaps = true;

            for (int i = 0; i < doc.NumPages; i++)
            {
                using (WordFinder wordFinder = new WordFinder(doc, i, config))
                {
                    IList<Word> words = wordFinder.GetWordList();
                    foreach (Word word in words)
                    {
                        extractedText += word.Text + " ";
                    }
                    extractedText += "\n";
                }
            }
        }
    }
    finally
    {
        Library.Terminate();
    }

    return extractedText;
}
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

Adobeの単語ごとの繰り返しは、IronPDFでは単一のメソッド呼び出しになります。

ヘッダーとフッター

アドビ PDF ライブラリ SDK の実装:

using Datalogics.PDFL;

public void AddHeaderFooter(string inputPath, string outputPath)
{
    Library.Initialize();
    try
    {
        using (Document doc = new Document(inputPath))
        {
            Font font = new Font("Helvetica", FontCreateFlags.None);

            for (int i = 0; i < doc.NumPages; i++)
            {
                using (Page page = doc.GetPage(i))
                {
                    Content content = page.Content;

                    // Add header
                    Text header = new Text();
                    header.AddRun(new TextRun("Document Header",
                        font, 10, new Point(72, page.MediaBox.Top - 36)));
                    content.AddElement(header);

                    // Add footer with page number
                    Text footer = new Text();
                    footer.AddRun(new TextRun($"Page {i + 1} of {doc.NumPages}",
                        font, 10, new Point(72, 36)));
                    content.AddElement(footer);

                    page.UpdateContent();
                }
            }
            doc.Save(SaveFlags.Full, outputPath);
        }
    }
    finally
    {
        Library.Terminate();
    }
}
using Datalogics.PDFL;

public void AddHeaderFooter(string inputPath, string outputPath)
{
    Library.Initialize();
    try
    {
        using (Document doc = new Document(inputPath))
        {
            Font font = new Font("Helvetica", FontCreateFlags.None);

            for (int i = 0; i < doc.NumPages; i++)
            {
                using (Page page = doc.GetPage(i))
                {
                    Content content = page.Content;

                    // Add header
                    Text header = new Text();
                    header.AddRun(new TextRun("Document Header",
                        font, 10, new Point(72, page.MediaBox.Top - 36)));
                    content.AddElement(header);

                    // Add footer with page number
                    Text footer = new Text();
                    footer.AddRun(new TextRun($"Page {i + 1} of {doc.NumPages}",
                        font, 10, new Point(72, 36)));
                    content.AddElement(footer);

                    page.UpdateContent();
                }
            }
            doc.Save(SaveFlags.Full, outputPath);
        }
    }
    finally
    {
        Library.Terminate();
    }
}
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 = "Document Header",
        FontSize = 10,
        FontFamily = "Helvetica"
    };

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

    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 = "Document Header",
        FontSize = 10,
        FontFamily = "Helvetica"
    };

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

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

IronPDFは自動的にページの反復を処理し、{page}<//code>や{total-pages}<//code>のようなプレースホルダートークンをサポートします。 より高度なレイアウトについては、headers and footers documentationを参照してください。

URLからPDFへの変換

Adobe PDF Library SDKには、URLレンダリング機能が組み込まれていません。 IronPDFはネイティブサポートを提供します:

using IronPdf;

public void ConvertUrlToPdf(string url, string outputPath)
{
    var renderer = new ChromePdfRenderer();
    using var pdf = renderer.RenderUrlAsPdf(url);
    pdf.SaveAs(outputPath);
}
using IronPdf;

public void ConvertUrlToPdf(string url, string outputPath)
{
    var renderer = new ChromePdfRenderer();
    using var pdf = renderer.RenderUrlAsPdf(url);
    pdf.SaveAs(outputPath);
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

完全なURL変換オプションについては、URL to PDF documentationを参照してください。

.NETコアの統合

Adobe PDF Library SDKの静的初期化パターンでは、依存性注入との摩擦が生じます。 IronPdfは最新の.NETアーキテクチャに自然に統合されます。

Adobeパターン(DIの問題点):

public class AdobePdfService
{
    public byte[] Generate(string content)
    {
        Library.Initialize();
        try
        {
            //複雑な文書construction...
            return bytes;
        }
        finally
        {
            Library.Terminate();
        }
    }
}
public class AdobePdfService
{
    public byte[] Generate(string content)
    {
        Library.Initialize();
        try
        {
            //複雑な文書construction...
            return bytes;
        }
        finally
        {
            Library.Terminate();
        }
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

IronPDFパターン(DIフレンドリー):

public interface IPdfService
{
    Task<byte[]> GeneratePdfAsync(string html);
}

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

// Register in Program.cs (.NET 6+):
builder.Services.AddSingleton<IPdfService, IronPdfService>();
public interface IPdfService
{
    Task<byte[]> GeneratePdfAsync(string html);
}

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

// Register in Program.cs (.NET 6+):
builder.Services.AddSingleton<IPdfService, IronPdfService>();
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

非同期サポート

Adobe PDF Library SDK は非同期操作をサポートしていません。 IronPdfはスケーラブルなWebアプリケーションに不可欠な完全な非同期/待機機能を提供します:

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

パフォーマンスの最適化

メモリ使用量の比較

シナリオAdobe PDF Library SDKIronPDFノート
シンプルなPDF~100 MB~50 MBAdobe ロードフルエンジン
複雑な文書~200 MB~80 MBIronPDFをより効率的に
バッチ(100 PDF)高(ネイティブメモリ)~100 MBIronPDFの管理向上

最適化のヒント

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

// Good: Reuse renderer for batch operations
var renderer = new ChromePdfRenderer();
foreach (var html in htmlList)
{
    using var pdf = renderer.RenderHtmlAsPdf(html);
    pdf.SaveAs($"output_{i}.pdf");
}
// Good: Reuse renderer for batch operations
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アプリケーションで非同期を使用する:

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

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

問題座標ベースのポジショニングが機能しない

AdobeはPostScriptの点座標を使用しています。 IronPDFはCSSポジショニングを使用しています:

// Adobe: Point-based
new TextRun("Hello", font, 12, new Point(100, 700));

// IronPDF: CSS-based
string html = "<p style='position:absolute; left:100px; top:92px;'>Hello</p>";
// Adobe: Point-based
new TextRun("Hello", font, 12, new Point(100, 700));

// IronPDF: CSS-based
string html = "<p style='position:absolute; left:100px; top:92px;'>Hello</p>";
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

課題ページサイズの違い

アドビはポストスクリプトポイントを使用しています。 IronPDFは列挙型またはカスタムディメンションを使用します:

// Adobe: Points
Rect(0, 0, 612, 792) // Letter

// IronPDF: Enum or custom
renderer.RenderingOptions.PaperSize = PdfPaperSize.Letter;
// Or custom:
renderer.RenderingOptions.SetCustomPaperSizeInInches(8.5, 11);
// Adobe: Points
Rect(0, 0, 612, 792) // Letter

// IronPDF: Enum or custom
renderer.RenderingOptions.PaperSize = PdfPaperSize.Letter;
// Or custom:
renderer.RenderingOptions.SetCustomPaperSizeInInches(8.5, 11);
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

問題です:フォントが見つかりません

Adobeでは、フォントの埋め込みを手動で行う必要があります。 IronPDFは自動的にフォントを処理します:

// IronPDF: Use web fonts if needed
string html = @"
<style>
    @import url('https://fonts.googleapis.com/css2?family=Roboto&display=swap');
    body { font-family: 'Roboto', sans-serif; }
</style>";
// IronPDF: Use web fonts if needed
string html = @"
<style>
    @import url('https://fonts.googleapis.com/css2?family=Roboto&display=swap');
    body { font-family: 'Roboto', sans-serif; }
</style>";
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

問題です:SaveFlags が使用できません。

Adobeは、セーブフラグの組み合わせを使用します。 IronPDFは直接保存を使用します:

// Adobe
doc.Save(SaveFlags.Full | SaveFlags.Incremental, path);

//IronPDF- full save is default
pdf.SaveAs(path);
// Adobe
doc.Save(SaveFlags.Full | SaveFlags.Incremental, path);

//IronPDF- full save is default
pdf.SaveAs(path);
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

移行後のチェックリスト

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

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

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

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

その他のリソース


Adobe PDF Library SDKからIronPDFに移行することで、PDF生成コードベースが劇的に簡素化され、同時にライセンスコストが桁違いに削減されます。 低レベルのページ構築からHTML/CSSレンダリングへの移行により、何百行もの座標計算、フォント管理、ライフサイクル処理コードが不要になります。 最新の.NETアプリケーションを構築するチームにとって、IronPDFは現代の開発ワークフローのために設計された開発者フレンドリーなAPIで同等の機能を提供します。

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

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

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