CJK 字型支援¶
中文(Traditional/Simplified)、日文、韓文(統稱 CJK)具有特殊的排版需求:字型檔案龐大、字符數量龐大(20,000+ 字符)、有直排與橫排兩種模式,以及複雜的標點禁則規則。CjkFontValidator 確保載入的字型符合 CJK 排版的最低需求。
CJK 字型驗證¶
use NextPDF\Typography\Cjk\CjkFontValidator;
$validator = CjkFontValidator::create();
$result = $validator->validate(
fontPath: '/path/to/NotoSansCJKtc-Regular.otf',
);
if (!$result->isValid()) {
foreach ($result->getErrors() as $error) {
// 處理驗證錯誤
}
}
// 驗證項目包括:
// - 包含 CJK Unified Ideographs(U+4E00–U+9FFF)
// - 具備正確的 cmap 格式 4 或格式 12
// - 直排字形(vert GSUB feature)是否存在(可選)
推薦的 CJK 字型¶
| 字型 | 語言 | 授權 | 備註 |
|---|---|---|---|
| Noto Sans CJK TC | 繁體中文 | SIL OFL | Google 推薦 |
| Noto Sans CJK SC | 簡體中文 | SIL OFL | Google 推薦 |
| Noto Sans CJK JP | 日文 | SIL OFL | Google 推薦 |
| Noto Sans CJK KR | 韓文 | SIL OFL | Google 推薦 |
| Source Han Sans | 多語言 CJK | SIL OFL | Adobe 發布 |
字型子集化策略¶
CJK 字型通常體積龐大(10–20 MB),子集化尤為重要:
// NextPDF 自動偵測 CJK 字型並啟用最佳化子集策略
$registry->loadFromFile(
path: '/path/to/NotoSansCJKtc-Regular.otf',
alias: 'NotoSansCJK-TC',
// CJK 字型自動使用 CFF CID-keyed 子集化
);
禁則處理¶
日文與中文排版需要處理「禁則」(行首行尾不允許出現的字符):
use NextPDF\Typography\Cjk\KinsokuRule;
// 啟用禁則規則
$config = Configuration::create(
cjkSettings: CjkSettings::create(
kinsokuRule: KinsokuRule::JIS_X4051, // JIS X 4051 標準
),
);
| 規則 | 說明 |
|---|---|
JIS_X4051 | 日文 JIS X 4051 禁則標準 |
GB_T15834 | 中文 GB/T 15834 標點標準 |
Custom | 自訂禁則字符集 |
直排(Vertical Text)¶
use NextPDF\Typography\Cjk\WritingMode;
// 直排文字(上至下,右至左)
$document->text()->write(
text: '這是直排文字示範',
position: Position::at(x: 180.0, y: 30.0),
writingMode: WritingMode::VerticalRL, // 右至左直排
);
字距調整(字間距)¶
// CJK 特有的字間距設定
$document->text()->write(
text: '文字排版示範',
position: Position::at(x: 20.0, y: 50.0),
letterSpacing: 2.0, // 毫米,每字符增加 2mm 間距
);