IRONSOFTWAREHOME
ビデオ

How to Add Page Numbers to PDFs Using C#

Curtis Chau
Curtis Chau
Updated: 2026年5月18日

BitMiracle Docotic PDFは、100%マネージドコードアーキテクチャと広範なプログラムPDF操作機能で知られる、定評ある.NET PDFライブラリです。 しかし、モジュール式のアドオン構造であるため、HTMLからPDFへの変換、レイアウト機能、その他の機能には個別のパッケージが必要であり、プロジェクト管理とライセンスが複雑になっています。 この包括的なガイドは、BitMiracle Docotic PDFからIronPDF-ChromiumベースのHTMLレンダリングを内蔵し、すべての機能が単一のNuGetパッケージに含まれる統合.NET PDFライブラリへの移行パスをステップバイステップで提供します。

なぜBitMiracle Docotic PDFからIronPDFに移行するのですか?

BitMiracle Docotic PDFは堅牢なPDF操作機能を提供していますが、開発チームがより合理的なアーキテクチャを持つ代替ツールを求めるようになったのには、いくつかの要因があります。

パッケージ アーキテクチャの比較

BitMiracle Docotic PDFは、モジュール式のアドオンアプローチを採用しており、完全な機能を実現するには複数のパッケージが必要です:

アスペクトBitMiracle Docotic PDFIronPDF
HTMLからPDFへ別のアドオン(HtmlToPdf)が必要です。組み込みのコア機能
パッケージ構造コア+複数のアドオン単一のNuGetパッケージ
ライセンスモデルアドオンライセンス含まれる機能
APIの複雑さアドオンごとに名前空間を分ける統一API
HTMLエンジンChromium (アドオン経由)Chromium(組み込み)
コミュニティサイズ小規模より多くのリソース
ドキュメント技術リファレンス豊富なチュートリアル

フィーチャー パリティ

どちらのライブラリも包括的なPDF機能をサポートしています:

フィーチャーBitMiracle Docotic PDFIronPDF
ゼロからPDFを作成
HTMLからPDFへ✅ (アドオンが必要)✅ (ビルトイン)
URLからPDFへ✅ (アドオンが必要)✅ (ビルトイン)
PDF操作
テキスト抽出
マージ/スプリット
デジタル署名
暗号化
フォーム入力
PDF/A準拠

アプローチの主な違い

BitMiracle Docotic PDFは、座標位置決めを伴うキャンバスベースの描画を使用します (canvas.DrawString(x, y, text)) が、IronPDFはレイアウトと位置決めにHTML/CSSを活用します。 これは、ウェブ技術に精通した開発者のコンテンツ作成を簡素化するパラダイムシフトを意味します。

移行前の準備

前提条件

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

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

BitMiracleのDocotic PDFの使用状況を監査する

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

# Find all Docotic.Pdf usages in your codebase
grep -r "using BitMiracle.Docotic" --include="*.cs" .
grep -r "PdfDocument\|PdfPage\|PdfCanvas" --include="*.cs" .

# Find NuGet package references
grep -r "Docotic.Pdf" --include="*.csproj" .
SHELL

予想される画期的な変更

変更BitMiracle Docotic PDFIronPDFインパクト
HTMLレンダリングHtmlToPdfアドオンが必要です。内蔵アドオンパッケージの削除
ページ索引0-based (Pages[0])0-based (Pages[0])変更不要
座標系左下オリジンHTML/CSSフロー位置決めにCSSを使用
キャンバス描画PdfCanvas.DrawText()HTMLマークアップパラダイムシフト
テキスト抽出page.GetText()pdf.ExtractAllText()メソッド名の変更
ドキュメントの読み込みnew PdfDocument(path)PdfDocument.FromFile(path)コンストラクタ → 静的メソッド
セービングdocument.Save(path)pdf.SaveAs(path)メソッド名の変更
処分IDisposable パターン不要よりシンプルなリソース管理

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

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

