Orientación y rotación de páginas en PDFs

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

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].PageRotation lee 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
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

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.PageRotation cuando 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.

Curtis Chau
Escritor Técnico

Curtis Chau tiene una licenciatura en Ciencias de la Computación (Carleton University) y se especializa en el desarrollo front-end con experiencia en Node.js, TypeScript, JavaScript y React. Apasionado por crear interfaces de usuario intuitivas y estéticamente agradables, disfruta trabajando con frameworks modernos y creando manuales bien ...

Leer más
¿Listo para empezar?
Nuget Descargas 6,136,090 | Versión: 2026.7 recién lanzado
Still Scrolling Icon

¿Aún desplazándote?

¿Quieres una prueba rápida? PM > Install-Package IronOcr
ejecuta una muestra y observa cómo tu imagen se convierte en texto buscable.