TCPDF使用中英文字型不亂碼、不缺字

之前製作公司報價系統時,遇到了要把報價單匯出的需求,而通常我們寄給客戶的報價單都是.pdf的格式,因此解決方案自然就朝輸出.pdf的方向找。


google “php pdf”,很快就能找到「TCPDF」這個class。

TCPDF的使用方式非常簡單,只要新增一張負責輸出的.php頁面,並require進去即可。例如:

<?php 
require_once('tcpdf.php'); 
$pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false);
?>

這樣檔案裡就能以$pdf->blablabla去設定輸出內容與格式了。


BUT!人生永遠有個BUT,那就是TCPDF的預設中文字體是msungstdlight,非常醜,醜到我沒有臉用這個字體產生的報價單寄給客戶。於是就得找其他字體來用:TCPDF內建的日文漢字cid0jp很不錯,但太多中文字會缺字,沒辦法用;網路上有很多人教說用android的預設字體DroidSansFallback可行,我也去下載了這個字體來用,但竟然發生了中英文一起出現時,英文(或阿拉伯數字)變亂碼的詭異狀況。爬文爬了很久,直到找到這篇才知道問題出在哪裡:原來是字體檔內建字型不全造成的阿!改成這個版本就中英文都ok啦!

完整處理方式如下:
1. 下載中英文字型都完整的DroidSansFallback,放在TCPDF資料夾中的fonts資料夾
2. 隨便做一張.php放在同一個fonts資料夾內,利用下列程式碼將DroidSansFallback.ttf轉成TCPDF可以用的TrueTypeUnicode字型:

<?php 
require_once('tcpdf.php'); 
$font = TCPDF_FONTS::addTTFfont('DroidSansFallback.ttf'); 
?>

3. 用網頁開啟這個.php檔開始轉檔,轉好之後會在fonts裡面產生三個檔案:droidsansfallback.php、droidsansfallback.ctg.z、droidsansfallback.z
這樣就能用DroidSansFallback字體輸出中英文阿拉伯數字都正常的.pdf檔了!

$pdf->SetFont('DroidSansFallback', '', 12, '', true);
23 Comments

發佈回覆給「Andy LI」的留言 取消回覆

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料