How to Migrate from PdfPig to IronPDF in C#
PdfPigからIronPDFへの移行は、座標ベースの著者作成および基本的な結合のための狭いライターサーフェースを備えるリーディングフォーカスのライブラリから、作成、操作、テキスト抽出、セキュリティ機能を扱う包括的なPDFソリューションへと拡張します。 このガイドは、既存の抽出ワークフローを維持しながら、PdfPigが提供しないHTML変換、高レベルのドキュメント操作、透かし、セキュリティ著作を追加する完全なステップバイステップの移行パスを提供します。
なぜPdfPigからIronPDFに移行するのか
PdfPigについて
PdfPig(NuGetパッケージ PdfPig、名前空間 UglyToad.PdfPig)は、オープンソース for .NET PDF読み取りおよび抽出ライブラリで、元々はApache PDFBox Javaプロジェクトに触発され、部分的に移植されました。 開発者がデータの精度を高めながらPDFの構造的コンテンツにアクセスできるようにします。 PdfPigは抽出に長けていますが、その範囲はフルライフサイクルの商用ライブラリよりも狭いです。 このプロジェクトはまだ1.0未満であり(現在の安定版リリースは0.1.14)、READMEには"バージョンが1.0.0未満の場合、マイナーバージョンは警告なしにパブリックAPIを変更する"と記載されています。
PdfPig はテキスト(文字および単語レベルの位置を伴う)、画像、読み取り専用フォームデータ、アノテーション、メタデータの抽出に信頼性のあるツールを提供します。 また、限定的なライターサーフェスを公開しています。低レベルの新規ドキュメント作成のためのUglyToad.PdfPig.Writer内)があります。 これにより、主にドキュメント分析、データマイニング、および基本的な結合に焦点を当てたアプリケーションに適した選択肢となります。
リーディングフォーカス制限
PdfPigは読み取りを優先し、ライターサーフェースは意図的に狭くなっています。 アプリケーションが抽出や基本的な結合を超えて成長する必要がある場合、PdfPigは役立ちません:
-
限定的なPDF生成: 新しいドキュメントには高レベルのレイアウトはなく、
PdfPointを使用した手動での座標配置が必要です。 -
HTML から PDF への変換機能はありません。PdfPigは PDF 読み取り/解析ライブラリであり、PDF 生成ライブラリではありません。 HTMLからPDFへの変換には、別のライブラリを使用する必要があります。
-
限定的なドキュメント操作:
PdfMergerは連結をカバーしていますが、高レベルの分割/回転/編集APIはありません。 -
セキュリティ著作なし: 暗号化されたPDF(パスワード付き)を読み取ることはできますが、パスワード、暗号化、デジタル署名を追加することはできません。
-
ウォーターマーク/スタンプなし: 既存のドキュメントにビジュアルオーバーレイを行うためのハイレベルなAPIはありません。
- フォーム入力なし: フォームは読み取り専用で、値を変更または追加することはできません。
PdfPigとIronPDFの比較
| フィーチャー | PdfPig | IronPDF |
|---|---|---|
| ライセンス | オープンソース(Apache 2.0) | 商用 |
| NuGetパッケージ | PdfPig(v0.1.14、1.0未満) |
IronPdf |
| PDFの読み取り/抽出。 | 優秀 | 優秀 |
| PDFジェネレーション。 | 制限付き(PdfDocumentBuilderを使用した座標ベース) |
包括的 |
| HTMLからPDFへ | サポート対象外 | サポート対象 |
| テキスト抽出。 | 優れたもの(単語境界ボックス付き) | 優れたもの(テキストのみ) |
| PDFマージ | サポートされている(PdfMerger) |
サポートされている(PdfDocument.Merge) |
| 分割 / 回転 / 編集 | 非サポート(ハイレベル) | サポート対象 |
| ウォーターマーク。 | サポートされていません | サポート対象 |
| セキュリティ/暗号化著作 | サポートされていません | サポート対象 |
| サポートとドキュメンテーション | コミュニティサポート | 専用サポート |
| ページ索引。 | 1ベース | 0ベース |
IronPDFはPDFの作成、閲覧、編集、署名のための機能一式をサポートしています。 この多様性により、開発者はPDFファイルを現代 for .NETで最初から最後まで管理でき、PdfPigの読解能力を超えた完全なPDFライフサイクルソリューションを提供します。
始める前に
前提条件
- .NET環境: .NET Framework 4.6.2+ または.NET Core 3.1+ / .NET 5/6/7/8/9+
- NuGetアクセス: NuGetパッケージをインストールする機能
- IronPDFライセンス: IronPDFからライセンスキーを取得します。
NuGetパッケージの変更
# Remove PdfPig
dotnet remove package PdfPig
# Install IronPDF
dotnet add package IronPdf
# Remove PdfPig
dotnet remove package PdfPig
# Install IronPDF
dotnet add package IronPdf
ライセンス構成
// Add at application startup (Program.cs or Startup.cs)
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
// Add at application startup (Program.cs or Startup.cs)
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
' Add at application startup (Program.vb or Startup.vb)
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"
PdfPigの使用法を特定する
# FindPdfPigusage
grep -r "UglyToad\.PdfPig\|PdfDocument\.Open\|GetPages\(\)" --include="*.cs" .
# Find page index references (may need 1→0 conversion)
grep -r "GetPage(\|NumberOfPages" --include="*.cs" .
# FindPdfPigusage
grep -r "UglyToad\.PdfPig\|PdfDocument\.Open\|GetPages\(\)" --include="*.cs" .
# Find page index references (may need 1→0 conversion)
grep -r "GetPage(\|NumberOfPages" --include="*.cs" .
完全な API リファレンス
名前空間の変更
// Before: PdfPig
using UglyToad.PdfPig;
using UglyToad.PdfPig.Content;
using UglyToad.PdfPig.DocumentLayoutAnalysis.WordExtractor;
// After: IronPDF
using IronPdf;
using IronPdf.Rendering;
// Before: PdfPig
using UglyToad.PdfPig;
using UglyToad.PdfPig.Content;
using UglyToad.PdfPig.DocumentLayoutAnalysis.WordExtractor;
// After: IronPDF
using IronPdf;
using IronPdf.Rendering;
' Before: PdfPig
Imports UglyToad.PdfPig
Imports UglyToad.PdfPig.Content
Imports UglyToad.PdfPig.DocumentLayoutAnalysis.WordExtractor
' After: IronPDF
Imports IronPdf
Imports IronPdf.Rendering
ドキュメント読み込みマッピング
| PdfPig | IronPDF |
|---|---|
PdfDocument.Open(path) |
PdfDocument.FromFile(path) |
PdfDocument.Open(bytes) |
PdfDocument.FromBinaryData(bytes) |
PdfDocument.Open(stream) |
PdfDocument.FromStream(stream) |
using (var doc = ...) |
var pdf = ... |
ページ アクセスとプロパティのマッピング
| PdfPig | IronPDF |
|---|---|
document.NumberOfPages |
pdf.PageCount |
document.GetPages() |
pdf.Pages |
document.GetPage(1) |
pdf.Pages[0] |
テキスト抽出マッピング
| PdfPig | IronPDF |
|---|---|
page.Text |
pdf.Pages[i].Text |
page.GetWords() |
pdf.ExtractTextFromPage(i) |
| (manual loop) | pdf.ExtractAllText() |
メタデータアクセスマッピング
| PdfPig | IronPDF |
|---|---|
document.Information.Title |
pdf.MetaData.Title |
document.Information.Author |
pdf.MetaData.Author |
document.Information.Subject |
pdf.MetaData.Subject |
document.Information.Creator |
pdf.MetaData.Creator |
document.Information.Producer |
pdf.MetaData.Producer |
PdfPigでは利用できない新機能
| IronPDFの特徴 | 翻訳内容 |
|---|---|
renderer.RenderHtmlAsPdf(html) |
HTMLからPDFへの変換 |
renderer.RenderUrlAsPdf(url) |
URLからPDFへの変換 |
pdf.ApplyWatermark(html) |
透かしの追加 |
pdf.SecuritySettings.UserPassword |
パスワード保護 |
pdf.Sign(certificate) |
デジタル署名 |
注意: PDFのマージは両方のライブラリで利用可能です(PdfPigのPdfDocument.Merge)。
コード移行の例
例1: PDFからのテキスト抽出
翻訳前 (PdfPig):
// NuGet: Install-Package PdfPig
using UglyToad.PdfPig;
using System;
using System.Text;
class Program
{
static void Main()
{
using (var document = PdfDocument.Open("input.pdf"))
{
var text = new StringBuilder();
foreach (var page in document.GetPages())
{
text.AppendLine(page.Text);
}
Console.WriteLine(text.ToString());
}
}
}
// NuGet: Install-Package PdfPig
using UglyToad.PdfPig;
using System;
using System.Text;
class Program
{
static void Main()
{
using (var document = PdfDocument.Open("input.pdf"))
{
var text = new StringBuilder();
foreach (var page in document.GetPages())
{
text.AppendLine(page.Text);
}
Console.WriteLine(text.ToString());
}
}
}
Imports UglyToad.PdfPig
Imports System
Imports System.Text
Class Program
Shared Sub Main()
Using document = PdfDocument.Open("input.pdf")
Dim text = New StringBuilder()
For Each page In document.GetPages()
text.AppendLine(page.Text)
Next
Console.WriteLine(text.ToString())
End Using
End Sub
End Class
翻訳後(IronPDF):。
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
class Program
{
static void Main()
{
var pdf = PdfDocument.FromFile("input.pdf");
string text = pdf.ExtractAllText();
Console.WriteLine(text);
}
}
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
class Program
{
static void Main()
{
var pdf = PdfDocument.FromFile("input.pdf");
string text = pdf.ExtractAllText();
Console.WriteLine(text);
}
}
Imports IronPdf
Imports System
Class Program
Shared Sub Main()
Dim pdf = PdfDocument.FromFile("input.pdf")
Dim text As String = pdf.ExtractAllText()
Console.WriteLine(text)
End Sub
End Class
PdfPigとIronPDFはどちらも優れたテキスト抽出機能を提供します。 主な違いはコードパターンです。 PdfPigはpage.Textプロパティからテキストを蓄積するためにページを手動で繰り返し処理します。
IronPDFはこれを1つの呼び出しに簡略化します。ExtractAllText()は全てのテキスト内容を一度に返します。 using ステートメントも、手動の繰り返しも、StringBuilderも必要ありません。 その他のオプションについては、テキスト抽出ドキュメントを参照してください。
例2: HTMLからPDFへの変換
翻訳前 (PdfPig):
PdfPig は HTML から PDF への変換をサポートしていません。PdfPigは PDF 生成ライブラリではなく、PDF 読み取り/解析ライブラリです。 HTML から PDF への変換には別のライブラリを使用する必要があります。
翻訳後(IronPDF):。
// NuGet: Install-Package IronPdf
using IronPdf;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<h1>Hello World</h1><p>This is a PDF from HTML</p>");
pdf.SaveAs("output.pdf");
}
}
// NuGet: Install-Package IronPdf
using IronPdf;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<h1>Hello World</h1><p>This is a PDF from HTML</p>");
pdf.SaveAs("output.pdf");
}
}
Imports IronPdf
Class Program
Shared Sub Main()
Dim renderer = New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf("<h1>Hello World</h1><p>This is a PDF from HTML</p>")
pdf.SaveAs("output.pdf")
End Sub
End Class
この例は、最も重大な能力ギャップを浮き彫りにしています。PdfPigは、"HTMLからPDFへの変換をサポートしない"、"PDF読み取り/解析ライブラリであり、PDF生成ライブラリではない "と明言しています。PdfPigを使ってHTMLからPDFを作成する必要がある場合は、まったく別のライブラリを使う必要があります。
IronPDFはChromePdfRendererを通じてネイティブのHTMLからPDFへの変換を提供します。 RenderHtmlAsPdf()メソッドはHTMLストリングを受け取り、内部的にはChromiumエンジンを使用してHTML、CSS、JavaScriptの正確なレンダリングを行い、PDFドキュメントに変換します。 結果のSaveAs()を使用して保存したり、保存前にさらに操作したりすることができます。 包括的な例については、HTML to PDF documentationを参照してください。
例 3:PDFメタデータを読む
翻訳前 (PdfPig):
// NuGet: Install-Package PdfPig
using UglyToad.PdfPig;
using System;
class Program
{
static void Main()
{
using (var document = PdfDocument.Open("input.pdf"))
{
var info = document.Information;
Console.WriteLine($"Title: {info.Title}");
Console.WriteLine($"Author: {info.Author}");
Console.WriteLine($"Subject: {info.Subject}");
Console.WriteLine($"Creator: {info.Creator}");
Console.WriteLine($"Producer: {info.Producer}");
Console.WriteLine($"Number of Pages: {document.NumberOfPages}");
}
}
}
// NuGet: Install-Package PdfPig
using UglyToad.PdfPig;
using System;
class Program
{
static void Main()
{
using (var document = PdfDocument.Open("input.pdf"))
{
var info = document.Information;
Console.WriteLine($"Title: {info.Title}");
Console.WriteLine($"Author: {info.Author}");
Console.WriteLine($"Subject: {info.Subject}");
Console.WriteLine($"Creator: {info.Creator}");
Console.WriteLine($"Producer: {info.Producer}");
Console.WriteLine($"Number of Pages: {document.NumberOfPages}");
}
}
}
Imports UglyToad.PdfPig
Imports System
Class Program
Shared Sub Main()
Using document = PdfDocument.Open("input.pdf")
Dim info = document.Information
Console.WriteLine($"Title: {info.Title}")
Console.WriteLine($"Author: {info.Author}")
Console.WriteLine($"Subject: {info.Subject}")
Console.WriteLine($"Creator: {info.Creator}")
Console.WriteLine($"Producer: {info.Producer}")
Console.WriteLine($"Number of Pages: {document.NumberOfPages}")
End Using
End Sub
End Class
翻訳後(IronPDF):。
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
class Program
{
static void Main()
{
var pdf = PdfDocument.FromFile("input.pdf");
var info = pdf.MetaData;
Console.WriteLine($"Title: {info.Title}");
Console.WriteLine($"Author: {info.Author}");
Console.WriteLine($"Subject: {info.Subject}");
Console.WriteLine($"Creator: {info.Creator}");
Console.WriteLine($"Producer: {info.Producer}");
Console.WriteLine($"Number of Pages: {pdf.PageCount}");
}
}
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
class Program
{
static void Main()
{
var pdf = PdfDocument.FromFile("input.pdf");
var info = pdf.MetaData;
Console.WriteLine($"Title: {info.Title}");
Console.WriteLine($"Author: {info.Author}");
Console.WriteLine($"Subject: {info.Subject}");
Console.WriteLine($"Creator: {info.Creator}");
Console.WriteLine($"Producer: {info.Producer}");
Console.WriteLine($"Number of Pages: {pdf.PageCount}");
}
}
Imports IronPdf
Imports System
Class Program
Shared Sub Main()
Dim pdf = PdfDocument.FromFile("input.pdf")
Dim info = pdf.MetaData
Console.WriteLine($"Title: {info.Title}")
Console.WriteLine($"Author: {info.Author}")
Console.WriteLine($"Subject: {info.Subject}")
Console.WriteLine($"Creator: {info.Creator}")
Console.WriteLine($"Producer: {info.Producer}")
Console.WriteLine($"Number of Pages: {pdf.PageCount}")
End Sub
End Class
どちらのライブラリも、ほぼ同じパターンでメタデータ・アクセスを提供します。 PdfPigはdocument.NumberOfPagesを通じてページ数にアクセスします。 IronPDFはメタデータにpdf.PageCountを使用します。
移行は簡単です:pdf.PageCountに置き換えます。 IronPDFにはusingステートメントのラッパーは不要なので削除します。
重要な移行に関する注意事項
ページのインデックス変更
PdfPigは1ベースのインデックスを使用しています; IronPDFは0ベースです:
// PdfPig:1ベースindexing
var firstPage = document.GetPage(1); // First page
// IronPDF:0ベースindexing
var firstPage = pdf.Pages[0]; // First page
// Migration helper
int pdfPigIndex = 1;
int ironPdfIndex = pdfPigIndex - 1;
// PdfPig:1ベースindexing
var firstPage = document.GetPage(1); // First page
// IronPDF:0ベースindexing
var firstPage = pdf.Pages[0]; // First page
// Migration helper
int pdfPigIndex = 1;
int ironPdfIndex = pdfPigIndex - 1;
' PdfPig:1ベースindexing
Dim firstPage = document.GetPage(1) ' First page
' IronPDF:0ベースindexing
Dim firstPage = pdf.Pages(0) ' First page
' Migration helper
Dim pdfPigIndex As Integer = 1
Dim ironPdfIndex As Integer = pdfPigIndex - 1
使用説明文は必須ではありません
// PdfPig: Requires using for disposal
using (var document = PdfDocument.Open("input.pdf"))
{
// ...
}
// IronPDF: No using required (but can use for cleanup)
var pdf = PdfDocument.FromFile("input.pdf");
// ...
// pdf.Dispose(); // Optional
// PdfPig: Requires using for disposal
using (var document = PdfDocument.Open("input.pdf"))
{
// ...
}
// IronPDF: No using required (but can use for cleanup)
var pdf = PdfDocument.FromFile("input.pdf");
// ...
// pdf.Dispose(); // Optional
Imports PdfPig
Imports IronPDF
Using document = PdfDocument.Open("input.pdf")
' ...
End Using
Dim pdf = PdfDocument.FromFile("input.pdf")
' ...
' pdf.Dispose() ' Optional
ドキュメントの読み込みの変更
// PdfPig: PdfDocument.Open()
using (var document = PdfDocument.Open("input.pdf"))
// IronPDF: PdfDocument.FromFile()
var pdf = PdfDocument.FromFile("input.pdf");
// PdfPig: PdfDocument.Open()
using (var document = PdfDocument.Open("input.pdf"))
// IronPDF: PdfDocument.FromFile()
var pdf = PdfDocument.FromFile("input.pdf");
Imports PdfPig
Imports IronPDF
Using document = PdfDocument.Open("input.pdf")
End Using
Dim pdf = PdfDocument.FromFile("input.pdf")
メタデータ プロパティ名の変更
// PdfPig: document.Information
var info = document.Information;
// IronPDF: pdf.MetaData
var info = pdf.MetaData;
// PdfPig: document.Information
var info = document.Information;
// IronPDF: pdf.MetaData
var info = pdf.MetaData;
' PdfPig: document.Information
Dim info = document.Information
' IronPDF: pdf.MetaData
Dim info = pdf.MetaData
ページ数プロパティの変更
// PdfPig: document.NumberOfPages
Console.WriteLine($"Pages: {document.NumberOfPages}");
// IronPDF: pdf.PageCount
Console.WriteLine($"Pages: {pdf.PageCount}");
// PdfPig: document.NumberOfPages
Console.WriteLine($"Pages: {document.NumberOfPages}");
// IronPDF: pdf.PageCount
Console.WriteLine($"Pages: {pdf.PageCount}");
' PdfPig: document.NumberOfPages
Console.WriteLine($"Pages: {document.NumberOfPages}")
' IronPDF: pdf.PageCount
Console.WriteLine($"Pages: {pdf.PageCount}")
移行後の新機能
IronPDFに移行すると、PdfPigでは提供できない機能が得られます:
PDFマージ
var pdf1 = PdfDocument.FromFile("document1.pdf");
var pdf2 = PdfDocument.FromFile("document2.pdf");
var merged = PdfDocument.Merge(pdf1, pdf2);
merged.SaveAs("merged.pdf");
var pdf1 = PdfDocument.FromFile("document1.pdf");
var pdf2 = PdfDocument.FromFile("document2.pdf");
var merged = PdfDocument.Merge(pdf1, pdf2);
merged.SaveAs("merged.pdf");
Dim pdf1 = PdfDocument.FromFile("document1.pdf")
Dim pdf2 = PdfDocument.FromFile("document2.pdf")
Dim merged = PdfDocument.Merge(pdf1, pdf2)
merged.SaveAs("merged.pdf")
ウォーターマーク
pdf.ApplyWatermark("<h2 style='color:red;'>CONFIDENTIAL</h2>");
pdf.ApplyWatermark("<h2 style='color:red;'>CONFIDENTIAL</h2>");
pdf.ApplyWatermark("<h2 style='color:red;'>CONFIDENTIAL</h2>")
パスワード保護
pdf.SecuritySettings.UserPassword = "userpassword";
pdf.SecuritySettings.OwnerPassword = "ownerpassword";
pdf.SecuritySettings.UserPassword = "userpassword";
pdf.SecuritySettings.OwnerPassword = "ownerpassword";
pdf.SecuritySettings.UserPassword = "userpassword"
pdf.SecuritySettings.OwnerPassword = "ownerpassword"
デジタル署名
var signature = new PdfSignature("certificate.pfx", "password")
{
SigningContact = "support@company.com",
SigningReason = "Document Approval"
};
pdf.Sign(signature);
var signature = new PdfSignature("certificate.pfx", "password")
{
SigningContact = "support@company.com",
SigningReason = "Document Approval"
};
pdf.Sign(signature);
Dim signature As New PdfSignature("certificate.pfx", "password") With {
.SigningContact = "support@company.com",
.SigningReason = "Document Approval"
}
pdf.Sign(signature)
機能比較の概要
| フィーチャー | PdfPig | IronPDF |
|---|---|---|
| テキスト抽出 | ✓ | ✓ |
| メタデータアクセス | ✓ | ✓ |
| 画像抽出 | ✓ | ✓ |
| PDF作成 | 制限されたもの(座標ベース) | ✓ |
| HTMLからPDFへ | ✗ | ✓ |
| URLからPDFへ | ✗ | ✓ |
| PDFのマージ | ✓ (PdfMerger) |
✓ |
| PDFの分割 | ✗ | ✓ |
| 透かし | ✗ | ✓ |
| フォーム入力 | ✗ | ✓ |
| パスワード保護 | ✗ | ✓ |
| デジタル署名 | ✗ | ✓ |
| ワードポジションデータ | ✓ | ✗ |
移行チェックリスト
移行前
- コードベース内のすべてのPdfPigの使用状況を一覧表示する
- 単語レベルの位置データが必要かどうかを特定する(ハイブリッドアプローチを検討)
- すべてのページインデックス参照をメモします(1 ベースを 0 ベースに変換する必要があります)
- IronPDFライセンス キーの保存を計画する (環境変数を推奨)
- まずはIronPDFの試用ライセンスでテストしてください
パッケージの変更
PdfPigNuGetパッケージを削除:dotnet remove package PdfPigIronPdfNuGetパッケージをインストール:dotnet add package IronPdf
コードの変更
- 名前空間のインポートを更新する(
using UglyToad.PdfPig;→using IronPdf;) PdfDocument.FromFile()に置き換えるpdf.MetaDataに置き換えるpdf.PageCountに置き換える- ページインデックスを1から0に変換する
usingステートメントを削除する(任意、IronPDFでは不要)- アプリケーションの起動時にIronPDFライセンスキーを追加する
移行後
- テストテキスト抽出出力が期待通りである
- すべてのPDF生成シナリオをテストする
- 必要に応じて新しい機能(結合、透かし、セキュリティ)を追加します
- Linuxにデプロイする場合はLinuxの依存関係をインストールします

