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

之前製作公司報價系統時,遇到了要把報價單匯出的需求,而通常我們寄給客戶的報價單都是.pdf的格式,因此解決方案自然就朝輸出.pdf的方向找。google “php pdf”,很快就能找到「TCPDF」這個class(題外話,這裡的class翻什麼比較恰當呢?「類別」?「物件」?)。

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

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);

Tags:,
2 Comments

Add a Comment

你的電子郵件位址並不會被公開。 必要欄位標記為 *

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