C#でMuPDFからIronPDFに移行する方法
なぜMuPDFからIronPDFに移行するのか
MuPDFの課題
MuPDFは優れたPDFレンダラーですが、そのAGPLライセンスとレンダリングのみにフォーカスしているため、商用アプリケーションを構築する.NET開発者には大きな制限があります:
- AGPL ライセンスの罠:MuPDFのバイラル ライセンスでは、アプリケーション全体を AGPL の下でオープン ソース化するか、不透明なコンタクト セールス価格の高価な商用ライセンスを購入する必要があります。
2.レンダリングのみに焦点:MuPDFはビューア/レンダラーであり、HTML からの PDF 作成、ドキュメント生成ワークフロー、フォームの入力、透かしやヘッダー/フッターの追加用に設計されていません。
- HTML をサポートしていません:MuPDFは HTML から PDF への直接変換をサポートしていません。 HTMLをサポートされている形式に変換するには、まず別のライブラリを使用する必要があります。これは基本的な制限です-MuPDFは主にPDFレンダラー/ビューアです。
4.ネイティブ依存関係:プラットフォーム固有のバイナリは、Windows、Linux、および macOS では手動で管理する必要があります。 Dockerのデプロイは、ネイティブライブラリの要件によって複雑になり、デプロイのパッケージングには課題が生じます。
5.操作の制限: PDF の結合/分割、ページの回転や並べ替え、透かしや注釈、デジタル署名などのサポートが組み込まれていません。
- C 相互運用性の複雑さ:ネイティブ バインディングにより、メモリ管理の問題、プラットフォーム固有のバグ、およびマーシャリングのオーバーヘッドが発生します。
MuPDFとIronPDFの比較
| フィーチャー | MuPDF | IronPDF |
|---|---|---|
| ライセンス | AGPL(ウィルス性)または高価な商用 | 透明性のある価格設定 |
| 主な対象 | レンダリング/ビューイング | 完全なPDFソリューション |
| HTMLからPDFへ | サポートされていません | フルChromiumエンジン |
| PDF作成 | サポートされていません | HTML、URL、画像 |
| PDF操作 | 制限的 | 完成(マージ、分割、編集) |
| 依存関係 | ネイティブバイナリ | 完全管理 |
| プラットフォームサポート | プラットフォームごとのマニュアル | 自動翻訳 |
| 非同期サポート | 制限的 | 完全なasync/await |
| .NET統合 | C# 相互接続 | .NET ネイティブ |
2025年と2026年まで.NET 10とC# 14の採用を計画しているチームにとって、IronPDFはネイティブのインターオプを複雑にすることなく、完全に管理された.NETライブラリとして将来を保証する基盤を提供します。
マイグレーションの複雑さの評価
機能別の見積もり作業
| フィーチャー | 移行の複雑さ | ノート |
|---|---|---|
| ドキュメントの読み込み | 低レベル | メソッドの直接置換 |
| テキスト抽出 | 低レベル | よりシンプルなAPI |
| PDFマージ | 低レベル | 静的メソッドと手動ループの比較 |
| 画像レンダリング | 低レベル | RasterizeToImageFiles と pixmaps の比較 |
| HTMLからPDFへ | 該当なし(新機能) | MuPDFでは不可 |
| セキュリティ/ウォーターマーク | 該当なし(新機能) | MuPDFでは不可 |
パラダイムシフト
このMuPDF移行における基本的な変化は、レンダリングのみのビューアから完全な PDF ソリューションへの変化です。
MuPDF: MuPDFContext → MuPDFDocument → ページ反復 → レンダー/抽出のみ
IronPDF:PdfDocument.FromFile() → フル操作 → 作成/編集/マージ/セキュア始める前に
前提条件
- .NET 環境: .NET Framework 4.6.2+ または .NET Core 3.1+ / .NET 5/6/7/8/9+
- NuGetアクセス: NuGetパッケージをインストールする機能
- IronPDFライセンス: ironpdf.comからライセンスキーを取得します。
NuGetパッケージの変更
# RemoveMuPDFpackages
dotnet remove package MuPDF.NET
dotnet remove package MuPDFCore
dotnet remove package MuPDFCore.MuPDFWrapper
# Install IronPDF
dotnet add package IronPdf# RemoveMuPDFpackages
dotnet remove package MuPDF.NET
dotnet remove package MuPDFCore
dotnet remove package MuPDFCore.MuPDFWrapper
# Install IronPDF
dotnet add package IronPdfまた、配置からネイティブMuPDFバイナリを削除してください:
mupdf.dll,libmupdf.so,libmupdf.dylibを削除してください。- プラットフォーム固有のフォルダ(
runtimes/*/native/)を削除する。 - Dockerファイルを更新してMuPDFのインストールを削除する
ライセンス構成
// 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";MuPDFの使用法を特定する
# Find allMuPDFreferences
grep -r "MuPDF\|MuPDFCore\|MuPDFDocument" --include="*.cs" .# Find allMuPDFreferences
grep -r "MuPDF\|MuPDFCore\|MuPDFDocument" --include="*.cs" .完全な API リファレンス
ドキュメントの読み込み
| MuPDF | IronPDF | ノート |
|---|---|---|
new MuPDFDocument(path). | PdfDocument.FromFile(パス)。 | ファイルから読み込む |
new MuPDFDocument(stream). | <コード>PdfDocument.FromStream(stream)</コード><コード>PdfDocument.FromStream(stream) | ストリームから読み込む |
document.Dispose()。 | <コード>pdf.Dispose()</コード | クリーンアップ |
ページへのアクセス
| MuPDF | IronPDF | ノート |
|---|---|---|
| <コード>document.Pages.Count</コード | <コード>pdf.PageCount</コード | ページ数 |
ドキュメント.ページ[インデックス] | <コード>pdf.Pages[index]</コード | アクセスページ |
| <コード>page.GetText()</コード | <コード>ページ.テキスト</コード | ページテキスト |
テキスト抽出
| MuPDF | IronPDF | ノート |
|---|---|---|
document.Pages[i].GetText()をループする。 | pdf.ExtractAllText()を使用してください。 | すべてのテキストを一度に |
PDF作成 (MuPDFでは利用できません)
| MuPDF | IronPDF | ノート |
|---|---|---|
| (サポートされていません) | ChromePdfRenderer.RenderHtmlAsPdf(html). | HTMLからPDFへ |
| (サポートされていません) | ChromePdfRenderer.RenderUrlAsPdf(url). | URLからPDFへ |
PDFの操作 (MuPDFでの制限付き)
| MuPDF | IronPDF | ノート |
|---|---|---|
| マニュアルページのコピーループ | PdfDocument.Merge(pdf1, pdf2). | PDFのマージ |
| (サポートされていません) | pdf.ApplyWatermark(html). | 透かしを入れる |
| (サポートされていません) | <コード>pdf.SecuritySettings</コード | パスワード保護 |
コード移行の例
例 1: HTML から PDF への変換 (MuPDF ではできません)
翻訳前 (MuPDF):
// NuGet: Install-Package MuPDF.NET
using MuPDFCore;
using System.IO;
class Program
{
static void Main()
{
//MuPDFdoesn't supportHTMLからPDFへconversion directly
// You would need to use another library to convert HTML to a supported format first
// This is a limitation -MuPDFis primarily a PDF renderer/viewer
// Alternative: Use a browser engine or intermediate conversion
string html = "<html><body><h1>Hello World</h1></body></html>";
// Not natively supported in MuPDF
throw new NotSupportedException("MuPDF does not support directHTMLからPDFへconversion");
}
}// NuGet: Install-Package MuPDF.NET
using MuPDFCore;
using System.IO;
class Program
{
static void Main()
{
//MuPDFdoesn't supportHTMLからPDFへconversion directly
// You would need to use another library to convert HTML to a supported format first
// This is a limitation -MuPDFis primarily a PDF renderer/viewer
// Alternative: Use a browser engine or intermediate conversion
string html = "<html><body><h1>Hello World</h1></body></html>";
// Not natively supported in MuPDF
throw new NotSupportedException("MuPDF does not support directHTMLからPDFへconversion");
}
}翻訳後(IronPDF):。
// NuGet: Install-Package IronPdf
using IronPdf;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
string html = "<html><body><h1>Hello World</h1></body></html>";
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("output.pdf");
}
}// NuGet: Install-Package IronPdf
using IronPdf;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
string html = "<html><body><h1>Hello World</h1></body></html>";
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("output.pdf");
}
}この例では、MuPDFの最も重要な制限である、HTMLをPDFにまったく変換できないことを強調しています。 HTMLからPDFへの変換は単にMuPDFが提供する機能ではないため、MuPDFコードは明示的にNotSupportedExceptionをスローします。 MuPDFでこの機能が必要な場合、wkhtmltopdfのような別のライブラリやブラウザエンジンを使用し、その後MuPDFで結果のPDFを読み込んで表示する必要がありました。
IronPdfのChromePdfRendererは完全なChromiumエンジンを使用し、CSS3、JavaScript、最新のWeb標準を完全にサポートしたHTMLをレンダリングします。 RenderHtmlAsPdf()メソッドは、HTML文字列を直接受け入れます。 URLレンダリングやHTMLファイル変換を含むその他のレンダリングオプションについては、HTML to PDF documentationを参照してください。
例2: テキスト抽出
翻訳前 (MuPDF):
// NuGet: Install-Package MuPDF.NET
using MuPDFCore;
using System;
using System.Text;
class Program
{
static void Main()
{
using (MuPDFDocument document = new MuPDFDocument("input.pdf"))
{
StringBuilder allText = new StringBuilder();
for (int i = 0; i < document.Pages.Count; i++)
{
string pageText = document.Pages[i].GetText();
allText.AppendLine(pageText);
}
Console.WriteLine(allText.ToString());
}
}
}// NuGet: Install-Package MuPDF.NET
using MuPDFCore;
using System;
using System.Text;
class Program
{
static void Main()
{
using (MuPDFDocument document = new MuPDFDocument("input.pdf"))
{
StringBuilder allText = new StringBuilder();
for (int i = 0; i < document.Pages.Count; i++)
{
string pageText = document.Pages[i].GetText();
allText.AppendLine(pageText);
}
Console.WriteLine(allText.ToString());
}
}
}翻訳後(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);
}
}MuPDFのアプローチでは、MuPDFDocumentでusingブロックを作成し、document.Pages.Countをforループで手動で繰り返し、各ページに対してdocument.Pages[i].GetText()を呼び出し、StringBuilderでテキストを構築する必要があります。 これは単純なテキスト抽出のための12行のコードです。
IronPDFはこれを3行に減らします: PdfDocument.FromFile()でドキュメントをロードし、ExtractAllText()を呼び出し、結果をプリントします。 この単純な操作のために、手作業による反復も、StringBuilderも、``ブロックを使った明示的なリソース管理も必要ありません。 PDF からのテキスト抽出について詳しく学びます。
例3: 複数のPDFをマージする
翻訳前 (MuPDF):
// NuGet: Install-Package MuPDF.NET
using MuPDFCore;
using System.IO;
class Program
{
static void Main()
{
using (MuPDFDocument doc1 = new MuPDFDocument("file1.pdf"))
using (MuPDFDocument doc2 = new MuPDFDocument("file2.pdf"))
{
// Create a new document
using (MuPDFDocument mergedDoc = MuPDFDocument.Create())
{
// Copy pages from first document
for (int i = 0; i < doc1.Pages.Count; i++)
{
mergedDoc.CopyPage(doc1, i);
}
// Copy pages from second document
for (int i = 0; i < doc2.Pages.Count; i++)
{
mergedDoc.CopyPage(doc2, i);
}
mergedDoc.Save("merged.pdf");
}
}
}
}// NuGet: Install-Package MuPDF.NET
using MuPDFCore;
using System.IO;
class Program
{
static void Main()
{
using (MuPDFDocument doc1 = new MuPDFDocument("file1.pdf"))
using (MuPDFDocument doc2 = new MuPDFDocument("file2.pdf"))
{
// Create a new document
using (MuPDFDocument mergedDoc = MuPDFDocument.Create())
{
// Copy pages from first document
for (int i = 0; i < doc1.Pages.Count; i++)
{
mergedDoc.CopyPage(doc1, i);
}
// Copy pages from second document
for (int i = 0; i < doc2.Pages.Count; i++)
{
mergedDoc.CopyPage(doc2, i);
}
mergedDoc.Save("merged.pdf");
}
}
}
}翻訳後(IronPDF):。
// NuGet: Install-Package IronPdf
using IronPdf;
class Program
{
static void Main()
{
var pdf1 = PdfDocument.FromFile("file1.pdf");
var pdf2 = PdfDocument.FromFile("file2.pdf");
var merged = PdfDocument.Merge(pdf1, pdf2);
merged.SaveAs("merged.pdf");
}
}// NuGet: Install-Package IronPdf
using IronPdf;
class Program
{
static void Main()
{
var pdf1 = PdfDocument.FromFile("file1.pdf");
var pdf2 = PdfDocument.FromFile("file2.pdf");
var merged = PdfDocument.Merge(pdf1, pdf2);
merged.SaveAs("merged.pdf");
}
}MuPDFのマージ操作は特に冗長です。 入れ子になった using<//code> ブロックで両方のソース ドキュメントを開き、<code>MuPDFDocument.Create() で新しい空のドキュメントを作成し、CopyPage() を呼び出して最初のドキュメントの各ページを繰り返し処理し、CopyPage() を呼び出して 2 番目のドキュメントの各ページを繰り返し処理し、最後に保存する必要があります。 複雑なネストを含む20行以上のコードです。
IronPDFの静的なPdfDocument.Merge()メソッドは複数のPDFドキュメントを受け入れ、単一のマージされたドキュメントを返します。 作業全体は4行の読みやすいコードです。 多数のドキュメントをマージするには、リストを渡します:PdfDocument.Merge(pdfList). その他のオプションについては、PDFのマージと分割のドキュメントを参照してください。
重要な移行に関する注意事項
ネイティブ バイナリの削除
MuPDFにはプラットフォーム固有のネイティブライブラリが必要です。 IronPDFに移行した後、すべてのMuPDFネイティブバイナリを削除してください:
# Delete native libraries
rm -f mupdf*.dll libmupdf*.so libmupdf*.dylib
# Remove runtime folders
rm -rf runtimes/*/native/
# Update Docker files to removeMuPDFinstallation# Delete native libraries
rm -f mupdf*.dll libmupdf*.so libmupdf*.dylib
# Remove runtime folders
rm -rf runtimes/*/native/
# Update Docker files to removeMuPDFinstallationIronPdfは完全に管理された.NETコードです。プラットフォーム間で管理するネイティブバイナリはありません。
簡略化された Dispose パターン
MuPDFは、明示的なコンテキストと文書管理を必要とします:
// MuPDF: Nested using blocks required
using (MuPDFDocument document = new MuPDFDocument("input.pdf"))
{
// Work with document
}
// IronPDF: Simpler pattern
var pdf = PdfDocument.FromFile("input.pdf");
// Work with pdf// MuPDF: Nested using blocks required
using (MuPDFDocument document = new MuPDFDocument("input.pdf"))
{
// Work with document
}
// IronPDF: Simpler pattern
var pdf = PdfDocument.FromFile("input.pdf");
// Work with pdfページの反復パターンの変更
MuPDFは、ページ数を明示したインデックスベースの反復を使用します:
// MuPDF
for (int i = 0; i < document.Pages.Count; i++)
{
var pageText = document.Pages[i].GetText();
}
//IronPDF(foreach supported)
foreach (var page in pdf.Pages)
{
var pageText = page.Text;
}// MuPDF
for (int i = 0; i < document.Pages.Count; i++)
{
var pageText = document.Pages[i].GetText();
}
//IronPDF(foreach supported)
foreach (var page in pdf.Pages)
{
var pageText = page.Text;
}新しい機能が利用可能です。
IronPDFに移行した後は、MuPDFでは提供できない機能を得ることができます:
//PDF作成from HTML (not possible in MuPDF)
var pdf = renderer.RenderHtmlAsPdf("<h1>Hello</h1>");
// Watermarks (not possible in MuPDF)
pdf.ApplyWatermark("<div style='color:red;opacity:0.3;'>DRAFT</div>");
// Password Protection (not possible in MuPDF)
pdf.SecuritySettings.OwnerPassword = "admin";
pdf.SecuritySettings.UserPassword = "user";
// Headers and Footers (not possible in MuPDF)
pdf.AddTextHeader("Document Title");
pdf.AddTextFooter("Page {page} of {total-pages}");//PDF作成from HTML (not possible in MuPDF)
var pdf = renderer.RenderHtmlAsPdf("<h1>Hello</h1>");
// Watermarks (not possible in MuPDF)
pdf.ApplyWatermark("<div style='color:red;opacity:0.3;'>DRAFT</div>");
// Password Protection (not possible in MuPDF)
pdf.SecuritySettings.OwnerPassword = "admin";
pdf.SecuritySettings.UserPassword = "user";
// Headers and Footers (not possible in MuPDF)
pdf.AddTextHeader("Document Title");
pdf.AddTextFooter("Page {page} of {total-pages}");トラブルシューティング
問題 1: MuPDFDocument が見つかりません。
問題: MuPDFDocumentクラスがIronPDFに存在しません。
解決策: PdfDocument.FromFile()を使用します。
// MuPDF
using (MuPDFDocument document = new MuPDFDocument("input.pdf"))
// IronPDF
var pdf = PdfDocument.FromFile("input.pdf");// MuPDF
using (MuPDFDocument document = new MuPDFDocument("input.pdf"))
// IronPDF
var pdf = PdfDocument.FromFile("input.pdf");課題2:Pages.Countが見つかりません
問題: document.Pages.Countパターンが機能しません。
解決策: pdf.PageCountを使用します。
// MuPDF
for (int i = 0; i < document.Pages.Count; i++)
// IronPDF
for (int i = 0; i < pdf.PageCount; i++)
// Or use: foreach (var page in pdf.Pages)// MuPDF
for (int i = 0; i < document.Pages.Count; i++)
// IronPDF
for (int i = 0; i < pdf.PageCount; i++)
// Or use: foreach (var page in pdf.Pages)問題 3: GetText() が見つかりません。
問題: page.GetText()メソッドが存在しません。
解決策: page.Textプロパティまたはpdf.ExtractAllText()を使用します。
// MuPDF
string pageText = document.Pages[i].GetText();
// IronPDF
string pageText = pdf.Pages[i].Text;
// Or for all text:
string allText = pdf.ExtractAllText();// MuPDF
string pageText = document.Pages[i].GetText();
// IronPDF
string pageText = pdf.Pages[i].Text;
// Or for all text:
string allText = pdf.ExtractAllText();課題4:コピーページが見つかりません
問題:マージ用の手動ページコピーパターン。
解決策:静的PdfDocument.Merge()を使用します。
// MuPDF
mergedDoc.CopyPage(doc1, i);
// IronPDF
var merged = PdfDocument.Merge(pdf1, pdf2);// MuPDF
mergedDoc.CopyPage(doc1, i);
// IronPDF
var merged = PdfDocument.Merge(pdf1, pdf2);移行チェックリスト
移行前
- コードベース内のすべてのMuPDFの使用状況をインベントリする
- すべてのレンダリング操作(DPI、スケール係数)を文書化する
- PDF 作成のニーズを特定する (現在は外部ツールを使用)
- テキスト抽出要件をリストする
- ネイティブバイナリ処理のデプロイメントスクリプトを確認する
- IronPDFライセンスキーを取得する
パッケージの変更
MuPDF.NETパッケージを削除するMuPDFCoreパッケージを削除するMuPDFCore.MuPDFWrapperパッケージを削除しますIronPdfNuGet パッケージをインストールします:dotnet add package IronPdf- 名前空間のインポートを更新する
コードの変更
- 起動時にライセンスキー設定を追加する
MuPDFDocumentPdfDocument.FromFile()に置き換えますdocument.Pages.Countをpdf.PageCountに置き換えますpage.GetText()をpage.Textまたはpdf.ExtractAllText()に置き換えます- 手動の
CopyPageループをPdfDocument.Merge()に置き換えます - コンテキスト管理のためのネストされた
usingブロックを削除する - 必要に応じて PDF 作成コードを追加します (HTML から PDF)
移行後
- プロジェクトからネイティブMuPDFバイナリを削除する
- Dockerファイルを更新してMuPDFのインストールを削除する
- プラットフォーム固有のランタイムフォルダを削除する
- レンダリングされた出力を比較する回帰テストを実行する
- すべてのターゲットプラットフォーム(Windows、Linux、macOS)でテスト
- 新しい機能(透かし、セキュリティ、ヘッダー/フッター)の追加を検討する






