# 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].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.
```csharp
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");
}
```
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.
```csharp
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");
}
```
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.
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");
}
C#
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");
}
C#
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 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ęczników.