티스토리 뷰

Language/PHP

HTML to PDF - mPDF

MiniNeko 2015. 11. 29. 03:59

참조 : http://blog.naver.com/PostView.nhn?blogId=roopy2078&logNo=50175501093
참조 : http://archer0001.blog.me/110171799119

첨부파일 : MPDF57

HTML 형태의 소스를 PDF 형식의 파일로 변환해주는 라이브러리가 있더라구요
mPDF 이며 자세한 내용은 http://www.mpdf1.com/mpdf/index.php 에서 확인하시면 될 것 같아요
해당 라이브러리는 설치 후 소스 디렉토리 퍼미션 변경 등
추가로 해줘야 할 작업이 있습니다.(http://mpdf1.com/manual/index.php?tid=452)

간단한 사용 예제는 아래와 같습니다.

Getting Started
The following PHP will produce the most basic example with mPDF.
Include the main file containing the mpdf class :

include("../mpdf.php");

Create an instance of the class :

$mpdf = new mPDF();

// pdf 가 열릴때 창크기에 맞게 보여지도록 함.
// 해당 내용이 생략 될 경우 pdf Viewer 의 설정을 따르게 됨
$mpdf->SetDisplayMode("fullpage");

Write some HTML code :

$mpdf->WriteHTML("<p>Hallo World</p>");

Output a PDF file : 

$mpdf->Output();   // 브라우저에 PDF 형태로 표시
$mpdf->Output("file_name.pdf","D"); // 파일형태로 다운로드
exit;

----------------------------------------------------------------------------------------------------

// 한글이 깨는 경우가 발생할 시
config.php : LINE 43 에 보면
$this->useAdobeCJK = false;
위의 부분은 true 로 변경

그렇게 해도 한글이 깨진다면
new mPDF("ko"); 를 해보기를 바람

----------------------------------------------------------------------------------------------------

// CSS 파일 추가시 html 코드를 쓰기 전에 먼저 css 파일을 읽어들여 써줘야 하는데 해당 코드는 아래와 같다.
(html 코드가 쓰이기 전에 먼저 css 파일이 쓰여져야 함)

$style = file_get_contents("css경로");
$mpdf->WriteHTML($style,1);   // 1 은 스타일시트를 의미
$mpdf->WriteHTML($html,2);   // 2 는 html 코드를 의미 ( 뒤에 2는 생략 가능함 )

==================================================

위 까지는 기본적인 내용이고 아래 부분은 좀더 세부적인 내용이다.
 
1. position:absolute 의 경우 최상위 태그(body의 직속자식(?))에만 적용됨
 ex) body -> div 에는 적용되지만 body->div->div에서는 적용안됨
 
2. 이미지의 경우 메뉴얼에는 지원한다고 되어있지만 정확하게는 지원하지 않아 이미지를 감싸는 부모태그에 css를 걸거나
이미지 태그에 직접 inline으로 css를 적용해주어야한다.
 
3. background-image의 크기를 조정하려면 mPDF전용 css인 background-image-resolution을 사용해야 하는데 단위는 dpi이다.
 
4. absolute사용시 다른 부분과 겹치는 부분이 있다면 fixed 를 적절히 이용해보라.
 
5. rowspan의 문제가 생긴다면 페이지의 사이즈를 늘려주거나 break-page-inside를 이용해보면 된다.
 
6. 5번의 문제로 페이지 사이지를 늘릴경우 임의의 사용자설정이 필요한데 그 과정은 아래와 같다.
    ① javascript나 jQuery를 이용하여 컨텐츠의 사이즈를 php로 넘겨준다. 그리고 값이 넘어오는지 확인
        ($("#contents").context | $("#contents").context.documentElement.scrollHeight 를 적절히 이용하기 바람. 참고로 jQuery 버전은 1.8 버전)
 
    ② new mPDF("ko", "USER" . $height); 로 생성 <- 콤마아님!! // 여기서 $height는 javascript나 jQuery로 넘긴값
 
    ③  mpdf.php에서 _getPageForamt함수를 찾아 switch 구문 위에 아래코드 추가
    if (preg_match("/USER/", $format))
    {
        $user_height= preg_replace("/USER/", "", $format);
        $format     = "USER";
    }
        그리고 swtich구문 내에 case "USER" : {$format=array(595.28, $user_height); break;} 추가
 
    ④ 그래도 사이즈가 부족하다면 height에 100~150을 더해준다
 
==================================================
 
이정도만 수정을 하였다.
 
폰트의 경우 Adobe폰트를 사용하거나 시스템에서 만들때 기본폰트를 이용하게 되는데 별도로 pdf에 저장하여 파일을 생성할수 있는데
 
굳이 폰트를 설정할 필요가 없어서 생략했다.
 
이외에도 많은 부분을 공부했지만 대부분 mPDF 메뉴얼에 나와있는 부분이라 생략하겠다.
[출처] [PHP] mPDF를 이용하여 PDF 파일 생성하기|작성자 미련한곰탱이

Total
Today
Yesterday
최근에 올라온 글
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31