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

Apache PDFBoxからIronPdfへの移行方法

ApachePDFBoxからIronPDFへの移行:完全なC#移行ガイド

Apache PDFBox は、PDF 操作のための定評あるオープンソース Java ライブラリです。 しかし、.NET開発者にとって、利用可能な唯一の選択肢は、JavaスタイルのAPI、不完全な機能カバレッジ、.NETコミュニティのまばらなサポートなど、重大な課題をもたらすコミュニティ主導の非公式移植版です。 この包括的なガイドは、Apache PDFBox .NET portsから.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移行作業
オブジェクトモデルPDDocumentPDPagePdfDocumentChromePdfRenderer異なるクラス階層
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";
IRON VB CONVERTER ERROR developers@ironsoftware.com
$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);
        }
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$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);
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$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
IRON VB CONVERTER ERROR developers@ironsoftware.com
$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");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$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");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$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");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$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();
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$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);
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$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();
    }
}
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.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);
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$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();
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$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);
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$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);
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$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);
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$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");
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$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;
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$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();
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

パフォーマンスの最適化

メモリ使用量の比較

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

最適化のヒント

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

//自動翻訳cleanup with IDisposable pattern
using var pdf = PdfDocument.FromFile(path);
//自動翻訳cleanup with IDisposable pattern
using var pdf = PdfDocument.FromFile(path);
IRON VB CONVERTER ERROR developers@ironsoftware.com
$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");
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

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

using var pdf = await renderer.RenderHtmlAsPdfAsync(html);
using var pdf = await renderer.RenderHtmlAsPdfAsync(html);
IRON VB CONVERTER ERROR developers@ironsoftware.com
$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
IRON VB CONVERTER ERROR developers@ironsoftware.com
$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
IRON VB CONVERTER ERROR developers@ironsoftware.com
$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;
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

課題PDFMergerUtilityが見つかりません。

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

//IronPDFuses static Merge
var merged = PdfDocument.Merge(pdf1, pdf2, pdf3);
//IronPDFuses static Merge
var merged = PdfDocument.Merge(pdf1, pdf2, pdf3);
IRON VB CONVERTER ERROR developers@ironsoftware.com
$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ボットを作成したりして、技術に対する愛情と創造性を組み合わせています。