Seitenorientierung und -rotation in PDFs
Beim Arbeiten mit PDFs bedeutet dies oft, zwei Dinge über eine Seite zu wissen: ihre Orientierung (Hoch- oder Querformat) und ob der Inhalt gedreht ist. Es gibt zwei Möglichkeiten, dies herauszufinden, und sie beantworten leicht unterschiedliche Fragen.
PdfDocument.Pages[i].PageRotationliest die Drehung aus den PDF-Metadaten.OcrInput.DetectPageOrientation()erkennt die Ausrichtung visuell mit OCR.
Orientierung vs. Drehung
Diese sind nicht dieselbe Eigenschaft:
- Seitenorientierung: das Seitenlayout. Hochformat bedeutet, dass die Höhe größer als die Breite ist; Querformat bedeutet, dass die Breite größer als die Höhe ist.
- Drehwinkel: wie der Inhalt im Vergleich zur natürlichen Lesedirection steht, z.B.
90,180, usw.
Option 1: Rotation aus Metadaten lesen
PageRotation gibt den im PDF eingebetteten Drehwert zurück und zeigt damit, wie der Inhalt programmgesteuert gedreht wird. Für gut formierte PDFs ist dies zuverlässig und konsistent.
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");
}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 iDim 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 iSie erhalten beide Fakten in einem Durchgang: Orientierung durch den Breiten-Höhen-Vergleich und den Rotationswinkel direkt aus den Metadaten.
Am besten geeignet für: Strukturierte PDFs mit konsistenten, gültigen Metadaten.
Option 2: Orientierung mit OCR erkennen
Wenn die Metadaten fehlen oder nicht vertrauenswürdig sind, analysieren Sie die Seite stattdessen visuell. DetectPageOrientation() untersucht das Layout jeder Seite und ermittelt die wahrscheinlichste Lesedirection, ohne sich auf Metadaten zu verlassen.
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");
}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 UsingUsing 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 UsingDies ist die richtige Wahl für gescannte Dokumente, bildbasierte PDFs und jede Datei, die richtige Metadaten fehlt.
Die Genauigkeit hierbei verfolgt Texterdichte und Klarheit. Sparsamer oder falsch ausgerichteter Text kann ein falsches Ergebnis erzeugen. Daher beschränken Sie OCR auf einen Rectangle über eine dichtere Textregion, um die Erkennung zu stabilisieren.
Empfehlung
- Digitale PDFs: bevorzugen Sie
PdfDocument.PageRotation, wenn die Metadaten korrekt sind. - Gescannt oder bildbasierte PDFs: verwenden Sie
OcrInput.DetectPageOrientation(), wenn Metadaten fehlen oder unzuverlässig sind.
Für kritische Workflows führen Sie beide Methoden aus und wenden Ihre eigene Logik an, um etwaige Diskrepanzen auszugleichen. Wenn Sie inkonsistente Rotationsanziegen sehen, überprüfen Sie das spezifische Seitenlayout und validieren Sie eine Methode gegen die andere.
Curtis Chau hat einen Bachelor-Abschluss in Informatik von der Carleton University und ist spezialisiert auf Frontend-Entwicklung mit Expertise in Node.js, TypeScript, JavaScript und React. Leidenschaftlich widmet er sich der Erstellung intuitiver und ästhetisch ansprechender Benutzerschnittstellen und arbeitet gerne mit modernen Frameworks sowie der Erstellung gut strukturierter, optisch ansprechender Handbücher.