PDFにおけるページの向きと回転
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
幅と高さの比較から向きを、メタデータから直接回転角度を、一度に知ることができます。
最適な用途:一貫していて有効なメタデータを持つ構造化された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
これはスキャンされた文書、画像ベースのPDF、および正しいメタデータを欠く任意のファイルに適した選択です。
ここでの精度はテキスト密度と明瞭さによります。 スパースまたは不整合なテキストは誤った結果を生む可能性があるため、OCRを制限して、検出を安定させるためにより密集したテキスト領域上で Rectangle を実行してください。
推奨事項
- デジタルPDF: メタデータが正しい場合には
PdfDocument.PageRotationを推奨します。 - スキャンまたは画像ベースのPDF: メタデータが欠落しているか信頼できない場合には
OcrInput.DetectPageOrientation()を使用してください。
重要なワークフローに対しては、両方の方法を実行し、矛盾がある場合には自分のロジックを適用して調整してください。 回転結果が一貫していない場合は、特定のページレイアウトを確認し、片方の方法をもう一方の方法に対して検証してください。

