PDF 회전 검증 및 품질 관리 - 완벽한 정렬 확인 가이드

PDF 회전 후 검증 및 품질 보증

PDF 회전 완료 후 회전이 제대로 적용되었는지, 페이지가 손상되지 않았는지, 메타데이터가 보존되었는지 검증하는 것이 중요합니다. 페이지 크기 확인, 콘텐츠 검증, 메타데이터 보존, 시각적 확인 등 단계별 품질 관리 방법을 제시합니다.

회전 검증 단계별 프로세스

단계검증 항목도구/명령예상 시간
1기본 파일 정보pdfinfo1 s
2회전 적용 여부페이지 크기 비교1 s
3파일 무결성qpdf --check2~3 s
4콘텐츠 검증시각적 확인10~30 s
5메타데이터 보존exiftool1 s
6전체 검증배치 검증5~10 s

Step 1: 기본 파일 정보 확인

명령어 (CLI)

# Linux/Mac/Windows (Git Bash)
pdfinfo rotated.pdf

출력:

Title:

Author:

Subject:

Creator: PDFtk

Producer: (ghostscript)

CreationDate: Mon Mar 15 10:30:45 2026

ModDate: Mon Mar 21 14:22:10 2026

Trapped: False

Pages: 100

Encrypted: no

Page size: 612 x 792 pts (A4)

Page rot: 0

File size: 25641234 bytes

Optimized: no

PDF version: 1.4

정보 파싱 (Python)

import subprocess

def get_pdf_info(pdf_file): result = subprocess.run(['pdfinfo', pdf_file], capture_output=True, text=True) info = {} for line in result.stdout.split(' '): if ':' in line: key, value = line.split(':', 1) info[key.strip()] = value.strip() return info

pdf_info = get_pdf_info('rotated.pdf') print(f"✓ 페이지 수: {pdf_info.get('Pages')}") print(f"✓ 파일 크기: {pdf_info.get('File size')}") print(f"✓ 페이지 크기: {pdf_info.get('Page size')}") print(f"✓ 회전: {pdf_info.get('Page rot')}")

Step 2: 회전 적용 여부 확인

페이지 크기 비교 (회전 감지)

#!/bin/bash
ORIGINAL="input.pdf"
ROTATED="output.pdf"

원본 페이지 크기

ORIG_SIZE=ORIGINAL" | grep "Page size" | head -1) echo "원본 페이지 크기: $ORIG_SIZE"

회전 후 페이지 크기

ROT_SIZE=ROTATED" | grep "Page size" | head -1) echo "회전 후 페이지 크기: $ROT_SIZE"

크기 변경 확인 (90도 회전 시 가로세로 바뀜)

if [ "ROT_SIZE" ]; then echo "✓ 회전 적용됨 (페이지 크기 변경)" else echo "⚠ 회전 미적용 또는 원래 정사각형" fi

Python로 회전 각도 검증

from PyPDF2 import PdfReader

def verify_rotation(original_pdf, rotated_pdf): """회전 각도 검증""" orig_reader = PdfReader(original_pdf) rot_reader = PdfReader(rotated_pdf)

orig_page = orig_reader.pages[0]
rot_page = rot_reader.pages[0]

# 원본 크기
orig_w = float(orig_page.mediabox.width)
orig_h = float(orig_page.mediabox.height)

# 회전 후 크기
rot_w = float(rot_page.mediabox.width)
rot_h = float(rot_page.mediabox.height)

print(f"원본: {orig_w:.0f} × {orig_h:.0f}")
print(f"회전 후: {rot_w:.0f} × {rot_h:.0f}")

# 회전 각도 추론
if abs(orig_w - rot_h) < 1 and abs(orig_h - rot_w) < 1:
    print("✓ 90도 또는 270도 회전 감지")
elif orig_w == rot_w and orig_h == rot_h:
    print("✓ 회전 미적용 또는 0도 회전")
else:
    print("✓ 복잡한 변환 적용")

verify_rotation('input.pdf', 'output.pdf')

Step 3: 파일 무결성 검사

qpdf 검증

# 기본 검사
qpdf --check rotated.pdf

출력:

PDF version: 1.4

File is not encrypted

According to the PDF spec, this file is a valid PDF.

(No errors found)

상세 검사

qpdf --check --verbose rotated.pdf

손상된 경우 복구

qpdf --recompile-pdf rotated.pdf rotated_repaired.pdf

Ghostscript 검증

gs -sDEVICE=nullpage -dNOPAUSE -dBATCH rotated.pdf

오류 없으면 성공

오류 있으면 수정된 파일 생성:

gs -sDEVICE=pdfwrite -dNOPAUSE -dBATCH -sOutputFile=fixed.pdf rotated.pdf

Step 4: 콘텐츠 검증

첫 페이지와 마지막 페이지 시각적 확인

#!/bin/bash
ROTATED="rotated.pdf"

첫 페이지 이미지로 변환 (확인)

