Orientation et rotation de page dans les PDFs
Travailler avec des PDFs signifie souvent connaître deux choses sur une page : son orientation (portrait ou paysage) et si le contenu est tourné. Il existe deux façons de le découvrir, et elles répondent à des questions légèrement différentes.
PdfDocument.Pages[i].PageRotationlit la rotation à partir des métadonnées du PDF.OcrInput.DetectPageOrientation()déduit l'orientation visuellement avec OCR.
Orientation vs. Rotation
Ce ne sont pas la même propriété :
- Orientation de la page : la mise en page. Portrait signifie que la hauteur est supérieure à la largeur ; Paysage signifie que la largeur est supérieure à la hauteur.
- Angle de rotation : comment le contenu est positionné par rapport à la direction de lecture naturelle, par exemple
90,180, etc.
Option 1 : Lire la rotation à partir des métadonnées
PageRotation renvoie la valeur de rotation intégrée dans le fichier PDF, vous indiquant ainsi comment le contenu est programmé pour être tourné. Pour les PDFs bien formés, c'est fiable et cohérent.
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
Vous obtenez les deux informations en un seul passage : l'orientation par comparaison de la largeur à la hauteur, et l'angle de rotation directement des métadonnées.
Idéal pour : PDFs structurés avec des métadonnées cohérentes et valides.
Option 2 : Détecter l'orientation avec OCR
Lorsque les métadonnées sont manquantes ou peu fiables, analysez visuellement plutôt la page. DetectPageOrientation() examine la mise en page de chaque page et déduit la direction probable de lecture, sans dépendre des métadonnées.
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
C'est le bon choix pour les documents numérisés, les PDFs basés sur des images, et tout fichier manquant de métadonnées appropriées.
Ici, l'exactitude suit la densité et la clarté du texte. Un texte clairsemé ou mal aligné peut produire un résultat erroné, donc limitez l'OCR à un Rectangle sur une région plus dense de texte pour stabiliser la détection.
Recommandation
- PDF numériques : préférez
PdfDocument.PageRotationlorsque les métadonnées sont correctes. - PDF numérisés ou basés sur des images : utilisez
OcrInput.DetectPageOrientation()lorsque les métadonnées sont manquantes ou peu fiables.
Pour les flux de travail critiques, exécutez les deux méthodes et appliquez votre propre logique pour concilier toute divergence. Si vous voyez des résultats de rotation incohérents, vérifiez la mise en page spécifique de la page et validez une méthode par rapport à l'autre.

