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

Apache PDFBoxからIronPdfへの移行方法

Apache PDFBox は、PDF を処理するための評判の高いオープンソースの Java ライブラリです。 ただし、.NET 開発者にとって、利用可能なオプションは非公式のコミュニティ主導の移植であり、Java スタイルの API、不完全な機能範囲、限られた .NET コミュニティ サポートなど、大きな課題を伴います。 このガイドでは、Apache PDFBox .NET ポートから、.NET エコシステム専用に構築されたネイティブ .NET PDF ライブラリであるIronPDFへの詳細な移行パスを示します。

Apache PDFBox .NET ポートからの移行を検討する理由は何ですか?

Apache PDFBox は Java エコシステムでは優れていますが、非公式の .NET ポートは .NET 開発チームに影響を与えるいくつかの課題をもたらします。

非公式ポートの状態

Apache PDFBox は主に Java ライブラリです。 すべての.NETバージョンはコミュニティ主導のポートであり、Apacheプロジェクトからの公式サポートはありません。 これらの移植版は Java リリースより遅れることが多く、重要な機能、バグ修正、セキュリティ更新が反映されない可能性があります。 2025年や2026年にわたる長寿命が要求されるアプリケーションを構築するチームにとって、この不確実性は技術的なリスクを生み出します。

JavaファーストAPI設計

移植されたAPIは、.NETコードでは異質に感じられるJavaの慣習を維持しています。 開発者は、PascalCaseの代わりにcamelCaseメソッド、標準的な.NET文字列の代わりにJava Fileオブジェクト、IDisposableパターンの代わりに明示的なclose()呼び出しに遭遇します。 この認知オーバーヘッドは開発速度とコードの保守性に影響します。

HTMLレンダリング機能はありません

Apache PDFBox は PDF 操作のために設計されており、HTML から PDF への変換はできません。 PDFの作成には、正確な座標位置決めによる手作業でのページ作成が必要です。これは、面倒でエラーが発生しやすいプロセスであり、現代の文書生成ニーズには対応できません。

.NETコミュニティ限定サポート

Apache PDFBox ports を取り巻く .NET エコシステムはまばらです。 .NET特有の問題に対するヘルプ、例、ベストプラクティスを見つけることは、.NETコミュニティが活発なライブラリに比べて困難です。

潜在的な JVM 依存関係

Apache PDFBox のポー ト に よ っ ては、 Java の ラ ン タ イ ム コ ン ポーネ ン ト が必要にな る場合があ り 、 .NET に重点を置 く イ ン フ ラ ス ト ラ ク チ ャ でのデフ ォ メ ン ト と 環境管理が複雑にな り ます。

ApachePDFBoxとIronPDFの比較:主な違い

これらのライブラリの基本的な違いを理解することは、効果的な移行戦略の立案に役立ちます。

アスペクト Apache PDFBox .NET ポート IronPDF
ネイティブデザイン Java中心、.NET非公式移植版 プロがサポートする.NETネイティブ言語
APIスタイル Javaの規約(camelCaseclose())。 慣用的なC#(PascalCaseusing)。
HTMLレンダリング 未対応(手動ページ作成) 完全なChromiumベースのHTML/CSS/JS
PDFの作成 手動座標ポジショニング CSSベースのレイアウト
コミュニティ Javaに特化し、.NETリソースは少ない アクティブな.NETコミュニティ、1,000万ダウンロード以上
サポート コミュニティ限定 プロフェッショナルサポート
リソースのクリーンアップ 明示的なclose()呼び出し using ステートメントを持つ IDisposable

移行前の準備

前提条件

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

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

ApachePDFBoxの使用状況を監査する

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

grep -r "apache.pdfbox\|PdfBox\|PDDocument\|PDFTextStripper" --include="*.cs" .
grep -r "PdfBox\|Apache.PdfBox" --include="*.csproj" .
grep -r "apache.pdfbox\|PdfBox\|PDDocument\|PDFTextStripper" --include="*.cs" .
grep -r "PdfBox\|Apache.PdfBox" --include="*.csproj" .
SHELL

予想される画期的な変更

