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/