gs -sDEVICE=png256 -dNOPAUSE -dBATCH -dFirstPage=1 -dLastPage=1
-sOutputFile=first_page.png "$ROTATED" echo "✓ 첫 페이지 생성: first_page.png"

마지막 페이지 이미지로 변환

TOTAL_PAGES=ROTATED" | grep Pages | awk '{print $2}') gs -sDEVICE=png256 -dNOPAUSE -dBATCH -dFirstPage=TOTAL_PAGES
-sOutputFile=last_page.png "$ROTATED" echo "✓ 마지막 페이지($TOTAL_PAGES) 생성: last_page.png"

시각적 검사 (첫/마지막 페이지가 올바른 방향인지 확인)

텍스트 콘텐츠 추출 및 검증

#!/bin/bash
ROTATED="rotated.pdf"

전체 텍스트 추출

pdftotext "$ROTATED" rotated_text.txt echo "✓ 텍스트 추출 완료"

라인 수로 콘텐츠 확인

LINE_COUNT=$(wc -l < rotated_text.txt) echo "✓ 콘텐츠 라인 수: $LINE_COUNT"

텍스트 방향 확인 (좌에서 우로 읽히는지)

head -20 rotated_text.txt

Python 콘텐츠 검증

from PyPDF2 import PdfReader

def verify_content_readability(pdf_file): """회전 후 콘텐츠 읽기 가능 여부 검증""" reader = PdfReader(pdf_file) all_text = ""

for page_num, page in enumerate(reader.pages, 1):
    try:
        text = page.extract_text()
        all_text += text + "
"
        
        # 페이지별 텍스트 길이 확인
        if len(text) < 50:
            print(f"⚠ 페이지 {page_num}: 텍스트 부족 ({len(text)}자)")
        else:
            print(f"✓ 페이지 {page_num}: 텍스트 정상 ({len(text)}자)")
    except Exception as e:
        print(f"✗ 페이지 {page_num} 텍스트 추출 실패: {e}")