カテゴリ Apache PDFBox .NET ポート IronPDF 移行作業
オブジェクトモデル PDDocumentPDPage PdfDocumentChromePdfRenderer 異なるクラス階層
PDF作成 手動ページ/コンテンツストリーム HTMLレンダリング 作成ロジックの書き換え
メソッドスタイル camelCase()(Javaスタイル) PascalCase()(.NETスタイル) メソッド名の更新
リソースのクリーンアップ document.close() ``ステートメントを使用する 変更処理パターン
ファイルアクセス Java ファイル オブジェクト .NET 標準文字列/ストリーム .NETタイプを使用
テキスト抽出 PDFTextStripperクラス pdf.ExtractAllText()を使用してください。 よりシンプルなAPI

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

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

Apache PDFBox .NETポートパッケージを削除し、IronPDFをインストールしてください:

# Remove PDFBox .NET port packages
dotnet remove package PdfBox
dotnet remove package PDFBoxNet
dotnet remove package Apache.PdfBox

# Install IronPDF
dotnet add package IronPdf
# Remove PDFBox .NET port packages
dotnet remove package PdfBox
dotnet remove package PDFBoxNet
dotnet remove package Apache.PdfBox

# Install IronPDF
dotnet add package IronPdf
SHELL

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

アプリケーション起動時にIronPdfライセンスキーを追加してください:

// Add at application startup, before anyIronPDFoperations
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
// Add at application startup, before anyIronPDFoperations
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
$vbLabelText   $csharpLabel

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

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

検索 置換対象
org.apache.pdfbox.pdmodel;を使用しています。 IronPdf;を使用しています。
org.apache.pdfbox.text;を使用しています。 IronPdf;を使用しています。
org.apache.pdfbox.multipdf;を使用しています。 IronPdf;を使用しています。
PdfBoxDotNet.Pdmodelを使用しています。|IronPdf;`を使用しています。
Apache.Pdfbox.PdModelを使用しています。 IronPdf;を使用しています。

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

ドキュメント操作

Apache PDFBox メソッド IronPDF メソッド ノート
PDDocument.load(パス) PdfDocument.FromFile(パス) PDFを読み込む
PDDocument.load(stream) PdfDocument.FromStream(stream)PdfDocument.FromStream(stream) ストリームから読み込む
new PDDocument(). new ChromePdfRenderer(). PDF作成用
document.save(パス) pdf.SaveAs(path)のようにします。 PDFを保存
document.close()|usingステートメントまたはDispose()`。 クリーンアップ
document.getNumberOfPages() pdf.PageCount ページ数プロパティ
document.getPage(インデックス) pdf.Pages[index] アクセスページ
document.removePage(インデックス) pdf.RemovePages(index)のようにします。 ページの削除

テキスト抽出

Apache PDFBox メソッド IronPDF メソッド ノート
new PDFTextStripper(). 不要 ストリッパーオブジェクト不要
stripper.getText(document) pdf.ExtractAllText()を使用してください。 完全な文書抽出
stripper.setStartPage(n). pdf.Pages[n].Text ページごとの抽出
stripper.setSortByPosition(true). 自動翻訳 組み込みのテキストソート

マージと分割の操作

Apache PDFBox メソッド IronPDF メソッド ノート
new PDFMergerUtility(). 不要 静的マージ方式
merger.addSource(ファイル) FromFile()で読み込む 最初にドキュメントを読み込む
merger.mergeDocuments() PdfDocument.Merge(pdfs). 静的マージ
new Splitter(). 不要 ページの直接操作
splitter.split(document) pdf.CopyPages(indices)を使用してください。 特定のページをコピーする

セキュリティと暗号化

Apache PDFBox メソッド IronPDF メソッド ノート
標準保護ポリシー pdf.SecuritySettings セキュリティ設定
policy.setUserPassword()(ポリシー.セットユーザーパスワード())。 pdf.SecuritySettings.UserPassword ユーザーパスワード
policy.setOwnerPassword()のようにします。 pdf.SecuritySettings.OwnerPassword オーナーパスワード
policy.setPermissions() pdf.SecuritySettings.AllowUserXxx パーミッション

コード移行の例

テキスト抽出

最も一般的なApache PDFBoxの操作はIronPDFが提供するAPIの簡素化を示しています。

Apache PDFBox .NET ポート実装:

// Apache PDFBox .NET ports are experimental and incomplete
using PdfBoxDotNet.Pdmodel;
using PdfBoxDotNet.Text;
using System;
using System.IO;

class Program
{
    static void Main()
    {
        // Note: PDFBox-dotnet has limited functionality
        using (var document = PDDocument.Load("document.pdf"))
        {
            var stripper = new PDFTextStripper();
            string text = stripper.GetText(document);
            Console.WriteLine(text);
        }
    }
}
// Apache PDFBox .NET ports are experimental and incomplete
using PdfBoxDotNet.Pdmodel;
using PdfBoxDotNet.Text;
using System;
using System.IO;

