TCPDF无法应用Calibri字体粗斜体样式问题求助
解决TCPDF中Calibri粗斜体样式不生效的问题
背景回顾
已通过命令php tools\tcpdf_addfont.php -b -t TrueType -i calibriz.ttf转换Calibri粗斜体字体(calibriz.ttf),并将生成的字体文件存放至application\libraries\fonts目录,且已安装所有Calibri字体文件,但同时使用粗体+斜体样式时无法生效,单独使用粗体或斜体则正常。
字体文件目录截图:
问题复现
使用以下代码尝试实现粗斜体,TCPDF无法识别该组合样式:
$html = "<p style=\"font-family: Calibri, sans-serif;\"><b><i>Test Italic Bold</i></b></p>"; $pdf->writeHTML($html, true, false, false, false, 'C');
实际效果截图:
解决方案
1. 确认转换后的字体标识
打开application\libraries\fonts目录下的calibriz.php文件,查看其中的$fontname变量(比如'calibriz'或'Calibri-BoldItalic'),这是TCPDF识别该字体的关键名称。
2. 注册粗斜体字体并关联样式
在生成PDF的代码中,先注册转换后的粗斜体字体,明确关联粗斜体(Bold-Italic)样式:
// 注册字体:参数依次为字体族名、样式标识(BI代表粗斜体)、字体配置文件 $pdf->addFont('Calibri', 'BI', 'calibriz.php');
3. 修改HTML代码调用样式
有两种可靠方式实现粗斜体:
方式一:使用CSS样式指定
通过font-weight和font-style定义样式,TCPDF会自动匹配已注册的对应字体:$html = "<p style=\"font-family: Calibri, sans-serif; font-weight: bold; font-style: italic;\">Test Italic Bold</p>"; $pdf->writeHTML($html, true, false, false, false, 'C');方式二:直接调用粗斜体字体名
无需依赖样式映射,直接在HTML中使用转换后的字体名称:$html = "<p style=\"font-family: calibriz, sans-serif;\">Test Italic Bold</p>"; $pdf->writeHTML($html, true, false, false, false, 'C');
4. 常见问题排查
- 确认
calibriz.ttf是原生粗斜体字体文件,而非单独粗体/斜体文件改名。 - 转换字体时需同时添加
-b(粗体)和-i(斜体)参数,确保生成的字体文件包含粗斜体属性。 - 检查字体文件是否正确放置到TCPDF字体目录,且文件权限正常。
内容的提问来源于stack exchange,提问作者YangDev
相关产品推荐
相关产品推荐

