PDF

PDF 읽기, 생성, 편집, 검토 + 비전 기반 추출. 이 스킬은 PDF 문서의 전체 수명 주기를 처리합니다 — reportlab으로 새 파일을 생성하는 것부터 pdfplumber로 텍스트를 추출하고, Poppler로 페이지를 이미지로 렌더링하며, 매 편집 후 시각적 품질 검증을 수행하는 것까지 포함합니다.

Reference AI & Media

레퍼런스 스킬: pdf는 기본적으로 활성화되어 있지 않습니다. jaw skill install pdf로 설치하거나 채팅에서 "PDF 스킬 설치해줘"라고 말하세요. 활성화되면 시스템 프롬프트에 주입되어 PDF 작업이 감지될 때마다 에이전트가 자동으로 워크플로우를 따릅니다.

빠른 참조

스킬 이름pdf
카테고리AI & Media
기본 활성화아니오 — jaw skill install pdf 필요
SKILL.md 경로~/.cli-jaw/skills/pdf/SKILL.md (활성) 또는 ~/.cli-jaw/skills_ref/pdf/SKILL.md (레퍼런스)
Python 패키지reportlab, pdfplumber, pypdf
시스템 도구pdftoppm (Poppler 포함)
임시 디렉토리tmp/pdfs/
출력 디렉토리output/pdf/
관련 스킬pdf-vision, docx, pptx, xlsx

워크플로우

pdf 스킬이 활성화되면, 에이전트는 모든 PDF 작업에 대해 엄격한 4단계 워크플로우를 따릅니다:

단계동작사용 도구
1. 렌더링시각적 검토를 위해 PDF 페이지를 PNG 이미지로 렌더링pdftoppm (Poppler). Poppler를 사용할 수 없는 경우 사용자에게 요청으로 대체.
2. 생성새 PDF를 생성하거나 기존 PDF를 편집reportlab으로 생성; pypdf로 병합/분할; nano-pdf로 자연어 페이지 편집
3. 추출PDF 파일에서 텍스트와 데이터를 추출pdfplumber 또는 pypdf로 텍스트 추출 (참고: 레이아웃 충실도는 불안정할 수 있음)
4. 검증의미 있는 업데이트 후 재렌더링하여 품질을 시각적으로 확인pdftoppm + 정렬, 간격, 가독성에 대한 시각적 검사
편집 후 검증 루프: 이 스킬은 의미 있는 변경이 있을 때마다 재렌더링을 의무화합니다. 에이전트는 최신 PNG 렌더에서 시각적 결함이 없음을 확인하기 전까지 PDF를 전달하지 않습니다. 이것이 이 스킬에서 가장 중요한 규칙입니다.

의존성

이 스킬은 누락된 의존성을 자동으로 감지하고 설치를 시도합니다. 설치가 차단된 경우(권한, 네트워크), 에이전트가 누락된 항목과 수동 설치 방법을 정확히 알려줍니다.

reportlab uv pip install reportlab
PDF 생성: 레이아웃, 텍스트, 표, 이미지 및 벡터 그래픽
pdfplumber uv pip install pdfplumber
위치 데이터를 포함한 텍스트 추출, 표 감지 및 페이지 기하학
pypdf uv pip install pypdf
PDF 조작: 병합, 분할, 회전, 암호화 및 메타데이터 편집
Poppler (pdftoppm) brew install poppler
시각적 검증을 위해 PDF 페이지를 고품질 PNG 이미지로 렌더링

이 스킬은 Python 의존성 관리에 uv를 우선 사용합니다. uv를 사용할 수 없는 경우 python3 -m pip install로 대체합니다.

전체 설치 명령어

# Python packages (preferred: uv)
uv pip install reportlab pdfplumber pypdf

# Python packages (fallback: pip)
python3 -m pip install reportlab pdfplumber pypdf

# System tools: macOS (Homebrew)
brew install poppler

# System tools: Ubuntu/Debian
sudo apt-get install -y poppler-utils

렌더링 명령어

핵심 렌더링 명령어는 PDF 페이지를 PNG 이미지로 변환합니다:

pdftoppm -png $INPUT_PDF $OUTPUT_PREFIX

$OUTPUT_PREFIX-1.png, $OUTPUT_PREFIX-2.png 등의 파일이 생성됩니다 — 페이지당 하나의 PNG입니다. 에이전트는 최종 PDF를 전달하기 전에 이 이미지들을 읽어 레이아웃 품질을 검증합니다.

