Phpspreadsheet에서 mPDF를 사용해 PDF 파일을 생성할 때 한글 깨짐 현상을 해결하는 방법에 대해 정리해보았습니다

ToC on/off

개요

PHP에서 엑셀 파일이나 PDF 문서를 다룰 때 사용하는 것이 Phpspreadsheet입니다. 이 Phpspreadsheet에서 PDF 문서를 생성할 때 [DomPDF], [mPDF], [TcPDF] 등을 사용할 수 있는데, 여기서는 [mPDF]로 문서를 생성할 때 한글이 깨지는 경우가 있는데 이 문제를 해결하는 방법을 정리해보겠습니다. (Phpspreadsheet는 PHPExcel의 업그레이드 버전입니다.)

한글 깨짐 테스트

아래와 같이 PDF로 저장할 데이터에 한글을 넣어서 테스트 해보겠습니다.

<?php

    require 'vendor/autoload.php';

    use PhpOffice\PhpSpreadsheet\Spreadsheet;
    use PhpOffice\PhpSpreadsheet\Writer\Xlsx;

    $spreadsheet = new Spreadsheet();
    $spreadsheet->getProperties()->setTitle("PhpSpreadsheet 테스트");
    
    $activeWorksheet = $spreadsheet->getActiveSheet();
    $activeWorksheet->setCellValue('A1', 'PhpSpreadsheet 테스트');
    $activeWorksheet->getColumnDimension("A")->setWidth(25); 
    $activeWorksheet->setPrintGridlines(true);

    $out_put_file_name = "PhpSpreadsheet-테스트.pdf";

    header('Content-Type: application/pdf; charset=utf-8' );
    header('Content-Disposition: attachment;filename="'.$out_put_file_name.'"');
    header('Cache-Control: max-age=0');

    $writer = new \PhpOffice\PhpSpreadsheet\Writer\Pdf\Mpdf($spreadsheet);
    $writer->save('php://output');
    exit;

?>
Phpspreadsheet에서 mPDF를 사용해 PDF 파일을 생성할 때 한글 깨짐 현상을 해결하는 방법
  • PDF 파일을 다운로드 받아보면 아래와 같이 한글인 테스트 부분이 폰트가 깨져서 제대로 나오지 않는 것을 확인할 수 있습니다.
Phpspreadsheet에서 mPDF를 사용해 PDF 파일을 생성할 때 한글 깨짐 현상을 해결하는 방법

폰트(Font) 설정 수정

mPDF가 설치된 경로에 있는 [\vendor\mpdf\mpdf\src\Config\FontVariables.php] 파일을 열어보면 아래와 같이 [fontdata] 항목에 [unbatang]이라는 폰트에 대한 설정이 있고, 이 폰트는 한국어용 폰트라는 것을 알 수 있습니다.

'fontdata' => [
    "unbatang" => [/* Korean */
        'R' => "UnBatang_0613.ttf",
    ]
]
Phpspreadsheet에서 mPDF를 사용해 PDF 파일을 생성할 때 한글 깨짐 현상을 해결하는 방법

한글 폰트 적용

Phpspreadsheet PDF 문서 생성 코드에 아래와 같이 위에서 확인했던 mPDF에 설정된 한글 폰트 이름을 지정해주면 됩니다.

<?php

    $spreadsheet->getDefaultStyle()->getFont()->setName('unbatang');
    $spreadsheet->getDefaultStyle()->getFont()->setSize(15);    

?>
Phpspreadsheet에서 mPDF를 사용해 PDF 파일을 생성할 때 한글 깨짐 현상을 해결하는 방법

문제 해결

한글 폰트를 적용한 후에 PDF 파일을 생성해보면 아래와 같이 한글이 정상적으로 표시되는 것을 알 수 있습니다.

Phpspreadsheet에서 mPDF를 사용해 PDF 파일을 생성할 때 한글 깨짐 현상을 해결하는 방법

새로운 폰트 적용

이번에는 mPDF의 기본 폰트가 아닌 원하는 폰트를 적용하는 방법을 확인해보겠습니다.
여기서는 네이버에서 무료로 제공하고 있는 [나눔고딕(NanumGothic)] 폰트를 아래와 같이 [\vendor\mpdf\mpdf\ttfonts] 폴더에 복사합니다.

Phpspreadsheet에서 mPDF를 사용해 PDF 파일을 생성할 때 한글 깨짐 현상을 해결하는 방법
  • [\vendor\mpdf\mpdf\src\Config\FontVariables.php] 파일에 아래와 같이 [나눔고딕(NanumGothic)] 폰트 설정을 추가합니다.
Phpspreadsheet에서 mPDF를 사용해 PDF 파일을 생성할 때 한글 깨짐 현상을 해결하는 방법
  • Phpspreadsheet PDF 문서 생성 코드에 아래와 같이 [나눔고딕(NanumGothic)] 폰트 설정을 지정합니다.
<?php

    $spreadsheet->getDefaultStyle()->getFont()->setName('nanumGothic');

?>
Phpspreadsheet에서 mPDF를 사용해 PDF 파일을 생성할 때 한글 깨짐 현상을 해결하는 방법
  • [나눔고딕(NanumGothic)] 폰트를 설정한 후에 PDF 파일을 생성해보면 아래와 같이 [나눔고딕(NanumGothic)] 폰트가 적용된 것을 확인할 수 있습니다.
Phpspreadsheet에서 mPDF를 사용해 PDF 파일을 생성할 때 한글 깨짐 현상을 해결하는 방법

참고 URL

  1. Phpspreadsheet 공식 가이드
  2. Composer 공식 홈페이지
  3. Composer 한글 메뉴얼
Tags: php windows