TCPDF 한글 깨짐 해결하기 (CodeIgniter + Composer 환경)
CodeIgniter에서 Composer로 TCPDF 깔고 PDF 뽑으니까 한글이 죄다 깨져서 나옴. 이유는 간단함. TCPDF 기본 폰트(dejavusans 등)에 한글 글리프가 없어서 그럼. 한글 되는 폰트를 TCPDF에 직접 등록해주면 끝.
1. 한글 TTF 폰트 준비
나눔고딕 같은 .ttf 한글 폰트를 받는다. 난 나눔 폰트 받아서 프로젝트 assets\font\Nanum\ 폴더에 넣었음.
2. tcpdf_addfont.php 위치 찾기
TCPDF에 폰트 변환용 CLI 도구가 같이 딸려옴. Composer로 깔았으면 아래 경로에 있음.
application\vendor\tecnickcom\tcpdf\tools
cd로 여기까지 이동.
3. 폰트 변환 명령어 실행
tcpdf_addfont.php에 -i 옵션으로 폰트 경로만 넘기면 됨.
php .\tcpdf_addfont.php -i assets\font\Nanum\NanumBrushScript-Regular.ttf
성공하면 이렇게 나옴.
>>> Converting fonts for TCPDF:
*** Output dir set to \application\vendor\tecnickcom\tcpdf/fonts/
+++ OK : \assets\font\Nanum\NanumBrushScript-Regular.ttf added as nanumbrushscript
>>> Process successfully completed!
여기서 봐야 할 건 added as nanumbrushscript. 이게 TCPDF에서 쓸 폰트 이름임. 변환된 폰트 파일은 vendor\tecnickcom\tcpdf\fonts\ 폴더에 생김.
4. SetFont 코드 수정
PDF 만드는 코드에서 기본 폰트 지정한 부분 찾음.
$pdf->SetFont('dejavusans', '', 12);
방금 등록한 폰트 이름으로 바꿔줌.
$pdf->SetFont('nanumbrushscript', '', 12);
이제 PDF 다시 뽑으면 한글 잘 나옴.
주의점
- 폰트 이름은 파일명에서 나옴. 예시에서 등록한
NanumBrushScript-Regular.ttf는 손글씨체라 이름이nanumbrushscript가 됐음. 근데 문서 본문에 손글씨체는 안 어울리니까 보통은NanumGothic.ttf(나눔고딕) 등록해서nanumgothic으로 씀. 굵은 글씨 필요하면 Bold 파일도 따로 등록해야 함. - 배포하면 폰트가 날아갈 수 있음.
vendor폴더는 보통 git에 안 올리고 배포할 때composer install로 새로 받음. 그럼 이렇게 등록한 폰트도 같이 날아감. 배포 스크립트에 폰트 등록 명령 넣어두거나, 변환된 폰트 파일을 딴 데 두고 TCPDF 폰트 경로 설정으로 잡아주는 식으로 처리해야 함.
정리
- TCPDF 기본 폰트엔 한글이 없어서 깨짐.
tools\tcpdf_addfont.php -i <ttf 경로>로 한글 폰트 등록.- 출력 메시지의
added as <이름>이SetFont()에 넣을 폰트 이름.