PDF中的頁面方向和旋轉

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

處理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
$vbLabelText   $csharpLabel

您可以在一次傳遞中獲得兩個事實:通過寬高比較獲得方向,直接從元資料獲得旋轉角度。

最佳用於: 對於持續且有效的元資料結構化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
$vbLabelText   $csharpLabel

這對於掃描文件、基於圖像的PDF以及缺乏正確元資料的任何文件是正確的選擇。

這裡的準確性追蹤文字密度和清晰度。 稀疏或未對準的文字可能導致錯誤結果,因此將OCR限制在文字較密集的Rectangle區域,以穩定偵測。

推薦

  • 數位PDF:當metadata正確時,偏好使用PdfDocument.PageRotation
  • 掃描或影像為基礎的PDF:當metadata缺失或不可靠時,使用OcrInput.DetectPageOrientation()

對於關鍵工作流程,執行這兩種方法,並應用您自己的邏輯來調和任何差異。 如果您看到了不一致的旋轉結果,檢查特定頁面佈局並驗證一種方法與另一種方法。

Curtis Chau
技術作家

Curtis Chau擁有Carleton大學的電腦科學學士學位,專精於前端開發,擁有Node.js、TypeScript、JavaScript和React的專業知識。Curtis熱衷於建立直觀且美觀的使用者介面,喜愛使用現代框架並建立結構良好、視覺吸引力的手冊。

除了開發,Curtis對物聯網(IoT)有濃厚的興趣,探索創新的方法來整合硬體和軟體。在空閒時間,他喜歡玩遊戲和建立Discord機器人,結合他對技術的熱愛與創造力。

準備開始了嗎?
Nuget 下載 6,136,090 | 版本: 2026.7 剛剛發布
Still Scrolling Icon

還在滾動?

想要快速證明? PM > Install-Package IronOcr
執行範例 觀看您的圖像轉變為可搜尋文字。