Orientación y rotación de páginas en PDFs
Trabajar con PDFs a menudo significa conocer dos cosas sobre una página: su orientación (vertical u horizontal) y si el contenido está girado. Hay dos maneras de averiguarlo, y responden preguntas ligeramente diferentes.
PdfDocument.Pages[i].PageRotationlee la rotación desde los metadatos del PDF.OcrInput.DetectPageOrientation()infiere la orientación visualmente con OCR.
Orientation vs. Rotation
No son la misma propiedad:
- Orientación de la página: el diseño de la página. Vertical significa que la altura es mayor que el ancho; Horizontal significa que el ancho es mayor que la altura.
- Ángulo de rotación: cómo se sitúa el contenido en relación con la dirección natural de lectura, por ejemplo
90,180, y así sucesivamente.
Opción 1: Leer rotación de los metadatos
PageRotation devuelve el valor de rotación incrustado en el archivo PDF, entonces te indica cómo está rotado programáticamente el contenido. Para PDFs bien formados, esto es fiable y consistente.
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
Obtienes ambos hechos en una pasada: orientación de la comparación de ancho a altura, y el ángulo de rotación directamente desde los metadatos.
Mejor para: PDFs estructurados con metadatos consistentes y válidos.
Opción 2: Detectar orientación con OCR
Cuando los metadatos están ausentes o no son fiables, analiza la página visualmente en su lugar. DetectPageOrientation() examina el diseño de cada página e infiere la probable dirección de lectura, sin depender de los metadatos.
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
Esta es la elección adecuada para documentos escaneados, PDFs basados en imágenes y cualquier archivo que carezca de metadatos adecuados.
La precisión aquí sigue la densidad y claridad del texto. El texto escaso o mal alineado puede producir un resultado incorrecto, así que restringe el OCR a un Rectangle sobre una región de texto más densa para estabilizar la detección.
Recomendación
- PDFs digitales: prefiere
PdfDocument.PageRotationcuando los metadatos son correctos. - PDFs escaneados o basados en imagen: usa
OcrInput.DetectPageOrientation()donde los metadatos faltan o son poco fiables.
Para flujos de trabajo críticos, ejecuta ambos métodos y aplica tu propia lógica para reconciliar cualquier discrepancia. Si estás viendo resultados de rotación inconsistentes, verifica el diseño específico de la página y valida un método contra el otro.

