Adobe PDF Library SDKからIronPdfへの移行方法
Datalogics から入手できるAdobe PDF Library SDKは、高レベルの機能を備えた本物の Adobe PDF エンジンを提供します。 しかし、ライセンスコストが高く、ネイティブ SDK の統合が複雑で、API 設計が低レベルであるため、多くの開発チームにとって現実的ではありません。 このガイドでは、Adobe PDF Library SDK からIronPDF(.NET Framework 4.6.2 から .NET 9 およびそれ以降のバージョンをサポートする最新のコスト効率の高い .NET PDF ライブラリ) への移行パスを段階的に説明します。
Adobe PDF Library SDKからの移行を検討する理由は何ですか?
Adobe PDF Library SDK は純正の Adobe PDF エンジンを提供しますが、開発チームが PDF の生成と操作のニーズに対応する代替手段を検討する要因はいくつかあります。
高額なライセンス費用
Adobe PDF Library SDK は、通常、年間 10,000 ドルから 50,000 ドル以上のエンタープライズ価格レベルで運営されます。 このコスト構造により、中小企業、スタートアップ企業、個人開発者、および Adobe エンジンの完全な機能が必要ないプロジェクトにとって SDK は実用的ではありません。
複雑なネイティブ SDK の統合
Adobe PDF ライブラリ 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 SDK | IronPDF |
|---|---|---|
| 価格について | 万ドル~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" .予想される画期的な変更
| カテゴリ | Adobe PDF Library SDK | IronPDF | 移行作業 |
|---|---|---|---|
| 初期設定 | Library.Initialize() / Terminate(). | 自動翻訳 | ライフサイクルコードの削除 |
| ドキュメントの作成 | new Document() とページ構築 | <コード>ChromePdfRenderer</コード | HTMLレンダリングを使用 |
| 座標系 | ポストスクリプトポイント、左下原点 | CSSベースのレイアウト | HTML/CSSを使用 |
| フォントの取り扱い | 手動によるフォントの作成と埋め込み | 自動翻訳 | フォントコードの削除 |
| メモリ管理 | COM オブジェクトの手動廃棄 | 標準IDisposable | usingステートメントを使用してください。 |
| ページ構成 | 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ステップ 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;ステップ 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);完全な 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();
}
}
}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");
}
}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();
}
}
}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");
}
}アドビのアプローチでは、挿入パラメータを使用してページごとに反復する必要があります。 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();
}
}
}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");
}
}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();
}
}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);
}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;
}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();
}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();
}
}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);
}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);
}完全な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();
}
}
}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>();非同期サポート
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");
}パフォーマンスの最適化
メモリ使用量の比較
| シナリオ | Adobe PDF Library SDK | IronPDF | ノート |
|---|---|---|---|
| シンプルなPDF | ~100 MB | ~50 MB | Adobe ロードフルエンジン |
| 複雑な文書 | ~200 MB | ~80 MB | IronPDFをより効率的に |
| バッチ(100 PDF) | 高(ネイティブメモリ) | ~100 MB | IronPDFの管理向上 |
最適化のヒント
再利用レンダラーインスタンス
// 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");
}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");
}よくある移行の問題のトラブルシューティング
問題座標ベースのポジショニングが機能しない
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>";課題ページサイズの違い
アドビはポストスクリプトポイントを使用しています。 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);問題です:フォントが見つかりません
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>";問題です: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);移行後のチェックリスト
コードの移行が完了したら、以下を確認してください:
- 既存のユニットテストと統合テストをすべて実行する
- PDF出力を以前のバージョンと視覚的に比較する
- ステージング環境ですべてのPDFワークフローをテストする
- ライセンスが正しく機能していることを確認します (
IronPdf.License.IsLicensed) - 以前の実装と比較したパフォーマンスベンチマーク
- Adobeライセンス設定を削除する
- CI/CDパイプラインの依存関係を更新する
- プロジェクトからすべてのAdobe PDFライブラリDLLを削除します
- 開発チーム向けに新しいパターンを文書化する
PDFインフラストラクチャの将来性を確保する
.NET 10が近づいており、C# 14が新しい言語機能を導入しているため、開発が活発な.NET PDFライブラリを選択することで、進化するランタイム機能との互換性を確保できます。 IronPDFは最新の.NETバージョンをサポートすることに専念しており、プロジェクトが2025年、2026年に拡張されたとしても、移行への投資は報われます。
その他のリソース
Adobe PDF Library SDK からIronPDFに移行すると、PDF 生成コードベースが大幅に簡素化され、ライセンス コストも大幅に削減されます。 低レベルのページ構築からHTML/CSSレンダリングへの移行により、何百行もの座標計算、フォント管理、ライフサイクル処理コードが不要になります。 最新の.NETアプリケーションを構築するチームにとって、IronPDFは現代の開発ワークフローのために設計された開発者フレンドリーなAPIで同等の機能を提供します。