class Program
{
    static void Main()
    {
        // Note: PDFBox-dotnet has limited functionality
        using (var document = PDDocument.Load("document.pdf"))
        {
            var stripper = new PDFTextStripper();
            string text = stripper.GetText(document);
            Console.WriteLine(text);
        }
    }
}
$vbLabelText   $csharpLabel

IronPDFの実装:

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

class Program
{
    static void Main()
    {
        var pdf = PdfDocument.FromFile("document.pdf");
        string text = pdf.ExtractAllText();
        Console.WriteLine(text);

        // Or extract text from specific pages
        string pageText = pdf.ExtractTextFromPage(0);
        Console.WriteLine(pageText);
    }
}
// NuGet: Install-Package IronPdf
using IronPdf;
using System;

class Program
{
    static void Main()
    {
        var pdf = PdfDocument.FromFile("document.pdf");
        string text = pdf.ExtractAllText();
        Console.WriteLine(text);

        // Or extract text from specific pages
        string pageText = pdf.ExtractTextFromPage(0);
        Console.WriteLine(pageText);
    }
}
$vbLabelText   $csharpLabel

IronPDFはPDFTextStripperクラスを完全に排除し、マルチステップの抽出を単一のメソッド呼び出しに置き換えています。

HTMLからPDFへの変換

Apache PDFBox は HTML から PDF への変換をネイティブにサポートしていません。

Apache PDFBox .NET ポート (サポートされていません):

// Apache PDFBox does not have official .NET port
// Community ports like PDFBox-dotnet are incomplete
// and do not support HTML to PDF conversion natively.
// You would need to use additional libraries like
iText or combine with HTML renderers separately.

using PdfBoxDotNet.Pdmodel;
using System.IO;

// Note: This is NOT supported in PDFBox
// PDFBox is primarily for PDF manipulation, not HTML rendering
// You would need externalHTMLレンダリングengine
// Apache PDFBox does not have official .NET port
// Community ports like PDFBox-dotnet are incomplete
// and do not support HTML to PDF conversion natively.
// You would need to use additional libraries like
iText or combine with HTML renderers separately.

using PdfBoxDotNet.Pdmodel;
using System.IO;

// Note: This is NOT supported in PDFBox
// PDFBox is primarily for PDF manipulation, not HTML rendering
// You would need externalHTMLレンダリングengine
$vbLabelText   $csharpLabel

IronPDFの実装:

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

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderHtmlAsPdf("<h1>Hello World</h1><p>This is HTML to PDF</p>");
        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();
        var pdf = renderer.RenderHtmlAsPdf("<h1>Hello World</h1><p>This is HTML to PDF</p>");
        pdf.SaveAs("output.pdf");
        Console.WriteLine("PDF created successfully");
    }
}
$vbLabelText   $csharpLabel

IronPDFのChromiumベースのレンダリングエンジンはHTML、CSS、JavaScriptを完全にサポートします。 高度なシナリオについては、HTML to PDF documentationを参照してください。

複数のPDFをマージする

Apache PDFBox .NET ポート実装:

// Apache PDFBox .NET port attempt (incomplete support)
using PdfBoxDotNet.Pdmodel;
using PdfBoxDotNet.Multipdf;
using System;
using System.IO;

class Program
{
    static void Main()
    {
        // PDFBox-dotnet ports have incomplete API coverage
        var merger = new PDFMergerUtility();
        merger.AddSource("document1.pdf");
        merger.AddSource("document2.pdf");
        merger.SetDestinationFileName("merged.pdf");
        merger.MergeDocuments();
        Console.WriteLine("PDFs merged");
    }
}
// Apache PDFBox .NET port attempt (incomplete support)
using PdfBoxDotNet.Pdmodel;
using PdfBoxDotNet.Multipdf;
using System;
using System.IO;

class Program
{
    static void Main()
    {
        // PDFBox-dotnet ports have incomplete API coverage
        var merger = new PDFMergerUtility();
        merger.AddSource("document1.pdf");
        merger.AddSource("document2.pdf");
        merger.SetDestinationFileName("merged.pdf");
        merger.MergeDocuments();
        Console.WriteLine("PDFs merged");
    }
}
$vbLabelText   $csharpLabel

IronPDFの実装:

