PDF의 페이지 방향 및 회전

This article was translated from English: Does it need improvement?
Translated
View the article in English

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
$vbLabelText   $csharpLabel

한 번의 전달에서 두 가지 사실을 얻습니다: 너비와 높이를 비교하여 방향을 얻고 메타데이터에서 직접 회전 각도를 얻습니다.

최적: 일관되고 유효한 메타데이터가 포함된 구조화된 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
$vbLabelText   $csharpLabel

이는 스캔된 문서, 이미지 기반 PDF, 적절한 메타데이터가 부족한 파일에 적합합니다.

정확도는 텍스트 밀도와 선명도에 의해 측정됩니다. 희귀하거나 잘못 정렬된 텍스트는 잘못된 결과를 초래할 수 있으므로, OCR을 더 조밀한 텍스트 영역의 Rectangle로 제한하여 탐지의 정확성을 높이세요.

추천

  • 디지털 PDF: 메타데이터가 올바른 경우 PdfDocument.PageRotation을 선호합니다.
  • 스캔되거나 이미지 기반의 PDF: 메타데이터가 없거나 신뢰할 수 없는 경우 OcrInput.DetectPageOrientation()을 사용합니다.

중요한 워크플로우에서는 두 가지 방법을 모두 실행하고 불일치를 화해하는 자신만의 논리를 적용하세요. 일관성이 없는 회전 결과를 보는 경우, 특정 페이지 레이아웃을 확인하고 한 방법을 다른 방법과 비교하여 유효성을 확인하세요.

Curtis Chau
기술 문서 작성자

커티스 차우는 칼턴 대학교에서 컴퓨터 과학 학사 학위를 취득했으며, Node.js, TypeScript, JavaScript, React를 전문으로 하는 프론트엔드 개발자입니다. 직관적이고 미적으로 뛰어난 사용자 인터페이스를 만드는 데 열정을 가진 그는 최신 프레임워크를 활용하고, 잘 구성되고 시각적으로 매력적인 매뉴얼을 제작하는 것을 즐깁니다.

커티스는 개발 분야 외에도 사물 인터넷(IoT)에 깊은 관심을 가지고 있으며, 하드웨어와 소프트웨어를 통합하는 혁신적인 방법을 연구합니다. 여가 시간에는 게임을 즐기거나 디스코드 봇을 만들면서 기술에 대한 애정과 창의성을 결합합니다.

시작할 준비 되셨나요?
Nuget 다운로드 6,136,090 | 버전: 2026.7 방금 출시
Still Scrolling Icon

아직도 스크롤하고 계신가요?

빠른 증거를 원하시나요? PM > Install-Package IronOcr
샘플을 실행하세요 이미지가 검색 가능한 텍스트로 바뀌는 것을 확인해 보세요.