PDF ページ寸法 .NET - 幅と高さの取得 (C#)

はじめに

.NET アプリケーションで PDF ドキュメントを扱い、各ページの pdf ページサイズを取得 したいことはありませんか?同じ悩みを抱える開発者は多いです。ドキュメントビューアの構築、印刷レイアウトの作成、フォームの処理など、正確なページ寸法は洗練されたユーザー体験の基盤となります。

この包括的ガイドでは、GroupDocs.Annotation for .NET を使用して PDF ページ寸法を抽出する手順を詳しく解説します。最後まで読めば、任意の PDF ドキュメントから幅・高さ・その他の重要メタデータを取得できるコードが手に入ります。

クイック回答

  • .NET で pdf ページサイズを取得するには? Annotator.GetDocumentInfo() を使用し、PageInfo.Width / PageInfo.Height を参照します。
  • どのライブラリが pdf ページ幅高さ抽出をサポート? GroupDocs.Annotation for .NET(v25.4.0 以降)。
  • 基本的な寸法抽出にライセンスは必要? 無料トライアルで動作しますが、商用利用には有償ライセンスが必要です。
  • 返される単位は? ポイント(1/72 インチ)。必要に応じてインチやミリメートルに変換してください。
  • 大容量 PDF を効率的に処理できる? はい。GroupDocs.Annotation はファイル全体をメモリに読み込まずにメタデータを取得します。

get pdf page size とは?

Get pdf page size は、PDF ページの幅と高さをプログラム上で取得することを指します。この操作はレイアウト計算、印刷準備、フォームフィールドの位置決めなど、.NET アプリケーションで不可欠です。

.NET 開発における PDF ページ寸法が重要な理由

コードに入る前に、pdf ページ幅高さ を把握する意義を見てみましょう。これらの数値は単なる雑学ではなく、実際の機能に直結します。

  • レイアウト管理 – 正確なページサイズに基づいて自動スケーリングでき、スクロールバーの不自然さを排除します。
  • 印刷最適化 – 正確な寸法により紙の無駄や印刷ずれを防ぎ、商業ワークフローでの品質を向上させます。
  • フォーム処理 – 抽出座標は正確なページサイズに依存します。2 mm の誤差でもデータ取得に支障が出ます。
  • リソース計画 – 大規模でサイズが混在する PDF はメモリ戦略が変わります。事前にサイズを把握すれば、バッチ処理を賢く設計できます。

前提条件

必要なライブラリとバージョン

  • GroupDocs.Annotation for .NET(バージョン 25.4.0 以降)。このバージョンは 50 以上の入力・出力形式 をサポートし、ファイル全体をメモリに読み込まずに数百ページの PDF を処理できます。
  • .NET Framework 4.6.1 以上 または .NET Core 2.0 以上

環境設定要件

  • Visual Studio 2019 以降(Community エディションでも可)
  • テスト用 PDF ファイル(後述の各種タイプの取り扱いを紹介)
  • using 文とオブジェクト破棄に関する基本的な知識

知識の前提条件

以下さえ理解していれば OK です。

  • C# の基礎
  • NuGet パッケージ管理の基本
  • .NET における簡単なファイル I/O

すべて準備できましたか?それではライブラリの設定に進みましょう。

GroupDocs.Annotation for .NET の設定

GroupDocs.Annotation のインストールはシンプルですが、ワークフローに合わせていくつかの方法があります。

方法 1: NuGet パッケージ マネージャ コンソールの使用

Visual Studio のパッケージ マネージャ コンソールを開き、次のコマンドを実行します。

Install-Package GroupDocs.Annotation -Version 25.4.0

方法 2: .NET CLI の使用

コマンドラインツールを好む場合は次の通りです。

dotnet add package GroupDocs.Annotation --version 25.4.0

方法 3: ビジュアル パッケージ マネージャ

  1. ソリューション エクスプローラーでプロジェクトを右クリック
  2. Manage NuGet Packages を選択
  3. GroupDocs.Annotation を検索
  4. Install をクリック

ライセンスオプション(ご都合に合わせて選択)

  • 無料トライアル – 基本機能(寸法抽出含む)は使用制限付きで利用可能。概念実証に最適です。
  • 一時ライセンス – 評価期間中にフル機能を使える 30 日間のキーを取得できます。
  • 商用ライセンス – 本番環境で必須。開発者数やデプロイ形態に応じた価格設定です。

クイックセットアップ検証

以下の簡単なテストで、ライブラリが正しく組み込まれたか確認してください。

using GroupDocs.Annotation;

// This should compile without errors if installation succeeded
using (Annotator annotator = new Annotator(@"path\to\your\test.pdf"))
{
    Console.WriteLine("GroupDocs.Annotation is ready to use!");
}

このコードが例外なくコンパイル・実行できれば、ページサイズ抽出の準備は完了です。

Annotator クラスとは?

Annotator クラスは GroupDocs.Annotation の中心オブジェクトで、PDF ドキュメントをメモリ上に表現し、メタデータの取得、注釈の追加、ページ情報の抽出などのメソッドを提供します。ファイルハンドリングを内部で行い、ストリームからのロードもサポートし、以降のすべての操作は Annotator インスタンスを通して行うため、ワークフローがシンプルになります。

GroupDocs.Annotation を使用して get pdf page size を取得する方法

GetDocumentInfo() は DocumentInfo オブジェクトを返し、ページ数や各ページの詳細情報を含みます。new Annotator("file.pdf") で PDF をロードしこのメソッドを呼び出すと、Pages コレクション内の各 PageInfo が幅と高さ(ポイント単位)を即座に提供します。ファイル全体を解析する必要はありません。

ステップバイステップ実装ガイド

手順 1: PDF で Annotator を初期化する

PDF ファイルへのパスを指定して Annotator インスタンスを作成します。using ブロックでラップし、ファイルハンドルを速やかに解放しましょう。

using (Annotator annotator = new Annotator(@"YOUR_DOCUMENT_DIRECTORY\INPUT_PDF"))
{
    // All our dimension extraction magic happens here
}

プロ tip: 正しい破棄処理は、特に大量の大容量 PDF をバッチ処理する際のメモリリーク防止に必須です。

手順 2: ドキュメント情報を取得する

DocumentInfo は総ページ数や PageInfo コレクションなど、PDF 全体のメタデータを保持します。GroupDocs.Annotation では次の 1 行で取得可能です。

IDocumentInfo info = annotator.Document.GetDocumentInfo();

取得できる情報は以下の通りです。

  • 総ページ数
  • ファイル形式の詳細
  • 各ページの幅・高さ・回転角度などを含む Pages リスト

手順 3: 取得したデータを検証する

ページ情報にアクセスする前に、DocumentInfo が null でなく、Pages コレクションに要素があることを確認します。

if (info.PagesInfo != null && info.PagesInfo.Count > 0)
{
    Console.WriteLine($"\t Document info: Type {info.FileType}, size = {info.Size}, pages = {info.PageCount}");
}
else
{
    Console.WriteLine("No page information available - check your PDF file");
    return;
}

この防御的チェックにより、null 参照例外や破損 PDF に対する早期フィードバックが得られます。

手順 4: 各ページの幅と高さを抽出する

PageInfo は単一ページのプロパティ(幅・高さ・回転角度)を表します。Pages コレクションを走査し、Width と Height を読み取ります。値は ポイント(1 ポイント = 1/72 インチ)で返されます。

foreach (var page in info.PagesInfo)
{
    Console.WriteLine($"\t\t page #{page.PageNumber}: {page.Width}x{page.Height}");
}

重要ポイント

  • 幅が先、次に高さが続きます。
  • ページ番号は 1 から始まり、ビューアで表示される番号と一致します。
  • 必要に応じて回転情報 (PageInfo.Rotation) も取得可能です。

完全な動作例(メソッド)

上記手順を再利用可能なメソッドにまとめると次のようになります。

using GroupDocs.Annotation;
using System;

public void ExtractPdfPageDimensions(string pdfPath)
{
    try
    {
        using (Annotator annotator = new Annotator(pdfPath))
        {
            IDocumentInfo info = annotator.Document.GetDocumentInfo();
            
            if (info.PagesInfo != null && info.PagesInfo.Count > 0)
            {
                Console.WriteLine($"Document: {info.FileType}, {info.Size} bytes, {info.PageCount} pages");
                
                foreach (var page in info.PagesInfo)
                {
                    Console.WriteLine($"Page {page.PageNumber}: {page.Width} x {page.Height} points");
                }
            }
            else
            {
                Console.WriteLine("Could not retrieve page information");
            }
        }
    }
    catch (Exception ex)
    {
        Console.WriteLine($"Error processing PDF: {ex.Message}");
    }
}

よくある落とし穴と回避策

シンプルなコードでも、開発者は予期しない問題に直面しがちです。以下に典型的な落とし穴とその解決策を示します。

ファイルパスの問題

問題: 開発中に “File not found” エラーが出る。
解決策: テスト時は絶対パスを使用し、File.Exists で存在を確認してから Annotator を作成する。

if (!File.Exists(pdfPath))
{
    throw new FileNotFoundException($"PDF file not found: {pdfPath}");
}

権限の問題

問題: 特に Web サーバ上で PDF への読み取り権限が不足している。
解決策: アプリケーション プールの ID に適切な読み取り権限を付与するか、制限フォルダーに対してインパーソネーションを使用する。

壊れた PDF の処理

問題: 部分的に破損した PDF や非標準機能を使用した PDF がある。
解決策: 抽出ロジックを try‑catch で囲み、明確なエラーメッセージを出す。GroupDocs.Annotation は未対応構造に対して DocumentException をスローします。

大きなファイルでのメモリリーク

問題: 多数の大容量 PDF を処理する際に Annotator を破棄し忘れ、メモリが枯渇する。
解決策: 常に using 文でインスタンスを囲み、必要に応じて小バッチまたはストリーミングモードで処理する。

バージョン互換性

問題: 異なる GroupDocs ライブラリのバージョンを混在させると型不一致が発生する。
解決策: ソリューション全体で同一バージョンを統一し、関連パッケージは同時に更新する。

実際のユースケース

retrieve pdf width height を理解すると、以下のような強力なシナリオが実現できます。

ドキュメント閲覧アプリケーション

レスポンシブビューアはページ寸法に基づいて初期ズームレベルを自動設定でき、ユーザーは「画面に合わせて表示」体験を手動調整なしで得られます。

// Example: Calculate optimal zoom for viewport
double optimalZoom = Math.Min(viewportWidth / pageWidth, viewportHeight / pageHeight);

自動レポート生成

複数の PDF を 1 つのレポートに結合する際、各ページのサイズを把握しておけばスケーリングが統一され、予期せぬ改ページを防げます。

印刷管理システム

正確な寸法により最適な用紙使用量を算出し、縦横向きの判別や商業印刷前の事前チェックが可能になります。

フォーム処理ソリューション

ページサイズから導出した座標により、チェックボックス・署名・テキストフィールドの抽出精度が向上し、レイアウトが異なる PDF でも安定したデータ取得が実現します。

デジタル資産管理

PDF にサイズメタデータをタグ付けすれば、例えば “A4 サイズの文書をすべて表示” といった検索が高速化し、カタログ管理が効率化します。

パフォーマンス最適化のヒント

プロトタイプから本番環境へ移行する際は、パフォーマンスが重要になります。

バッチ処理戦略

同種の操作をまとめてオーバーヘッドを削減します。例として、複数ファイルのメタデータを一括取得し、結果を保存した後で注釈処理を別パスで行う方法があります。

var results = new List<PageDimensionResult>();
foreach (var pdfFile in pdfFiles.Take(10)) // Process in batches of 10
{
    // Extract dimensions and add to results
}

頻繁にアクセスされる寸法のキャッシュ

同一 PDF を繰り返し照会する場合は、DocumentInfo オブジェクトをスレッドセーフな辞書にキャッシュしましょう。ファイルが変更されたらキャッシュを無効化することを忘れずに。

private static readonly Dictionary<string, IDocumentInfo> _dimensionCache = 
    new Dictionary<string, IDocumentInfo>();

大きなファイルの非同期処理

async/await パターンを活用し、UI スレッドをブロックせずにバックグラウンドでメタデータ取得を行います。

public async Task<List<PageInfo>> ExtractDimensionsAsync(string pdfPath)
{
    return await Task.Run(() => {
        // Your dimension extraction code here
    });
}

メモリ管理のベストプラクティス

  • すべての Annotator インスタンスを速やかに破棄する。
  • 大量のファイルは 20〜50 件ずつのチャンクで処理し、メモリ使用量を抑える。
  • パフォーマンス カウンタやプロファイラでメモリ使用状況を監視する。
  • 高頻度でキャッシュするオブジェクトは、必要に応じて弱参照を利用し、ガベージコレクションを妨げないようにする。

高度なユースケース

基本的な抽出に慣れたら、以下のような高度なシナリオにも挑戦できます。

混在サイズ文書の処理

PDF にページごとにサイズが異なるケース(例: カバーは A4、内部は A5)があります。連続する PageInfo.Width/Height を比較し、サイズ変化を検知して条件分岐ロジックを適用します。

var pageSizes = info.PagesInfo.Select(p => new { p.PageNumber, p.Width, p.Height }).ToList();
var uniqueSizes = pageSizes.Select(p => new { p.Width, p.Height }).Distinct().Count();

if (uniqueSizes > 1)
{
    Console.WriteLine("Document contains multiple page sizes");
}

向きの検出

幅と高さを比較して縦向きか横向きかを判定します。ビューアでの自動回転や、向きに応じたサムネイル生成に有用です。

foreach (var page in info.PagesInfo)
{
    string orientation = page.Width > page.Height ? "Landscape" : "Portrait";
    Console.WriteLine($"Page {page.PageNumber}: {orientation}");
}

他の GroupDocs 機能との統合

寸法抽出と注釈 API を組み合わせてスタンプを正確に配置したり、変換 API で元サイズを保持したまま画像化したりできます。

よくある質問

Q: ライセンスなしで PDF ページ寸法を抽出できますか?
A: はい。無料トライアル版でも基本的な寸法抽出は可能ですが、セッションあたり処理できるページ数に制限があります。

Q: 幅と高さの単位は何ですか?
A: GroupDocs.Annotation は ポイント(1 ポイント = 1/72 インチ)で返します。インチに変換するには 72 で除算し、ミリメートルに変換するには 0.352778 を掛けます。

Q: パスワード保護された PDF はどう扱いますか?
A: LoadOptions にパスワードを設定して Annotator を構築します。例: new Annotator(path, new LoadOptions { Password = "your‑password" })。

Q: Azure や AWS などのクラウドストレージにある PDF でも動作しますか?
A: はい。まずファイルをローカル Stream にダウンロードし、ストリームベースの Annotator コンストラクタを使用すれば中間ファイルは不要です。

Q: 大容量 PDF の寸法抽出はパフォーマンスに影響しますか?
A: GroupDocs.Annotation は PDF のクロスリファレンステーブルとページディクショナリだけを読み取るため、100 MB 未満の PDF は通常 1 秒未満で処理できます(標準サーバー環境)。

Q: 回転したページの寸法はどう扱いますか?
A: PageInfo.Rotation プロパティで回転角度が取得できます。90° または 270° の場合は、表示上の寸法を得るために幅と高さを入れ替えてください。

Q: 特定のページだけ寸法を取得できますか?
A: GetDocumentInfo() 後に Pages コレクションを PageNumber でフィルタすれば、任意のページだけを対象にできます。

Q: PDF/A 形式でも動作しますか?
A: 完全にサポートしています。PDF/A‑1、PDF/A‑2、PDF/A‑3 すべて対応しています。

Q: “Unable to load document” エラーが出たらどうすれば?
A: ファイル権限を確認し、PDF リーダーで開いて破損していないか検証し、サポートされている PDF バージョン(1.4–2.0)か確認してください。

Q: ポイントではなくピクセルで寸法が欲しい場合は?
A: 手動で変換できます。pixels = points * DPI / 72。たとえば標準画面 DPI が 96 の場合、ポイントに 1.3333 を掛ければピクセル数が得られます。

必要なリソース


最終更新日: 2026-06-16
テスト環境: GroupDocs.Annotation 25.4.0 for .NET
作成者: GroupDocs

関連チュートリアル