파일 규칙

디렉토리용도수명 주기
tmp/pdfs/중간 렌더, 초안 PDF, PNG 미리보기작업 완료 후 삭제
output/pdf/최종 산출물 PDF 파일유지됨; 안정적인 설명형 파일명
파일명 안정성: 이 스킬은 편집 전후로 파일명을 안정적이고 설명적으로 유지합니다. 최종 출력 이름에 임의 접미사나 타임스탬프를 사용하지 마세요. quarterly-report-2026-Q1.pdfinvoice-0042.pdf처럼 명확한 이름을 사용하세요.

품질 규칙

이 스킬은 엄격한 시각적 및 타이포그래피 표준을 적용합니다. 생성되는 모든 PDF는 다음 검사를 통과해야 합니다:

규칙상세
타이포그래피문서 전체에 걸쳐 일관된 글꼴, 크기, 굵기. 의도적인 경우가 아니라면 서체를 혼용하지 않음.
간격 및 여백균일한 여백, 줄 간격, 섹션 간격. 내용이 빽빽하거나 넘치지 않도록 함.
섹션 계층 구조제목, 소제목, 본문 텍스트 간의 명확한 시각적 구분.
렌더링 결함 없음잘린 텍스트, 겹치는 요소, 깨진 표, 검은 사각형, 읽을 수 없는 글리프가 없어야 함.
차트 및 표선명한 렌더링, 올바른 정렬, 명확하게 레이블된 축과 헤더.
이미지흐림 없음, 올바른 종횡비, 레이아웃 내 적절한 위치.
ASCII 하이픈만 사용표준 ASCII 하이픈(-)을 사용. 유니코드 대시(예: U+2011 비분리 하이픈)는 일부 PDF 뷰어에서 렌더링 문제를 일으킴.
인용 및 참조사람이 읽을 수 있는 텍스트만 사용. 도구 토큰, 플레이스홀더 마커, 원시 ID를 포함하지 않음.

최종 전달 체크리스트

PDF 작업을 완료로 표시하기 전에 에이전트는 다음 체크리스트를 수행합니다:

  1. 최신 PNG 렌더에서 시각적 결함이 없는지 확인.
  2. 머리글과 바닥글이 모든 페이지에 올바르게 표시되는지 확인.
  3. 페이지 번호가 순차적이고 올바른 위치에 있는지 확인.
  4. 섹션 전환을 점검 — 고립된 제목이나 분리된 단락이 없는지 확인.
  5. 사용자 승인 후 tmp/pdfs/의 중간 파일을 정리.

DOCX-PDF 변환

이 스킬은 LibreOffice를 사용한 Word 문서의 PDF 변환도 지원합니다:

# Convert DOCX to PDF via soffice (LibreOffice headless)
soffice --headless --convert-to pdf input.docx --outdir output/pdf/

원본이 Word 문서이고 최종 산출물이 PDF여야 할 때 유용합니다. 에이전트는 변환된 출력에 대해서도 전체 렌더링 후 검증 루프를 실행합니다.

기능 요약

기능도구비고
새 PDF 생성reportlab레이아웃, 글꼴, 표, 이미지 및 벡터 그래픽에 대한 완전한 제어
읽기 / 텍스트 추출pdfplumber, pypdf텍스트 추출; 레이아웃 충실도는 근사치이며 픽셀 단위 정확도는 아님
기존 PDF 편집nano-pdf기존 PDF 콘텐츠에 대한 자연어 페이지 편집
병합 / 분할pypdf여러 PDF를 결합하거나 페이지 범위를 추출
이미지로 렌더링pdftoppm시각적 QA를 위한 고품질 PNG 렌더링
DOCX 변환sofficeLibreOffice 헤드리스 모드의 Word-PDF 변환
시각적 QA에이전트 비전에이전트가 렌더링된 PNG를 읽어 품질을 검증

"~해줘" 사용 예시

자연어로 PDF 작업을 호출하는 실제 사용 예시입니다. 한국어와 영어 모두 사용 가능합니다.

