Orientação e Rotação de Página em PDFs

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

Trabalhar com PDFs muitas vezes significa conhecer duas coisas sobre uma página: sua orientação (retrato ou paisagem) e se o conteúdo está girado. Há duas maneiras de descobrir, e elas respondem a perguntas ligeiramente diferentes.

  • PdfDocument.Pages[i].PageRotation lê a rotação dos metadados do PDF.
  • OcrInput.DetectPageOrientation() infere a orientação visualmente com OCR.

Orientação vs. Rotação

Esses não são a mesma propriedade:

  • Orientação da página: o layout da página. Retrato significa que a altura é maior que a largura; Paisagem significa que a largura é maior que a altura.
  • Ângulo de rotação: como o conteúdo fica em relação à direção natural de leitura, por exemplo, 90, 180 e assim por diante.

Opção 1: Ler Rotação dos Metadados

PageRotation retorna o valor de rotação incorporado no arquivo PDF, então ele informa como o conteúdo é programaticamente girado. Para PDFs bem-formados, isso é confiável e 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

Você obtém ambos os fatos de uma vez: orientação através da comparação de largura para altura, e o ângulo de rotação direto dos metadados.

Melhor para: PDFs estruturados com metadados consistentes e válidos.

Opção 2: Detectar Orientação com OCR

Quando os metadados estão ausentes ou não são confiáveis, analise a página visualmente. DetectPageOrientation() examina o layout de cada página e infere a direção de leitura provável, sem depender de metadados.

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 é a escolha certa para documentos digitalizados, PDFs baseados em imagens e qualquer arquivo sem metadados adequados.

A precisão aqui segue a densidade e clareza do texto. Texto esparso ou desalinhado pode produzir um resultado errado, então restrinja o OCR a um Rectangle sobre uma região mais densa de texto para estabilizar a detecção.

Recomendação

  • PDFs digitais: prefira PdfDocument.PageRotation quando os metadados forem corretos.
  • PDFs digitalizados ou baseados em imagens: use OcrInput.DetectPageOrientation() quando os metadados estiverem ausentes ou não forem confiáveis.

Para fluxos de trabalho críticos, execute ambos os métodos e aplique sua própria lógica para reconciliar qualquer discrepância. Se você estiver vendo resultados de rotação inconsistentes, verifique o layout da página específico e valide um método em relação ao outro.

Curtis Chau
Redator Técnico

Curtis Chau é bacharel em Ciência da Computação (Universidade Carleton) e se especializa em desenvolvimento front-end, com experiência em Node.js, TypeScript, JavaScript e React. Apaixonado por criar interfaces de usuário intuitivas e esteticamente agradáveis, Curtis gosta de trabalhar com frameworks modernos e criar manuais ...

Leia mais
Pronto para começar?
Nuget Baixar 6,136,090 | Versão: 2026.7 recém-lançado
Still Scrolling Icon

Ainda está rolando a tela?

Quer provas rápidas? PM > Install-Package IronOcr
executar um exemplo Veja sua imagem se transformar em texto pesquisável.