PDF中的頁面方向和旋轉
處理PDF時,經常需要知道頁面有兩條資訊:其方向(縱向或橫向)以及內容是否旋轉。 有兩種方法來了解,它們回答略有不同的問題。
PdfDocument.Pages[i].PageRotation從PDF metadata讀取旋轉資訊。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() 檢查每一頁的佈局,推斷可能的閱讀方向,不依賴metadata。
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:當metadata正確時,偏好使用
PdfDocument.PageRotation。 - 掃描或影像為基礎的PDF:當metadata缺失或不可靠時,使用
OcrInput.DetectPageOrientation()。
對於關鍵工作流程,執行這兩種方法,並應用您自己的邏輯來調和任何差異。 如果您看到了不一致的旋轉結果,檢查特定頁面佈局並驗證一種方法與另一種方法。

