[PHP] dompdf로 html을 pdf로 변환하기

dompdf란?

PHP로 작성된 오픈 소스 PDF 생성 라이브러리.

HTML 및 CSS를 사용하여 동적으로 PDF 문서를 생성하는 라이브러리.

 

GitHub - dompdf/dompdf: HTML to PDF converter for PHP

HTML to PDF converter for PHP. Contribute to dompdf/dompdf development by creating an account on GitHub.

github.com

설치

1. PHP 설치. (나는 8.2.7 버전으로 설치)

2. composer 설치.

3. composer을 이용해 설치했더니 dompdf 0.6.2 버전이 설치됨.

4. 2.0.3버전을 다운로드 받으려고 하니 ext-dom이 필요하다고 해서 ext-dom을 설치.

5. php-xml과 php-mbstring도 함께 설치.

6. 2.0.3으로 버전 업데이트.

실행

<?php
require_once "vendor/autoload.php";

use Dompdf\Dompdf;

$dompdf = new Dompdf();
$dompdf->getOptions()->setChroot("/home/report/assets");

$html = file_get_contents("/home/report/report.html");
$dompdf->loadHtml($html);

$dompdf->setPaper('A4', 'portrait');

$dompdf->render();

$outfile = $dompdf->output();

$fp = fopen("/home/report/dompdfOutput.pdf", "w");
fwrite($fp, $outFile);
fclose($fp);
?>

 

에러

GD extension이 필요하다고 에러 발생 → gd 설치하고 아파치 재 실행 ( sudo apt install php-gd, /etc/init.d/apache2 restart )

 

한글 출력 X - 폰트 설정 해야함. css에서 폰트를 설정해야 함.

@font-face {
      font-family: 'nanum';
      font-style: normal;
      font-weight: normal;
      src:url('/dompdfTest/fonts/NanumGothic.ttf') format('truetype');
  }

 

그다음 php에서도 font 경로를 설정해줘야 함. 경로 접근 권한도 함께 설정해줘야함. (이걸로 엄청 삽질했다.)

<?php
 $dompdf = new Dompdf();
 $dompdf->getOptions()->setChroot("/home/assets");
 $dompdf->getOptions()->setChroot('/dompdfTest/fonts');
 $dompdf->getOptions()->setFontDir('/dompdfTest/fonts');
 $dompdf->getOptions()->setFontCache('/dompdfTest/fonts');
?>