BitMiracle Docotic PDFパッケージを削除し、IronPDFをインストールしてください:

# Remove Docotic.Pdf packages
dotnet remove package BitMiracle.Docotic.Pdf
dotnet remove package BitMiracle.Docotic.Pdf.HtmlToPdf
dotnet remove package BitMiracle.Docotic.Pdf.Layout

# Install IronPDF
dotnet add package IronPdf
SHELL

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

BitMiracle Docotic PDFの名前空間をIronPDFに置き換えてください:

// Remove these
using BitMiracle.Docotic.Pdf;
using BitMiracle.Docotic.Pdf.Layout;
// HtmlConverter from the BitMiracle.Docotic.Pdf.HtmlToPdf NuGet package
// also lives in the BitMiracle.Docotic.Pdf namespace (no extra using needed).

// Add this
using IronPdf;

ステップ 3: ライセンスの設定

// Add at application startup (Program.cs or Global.asax)
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";

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

ドキュメント操作

タスクBitMiracle Docotic PDFIronPDF
空のドキュメントを作成new PdfDocument()new PdfDocument()
ファイルから読み込むnew PdfDocument(path)PdfDocument.FromFile(path)
ストリームから読み込むPdfDocument.Load(stream)PdfDocument.FromStream(stream)
バイトから読み込むPdfDocument.Load(bytes)PdfDocument.FromBinaryData(bytes)
ファイルに保存document.Save(path)pdf.SaveAs(path)
ページ数を取得document.PageCountpdf.PageCount
閉じる/破棄するdocument.Dispose()不要

HTMLからPDFへの変換

タスクBitMiracle Docotic PDF(HtmlToPdfアドオン)IronPDF
HTML文字列からPDFへawait converter.CreatePdfFromStringAsync(html)renderer.RenderHtmlAsPdf(html)
HTMLファイルからPDFへawait converter.CreatePdfAsync(filePath)renderer.RenderHtmlFileAsPdf(path)
URLからPDFへawait converter.CreatePdfAsync(new Uri(url))renderer.RenderUrlAsPdf(url)
ページサイズの設定options.Page.SetSize(PdfPaperSize.A4)renderer.RenderingOptions.PaperSize = PdfPaperSize.A4
余白の設定options.Page.MarginTop = 20 (など)renderer.RenderingOptions.MarginTop = 20

マージと分割の操作

タスクBitMiracle Docotic PDFIronPDF
ドキュメントのマージdoc1.Append("file.pdf") (path/Stream/bytes)PdfDocument.Merge(pdf1, pdf2)
文書の分割新しいドキュメントにdocument.CopyPage(index)pdf.CopyPages(start, end)

コード移行の例

HTMLからPDFへの変換

最も一般的な操作は、IronPDFが提供する大幅な簡素化を示しています。

BitMiracle Docotic PDFの実装:

// NuGet: Install-Package BitMiracle.Docotic.Pdf
// NuGet: Install-Package BitMiracle.Docotic.Pdf.HtmlToPdf  (separate add-on required)
using BitMiracle.Docotic.Pdf;
using System;
using System.Threading.Tasks;

class Program
{
    static async Task Main()
    {
        // HtmlConverter is async-only and downloads Chromium on first use
        using var converter = await HtmlConverter.CreateAsync();

        string html = "<html><body><h1>Hello World</h1><p>This isHTMLからPDFへconversion.</p></body></html>";

        using var pdf = await converter.CreatePdfFromStringAsync(html);
        pdf.Save("output.pdf");

        Console.WriteLine("PDF created successfully");
    }
}
C#

IronPDFの実装:

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

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        string html = "<html><body><h1>Hello World</h1><p>This isHTMLからPDFへconversion.</p></body></html>";
        
        var pdf = renderer.RenderHtmlAsPdf(html);
        pdf.SaveAs("output.pdf");
        
        Console.WriteLine("PDF created successfully");
    }
}
C#

IronPDFはusing ステートメント要件を排除し、Chromiumベースのレンダリング能力を明確に示す専用のChromePdfRenderer クラスを提供します。 その他のHTML変換オプションについては、HTML to PDF documentationを参照してください。

複数のPDFをマージする

BitMiracle Docotic PDFの実装:

// NuGet: Install-Package BitMiracle.Docotic.Pdf
using BitMiracle.Docotic.Pdf;
using System;

class Program
{
    static void Main()
    {
        using (var pdf1 = new PdfDocument("document1.pdf"))
        {
            // PdfDocument.Append accepts a file path, Stream, or byte[] —
            // not another PdfDocument instance.
            pdf1.Append("document2.pdf");
            pdf1.Save("merged.pdf");
        }

        Console.WriteLine("PDFs merged successfully");
    }
}

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 merged = PdfDocument.Merge(new List<PdfDocument> { pdf1, pdf2 });
        merged.SaveAs("merged.pdf");
        
        Console.WriteLine("PDFs merged successfully");
    }
}

IronPDFの静的Merge メソッドは、複数のドキュメントを直接受け入れ、反復的なAppend パターンよりもクリーンなAPIを提供します。 その他のオプションについては、 PDF 結合のドキュメントを参照してください。

テキスト抽出

BitMiracle Docotic PDFの実装:

// NuGet: Install-Package BitMiracle.Docotic.Pdf
using BitMiracle.Docotic.Pdf;
using System;

class Program
{
    static void Main()
    {
        using (var pdf = new PdfDocument("document.pdf"))
        {
            string allText = "";
            
            foreach (var page in pdf.Pages)
            {
                allText += page.GetText();
            }
            
            Console.WriteLine("Extracted text:");
            Console.WriteLine(allText);
        }
    }
}
C#

IronPDFの実装:

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

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

IronPDFはテキスト抽出を複数行のループから単一のメソッド呼び出しに減らします。 その他の抽出オプションについては、テキスト抽出のドキュメントを参照してください。

パスワード保護と暗号化

IronPDFの実装:

using IronPdf;

var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<h1>Confidential Document</h1>");

// Set security
pdf.SecuritySettings.UserPassword = "userPassword";
pdf.SecuritySettings.OwnerPassword = "ownerPassword";
pdf.SecuritySettings.AllowUserPrinting = PdfPrintSecurity.FullPrintRights;
pdf.SecuritySettings.AllowUserCopyPasteContent = false;

pdf.SaveAs("protected.pdf");

包括的なセキュリティ オプションについては、暗号化のドキュメントを参照してください。

ヘッダーとフッター

IronPDFの実装:

using IronPdf;

var renderer = new ChromePdfRenderer();

renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter
{
    HtmlFragment = @"
        <div style='text-align:center; font-size:12px;'>
            Company Header - Confidential
        </div>",
    DrawDividerLine = true,
    MaxHeight = 30
};

renderer.RenderingOptions.HtmlFooter = new HtmlHeaderFooter
{
    HtmlFragment = @"
        <div style='text-align:center; font-size:10px;'>
            Page {page} of {total-pages}
        </div>",
    DrawDividerLine = true,
    MaxHeight = 25
};

var pdf = renderer.RenderHtmlAsPdf("<h1>Document Content</h1>");
pdf.SaveAs("with_headers.pdf");

IronPDFは、動的なページ番号付けのために{page}{total-pages} のようなプレースホルダトークンをサポートしています。 その他のオプションについては、headers and footers documentationを参照してください。

重要な移行に関する注意事項

キャンバスから HTML へのパラダイムシフト

BitMiracle Docotic PDFのキャンバスベースの描画アプローチは、CSSポジショニングでHTMLに変換する必要があります:

BitMiracleドコティックPDFパターン:

var canvas = pdfPage.Canvas;
canvas.DrawString(50, 50, "Hello, World!");

IronPDFパターン:

