A5 코인 체크리스트 PDF 생성기은(는) 무엇을 하나요?
사용 시기
- 사용자가 인쇄 가능한 코인 수집 체크리스트를 원할 때
- 사용자가 코인 관련 A5, 필로팩스, 바인더 또는 플래너 페이지를 언급할 때
- 사용자가 Numista 내보내기 파일을 시리즈 마스터 목록과 교차 참조하려 할 때
- 사용자가 이전에 생성한 코인 체크리스트 PDF를 반복 수정할 때
페이지 설정
from reportlab.lib.pagesizes import A5
PAGE_W, PAGE_H = A5 # 148mm x 210mm (419.53 x 595.28 pt)
LEFT_M = 18*mm # 더 넓게 — 6홀 필로팩스 펀치를 피함
RIGHT_M = 6*mm
TOP_M = 9*mm
BOT_M = 8*mm
USABLE_W = PAGE_W - LEFT_M - RIGHT_M # ~124mm
6홀 펀치 가이드
모든 페이지에 그립니다. 필로팩스 A5 표준 구멍 위치(위쪽 가장자리 기준):
HOLE_POSITIONS_MM = [19, 51, 70, 140, 159, 191]
for h in HOLE_POSITIONS_MM:
y = PAGE_H - h*mm
c.setStrokeColor(HexColor("#CCCCCC"))
c.setLineWidth(0.25)
c.circle(4.5*mm, y, 2.2*mm, stroke=1, fill=0)
글꼴
Carlito를 사용합니다(Calibri와 호환되는 글꼴 지표, SIL 오픈 폰트 라이선스로 무료). Linux에서는 보통 다음 경로에 있습니다:
/usr/share/fonts/truetype/crosextra/Carlito-Regular.ttf
/usr/share/fonts/truetype/crosextra/Carlito-Bold.ttf
/usr/share/fonts/truetype/crosextra/Carlito-Italic.ttf
Windows나 macOS에서는 Google Fonts에서 Carlito를 다운로드하여 해당 파일을 가리키세요.
세 가지 변형을 모두 등록하세요. Helvetica로 폴백하지 마십시오. 아래 레이아웃은 Calibri 스타일 글꼴 지표에 맞춰 조정되었습니다.
타이포그래피 규칙 (강제 제약)
| 요소 | 글꼴 | 크기 | 비고 |
|---|---|---|---|
| 표지 제목 | Carlito-Bold | 20pt | 검은색 배너에 가운데 정렬 |
| 표지 부제목 | Carlito-Bold | 16pt | 제목 아래 |
| 섹션 헤더 | Carlito-Bold | 8.5-9pt | 검은색 막대 위에 흰색 |
| 열 헤더 | Carlito-Bold | 7.5pt | 회색, 구분선 위 |
| 본문 텍스트 — 모든 열 | Carlito / Carlito-Bold | 11pt | 이름, 기간, 현재 열에 동일하게 적용 |
| 수집 세부 정보 행 | Carlito-Italic | 8.5pt | 회색, 수집된 행 아래 |
| 바닥글 | Carlito | 6pt | 페이지 번호 + 체크리스트 이름 |
| 액면가 열 | Carlito | 9pt | 오른쪽 정렬, 약어(5Y, 10Y, 1J) |
중요: 이름, 기간, 현재 열은 모두 같은 글꼴 크기(11pt)를 유지하세요. 크기가 섞이면 인쇄된 페이지에서 프로페셔널하지 않게 보입니다.
행 레이아웃
ROW_H = 16-18 # pt — 줄 사이 충분한 간격
SEC_H = 17 # 섹션 헤더 막대 높이
COL_H = 13 # 열 헤더 높이
COLLECTED_EXTRA = 11 # 수집된 행의 세부 정보 줄을 위한 추가 높이
- 각 행 아래에 미세한 구분선(0.2pt, #DDDDDD)을 그립니다.
- 행 배경을 번갈아 표시: 짝수 행마다 #EBEBEB 채움
- 수집된 행: 굵은 글꼴 + 체크박스에 체크 표시
열 위치 (LEFT_M 기준)
COL_CK = 0 # 체크박스
COL_YR = 11 # 연도
COL_NM = 36 # 코인 이름 (기본 열)
# 오른쪽 열 — 기간 텍스트와 겹치지 않도록 오른쪽으로 밀기
COL_ERA = 84*mm # 시대 표시(B/P/N) 또는 액면가
COL_NOW = 89*mm # 현재 상태 / 보조 정보
핵심 교훈: "300 BCE-1279"와 같은 기간/날짜 문자열은 11pt에서 약 28mm 너비입니다. 시대 표시와 NOW 열은 겹침을 피하기 위해 반드시 84mm 이후에 시작해야 합니다. 이는 여러 번 수정을 거쳐 해결된 문제입니다.
그레이스케일 디자인 (필수)
그레이스케일 레이저 프린터용으로 설계되었습니다. 의미 전달에 색상에 절대 의존하지 마십시오.
| 시각적 요소 | 그레이스케일 방식 |
|---|---|
| 수집된 행 강조 | 대각선 빗금 패턴(색상 채움 아님) |
| 섹션 헤더 | 검은색 막대 위에 흰색 텍스트 |
| 번갈아 표시되는 행 | #EBEBEB vs 흰색 |
| 시대 표시 | 텍스트 문자(B/P/N), 색상 점 아님 |
| 수집된 조폐국 표시 | 굵은 글꼴 vs 보통 글꼴(색상 아님) |
| 체크박스 | 유니코드가 아닌 선으로 그린 체크 표시 |
빗금 구현:
def hatch(c, x, y, w, h):
c.saveState()
p = c.beginPath(); p.rect(x, y, w, h)
c.clipPath(p, stroke=0)
c.setStrokeColor(HexColor("#CCCCCC"))
c.setLineWidth(0.35)
for i in range(-int(h), int(w+h), 5):
c.line(x+i, y, x+i+h, y+h)
c.restoreState()
체크 표시 (X도 유니코드도 아님):
c.setStrokeColor(BLK); c.setLineWidth(1.2)
cx = LEFT_M + COL_CK + 1; cy = ty - 1
c.line(cx+2, cy+4, cx+4, cy+1.5)
c.line(cx+4, cy+1.5, cx+8, cy+7.5)
페이지 흐름 (연속)
각 섹션에 별도 페이지를 할당하지 마십시오. 섹션은 연속적으로 흐릅니다. 작은 섹션(3-5개 항목)은 이전 섹션의 꼬리 부분과 같은 페이지에 배치해야 합니다.
# 고아 방지: 섹션 헤더는 헤더 + 열 헤더 + 최소 1행이 필요함
if item_type == 'section_header':
needed = h + COL_H + 2 + ROW_H + 4
if y - needed < BOT_M:
y = new_page(c)
표지 페이지 구조
- 제목(20pt)과 부제목(16pt)이 있는 검은색 배너
- 배너 아래 부제목 줄 (12pt, 회색)
- 가로선
- 통계 상자(#EBEBEB 채움): "총계: X 보유: Y 필요: Z" (14pt 굵게)
- 커버리지 백분율 (11pt, 회색)
- 수집가 이름 (14pt 굵게) + Numista 핸들 (11pt)
- 범례 섹션 (해당하는 경우)
- 개수가 오른쪽 정렬된 시리즈 요약
포함하지 말아야 할 것
- 별도의 빈 메모 페이지 (종이 낭비)
- 색상에 의존하는 요소
- 유니코드 체크 표시 또는 특수 문자 (글꼴 적용 범위 문제)
- 모든 요소에 대해 7pt 미만의 글꼴 크기
- 문서 내 어디든 1페이지 이상의 여백
출력
사용자가 열 수 있는 위치에 PDF를 저장합니다(claude.ai: /mnt/user-data/outputs/ 폴더에 저장하고 present_files 호출; Claude Code: 작업 폴더). 전달하기 전에 pdf2image로 페이지를 렌더링하여 시각적 품질을 확인하세요.