PDF中的页面方向和旋转
处理PDF通常意味着了解页面的两个信息:其方向(纵向或横向)以及内容是否已旋转。 有两种方法可以找出这两个问题的答案,而它们解答的是稍微不同的问题。
PdfDocument.Pages[i].PageRotation从PDF元数据中读取旋转信息。OcrInput.DetectPageOrientation()使用OCR视觉推断方向。
方向 vs 旋转
这些不是同一属性:
- 页面方向: 页面布局。 纵向意意味着高度大于宽度; 横向意意味着宽度大于高度。
- 旋转角度:内容相对于自然阅读方向的角度,例如
180等。
选项1:从元数据读取旋转
PageRotation 返回嵌入在PDF文件中的旋转值,因此它告诉您内容是如何被程序化旋转的。 对于格式良好的PDF,这是一种可靠且一致的方法。
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
您可以通过一次读取获得两个信息:通过宽高比比较得出方向,以及从元数据中直接获取的旋转角度。
适合: 结构化且元数据一致有效的PDF。
选项2:用OCR检测方向
当元数据缺失或不可信时,可以对页面进行视觉分析。 DetectPageOrientation() 检查每一页的布局并推断可能的阅读方向,不依赖于元数据。
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
这是处理扫描文档、基于图像的PDF以及缺乏适当元数据文件的正确选择。
这里的准确性与文本密度和清晰度相关。 稀疏或对齐不当的文本可能产生错误结果,因此将OCR限制为 Rectangle 在文本密集区域上,以稳定检测。
推荐
- 数字PDF:当元数据正确时,优先使用
PdfDocument.PageRotation。 - 扫描或基于图像的PDF:在元数据缺失或不可靠时,使用
OcrInput.DetectPageOrientation()。
对于关键工作流,请运行这两种方法并运用您自己的逻辑解决任何差异。 如果您看到不一致的旋转结果,请检查特定页面布局,并针对彼此验证一个方法。