// NuGet: Install-Package 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 pdf3 = PdfDocument.FromFile("document3.pdf");

        var merged = PdfDocument.Merge(pdf1, pdf2, pdf3);
        merged.SaveAs("merged.pdf");
        Console.WriteLine("PDFs merged successfully");
    }
}
// NuGet: Install-Package 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 pdf3 = PdfDocument.FromFile("document3.pdf");

        var merged = PdfDocument.Merge(pdf1, pdf2, pdf3);
        merged.SaveAs("merged.pdf");
        Console.WriteLine("PDFs merged successfully");
    }
}
$vbLabelText   $csharpLabel

IronPdfの静的なMergeメソッドは複数のドキュメントを直接受け取ることができ、ユーティリティクラスのパターンを排除します。

ゼロからPDFを作成する

最も劇的な違いは、PDFを作成するときに現れます。 Apache PDFBox は手動での座標位置決めが必要です。

Apache PDFBox .NET ポート実装:

using org.apache.pdfbox.pdmodel;
using org.apache.pdfbox.pdmodel.font;
using org.apache.pdfbox.pdmodel.edit;

public void CreatePdf(string outputPath)
{
    PDDocument document = new PDDocument();
    try
    {
        PDPage page = new PDPage();
        document.addPage(page);

        PDPageContentStream contentStream = new PDPageContentStream(document, page);
        PDFont font = PDType1Font.HELVETICA_BOLD;

        contentStream.beginText();
        contentStream.setFont(font, 24);
        contentStream.moveTextPositionByAmount(72, 700);
        contentStream.drawString("Hello World");
        contentStream.endText();

        contentStream.beginText();
        contentStream.setFont(PDType1Font.HELVETICA, 12);
        contentStream.moveTextPositionByAmount(72, 650);
        contentStream.drawString("This is a paragraph of text.");
        contentStream.endText();

        contentStream.close();
        document.save(outputPath);
    }
    finally
    {
        document.close();
    }
}
using org.apache.pdfbox.pdmodel;
using org.apache.pdfbox.pdmodel.font;
using org.apache.pdfbox.pdmodel.edit;

public void CreatePdf(string outputPath)
{
    PDDocument document = new PDDocument();
    try
    {
        PDPage page = new PDPage();
        document.addPage(page);

        PDPageContentStream contentStream = new PDPageContentStream(document, page);
        PDFont font = PDType1Font.HELVETICA_BOLD;

        contentStream.beginText();
        contentStream.setFont(font, 24);
        contentStream.moveTextPositionByAmount(72, 700);
        contentStream.drawString("Hello World");
        contentStream.endText();

        contentStream.beginText();
        contentStream.setFont(PDType1Font.HELVETICA, 12);
        contentStream.moveTextPositionByAmount(72, 650);
        contentStream.drawString("This is a paragraph of text.");
        contentStream.endText();

        contentStream.close();
        document.save(outputPath);
    }
    finally
    {
        document.close();
    }
}
$vbLabelText   $csharpLabel

IronPDFの実装:

using IronPdf;

public void CreatePdf(string outputPath)
{
    var renderer = new ChromePdfRenderer();

    string html = @"
        <html>
        <head>
            <style>
                body { font-family: Helvetica, Arial, sans-serif; margin: 1in; }
                h1 { font-size: 24pt; font-weight: bold; }
                p { font-size: 12pt; }
            </style>
        </head>
        <body>
            <h1>Hello World</h1>
            <p>This is a paragraph of text.</p>
        </body>
        </html>";

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

public void CreatePdf(string outputPath)
{
    var renderer = new ChromePdfRenderer();

    string html = @"
        <html>
        <head>
            <style>
                body { font-family: Helvetica, Arial, sans-serif; margin: 1in; }
                h1 { font-size: 24pt; font-weight: bold; }
                p { font-size: 12pt; }
            </style>
        </head>
        <body>
            <h1>Hello World</h1>
            <p>This is a paragraph of text.</p>
        </body>
        </html>";

    using var pdf = renderer.RenderHtmlAsPdf(html);
    pdf.SaveAs(outputPath);
}
$vbLabelText   $csharpLabel

HTML/CSSベースの作成により、座標計算、フォント管理、コンテンツ・ストリーム操作が不要になります。

パスワード保護の追加

Apache PDFBox .NET ポート実装:

using org.apache.pdfbox.pdmodel;
using org.apache.pdfbox.pdmodel.encryption;

public void ProtectPdf(string inputPath, string outputPath, string password)
{
    PDDocument document = PDDocument.load(new File(inputPath));
    try
    {
        AccessPermission ap = new AccessPermission();
        ap.setCanPrint(true);
        ap.setCanExtractContent(false);

        StandardProtectionPolicy spp = new StandardProtectionPolicy(password, password, ap);
        spp.setEncryptionKeyLength(128);

        document.protect(spp);
        document.save(outputPath);
    }
    finally
    {
        document.close();
    }
}
using org.apache.pdfbox.pdmodel;
using org.apache.pdfbox.pdmodel.encryption;

public void ProtectPdf(string inputPath, string outputPath, string password)
{
    PDDocument document = PDDocument.load(new File(inputPath));
    try
    {
        AccessPermission ap = new AccessPermission();
        ap.setCanPrint(true);
        ap.setCanExtractContent(false);

        StandardProtectionPolicy spp = new StandardProtectionPolicy(password, password, ap);
        spp.setEncryptionKeyLength(128);

        document.protect(spp);
        document.save(outputPath);
    }
    finally
    {
        document.close();
    }
}
$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.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.SaveAs(outputPath);
}
$vbLabelText   $csharpLabel

