OCRmyPDF로 스캔 PDF를 PDF/A로 변환하기: 사이드카 추출과 배치 처리 실전 가이드

  • OCRmyPDF는 스캔 PDF에 OCR 레이어를 입혀 복사와 검색이 가능한 PDF/A 파일로 변환하는 오픈소스 도구이다.
  • 사이드카 텍스트(.txt) 추출과 배치 처리 옵션을 함께 제공해 대량 문서 디지털화 파이프라인에 즉시 활용 가능하다.
  • Tesseract 엔진 기반으로 Colab 또는 로컬 환경에서 단계별로 재현 가능한 워크플로우로 구성되어 있다.

단일 파일 변환에 머무르지 않고 사이드카 추출과 배치 스크립트까지 확장하면 문서 아카이빙 자동화의 진입 비용을 크게 낮출 수 있다.

스캔본 PDF는 텍스트 레이어가 없어 검색도, 복사도, 색인 생성도 불가능하다. OCRmyPDF는 이런 문서에 보이지 않는 텍스트 레이어를 입혀 PDF/A 표준으로 재포장하는 도구로, 오픈소스 OCR 생태계의 대표 사례 중 하나로 분석된다. 본문은 설치부터 사이드카 텍스트 추출, 대량 문서 배치 처리까지 한 번에 정리한 실전 가이드를 제시한다.

OCRmyPDF 개요와 PDF/A 변환의 필요성

PDF/A는 장기 보존을 위한 아카이브 표준으로, 폰트 임베딩과 메타데이터 고정 방식을 규정한다. 일반 PDF와 달리 텍스트가 이미지 내부에 잠겨 있으면 PDF/A 규격을 충족할 수 없으므로 OCR 처리는 사실상 필수 단계가 된다. OCRmyPDF는 Tesseract OCR 엔진을 호출해 페이지마다 텍스트 레이어를 생성하고, 동시에 PDF/A 적합성 옵션을 적용해 출력한다. 이 조합은 법령 문서, 계약서, 연구 자료의 디지털 아카이빙에서 특히 유용하다.

PDF/A-2b vs PDF/A-2u 선택 기준

기본값은 PDF/A-2b이며, 유니코드 텍스트 추출을 더 엄격히 보장하려면 -output-type pdfa-2u 옵션 사용을 권장한다. 인덱싱과 색인 품질이 중요한 사내 지식베이스라면 2u가 적절하고, 단순 장기 보관 목적이면 2b로도 충분하다.

환경 준비: 설치와 의존성 구성

로컬 환경에서는 Tesseract와 Ghostscript를 먼저 설치한 뒤 pip로 OCRmyPDF를 추가한다. Colab 환경에서는 시스템 패키지 설치 단계가 추가로 필요하다.

  • Linux/Ubuntu: apt-get install tesseract-ocr ghostscript 후 pip install ocrmypdf
  • macOS(Homebrew): brew install tesseract ghostscript 후 동일하게 pip 설치
  • Google Colab: !apt-get install -y tesseract-ocr ghostscript 선행 후 pip 설치

언어 팩 추가 설치 방법

한국어 문서가 다수라면 tesseract-ocr-kor 패키지를 추가 설치한다. 다국어 혼재 문서는 -l kor+eng 형태로 언어 코드를 결합해 지정할 수 있다.

기본 변환: 스캔 PDF를 검색 가능한 PDF/A로

가장 단순한 호출은 입력 파일과 출력 파일 두 개를 지정하는 것이다.

ocrmypdf --output-type pdfa-2b -l kor+eng input.pdf output.pdf

실행이 완료되면 output.pdf는 텍스트 복사, 전체 검색, 접근성 도구 호환이 가능한 PDF/A 파일로 재저장된다.

tesseract 옵션 튜닝

저품질 스캔본에는 --deskew, --clean, --rotate-pages 옵션 체인이 효과적인 것으로 보인다. 처리 시간과 품질 사이의 균형은 사용자가 직접 결정해야 하는 영역이다.

사이드카 텍스트 추출 옵션 활용법

사이드카 텍스트는 PDF 본체와 분리된 평문 .txt 파일로, 색인 시스템이나 LLM 전처리 입력으로 재사용하기 쉽다.

ocrmypdf --sidecar output.txt input.pdf output.pdf

이 명령은 변환된 PDF와 별도로 output.txt를 함께 생성한다.

사이드카 파일 명명 규칙

대량 처리 시에는 입력 파일명을 기준으로 사이드카 경로를 자동 생성하는 것이 안전하다. 예컨대 input.pdf에 대해 input.txt를 만들어 두면 후속 파이프라인에서 1:1 매핑이 깨지지 않는다.

대량 문서 대상 배치 처리 스크립트

폴더 단위 일괄 처리는 find 또는 glob와 결합한 짧은 셸 스크립트로 충분하다.

for f in ./scans/*.pdf; do
  ocrmypdf --sidecar "./txt/$(basename "$f" .pdf).txt" \
           --output-type pdfa-2b -l kor+eng \
           "$f" "./out/$(basename "$f")"
done

Windows PowerShell 환경이라면 Get-ChildItem과 foreach 루프로 동일한 패턴을 구성할 수 있다.

병렬 처리와 디스크 I/O 고려사항

GNU parallel 또는 xargs -P 옵션으로 CPU 코어 수만큼 동시에 변환 작업을 분산할 수 있다. 다만 디스크 I/O 병목이 발생할 수 있으므로 SSD 환경 권장이 일반적이다. 클라우드 스토리지에서 직접 읽고 쓸 때는 로컬 스테이징 디렉터리를 두는 편이 안정적인 것으로 보인다.

품질 검증과 후처리 팁

변환 결과는 pdftotext output.pdf - 명령으로 빠르게 확인 가능하다. 특정 페이지가 비어 있다면 원본 스캔 해상도 또는 언어 팩 누락을 의심해볼 만하다. 또한 verify 명령 옵션을 활용해 PDF/A 적합성을 검증할 수 있다.

ocrmypdf --sidecar out.txt input.pdf output.pdf
pdfinfo output.pdf | grep PDFA

실무 적용 시나리오와 한계점

적합한 시나리오로는 사내 규정집 디지털화, 연구 논문 아카이빙, 공공데이터 PDF 색인화, LLM 학습용 코퍼스 전처리 등이 거론된다. 반면 손글씨, 저해상도 팩스 스캔, 표와 이미지가 혼합된 복잡 레이아웃에서는 인식률이 떨어질 수 있으며, 이 경우 상용 OCR 또는 레이아웃 분석 모델과의 병행이 제안되는 편이다.

핵심 정리

  • OCRmyPDF는 스캔 PDF를 검색 가능한 PDF/A로 변환하며 Tesseract 기반의 오픈소스 OCR 도구다.
  • 사이드카 텍스트 옵션은 색인·LLM 전처리에 재활용 가능한 .txt 파일을 함께 생성한다.
  • 폴더 단위 배치 스크립트와 병렬 처리 옵션을 결합하면 대량 문서 디지털화 파이프라인으로 확장된다.
  • 저품질 스캔, 손글씨, 복잡 레이아웃은 한계 영역이므로 사전 품질 점검과 보완 도구 병행이 권장된다.

참고 자료

#OCRmyPDF #PDFA #Tesseract #사이드카텍스트 #배치처리 #스캔문서디지털화 #오픈소스OCR #문서아카이빙 #PDFA변환 #Colab튜토리얼 #MarkTechPost #문서자동화

댓글 남기기