You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 01:50:15