# 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].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.
```csharp
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");
}
```
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.
```csharp
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");
}
```
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.
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");
}
C#
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");
}
C#
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 é 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 bem estruturados e visualmente atraentes.