IronPDFは許可オブジェクトとポリシーオブジェクトを分ける代わりに、強く型付けされたプロパティを使用します。

透かしの追加

Apache PDFBox .NET ポート実装:

using org.apache.pdfbox.pdmodel;
using org.apache.pdfbox.pdmodel.edit;
using org.apache.pdfbox.pdmodel.font;

public void AddWatermark(string inputPath, string outputPath, string watermarkText)
{
    PDDocument document = PDDocument.load(new File(inputPath));
    try
    {
        PDFont font = PDType1Font.HELVETICA_BOLD;

        for (int i = 0; i < document.getNumberOfPages(); i++)
        {
            PDPage page = document.getPage(i);
            PDPageContentStream cs = new PDPageContentStream(
                document, page, PDPageContentStream.AppendMode.APPEND, true, true);

            cs.beginText();
            cs.setFont(font, 72);
            cs.setNonStrokingColor(200, 200, 200);
            cs.setTextMatrix(Matrix.getRotateInstance(Math.toRadians(45), 200, 400));
            cs.showText(watermarkText);
            cs.endText();
            cs.close();
        }

        document.save(outputPath);
    }
    finally
    {
        document.close();
    }
}
using org.apache.pdfbox.pdmodel;
using org.apache.pdfbox.pdmodel.edit;
using org.apache.pdfbox.pdmodel.font;

public void AddWatermark(string inputPath, string outputPath, string watermarkText)
{
    PDDocument document = PDDocument.load(new File(inputPath));
    try
    {
        PDFont font = PDType1Font.HELVETICA_BOLD;

        for (int i = 0; i < document.getNumberOfPages(); i++)
        {
            PDPage page = document.getPage(i);
            PDPageContentStream cs = new PDPageContentStream(
                document, page, PDPageContentStream.AppendMode.APPEND, true, true);

            cs.beginText();
            cs.setFont(font, 72);
            cs.setNonStrokingColor(200, 200, 200);
            cs.setTextMatrix(Matrix.getRotateInstance(Math.toRadians(45), 200, 400));
            cs.showText(watermarkText);
            cs.endText();
            cs.close();
        }

        document.save(outputPath);
    }
    finally
    {
        document.close();
    }
}
$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);
}
$vbLabelText   $csharpLabel

IronPDF のHTML ベースの透かしにより、ページの反復とマトリックス計算が不要になります。

URLからPDFへの変換

Apache PDFBox は URL か ら PDF への変換に対応 し てい ません。 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);
}
$vbLabelText   $csharpLabel

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

ヘッダーとフッター

Apache PDFBoxは、ヘッダー/フッターに対応しておらず、各ページに手動で配置する必要があります。 IronPDFは宣言的な設定を提供します:

using IronPdf;

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

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

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

    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 Title",
        FontSize = 12
    };

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

    using var pdf = renderer.RenderHtmlAsPdf(html);
    pdf.SaveAs(outputPath);
}
$vbLabelText   $csharpLabel

高度なレイアウトについては、headers and footers documentationを参照してください。

.NETコアの統合

IronPdfは最新の.NETウェブアプリケーションと自然に統合されます:

[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");
}
$vbLabelText   $csharpLabel

非同期サポート