var html = "<div style='position:absolute; left:50px; top:50px;'>Hello, World!</div>";
var pdf = renderer.RenderHtmlAsPdf(html);

同じページのインデックス

両方のライブラリは0-basedインデックスを使用します (Pages[0] が最初のページ) —ページアクセスコードの変更は不要です。

処分不要

IronPDFはメモリ管理のためのusing ステートメントを必要とせず、コード構造を単純化します。

//BitMiracle Docotic PDF- disposal required
using (var pdf = new PdfDocument("input.pdf"))
{
    // operations
}

//IronPDF- disposal optional
var pdf = PdfDocument.FromFile("input.pdf");
// operations - no using statement needed

非同期サポート

BitMiracle Docotic PDFのHtmlToPdfアドオンは、あらゆるところで非同期パターンを必要とします。 IronPDFは同期と非同期の両方のメソッドをサポートしています:

// Synchronous
var pdf = renderer.RenderHtmlAsPdf(html);

// Asynchronous
var pdf = await renderer.RenderHtmlAsPdfAsync(html);

.NETコアの統合

IronPDFパターン:

[ApiController]
[Route("[controller]")]
public class PdfController : ControllerBase
{
    [HttpGet("generate")]
    public IActionResult GeneratePdf()
    {
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderHtmlAsPdf("<h1>Report</h1>");

        return File(pdf.BinaryData, "application/pdf", "report.pdf");
    }

    [HttpGet("generate-async")]
    public async Task<IActionResult> GeneratePdfAsync()
    {
        var renderer = new ChromePdfRenderer();
        var pdf = await renderer.RenderHtmlAsPdfAsync("<h1>Report</h1>");

        return File(pdf.BinaryData, "application/pdf", "report.pdf");
    }
}

移行後のチェックリスト

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

  • すべてのユニットテストを実行して、PDF生成が正しく機能することを確認します。
  • PDF出力品質を比較します(IronPDFのChromiumエンジンでは若干異なるレンダリングが行われる場合がありますが、通常はより優れています)
  • テキスト抽出の精度を検証する
  • フォーム入力機能をテストする
  • 該当する場合はデジタル署名を検証する
  • パフォーマンステストのバッチ操作
  • すべてのターゲット環境でテストする
  • CI/CDパイプラインを更新する
  • Docotic.Pdf ライセンスファイルを削除する

その他のリソース


BitMiracle Docotic PDFからIronPDFに移行することで、ChromiumベースのHTMLレンダリング機能を提供しながら、複数のアドオンパッケージを管理する複雑さを解消できます。 キャンバスベースの描画からHTML/CSSポジショニングへの移行は、ほとんど for .NET開発者がすでに持っているWeb開発スキルを活用し、より保守性の高いPDF生成コードを実現します。

ご注意: Bitmiracle Docotic.Pdf はその所属所有者の登録商標です。 このサイトは、Bit Miracle と提携しておらず、承認または支援を受けていません。 すべての製品名、ロゴ、およびブランドは各所有者の所有物です。 比較は情報提供のみを目的としており、執筆時点で公開されている情報を反映しています。
Curtis Chau
テクニカルライター

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

...
詳しく読む

関連する記事

Key in blue circle

無料の30日間トライアルキーをすぐに入手してください。

Your trial license will be sent to your email address

制限なし。100% ロック解除済み。クレジットカード不要。

bullet_checkedクレジットカードやアカウントの作成は不要です。制限なし。100% ロック解除済み。クレジットカード不要。
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
無料のライブデモを予約する
Booking Badge

世界中の数百万人のエンジニアから信頼されています。

ライセンスはより安く
義務のない相談を受ける
下記のフォームを記入するか、sales@ironsoftware.comにメールしてください。
あなたの詳細は常に守秘されます。
世界中の数百万人のエンジニアから信頼されています。
ライセンスはより安く
あなたの無料30日間の試用キーをすぐに入手。
クレジットカードやアカウントの作成は不要です。