Orientacja i obrot strony w PDF
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].PageRotationodczytuje 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
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
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.

