갈루아의 반서재

728x90

 

Python의 ReportLab을 사용할 때 한글이 '■'로 깨지는 문제를 해결하는 방법을 소개합니다. 나눔고딕(NanumGothic) 폰트를 적용하여 깨짐 없이 PDF를 출력하는 전체 과정을 예제와 함께 안내합니다.

 

 

ChatGPT 사용중 대화내용을 인쇄나 저장용으로 활용하기 위해 전체 대화 내용을 원문 그대로 담은 PDF 파일을 생성을 요청했다.

 

 

하지만 실제로 해당 파일을 열어보면 다음과 같이 깨져나오는 것을 볼 수 있다.

 

 

해당 현상은 PDF 내의 한글 또는 유니코드 글자 인코딩 오류로 인해 문자가 "■"로 깨져 보이는 문제로, 특히 ChatGPT의 대화 내용을 PDF로 출력할 때 사용된 폰트 또는 인코딩 설정이 한글/특수문자 지원을 충분히 하지 않아서 발생하는 경우가 많다. 이 경우 다음과 같이 해결한다.

 

🔸 PDF 생성 시 한글 지원 폰트를 사용한다.

현재는 기본 폰트 (Helvetica)를 사용하고 있을 확률이 높다. 왜냐하면 ReportLab 공식 문서에 따르면, 아무런 폰트 설정 없이 canvas.drawString(...) 또는 canvas.setFont(...)을 호출하면 기본적으로 다음 중 하나를 사용하기 때문이다. 

기본 내장 폰트: Helvetica, Courier, Times-Roman, Symbol, ZapfDingbats
이 폰트들은 모두 서양 문자 전용 Type1 폰트이며, 한글, 일본어, 중국어와 같은 유니코드 확장 문자는 포함하지 않는다.

그리고 이전 코드에서 명시적으로 setFont(...) 호출이 없었기 때문이다. 예전 PDF 생성 코드 (요약본, 전체 대화 요약 등)에서는 다음과 같이 canvas.setFont(...) 호출이 없거나 생략된 상태였기 때문에 사용되는 기본 폰트는 Helvetica 이고, 그래서 한글 출력 시 사각형(□, ■)으로 깨지는 현상이 생기는 것이다. 

 

 

따라서 한글을 지원하는 나눔고딕(NanumGothic)이나 DejaVu Sans 등의 폰트를 명시적으로 지정해야 한다. 이를 확실하게 해결하기 위해 완전한 한글 폰트를 임베딩하자. 여기서는 NanumGothic 폰트를 이용하자. 

하지만 현재 ReportLab이 사용하는 환경에는 이들 폰트가 기본 설치되어 있지 않기 때문에, NanumGothic 같은 한글 폰트를 업로드해야 한다.

 

아래 사이트에서 NanumGothic.ttf 을 다운로드 받아 대화창에 업로드하고 다시 pdf 생성을 요청한다.

https://hangeul.naver.com/font

 

네이버 글꼴 모음

네이버가 만든 150여종의 글꼴을 한번에 만나보세요

hangeul.naver.com

 

 

 

그러면 폰트를 나눔고딕으로 셋팅하게 된다. 

 

대화창 정도는 아니지만 이제 그런대로 깨짐 현상 없이 볼 수 있다. 제일 좋은 건 브라우저 인쇄를 통해 페이지를 인쇄하는 방법인 것 같다. 

 

 

ReportLab, PDF 한글 깨짐, 나눔고딕 폰트, NanumGothic.ttf, TTFont 등록, Helvetica 기본 폰트, Unicode 미지원, Python PDF 출력, drawString 깨짐, PDF 폰트 임베딩, 파이썬 PDF 출력, 파이썬 한글 폰트 적용

728x90