# Python으로 Money Forward 스타일 재무 PDF 리포트 만들기 - Part 1 ## 프로젝트 소개 및 목표 설정 ### 들어가며 회사의 재무 데이터를 보기 좋은 PDF 리포트로 자동 생성하고 싶다는 생각을 해본 적 있으신가요? 이번 시리즈에서는 Google Sheets에 저장된 예실(予実) 데이터를 읽어와서 Money Forward 스타일의 전문적인 PDF 리포트를 Python으로 생성하는 방법을 알아봅니다. ### 완성 목표 이 시리즈를 통해 만들 PDF 리포트는 다음과 같은 구성입니다: | 페이지 | 내용 | 설명 | |--------|------|------| | 1 | 業績見通し | KPI 카드 + 월별 추이 차트 | | 2 | サマリ | 요약 코멘트 영역 | | 3-4 | 損益計算書 | 월별 P/L 테이블 | | 5-7 | 業績分析表 | 예산 vs 실적 비교 | | 8-9 | キャッシュフロー計算書 | CF 테이블 + 차트 | | 10-11 | 変動損益計算書 | 손익분기점 분석 | | 12-15 | 財務サマリ | 연도별 비교 | | 16-17 | 財務ハイライト | 레이더 차트 + 지표 테이블 | ### 기술 스택 ``` Python 3.12+ ├── uv (패키지 매니저) ├── google-api-python-client (Sheets API) ├── reportlab (PDF 생성) ├── matplotlib (차트 생성) └── pandas (데이터 처리) ``` ### 프로젝트 구조 ``` 20251207-make-pdf-report/ ├── make-pdf-report-v1.md ~ v10.md # 블로그 시리즈 ├── sample-report.pdf # 참고 PDF ├── src/ │ ├── main.py # 메인 실행 파일 │ ├── config.py # 설정 │ ├── sheets_client.py # Google Sheets API │ ├── data_models.py # 데이터 모델 │ ├── charts/ # 차트 생성 │ │ ├── __init__.py │ │ ├── bar_chart.py │ │ ├── line_chart.py │ │ └── radar_chart.py │ └── pdf/ # PDF 생성 │ ├── __init__.py │ ├── generator.py │ ├── styles.py │ └── pages/ │ ├── dashboard.py │ ├── pl_table.py │ ├── cashflow.py │ └── ... ├── output/ # 생성된 PDF ├── pyproject.toml └── .env ``` ### 데이터 소스 데이터는 기존에 만들어둔 GemEgg 예실관리 스프레드시트에서 가져옵니다: - **스프레드시트 ID**: `17AUAHQQB0nZVje9QXtdISEPtMoa8RXKkuCk4R5iHbd4` - **시트 구성**: - 予算入力 (예산 입력) - 実績入力 (실적 입력) - 予実出力 (예실 비교) ### 왜 Python + ReportLab인가? PDF 생성에는 여러 선택지가 있습니다: | 방법 | 장점 | 단점 | |------|------|------| | **ReportLab** | 픽셀 단위 제어, 차트 통합 용이 | 학습 곡선 | | WeasyPrint | HTML/CSS로 작성 | 복잡한 레이아웃 어려움 | | pdfkit | HTML → PDF | wkhtmltopdf 의존성 | | FPDF | 심플함 | 일본어 지원 제한 | Money Forward 스타일의 복잡한 레이아웃(KPI 카드, 다중 차트, 복잡한 테이블)을 구현하려면 **ReportLab**이 가장 적합합니다. ### 시리즈 로드맵 | Part | 내용 | 핵심 기술 | |------|------|----------| | **v1** | 프로젝트 소개 (현재) | 구조 설계 | | **v2** | 환경 설정 | uv, venv, 의존성 | | **v3** | Sheets API 연동 | google-api-python-client | | **v4** | 데이터 모델 설계 | dataclass, pandas | | **v5** | PDF 기본 레이아웃 | ReportLab 기초 | | **v6** | KPI 대시보드 | 카드 레이아웃 | | **v7** | 테이블 구현 | Table, TableStyle | | **v8** | 막대/라인 차트 | matplotlib | | **v9** | 복합 차트 | 레이더, 손익분기점 | | **v10** | 완성 및 자동화 | CLI, 스케줄링 | ### 다음 단계 다음 Part 2에서는 `uv`를 사용하여 Python 환경을 설정하고, 필요한 라이브러리들을 설치합니다. --- **시리즈 네비게이션** - [x] Part 1: 프로젝트 소개 (현재) - [ ] Part 2: 환경 설정 - [ ] Part 3: Sheets API 연동 - [ ] Part 4: 데이터 모델 - [ ] Part 5: PDF 기본 레이아웃 - [ ] Part 6: KPI 대시보드 - [ ] Part 7: 테이블 구현 - [ ] Part 8: 차트 생성 - [ ] Part 9: 복합 차트 - [ ] Part 10: 완성