Orientacja i obrot strony w PDF

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

Praca z PDF często oznacza znajomość dwóch rzeczy o stronie: jej orientacji (pionowej lub poziomej) i czy zawartość jest obrócona. Istnieją dwa sposoby, aby się o tym dowiedzieć, a każdy odpowiada na nieco inne pytania.

  • PdfDocument.Pages[i].PageRotation odczytuje obrót z metadanych PDF.
  • OcrInput.DetectPageOrientation() wywnioskowuje orientację wizualnie za pomocą OCR.

Orientacja vs. Obrot

To nie to samo właściwości:

  • Orientacja strony: układ strony. Pionowa oznacza, że wysokość jest większa niż szerokość; Pozioma oznacza, że szerokość jest większa niż wysokość.
  • Kąt obrotu: Jak zawartość jest ustawiona względem naturalnego kierunku czytania, przykład 90, 180, i tak dalej.

Opcja 1: Odczytaj obrót z metadanych

PageRotation zwraca wartość obrotu osadzoną w pliku PDF, więc informuje cię, jak zawartość została programowo obrócone. Dla dobrze uformowanych PDF-ów jest to niezawodne i spójne.

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

Uzyskujesz dwie informację w jednym kroku: orientację z porównania szerokości do wysokości oraz kąt obrotu prosto z metadanych.

Najlepsze dla: strukturalnych PDF-ów ze spójnymi, prawidłowymi metadanymi.

Opcja 2: Wykryj orientację za pomocą OCR

Gdy brakuje metadanych lub są niewiarygodne, analizuj stronę wizualnie zamiast tego. DetectPageOrientation() bada układ każdej strony i wnioskuje o prawdopodobnym kierunku czytania, bez polegania na metadanych.

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

To właściwy wybór dla zeskanowanych dokumentów, PDF-ów oparte na obrazach i wszelkich plików pozbawionych odpowiednich metadanych.

Dokładność tutaj śledzi gęstość tekstu i przejrzystość. Rozproszenie lub niedopasowany tekst może dać błędny wynik, dlatego ogranicz OCR do Rectangle na gęstszym obszarze tekstu, aby ustabilizować wykrycie.

Zalecenie

  • Cyfrowe PDF: preferuj PdfDocument.PageRotation, gdy metadane są poprawne.
  • Zeskanowane lub bazujące na obrazach PDF: używaj OcrInput.DetectPageOrientation(), gdy metadane są brakujące lub niewiarygodne.

Dla krytycznych przepływów pracy uruchamiaj oba sposoby i zastosuj swoją logikę do rozwiązywania wszelkich rozbieżności. Jeśli widzisz niekonsekwentne wyniki obrotu, sprawdź konkretny układ strony i zweryfikuj jedną metodę w stosunku do drugiej.

Curtis Chau
Autor tekstów technicznych

Curtis Chau posiada tytuł licencjata z informatyki (Uniwersytet Carleton) i specjalizuje się w front-endowym rozwoju, z ekspertką w Node.js, TypeScript, JavaScript i React. Pasjonuje się tworzeniem intuicyjnych i estetycznie przyjemnych interfejsów użytkownika, Curtis cieszy się pracą z nowoczesnymi frameworkami i tworzeniem dobrze zorganizowanych, atrakcyjnych wizualnie podrę...

Czytaj więcej
Gotowy, aby rozpocząć?
Nuget Pliki do pobrania 6,136,090 | Wersja: 2026.7 właśnie wydany
Still Scrolling Icon

Wciąż przewijasz?

Czy chcesz szybko dowodu? PM > Install-Package IronOcr
uruchom próbkę obserwuj, jak twój obraz staje się tekstem z możliwością wyszukiwania.