首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

MPDF 中文亂碼解決方案:正確啟用 CJK 字型支援

     編輯:PHP 綜合知識

MPDF 6.x 生成 PDF 時中文顯示亂碼(方框/問號),核心原因是**未正確載入 CJK 字型**。本文提供最簡配置修正與實例代碼,支援中日韓文字完美渲染。

核心修正:兩步驟

  1. config.php 啟用自動語言對應字型:
    `$this->autoLangToFont = true;` (約第 67 行)
  2. 實例化時指定模式 `+aCJK`** (非 `c`):
    `$mpdf = new \Mpdf\Mpdf(['mode' => '+aCJK', 'format' => 'A4', 'margin_left' => 32, ...]);`

完整可用範例

<?php
require_once __DIR__ . '/vendor/autoload.php'; // Composer 安裝

$mpdf = new \Mpdf\Mpdf([
    'mode' => '+aCJK',          // 關鍵:啟用 CJK 字型回退
    'format' => 'A4',
    'default_font_size' => 12,
    'margin_left' => 20,
    'margin_right' => 15,
    'margin_top' => 25,
    'margin_bottom' => 25,
    'margin_header' => 10,
    'margin_footer' => 10,
]);

$html = '
<h1 style="color:#2c3e50;">MPDF 中文測試</h1>
<p>這是一段包含中文、英文、數字 123 的測試內容。</p>
<p>支援標點符號:,。!?;:「」『』()【】…</p>
<ul>
    <li>列表項目一</li>
    <li>列表項目二</li>
</ul>
';

$mpdf->WriteHTML($html);
$mpdf->Output('chinese_test.pdf', \Mpdf\Output\Destination::DOWNLOAD);
?>

字型檔案準備 (必要)

MPDF 內建 **DejaVu Sans** 不含中文字型。需自行下載開源中文字型(如 **Noto Sans CJK TC**、**思源黑體 Source Han Sans TC**、**微軟正黑體** - 需授權)放入 `ttfonts/` 目錄,並在 `config_fonts.php` 註冊:

// config_fonts.php 片段
$this->fontdata['notosanscjktc'] = [
    'R' => 'NotoSansCJKtc-Regular.otf',
    'B' => 'NotoSansCJKtc-Bold.otf',
];
// 若使用 mode '+aCJK',MPDF 會自動嘗試回退至已註冊的 CJK 字型

常見誤區與補充

錯誤做法正確做法
使用 `mode => 'c'` 或 `mode => 'utf-8'`必須用 `'+aCJK'` (MPDF 6+) 或 `'zh-CN'` (舊版)
未設定 `autoLangToFont = true`config.php 必須啟用,否則不會自動切換字型
字型檔放錯路徑或未註冊放入 `ttfonts/`,並在 `config_fonts.php` 註冊 fontdata
HTML 未宣告 charset確保 HTML 含 `` 或傳入 UTF-8 字串

進階:指定特定字型

$mpdf->SetFont('notosanscjktc'); // 強制使用指定字型
// 或在 CSS 中
$html = '<style> body { font-family: "notosanscjktc"; } </style>...';

版本差異提醒

  • MPDF 5.x:使用 `mode => 'zh-CN'`,需手動 `AddFont()`。
  • MPDF 6.x / 7.x / 8.x:命名空間 `\Mpdf\Mpdf`,`mode => '+aCJK'`,Composer 安裝,字型註冊方式同上。

正確配置 `+aCJK` 模式、啟用 `autoLangToFont`、註冊可用 CJK 字型,即可徹底解決 MPDF 中文亂碼,生成專業級中文 PDF 文件。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved