mPDF 的中文亂碼問題(v8.0.1)
mPDF 是一個基於 PHP 用來產出 pdf 檔的函式套件;我們公司導入的 InvoicePlan 在輸出 pdf 這一塊也是用 mPDF 處理,然後就理所當然遇到了中文亂碼的問題。 拿關鍵字 mPDF 中文 亂碼 餵 Google,能查到的大多都寫的很簡略,像是這樣: $mpdf = new \Mpdf\Mpdf ([ "autoScriptToLang" => true , "autoLangToFont" => true , ]); 按建議試了一下,的確可以輸出中文,但字體不是我要的;而設定字體部份繼續用 Google 也查不太到有用的資料;索性搭配官方文件,從原始碼來瞭解裡面是怎麼回事。 lang 和 font-family mPDF 所做的事,基本上就是將 HTML code 解析,並組合輸出成一份 pdf document。在輸出過程中,mPDF 會按 HTML lang 和 CSS font-family 兩個屬性判斷要使用哪種字體。 參考文件 Fonts & Languages / lang 6.x , lang 會影響 OTL 外字集的設定,或也可以做為 CSS lang selector 使用; font-family 則是指定 HTML block 內容要輸出為哪種字體,所支援的 HTML tag 詳細清單可參考 CSS & Stylesheets / Supported CSS 。 啟用 autoScriptToLang 、 autoLangToFont 就是省略掉上面兩個設定,讓系統去暴力拆你的內容判斷該用什麼 lang 和 font-family ,具體可以看 Mpdf.php 中的 markScriptToLang () 和 Language/LanguageToFont.php 、 Language/ScriptToLang.php 這幾支檔案…是真的滿暴力的。一般如果內文含有簡中的話,語系會被判定為 lang="und-Hans" ,繁中的話語系則是 lang="und-Hant ,字體不分繁簡會自動選用 font-family: sun-exta 。 Free Adobe CJK A...