TCPDF를 이용하여 HTML 태그를 PHP로 PDF 파일 생성하여 다운로드 받기 처리하는 방법입니다.
TCPDF 검색, 다운로드, 설치
- 검색 사이트에서 "tcpdf download"로 검색을 한 후 github에서 클론으로 다운을 받습니다.
- 서버에 압축을 푼 파일을 "tcpdf" 폴더를 생성하여 업로드를 합니다.
TCPDF 한글 설치
- TCPDF는 한글을 작성 시 한글이 깨져서 나옵니다.
- 한글 폰트를 설치하게 되면 정상적으로는 나오게 됩니다.
- [document root]/tcpdf/fonts/폴더에 첨부된 파일을 업로드 합니다.
TCPDF 사용 방법
1) $pdf = new MYPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, "UTF-8", false);
- MYPDF 헤더 영역을 제어하기 위해 TCPDF 클래스를 재정하여 사용했습니다.
- 일반적으로 사용법입니다.
new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, "UTF-8", false);
2) $pdf->SetFont('nanumbarungothicyethangul', '', 12);
- 한글이 깨지지 않게 하기 위해 업로드한 한글 폰트를 셋팅합니다.
3) $pdf->writeHTMLCell(0, 0, "", "", $html, 0, 1, 0, true, "", true);
- 일반적인 HTML 태그를 통해 PDF로 출력할 때 사용합니다.
4) $pdf -> writeHTML($pdfData, true, false, false, false, '');
- 테이블 태그를 이용하여 PDF를 출력할 때 사용합니다.
5) $pdfData .= "고객 정보";
- 태그에 속성값을 넣을 때는 colspan=4 가 아니라 colspan="4" 형태로 하여야 정확히 적용이 됩니다.
6) $pdf->Output(getcwd()."/example_test_01.pdf", "FI");
- getcwd() : 프로그램이 위치한 폴더에 파일을 생성합니다.
- 속성값은 FD 또는 FI로 하시면 됩니다.
- I : send the file inline to the browser (default). The plug-in is used if available. The name given by name is used when one selects the "Save as" option on the link generating the PDF.
- D : send to the browser and force a file download with the name given by name.
- F : save to a local server file with the name given by name.
- S : return the document as a string (name is ignored).
- FI : equivalent to F + I option
- FD : equivalent to F + D option
- E : return the document as base64 mime multi-part email attachment (RFC 2045)
$_incDocRoot = $_SERVER['DOCUMENT_ROOT'];
include_once($_incDocRoot.'/tcpdf/tcpdf.php');
$html = "<h1>한글</h1>";
$html .= "<i>This is the first example of TCPDF library.</i>";
$html .= "<p style='color:#CC0000;'>End of document</p>";
/**
* 헤더 변경을 위한 class 상속 후 재 정의
*/
class MYPDF extends TCPDF {
//Page header
public function Header() {
// Logo
$image_file = K_PATH_IMAGES.'logo_example.jpg';
$this->Image($image_file, 10, 10, 15, '', 'PNG', '', 'T', false, 300, '', false, false, 0, false, false, false);
// Set font
$this->SetFont('helvetica', 'B', 15);
// Title
$this->Cell(0, 15, 'www.example.com', 0, false, 'C', 0, '', 0, false, 'M', 'M');
}
}
$pdf = new MYPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, "UTF-8", false);
$pdf->SetCreator(PDF_CREATOR);
// set default header data
$pdf->SetHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE, PDF_HEADER_STRING);
// set header and footer fonts
$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN));
$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA));
// set default monospaced font
$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED);
// set margins
$pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT);
$pdf->SetHeaderMargin(PDF_MARGIN_HEADER);
$pdf->SetFooterMargin(PDF_MARGIN_FOOTER);
// set auto page breaks
$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM);
// set image scale factor
$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO);
$pdf->SetFont('nanumbarungothicyethangul', '', 12);
$pdf->AddPage();
$pdf->writeHTMLCell(0, 0, "", "", $html, 0, 1, 0, true, "", true);
$name = '홍길동';
$tel = '010-2112-1234';
$yyyy = '2019';
$mm = '12';
$dd = '24';
$pdfData .= "<div align=\"center\">";
$pdfData .= "<h1>테이블 예시</h1>";
$pdfData .= "<table border=\"1\" cellpadding=\"5\" cellspacing=\"0\">";
$pdfData .= "<thead>";
$pdfData .= "<tr><th colspan=\"4\" bgcolor=\"#ddd\" align=\"center\">고객 정보</th></tr>";
$pdfData .= "</thead>";
$pdfData .= "<tbody>";
$pdfData .= "<tr>";
$pdfData .= "<th>성명</th>";
$pdfData .= "<td>" . $name . "</td>";
$pdfData .= "<th>연락처</th>";
$pdfData .= "<td>". $tel . "</td>";
$pdfData .= "</tr>";
$pdfData .= "<tr>";
$pdfData .= "<th>일정</th>";
$pdfData .= "<td colspan=\"3\">";
$pdfData .= $yyyy.'년 '.$mm.'월 '.$dd.'일';
$pdfData .= "</td>";
$pdfData .= "</tr>";
$pdfData .= "</table>";
$pdfData .= "</div>";
// 테이블을 출력할 때 사용하는 방법
$pdf -> writeHTML($pdfData, true, false, false, false, '');
$pdf->Output(getcwd()."/example_test_01.pdf", "FI");
'유용한 활용팁' 카테고리의 다른 글
MySQL 설정된 사용기간에 따라서 데이터 조회하는 방법 (0) | 2019.12.30 |
---|---|
MySQL 현재월, 현재월 기준 1개월, 2개월 조회 방법, 날짜 칼럼 월 조회 방법 (0) | 2019.12.26 |
JavaScript 원하는 영역에 대해서만 출력 화면 설정하기 - window.print() (0) | 2019.12.24 |
HTML5, CSS3 W3C CSS 검사 방법 크롬 - Web Developer 확장 프로그램 이용 (0) | 2019.12.23 |
JavaScript ajax jquery $.post를 이용하여 form 데이터 구성 없이 post로 데이터 전송 처리 (0) | 2019.12.21 |