FPDI 라이브러리를 사용해 PDF를 생성할 때 한글이나 특수 문자가 깨지는 문제를 겪는 경우가 많습니다. 이는 PDF 문서가 기본적으로 UTF-8을 지원하지 않고, 특정 인코딩 방식을 요구하기 때문입니다. 이 글에서는 FPDI에서 올바른 인코딩을 설정하는 방법을 단계별로 살펴보겠습니다.
1. 올바른 알파벳을 지원하는 새 폰트 추가
인코딩 문제를 해결하는 첫 번째 단계는 필요한 문자 집합(alphabet)을 정확히 지원하는 폰트를 추가하는 것입니다. 아래 코드처럼 AddFont()와 SetFont() 메서드를 사용합니다.
$pdf->AddFont('DejaVu','','DejaVuSansCondensed.php');
$pdf->SetFont('DejaVu', '', 10, '', false);DejaVu 폰트는 다양한 언어의 문자를 폭넓게 지원하기 때문에 다국어 PDF 문서를 만들 때 자주 활용됩니다.
2. FPDI에서 지원 가능한 인코딩 목록
FPDI에서 사용할 수 있는 대표적인 인코딩은 크게 세 계열로 나눌 수 있습니다.
Windows 코드 페이지(cp) 계열
cp1250 (중앙 유럽) cp1251 (키릴 문자) cp1252 (서유럽) cp1253 (그리스) cp1254 (터키) cp1255 (히브리) cp1257 (발트) cp1258 (베트남) cp874 (태국)
ISO-8859 계열
ISO-8859-1 (서유럽) ISO-8859-2 (중앙 유럽) ISO-8859-4 (발트) ISO-8859-5 (키릴 문자) ISO-8859-7 (그리스) ISO-8859-9 (터키) ISO-8859-11 (태국) ISO-8859-15 (서유럽) ISO-8859-16 (중앙 유럽)
KOI8 계열
KOI8-R (러시아어) KOI8-U (우크라이나어)
각 인코딩은 지역과 언어에 따라 지원 범위가 다르므로, 문서에 포함될 언어에 맞는 인코딩을 선택하는 것이 중요합니다.
3. UTF-8 변환 예제
PHP에서 제공하는 iconv() 함수를 사용하면 UTF-8 문자열을 원하는 인코딩으로 손쉽게 변환할 수 있습니다. 다음은 UTF-8을 cp1250(중앙 유럽)으로 변환하는 예제입니다.
$str = iconv('UTF-8', 'cp1250', 'zazółcić gęślą jaźń');주의 사항
참고: 사용자가 입력한 문자열이 UTF-8 인코딩이라면, PDF에 출력하기 전에 반드시 cp1250과 같은 해당 인코딩으로 변환해야 합니다. 그렇지 않으면 문자가 깨져 보이거나 PDF 생성 과정에서 오류가 발생할 수 있습니다.