Orientação e Rotação de Página em PDFs
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].PageRotationlê 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,180e 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
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
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.PageRotationquando 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.

