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 + 정렬, 간격, 가독성에 대한 시각적 검사 |
의존성
이 스킬은 누락된 의존성을 자동으로 감지하고 설치를 시도합니다. 설치가 차단된 경우(권한, 네트워크), 에이전트가 누락된 항목과 수동 설치 방법을 정확히 알려줍니다.
uv pip install reportlab
uv pip install pdfplumber
uv pip install pypdf
brew install poppler
이 스킬은 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.pdf나 invoice-0042.pdf처럼 명확한 이름을 사용하세요.
품질 규칙
이 스킬은 엄격한 시각적 및 타이포그래피 표준을 적용합니다. 생성되는 모든 PDF는 다음 검사를 통과해야 합니다:
| 규칙 | 상세 |
|---|---|
| 타이포그래피 | 문서 전체에 걸쳐 일관된 글꼴, 크기, 굵기. 의도적인 경우가 아니라면 서체를 혼용하지 않음. |
| 간격 및 여백 | 균일한 여백, 줄 간격, 섹션 간격. 내용이 빽빽하거나 넘치지 않도록 함. |
| 섹션 계층 구조 | 제목, 소제목, 본문 텍스트 간의 명확한 시각적 구분. |
| 렌더링 결함 없음 | 잘린 텍스트, 겹치는 요소, 깨진 표, 검은 사각형, 읽을 수 없는 글리프가 없어야 함. |
| 차트 및 표 | 선명한 렌더링, 올바른 정렬, 명확하게 레이블된 축과 헤더. |
| 이미지 | 흐림 없음, 올바른 종횡비, 레이아웃 내 적절한 위치. |
| ASCII 하이픈만 사용 | 표준 ASCII 하이픈(-)을 사용. 유니코드 대시(예: U+2011 비분리 하이픈)는 일부 PDF 뷰어에서 렌더링 문제를 일으킴. |
| 인용 및 참조 | 사람이 읽을 수 있는 텍스트만 사용. 도구 토큰, 플레이스홀더 마커, 원시 ID를 포함하지 않음. |
최종 전달 체크리스트
PDF 작업을 완료로 표시하기 전에 에이전트는 다음 체크리스트를 수행합니다:
- 최신 PNG 렌더에서 시각적 결함이 없는지 확인.
- 머리글과 바닥글이 모든 페이지에 올바르게 표시되는지 확인.
- 페이지 번호가 순차적이고 올바른 위치에 있는지 확인.
- 섹션 전환을 점검 — 고립된 제목이나 분리된 단락이 없는지 확인.
- 사용자 승인 후
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 변환 | soffice | LibreOffice 헤드리스 모드의 Word-PDF 변환 |
| 시각적 QA | 에이전트 비전 | 에이전트가 렌더링된 PNG를 읽어 품질을 검증 |
"~해줘" 사용 예시
자연어로 PDF 작업을 호출하는 실제 사용 예시입니다. 한국어와 영어 모두 사용 가능합니다.
output/pdf/에 저장됩니다.soffice --headless --convert-to pdf)를 사용하여 DOCX 파일을 PDF로 변환합니다. 이후 에이전트가 출력을 PNG로 렌더링하여 변환 중 발생한 서식 문제가 없는지 확인합니다.pdf-vision과의 비교
CLI-JAW에는 두 가지 PDF 관련 스킬이 포함되어 있습니다. 이들은 중복이 아닌 상호 보완적입니다:
pdf | pdf-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 하이픈(-)을 강제합니다. 에이전트는 생성 중 이러한 문자를 자동으로 대체합니다.
레이아웃 충실도 경고
pdfplumber와 pypdf는 시각적 레이아웃이 아닌 문자 위치를 기반으로 텍스트를 추출합니다. 복잡한 다단 레이아웃, 겹치는 텍스트 상자, 회전된 텍스트는 정확하게 추출되지 않을 수 있습니다. 이런 경우 텍스트 스트림 파싱 대신 시각적 분석을 사용하는 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