Apache PDFBox ポー ト は非同期操作に対応 し てい ません。 IronPdfは完全な非同期/待機機能を提供します:

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;
}
$vbLabelText   $csharpLabel

依存性注入の構成

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

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 string ExtractText(string pdfPath)
    {
        using var pdf = PdfDocument.FromFile(pdfPath);
        return pdf.ExtractAllText();
    }
}
public interface IPdfService
{
    Task<byte[]> GeneratePdfAsync(string html);
    string ExtractText(string pdfPath);
}

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 string ExtractText(string pdfPath)
    {
        using var pdf = PdfDocument.FromFile(pdfPath);
        return pdf.ExtractAllText();
    }
}
$vbLabelText   $csharpLabel

パフォーマンスの最適化

メモリ使用量の比較

シナリオ Apache PDFBox .NET ポート IronPDF ノート
テキスト抽出 ~80 MB ~50 MB IronPDFをより効率的に
PDF作成 ~100 MB ~60 MB HTMLレンダリングの最適化
バッチ(100 PDF) 高(手動クリーンアップ) ~100 MB usingステートメントを使用してください。

最適化のヒント

使用するusingステートメント:

//自動翻訳cleanup with IDisposable pattern
using var pdf = PdfDocument.FromFile(path);
//自動翻訳cleanup with IDisposable pattern
using var pdf = PdfDocument.FromFile(path);
$vbLabelText   $csharpLabel

バッチ操作のための再利用レンダラー:

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");
}
$vbLabelText   $csharpLabel

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

using var pdf = await renderer.RenderHtmlAsPdfAsync(html);
using var pdf = await renderer.RenderHtmlAsPdfAsync(html);
$vbLabelText   $csharpLabel

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

問題Java 形式のメソッド名が見つからない

camelCaseのJavaメソッドをPascalCaseの.NET同等物に置き換えてください:

// PDFBox: stripper.getText(document)
// IronPDF: pdf.ExtractAllText()

// PDFBox: document.getNumberOfPages()
// IronPDF: pdf.PageCount
// PDFBox: stripper.getText(document)
// IronPDF: pdf.ExtractAllText()

// PDFBox: document.getNumberOfPages()
// IronPDF: pdf.PageCount
$vbLabelText   $csharpLabel

問題です:close()メソッドがありません

IronPDFはIDisposableパターンを使用しています:

// PDFBox
document.close();

// IronPDF
using var pdf = PdfDocument.FromFile(path);
//自動翻訳disposal at end of scope
// PDFBox
document.close();

// IronPDF
using var pdf = PdfDocument.FromFile(path);
//自動翻訳disposal at end of scope
$vbLabelText   $csharpLabel

課題同等のPDFTextStripperはありません

テキスト抽出は単一の方法に簡素化されています:

// IronPDF: Just call ExtractAllText()
string text = pdf.ExtractAllText();

// Per-page extraction:
string pageText = pdf.Pages[0].Text;
// IronPDF: Just call ExtractAllText()
string text = pdf.ExtractAllText();

// Per-page extraction:
string pageText = pdf.Pages[0].Text;
$vbLabelText   $csharpLabel

課題PDFMergerUtilityが見つかりません

静的な Merge メソッドを使用してください:

//IronPDFuses static Merge
var merged = PdfDocument.Merge(pdf1, pdf2, pdf3);
//IronPDFuses static Merge
var merged = PdfDocument.Merge(pdf1, pdf2, pdf3);
$vbLabelText   $csharpLabel

移行後のチェックリスト

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

  • 既存のユニットテストと統合テストをすべて実行する
  • PDF出力を以前のバージョンと視覚的に比較する
  • テキスト抽出精度をテストする
  • ライセンスが正しく機能していることを確認します ( IronPdf.License.IsLicensed )
  • 以前の実装と比較したパフォーマンスベンチマーク
  • CI/CDパイプラインの依存関係を更新する
  • 開発チーム向けに新しいパターンを文書化する

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

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

その他のリソース


Apache PDFBox .NETポートからIronPDFに移行することで、あなたのPDFコードベースはJavaスタイルのパターンからイディオム的なC#に変換されます。 手動の座標位置決めからHTML/CSSレンダリングへの移行は、ネイティブの非同期サポートと最新の.NET統合と組み合わされ、プロダクション・アプリケーションをバックアップするプロフェッショナルなサポートとともに、よりクリーンで保守性の高いコードを提供します。

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

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

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