PHP-CI - TCPDF - HTML 轉 PDF

PHP - TCPDF

最近在Mobile製作,下載Word檔的時候,開啟發生了錯誤(可能是Android讀取格式的問題)

找解決替代方案,就實作,HTML產生PDF的發生,

網路上,有TCPDF這個PHP Library可以使用

https://tcpdf.org/

但跑去他的Github下載,卻不知道如何使用

https://github.com/tecnickcom/tc-lib-pdf

所以放棄這git位置所下載的library,因為跟大部份的網路文章,怎麼看都兜不來

再Google一下發生另一個下載位置

https://sourceforge.net/projects/tcpdf/files/

從sourceforget,下載tcpdf_6_2_13.zip

則跟網路解比較穩合一下。

則整個解壓得到的資料夾tcpdf,移到CodeIgniter 的 libraryies

在libraryies在建立一個檔案PHP_TCPDF

<?php        
    include_once ('tcpdf/tcpdf.php');

	class PHP_TCPDF extends TCPDF
	{
	    function __construct()
	    {
	        parent::__construct(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false);

	        $this->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM);

	        // set image scale factor
	        $this->setImageScale(PDF_IMAGE_SCALE_RATIO);

	        // set some language-dependent strings (optional)
	        if (@file_exists(dirname(__FILE__).'/lang/eng.php')) {
	            require_once(dirname(__FILE__).'/lang/eng.php');
	            $this->setLanguageArray($l);
	        }

	        // ---------------------------------------------------------

	        // set font
	        $this->SetFont('msungstdlight', '', 10);
	    }
	}
?>

達到include與設定繁體中文的解決方案 (SetFont('msungstdlight')解決中文問題)

在PHP-CI controller要使用的話,

就可以直接這樣實作


        $this->load->library('PHP_TCPDF');

        ob_end_clean(); // slove problem TCPDF ERROR: Some data has already been output, can't send PDF file
        $pdf = new PHP_TCPDF();
        $pdf->AddPage();
        $pdf->Cell(40,10,'Hello World!');
        $pdf->Output();

記得加上ob_end_clean,以避免 TCPDF ERROR: Some data has already been output, can't send PDF file

而如果要將HTML輸出的話

$pdf = new PHP_TCPDF();
$pdf->AddPage();
$pdf->writeHTML($html, true, false, true, false, '');
$pdf->Output('output.pdf', 'I');

Output 的 I  = inline的意思,F 是 File的意思。

但我用 F發生問題。所以只好用Inline處理

HTML 轉 PDF 會有一些狀況發生

img所指定的位置,最好是絕對位置,外部可以下載的位置,避免卡在取得圖檔找不到,而造成PDF產生time out

參考Example為

https://tcpdf.org/examples/example_006/