PDF의 페이지 방향 및 회전
PDF를 작업할 때 페이지에 관한 두 가지를 알아야 하는 경우가 많습니다: 그것의 방향 (세로 또는 가로) 및 콘텐츠가 회전되었는지 여부입니다. 이를 알리는 두 가지 방법이 있으며, 그들은 약간 다른 질문에 답변합니다.
PdfDocument.Pages[i].PageRotation은 PDF 메타데이터에서 회전 정보를 읽습니다.OcrInput.DetectPageOrientation()은 OCR을 통해 시각적으로 방향을 추론합니다.
방향 vs. 회전
이들은 동일한 속성이 아닙니다:
- 페이지 방향: 페이지 레이아웃. 세로 운동은 높이가 너비보다 큽니다; 가로 운동은 너비가 높이보다 큽니다.
- 회전 각도: 콘텐츠가 자연스러운 읽기 방향과 어떻게 놓여 있는지를 나타내며, 예를 들어
90,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()을 사용합니다.
중요한 워크플로우에서는 두 가지 방법을 모두 실행하고 불일치를 화해하는 자신만의 논리를 적용하세요. 일관성이 없는 회전 결과를 보는 경우, 특정 페이지 레이아웃을 확인하고 한 방법을 다른 방법과 비교하여 유효성을 확인하세요.

