Python ReportLab로 PDF를 만들 때 한글이 ■(네모)로 깨지는 경우가 있습니다. 원인은 대부분 기본 폰트(Helvetica 등)가 한글 유니코드를 지원하지 않기 때문입니다. 이 글에서는 NanumGothic.ttf를 임베딩해 깨짐 없이 PDF를 출력하는 전체 과정을 예제와 함께 정리합니다.
- 원인: ReportLab 기본 폰트(Helvetica 등)는 한글 유니코드 미지원 → ‘■’ 표시
- 해결: 한글 TTF 폰트(NanumGothic.ttf)를 PDF에 임베딩하고 사용
- 핵심:
TTFont등록 →canvas.setFont("NanumGothic", 12) - 주의: 실행 환경(서버/Colab)에는 폰트가 기본 설치되어 있지 않을 수 있어 업로드가 필요
- 대안: 단순 보관/출력 목적이면 “브라우저 인쇄 → PDF 저장”이 더 안정적일 수 있음

상황: ChatGPT 대화 내용을 PDF로 저장했더니 한글이 깨짐
ChatGPT 사용 중 대화 내용을 인쇄/저장용으로 활용하기 위해 전체 대화 내용을 원문 그대로 담은 PDF 파일 생성을 요청했습니다.

하지만 실제로 해당 파일을 열어보면 다음과 같이 한글이 ■(네모)로 깨져 나오는 것을 볼 수 있습니다.

원인: ReportLab 기본 폰트(Helvetica 등)는 한글 유니코드를 지원하지 않음
이 현상은 PDF 생성 과정에서 한글을 포함한 유니코드 글리프를 가진 폰트가 적용되지 않았을 때 발생합니다. ReportLab은 폰트를 명시하지 않으면 기본 내장 폰트(예: Helvetica)를 사용하게 되는데, 이 폰트들은 서양 문자 중심(Type1)이라 한글/확장 유니코드를 포함하지 않아 한글이 □/■로 깨져 보일 수 있습니다. 따라서 한글을 포함한 TTF 폰트(예: NanumGothic.ttf)를 등록(TTFont)하고 setFont로 명시해야 합니다.
참고로 ReportLab 공식 문서에서도 기본 내장 폰트를 사용하게 되는 점을 확인할 수 있습니다. (기본 내장 폰트: Helvetica, Courier, Times-Roman, Symbol, ZapfDingbats) ReportLab 공식 문서

해결: 한글 TTF 폰트(NanumGothic) 임베딩 + setFont로 명시
해결 방법은 간단합니다. 한글을 지원하는 TTF 폰트를 준비한 뒤, ReportLab에 TTFont로 등록하고 canvas.setFont()로 명시하면 됩니다. 여기서는 NanumGothic.ttf를 예시로 사용합니다.
1) NanumGothic.ttf 다운로드
실행 환경에 NanumGothic 폰트가 기본 설치되어 있지 않다면, 아래에서 NanumGothic.ttf를 다운로드 받아 준비합니다.
https://hangeul.naver.com/font
네이버 글꼴 모음
네이버가 만든 150여종의 글꼴을 한번에 만나보세요
hangeul.naver.com

2) ReportLab에 폰트 등록(TTFont) 후 setFont 적용
아래 코드는 ReportLab에 NanumGothic을 등록하고, PDF 출력 폰트를 NanumGothic으로 지정하는 가장 기본 예제입니다. (폰트 파일 경로는 실행 환경에 맞게 조정하세요)
from reportlab.pdfbase import pdfmetrics
from reportlab.pdfbase.ttfonts import TTFont
from reportlab.pdfgen import canvas
# 1) TTF 폰트 등록(경로는 환경에 맞게)
pdfmetrics.registerFont(TTFont("NanumGothic", "NanumGothic.ttf"))
c = canvas.Canvas("output.pdf")
# 2) 등록한 폰트로 명시
c.setFont("NanumGothic", 12)
c.drawString(50, 800, "한글이 이제 ■로 깨지지 않습니다.")
c.save()
폰트를 등록하고 setFont로 지정하면, 이후 출력되는 한글이 깨지지 않고 정상적으로 표시됩니다.

참고: 브라우저 인쇄(PDF 저장)가 더 쉬운 경우
대화창 수준까지 완벽한 렌더링이 필요하지 않고 “저장/인쇄” 목적이라면, 경우에 따라서는 브라우저 인쇄 기능으로 PDF 저장이 더 안정적일 수 있습니다.

자주 묻는 질문(FAQ)
Q1. 왜 한글이 ‘■’로 나오나요?
A. ReportLab 기본 폰트가 한글 글리프를 포함하지 않아 유니코드 문자를 표시하지 못할 때 ‘■’로 표시됩니다.
Q2. NanumGothic.ttf만 업로드하면 끝인가요?
A. 업로드만으로는 부족합니다. TTFont 등록 후 setFont로 명시해야 실제 출력 폰트가 바뀝니다.
Q3. ChatGPT 대화 PDF에서만 한글이 깨져요.
A. PDF 생성 방식에 따라 기본 폰트가 적용될 수 있습니다. ReportLab로 생성한다면 폰트 임베딩이 필요하고, 단순 보관이면 “브라우저 인쇄 → PDF 저장”이 더 안정적일 수 있습니다.
Q4. 나눔고딕 말고 다른 폰트도 되나요?
A. 됩니다. 한글을 포함한 TTF(예: Noto Sans CJK 계열 등)라면 같은 방식으로 등록/적용할 수 있습니다.
'Season 1 아카이브' 카테고리의 다른 글
| apt update와 apt upgrade 차이(우분투): sudo apt update 뜻 + 추천 순서 (0) | 2026.06.11 |
|---|---|
| 2025 AICPA 합격률 스냅샷: REG·TCP 강세, BAR 주의! 채점 구조로 전략 세우기 (0) | 2025.08.30 |
| GPU 없어도 OK! 코랩으로 MP3 텍스트 추출 설정부터 출력까지 (2) | 2025.08.28 |
| 2024년 USCPA 시험 성적 분석 보고서 공개 – NASBA, 전 세계 시험 데이터 발표 (0) | 2025.08.23 |
| 2026년 CPA 시험 성적 발표 일정 총정리 (Core & Discipline 섹션) (0) | 2025.08.19 |