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

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


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

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

[pastacode lang=”php” manual=”require_once(‘tcpdf.php’)%3B%0A%24pdf%20%3D%20new%20TCPDF(PDF_PAGE_ORIENTATION%2C%20PDF_UNIT%2C%20PDF_PAGE_FORMAT%2C%20true%2C%20’UTF-8’%2C%20false)%3B%0A%2F%2F%E4%BB%A5%E4%B8%8B%E7%82%BA%E8%BC%B8%E5%87%BA%E6%A0%BC%E5%BC%8F%E8%88%87%E5%85%A7%E5%AE%B9″ message=”” highlight=”” provider=”manual”/]

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

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

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

[pastacode lang=”php” manual=”%3C%3Fphp%0Arequire_once(‘tcpdf.php’)%3B%0A%24font%20%3D%20TCPDF_FONTS%3A%3AaddTTFfont(‘DroidSansFallback.ttf’)%3B%0A%3F%3E” message=”” highlight=”” provider=”manual”/]

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

[pastacode lang=”php” manual=”%24pdf-%3ESetFont(‘DroidSansFallback’%2C%20”%2C%2012%2C%20”%2C%20true)%3B” message=”” highlight=”” provider=”manual”/]

Tags:,
23 Comments

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

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

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