print(f"
✓ 총 {len(all_text)} 문자 추출됨")

# 읽기 가능 여부 판단
if len(all_text) > 100:
    print("✓ 콘텐츠 읽기 가능")
else:
    print("⚠ 콘텐츠 부족 또는 텍스트 추출 실패")

verify_content_readability('rotated.pdf')

Step 5: 메타데이터 보존 확인

메타데이터 비교

#!/bin/bash
ORIGINAL="input.pdf"
ROTATED="output.pdf"

echo "=== 메타데이터 비교 ===" echo "원본:" pdfinfo "$ORIGINAL" | grep -E "^(Title|Author|Subject|Creator|Producer)"

echo "" echo "회전 후:" pdfinfo "$ROTATED" | grep -E "^(Title|Author|Subject|Creator|Producer)"

차이 확인

echo "" echo "=== 비교 결과 ===" if diff <(pdfinfo "ROTATED" | sort) > /dev/null; then echo "✓ 메타데이터 동일" else echo "⚠ 메타데이터 변경됨" diff <(pdfinfo "ROTATED" | sort) fi

메타데이터 검증 (Python)

from PyPDF2 import PdfReader

def check_metadata_preserved(original_pdf, rotated_pdf): """메타데이터 보존 확인""" orig_reader = PdfReader(original_pdf) rot_reader = PdfReader(rotated_pdf)

orig_meta = orig_reader.metadata or {}
rot_meta = rot_reader.metadata or {}

print("=== 원본 메타데이터 ===")
for key, value in orig_meta.items():
    print(f"  {key}: {value}")

print("
=== 회전 후 메타데이터 ===")
for key, value in rot_meta.items():
    print(f"  {key}: {value}")

# 비교
print("
=== 검증 ===")
if orig_meta == rot_meta:
    print("✓ 메타데이터 완벽 보존됨")
else:
    print("⚠ 메타데이터 변경됨")
    for key in orig_meta:
        if orig_meta.get(key) != rot_meta.get(key):
            print(f"  변경: {key}")

check_metadata_preserved('input.pdf', 'output.pdf')

자동화 검증 스크립트

완전 검증 Bash 스크립트

#!/bin/bash
ORIGINAL="$1"
ROTATED="$2"

echo "========== PDF 회전 검증 보고서 ==========" echo "원본 파일: $ORIGINAL" echo "회전 파일: $ROTATED" echo ""

1. 기본 정보

echo "--- 1. 기본 정보 ---" pdfinfo "$ROTATED" | head -15

2. 회전 여부 확인

echo "" echo "--- 2. 회전 확인 ---" ORIG_SIZE=ORIGINAL" | grep "Page size" | head -1) ROT_SIZE=ROTATED" | grep "Page size" | head -1) echo "원본: $ORIG_SIZE" echo "회전: $ROT_SIZE"

if [ "ROT_SIZE" ]; then echo "✓ 회전 적용됨" else echo "⚠ 회전 미적용" fi

3. 무결성 검사

echo "" echo "--- 3. 파일 무결성 ---" qpdf --check "$ROTATED"

4. 메타데이터

echo "" echo "--- 4. 메타데이터 ---" exiftool "$ROTATED" | head -10

5. 텍스트 콘텐츠

echo "" echo "--- 5. 콘텐츠 확인 ---" pdftotext "$ROTATED" /tmp/check.txt LINE_COUNT=$(wc -l < /tmp/check.txt) echo "콘텐츠 라인 수: $LINE_COUNT"

echo "" echo "========== 검증 완료 =========="

Python 완전 검증 스크립트

from PyPDF2 import PdfReader
import subprocess
import os

def full_validation_report(original_pdf, rotated_pdf): print("="*50) print("PDF 회전 완전 검증 보고서") print("="*50)

# 1. 페이지 수
orig_reader = PdfReader(original_pdf)
rot_reader = PdfReader(rotated_pdf)

orig_pages = len(orig_reader.pages)
rot_pages = len(rot_reader.pages)

print(f"
✓ 페이지 수:")
print(f"  원본: {orig_pages}페이지")
print(f"  회전: {rot_pages}페이지")

if orig_pages == rot_pages:
    print(f"  ✓ 페이지 수 동일")
else:
    print(f"  ✗ 오류: 페이지 수 변경됨")

# 2. 파일 무결성
print(f"
✓ 파일 무결성:")
result = subprocess.run(['qpdf', '--check', rotated_pdf],
                      capture_output=True, text=True)
if "not valid" in result.stdout:
    print(f"  ✗ 파일 손상됨")
else:
    print(f"  ✓ 파일 정상")

# 3. 메타데이터
print(f"
✓ 메타데이터:")
orig_metadata = orig_reader.metadata or {}
rot_metadata = rot_reader.metadata or {}

if orig_metadata == rot_metadata:
    print(f"  ✓ 메타데이터 보존됨")
else:
    print(f"  ⚠ 메타데이터 변경됨")

# 4. 파일 크기
orig_size = os.path.getsize(original_pdf) / (1024*1024)
rot_size = os.path.getsize(rotated_pdf) / (1024*1024)
change = ((rot_size - orig_size) / orig_size) * 100

print(f"
✓ 파일 크기:")
print(f"  원본: {orig_size:.2f} MB")
print(f"  회전: {rot_size:.2f} MB")
print(f"  변화: {change:+.1f}%")

# 5. 콘텐츠 샘플
print(f"
✓ 콘텐츠 검증:")
try:
    first_text = rot_reader.pages[0].extract_text()[:100]
    last_text = rot_reader.pages[-1].extract_text()[:100]
    print(f"  첫 페이지: {first_text.replace(chr(10), ' ')[:50]}...")
    print(f"  마지막 페이지: {last_text.replace(chr(10), ' ')[:50]}...")
    print(f"  ✓ 콘텐츠 정상")
except Exception as e:
    print(f"  ⚠ 콘텐츠 추출 오류: {e}")

print("
" + "="*50)
print("검증 완료")
print("="*50)

사용

full_validation_report('input.pdf', 'output.pdf')

회전 검증 체크리스트

항목확인 사항정상 상태
페이지 수원본과 동일✓ 일치
파일 무결성qpdf --check 결과✓ 오류 없음
회전 여부페이지 크기 변경✓ 90도/270도 회전 시 변경
콘텐츠첫/마지막 페이지 표시✓ 올바른 방향
메타데이터제목, 작성자 등✓ 보존 또는 의도적 제거
텍스트 추출pdftotext 결과✓ 정상 텍스트 추출

회전 검증 실패 시 대응

문제 1: 페이지 수 변경

# 원본 재처리
pdftk original.pdf cat 1-endeast output rotated.pdf
echo "✓ 재처리 완료"

문제 2: 파일 손상

# qpdf로 복구
qpdf --recompile-pdf rotated.pdf rotated_fixed.pdf
echo "✓ 파일 복구 완료"

문제 3: 메타데이터 손실

# ExifTool로 복구
exiftool -overwrite_original   -Title="제목"   -Author="작성자"   rotated.pdf
echo "✓ 메타데이터 복구 완료"

FAQ

  • Q: 검증 얼마나 자주? A: 회전 직후 한 번, 배포 전 한 번 권장
  • Q: 모든 검증 단계가 필요한가? A: Step 1~3은 필수, 4~6은 용도에 따라
  • Q: 시간이 얼마나 걸리나? A: 전체 100 MB 파일 기준 10~15초
  • Q: 검증 실패하면? A: 파일 복구 후 재회전 또는 원본에서 재시작

관련 도구

🖊️ 작성자: PDF 품질 관리 전문가, 13년 경력

📅 발행일: 2026-03-21

댓글

이 블로그의 인기 게시물

2025년 KTX 강릉역 맛집 BEST 5: 도보 10분 이내 현지인 추천 식당 완벽 정리

ktx 강원선 노선 총정리! 서울~강원도 연결 시간표·요금·정차역 안내

미리캔버스 노래 넣는법과 배경음악 적용 팁