본문 바로가기
PHP

[PHP][TCPDF] HTML화면을 PDF로 보기

by rairen 2019. 10. 25.

이번 글은 TCPDF에 대해서 알아봅시다.

 

TCPDF를 사용하기 위해 넣은 코드만 보여드리도록 하겠습니다.

// curl이 설치 되었는지 확인
if (function_exists('curl_init')) {
    // curl 리소스를 초기화
    $ch = curl_init();
    // url을 설정
    curl_setopt($ch, CURLOPT_URL, '주소');
    // 헤더는 제외하고 content 만 받음
    //curl_setopt($ch, CURLOPT_HEADER, 0);
    // 응답 값을 브라우저에 표시하지 말고 값을 리턴
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    // 브라우저처럼 보이기 위해 user agent 사용
    //curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.5) Gecko/20041107 Firefox/1.0');
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);   //원격 서버의 인증서가 유효한지 검사 안함
    curl_setopt($ch, CURLOPT_POSTFIELDS, '데이터');       //POST data
    curl_setopt($ch, CURLOPT_POST, true);              //true시 post 전송

    $content = curl_exec($ch);

    // 리소스 해제를 위해 세션 연결 닫음
    curl_close($ch);
} else {
    // curl 라이브러리가 설치 되지 않음. 다른 방법 알아볼 것
}
$content = file_get_contents('주소', false);

위 코드는 웹 페이지 호면을 읽어오기 위해 사용하는 방법 중 2가지를 표시한 것입니다.

우선 첫 번째는 curl을 사용한 것은 데이터를 넘겨서 페이지 내용을 채워야 할 경우 사용하시면 됩니다.

curl로 보낼 때 get으로 보내면 파라미터에 값이 보이다 보니 저 같은 경우 post로 보내었습니다.

ssl이 없으니 그다지 차이가 없을 것 같지만 ㅎㅎ

 

두 번째는 file_get_contents함수를 이용해서 파일을 읽어오는 것입니다.

 

두번째는 한두 번씩은 써보신 분들이 많을 테니 넘어가고,

 

위에서 PDF 내용에 넣을 데이터를 가지고 왔다면 이제

TCPDF를 불러옵니다.

 

// Include the main TCPDF library (search for installation path).
require_once('/TCPDF/config/tcpdf_config.php');
require_once('/TCPDF/tcpdf_autoconfig.php');
require_once('/TCPDF/tcpdf.php');

TCPDF 공식 홈페이지(https://tcpdf.org)에서 라이브러리를 다운로드하고 서버에 업로드했다면, 위 코드대로 3개의 파일을 포함합니다.

 

config 폴더의 tcpdf_config.php 파일은 말 그대로 tcpdf의 설정 파일입니다.

설정을 전부다 커스텀할 것이라면 tcpdf_autoconfig.php 파일은 안 불러와도 됩니다.

 

다만 귀찮다 보니 일부 설정이 되어있는 파일을 로딩을 하는 것이죠.

define정의가 되어있는지 체크해서 정의가 안되어 있으면 자동 설정 파일에서 정의가 되는 것이므로

커스텀 설정을 하지 않으려면 tcpdf_config.php내용에서 설정들을 주석 처리하시면 됩니다.

 

그리고 설정 파일을 불어왔다면 tcpdf.php 파일을 불어와서 클래스 사용할 준비를 합니다.

 

// create new PDF document
$pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false);
$pdf->SetCreator(PDF_CREATOR);
$pdf->AddPage();
// set some language-dependent strings (optional)
if (@file_exists(G5_LIB_PATH . '/TCPDF/examples/lang/kor.php')) {
    require_once(G5_LIB_PATH . '/TCPDF/examples/lang/kor.php');
    $pdf->setLanguageArray($l);
}
$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED);
$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM);
$pdf->SetFont('nanumbarungothicyethangul', '', 12);
$pdf->writeHTML($content, true, true, false, true, '');
//$pdf->writeHTMLCell(0, 0, "", "", $content, 0, 1, 0, true, "", true);

//$pdf->Write(5, $content, '', 0, '', false, 0, false, false, 0);
// ---------------------------------------------------------
//Close and output PDF document
$pdf->Output('파일명.pdf', 'I');
//============================================================+
// END OF FILE
//============================================================+

위 코드는 클래스 개체를 만들어서 PDF내용을 채워 출력하는 과정을 보여줍니다.

 

위 코드 내용 중에 언어 관련된 부분으로 보이는 곳이 있을 겁니다.

// set some language-dependent strings (optional)
if (@file_exists(G5_LIB_PATH . '/TCPDF/examples/lang/kor.php')) {
    require_once(G5_LIB_PATH . '/TCPDF/examples/lang/kor.php');
    $pdf->setLanguageArray($l);
}

이 코드는 언어별 페이지 메타 설정 관련 파일이라고 보시면 됩니다.

 

정작 PDF로 출력할 때 한글이 안 깨지려면

 

tcpdf_nanum_fonts.zip
2.76MB

첨부된 폰트를 라이브러리에 포함한 다음 

 $pdf->SetFont('nanumbarungothicyethangul', '', 12);

폰트 설정을 해줘야 합니다.

 

전부 다는 안 해보았으나, 대부분 한글이 깨지는 것 같으니 주의하시길 바랍니다.

 

내용을 첨가하는 것은 여러 함수가 있으나 제가 사용한 것은 HTML을 읽어와서 보여줘야 하므로

writeHTML로 내용을 추가했습니다.

 

나머지는 아마도 코드를 보시면 이해하실 수 있으리라 생각됩니다.

 


 

TCPDF 문서 : https://tcpdf.org/docs/

 

Docs · TCPDF

 

tcpdf.org

TCPDF 예제 : https://tcpdf.org/examples/

 

Examples · TCPDF

 

tcpdf.org

 

TCPDF GIT : https://github.com/tecnickcom/tcpdf

 

tecnickcom/TCPDF

Official clone of PHP library to generate PDF documents and barcodes - tecnickcom/TCPDF

github.com

 

 

반응형