PDFにおけるページの向きと回転

This article was translated from English: Does it need improvement?
Translated
View the article in English

PDFを扱う際には、通常、ページについての2つの事項を知る必要があります:その向き(縦または横)とコンテンツが回転しているかどうかです。 それを見つける方法は2つあり、それぞれがわずかに異なる質問に答えます。

  • PdfDocument.Pages[i].PageRotation はPDFのメタデータから回転を読み取ります。
  • OcrInput.DetectPageOrientation() はOCRを使用して視覚的に向きを推定します。

向きと回転

これらは同じプロパティではありません:

  • ページの向き: ページのレイアウト。 縦向き とは高さが幅より大きいことを意味します; 横向き とは幅が高さより大きいことを意味します。
  • 回転角度: コンテンツが自然な読み方向に対してどのように配置されているか、たとえば 180 など。

オプション1: メタデータから回転を読む

PageRotation はPDFファイルに埋め込まれた回転値を返すので、コンテンツがプログラム上でどのように回転されているかを示します。 適切に作成されたPDFの場合、これは信頼性があり一貫しています。

var pdf = PdfDocument.FromFile("sample.pdf");
for (int i = 0; i < pdf.PageCount; i++)
{
    var page = pdf.Pages[i];
    var orientation = page.Width > page.Height ? "Landscape" : "Portrait";
    var rotation = page.PageRotation;
    Console.WriteLine($"Page {i + 1}: {orientation}, Rotation: {rotation} degrees");
}
var pdf = PdfDocument.FromFile("sample.pdf");
for (int i = 0; i < pdf.PageCount; i++)
{
    var page = pdf.Pages[i];
    var orientation = page.Width > page.Height ? "Landscape" : "Portrait";
    var rotation = page.PageRotation;
    Console.WriteLine($"Page {i + 1}: {orientation}, Rotation: {rotation} degrees");
}
Imports System

Dim pdf = PdfDocument.FromFile("sample.pdf")
For i As Integer = 0 To pdf.PageCount - 1
    Dim page = pdf.Pages(i)
    Dim orientation = If(page.Width > page.Height, "Landscape", "Portrait")
    Dim rotation = page.PageRotation
    Console.WriteLine($"Page {i + 1}: {orientation}, Rotation: {rotation} degrees")
Next
$vbLabelText   $csharpLabel

幅と高さの比較から向きを、メタデータから直接回転角度を、一度に知ることができます。

最適な用途:一貫していて有効なメタデータを持つ構造化されたPDF。

オプション2: OCRで向きを検出

メタデータが欠落しているか信頼できない場合は、代わりにページを視覚的に分析してください。 DetectPageOrientation() は各ページのレイアウトを調べ、メタデータに依存せずに、可能性のある読み方向を推測します。

using var input = new OcrInput();
input.LoadPdf("sample.pdf");
var results = input.DetectPageOrientation();
foreach (var result in results)
{
    Console.WriteLine($"Page {result.PageNumber + 1}: Rotation: {result.RotationAngle} degrees");
}
using var input = new OcrInput();
input.LoadPdf("sample.pdf");
var results = input.DetectPageOrientation();
foreach (var result in results)
{
    Console.WriteLine($"Page {result.PageNumber + 1}: Rotation: {result.RotationAngle} degrees");
}
Imports System

Using input As New OcrInput()
    input.LoadPdf("sample.pdf")
    Dim results = input.DetectPageOrientation()
    For Each result In results
        Console.WriteLine($"Page {result.PageNumber + 1}: Rotation: {result.RotationAngle} degrees")
    Next
End Using
$vbLabelText   $csharpLabel

これはスキャンされた文書、画像ベースのPDF、および正しいメタデータを欠く任意のファイルに適した選択です。

ここでの精度はテキスト密度と明瞭さによります。 スパースまたは不整合なテキストは誤った結果を生む可能性があるため、OCRを制限して、検出を安定させるためにより密集したテキスト領域上で Rectangle を実行してください。

推奨事項

  • デジタルPDF: メタデータが正しい場合には PdfDocument.PageRotation を推奨します。
  • スキャンまたは画像ベースのPDF: メタデータが欠落しているか信頼できない場合には OcrInput.DetectPageOrientation() を使用してください。

重要なワークフローに対しては、両方の方法を実行し、矛盾がある場合には自分のロジックを適用して調整してください。 回転結果が一貫していない場合は、特定のページレイアウトを確認し、片方の方法をもう一方の方法に対して検証してください。

Curtis Chau
テクニカルライター

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

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

準備はできましたか?
Nuget ダウンロード 6,136,090 | バージョン: 2026.7 リリースされたばかり
Still Scrolling Icon

まだスクロールしていますか?

すぐに証拠が欲しいですか? PM > Install-Package IronOcr
サンプルを実行 あなたの画像が検索可能なテキストになるのをご覧ください。