PDF 임대 안내문을 Genstar 양식 .xlsx 파일로 자동 변환하는 도구. CLI + PySide6 데스크톱 GUI.
git clone https://github.com/kkhwan1/Leasing_Flyers.git
cd Leasing_Flyers
pip install PySide6 openpyxl pymupdf pillow pytest pytest-qt
# (선택) Anthropic API 사용 시
pip install anthropicPython 3.10+ 권장. Windows / macOS / Linux / WSL 모두 동작.
Phase 1 (텍스트) + Phase 2 (이미지) 완료
- 텍스트 필드 20개 자동 추출 + 양식 셀에 주입
- 외관·위치도·평면도·기타 이미지 자동 추출 + 슬롯에 삽입
- 원본 양식의 서식·로고·아이콘·병합셀 자동 보존
- PySide6 GUI: 백그라운드 추출(QThread), 결과 표 편집, 이미지 미리보기·교체, 배치 저장
- 회귀 테스트 65/65 통과
- E2E (목동/청량리 정답 PDF): 100% / 94%
- 실제 PDF 27 페이지 일괄: 텍스트 74% · 변동 이미지 69% · 고정 이미지 100% 보존
python -m app.gui- "PDF 추가…" 버튼 → 파일 선택 (여러 개 가능)
- 백엔드 선택 (auto/codex/anthropic), "사진 자동 추출" 체크박스 (기본 ON)
- "추출 시작" — 진행률 표시, 취소 가능
- 결과 표에서 텍스트 필드 직접 편집
- 슬롯 패널에서 썸네일 확인, 잘못된 이미지는 "교체" 버튼으로 수동 교체
- "엑셀 저장" (단일) 또는 "모두 저장" 체크 후 클릭 (배치)
# Vision으로 PDF에서 자동 추출 (텍스트 + 이미지)
python convert.py 매물안내문.pdf
# 이미지 추출 끄기 (텍스트만)
python convert.py 매물안내문.pdf --no-images
# JSON에서 직접 (Vision 건너뜀, 가장 빠름)
python convert.py --from-json data.json -o output.xlsx
# 추출 결과만 확인
python convert.py 매물안내문.pdf --dry-run
# Vision 백엔드 강제 지정
python convert.py 매물안내문.pdf --backend codex
python convert.py 매물안내문.pdf --backend anthropic기본 출력 경로: outputs/(GM) {매물명}_{YYMMDD}.xlsx
| 백엔드 | 필요 조건 | 비고 |
|---|---|---|
| codex | codex CLI 설치 + 인증 |
로컬 실행, 별도 키 X |
| anthropic | ANTHROPIC_API_KEY 환경변수 |
Anthropic API 사용량 |
미지정 시 ANTHROPIC_API_KEY가 있으면 anthropic, 없으면 codex 자동 선택.
페이지당 약 45초 (codex 2회 호출 — 텍스트 + 이미지 bbox).
# 단위 + GUI (Vision 호출 없음, 5초)
pytest tests/test_renderer.py tests/test_vision_parsing.py tests/test_gui.py tests/test_gui_extraction.py
# E2E (Vision 호출, 분 단위)
pytest tests/test_e2e.py -m e2e -v
# 종합 검증 + 리포트 생성 (docs/verification-report.md)
PYTHONPATH=. python tests/verify_all.py임대안내문 자동화/
├── app/
│ ├── template_mapper.py # 셀 좌표 ↔ 필드명 + IMAGE_SLOTS (anchor·크기)
│ ├── excel_renderer.py # render(data, output, template, images=)
│ ├── vision_extractor.py # parse() / parse_with_images()
│ ├── image_extractor.py # PDF → PNG → Codex bbox → crop bytes
│ └── gui.py # MainWindow + ExtractionWorker + ImageSlotPanel
├── convert.py # CLI 엔트리
├── data/
│ ├── template.xlsx # 빈 양식 (변동 이미지 4개 제거, 고정 3개 보존)
│ └── test_pdfs/ # 27 페이지 PDF (테스트용)
├── tests/ # 단위/GUI/E2E + verify_all
├── outputs/ # 생성된 .xlsx
└── docs/
├── phase2-spec.md # Phase 2 설계 (구현 완료)
├── batch-report.md # 27 페이지 일괄 결과
└── verification-report.md
상세 가이드는 CLAUDE.md 참고.
- 다중 호실 PDF 자동 분기 (한 페이지 = N개 매물 → N개 xlsx)
- 같은 매물의 여러 페이지 자동 병합 (예: P9 매물 정보 + P10 평면도)
- PPT 직접 입력 (현재는 PDF 변환 후 입력)
- 이미지 letterbox vs cover 정책 선택 옵션
자세한 설계는 docs/phase2-spec.md 참고.