"이 보고서 PDF로 만들어줘 — 표지, 목차, 본문 3장"
reportlab을 사용하여 표지, 목차, 본문 3페이지로 구성된 새 PDF 문서를 생성합니다. 에이전트는 전달 전에 각 페이지를 PNG로 렌더링하여 레이아웃을 검증합니다.
"이 PDF에서 텍스트 추출해줘 — 표 데이터도 포함해서"
pdfplumber를 사용하여 주어진 PDF에서 모든 텍스트와 표 데이터를 추출합니다. 표 행이 보존된 구조화된 텍스트를 반환합니다. 해당 문서에서 레이아웃 충실도가 불안정한 경우 경고를 표시합니다.
"이 두 PDF 합쳐줘 — report-part1.pdf랑 report-part2.pdf"
pypdf를 사용하여 두 PDF 파일을 하나의 문서로 병합합니다. 페이지 번호와 북마크를 보존합니다. 출력은 output/pdf/에 저장됩니다.
"이 계약서 PDF 2페이지 날짜 수정해줘"
nano-pdf(자연어 편집)를 사용하여 기존 계약서 PDF의 2페이지를 편집합니다. 편집 후 에이전트가 페이지를 재렌더링하여 날짜 변경이 정확하고 다른 부분이 이동하지 않았는지 시각적으로 검증합니다.
"Word 파일 PDF로 변환해줘 — proposal.docx"
LibreOffice 헤드리스 모드(soffice --headless --convert-to pdf)를 사용하여 DOCX 파일을 PDF로 변환합니다. 이후 에이전트가 출력을 PNG로 렌더링하여 변환 중 발생한 서식 문제가 없는지 확인합니다.

pdf-vision과의 비교

CLI-JAW에는 두 가지 PDF 관련 스킬이 포함되어 있습니다. 이들은 중복이 아닌 상호 보완적입니다:

pdfpdf-vision
초점PDF 생성, 편집, 추출 및 병합기존 PDF의 비전 기반 분석
적합한 용도보고서 생성, 문서 편집, 텍스트 추출스캔 문서의 OCR, 레이아웃 이해, 이미지에서 표 추출
도구reportlab, pdfplumber, pypdf, pdftoppm비전 모델, OCR 파이프라인
둘 다 사용할 때스캔된 PDF에서 데이터를 추출(pdf-vision)한 후 해당 데이터로 깨끗한 새 PDF를 생성(pdf)해야 할 때.
팁: jaw skill install pdf pdf-vision으로 둘 다 설치하거나 "PDF 스킬이랑 pdf-vision 둘 다 설치해줘"라고 말하세요. 두 스킬이 모두 활성화되면 원활하게 함께 작동합니다.

문제 해결

Poppler를 찾을 수 없음

에이전트가 pdftoppm을 사용할 수 없다고 보고하면 Poppler를 설치하세요:

# macOS
brew install poppler

# Ubuntu/Debian
sudo apt-get install -y poppler-utils

# Verify
pdftoppm -v

유니코드 대시 렌더링 문제

하이픈과 대시에서 깨진 문자나 누락된 문자가 보이면, 원본 데이터에 유니코드 대시(U+2011, U+2013, U+2014)가 포함되어 있을 수 있습니다. 이 스킬은 뷰어 호환성 문제를 방지하기 위해 ASCII 하이픈(-)을 강제합니다. 에이전트는 생성 중 이러한 문자를 자동으로 대체합니다.

레이아웃 충실도 경고

pdfplumberpypdf는 시각적 레이아웃이 아닌 문자 위치를 기반으로 텍스트를 추출합니다. 복잡한 다단 레이아웃, 겹치는 텍스트 상자, 회전된 텍스트는 정확하게 추출되지 않을 수 있습니다. 이런 경우 텍스트 스트림 파싱 대신 시각적 분석을 사용하는 pdf-vision 사용을 고려하세요.

LibreOffice가 설치되어 있지 않음

DOCX-PDF 변환에는 LibreOffice가 필요합니다. soffice를 찾을 수 없는 경우:

# macOS
brew install --cask libreoffice

# Ubuntu/Debian
sudo apt-get install -y libreoffice

설치

# CLI
jaw skill install pdf

# In-chat (Korean)
"PDF 스킬 설치해줘"

# In-chat (English)
"Install the PDF skill"

# Verify installation
jaw skill info pdf
# Expected output of jaw skill info pdf:
#   Name:     pdf
#   Status:   active
#   Category: AI & Media
#   Path:     ~/.cli-jaw/skills/pdf/SKILL.md
#   Description: PDF creation, reading, editing, merging, and text extraction