You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

使用mPDF非核心字体选项时遇错误:无法打开字体数据文件

解决mPDF v6.0 字体缓存文件缺失/无法读取的问题

我之前维护老项目使用mPDF 6.0的时候也碰到过几乎一模一样的问题,给你梳理下可能的原因和解决办法:

问题根源分析

你提到没添加自定义字体、CSS也没指定字体,但依然触发了dejavusanscondensedB.GSUBGPOStables.dat的错误,这是因为mPDF 6.0默认依赖内置的DejaVu字体族作为基础字体——哪怕你没主动指定,它也会尝试加载这些字体的缓存文件(就是ttfontdata里的.dat文件)。出现这个错误大概率是以下情况:

  • ttfontdata文件夹的权限不足,web服务器进程无法读取/生成缓存文件
  • 已有的缓存文件损坏或者不完整
  • 你下载的mPDF安装包缺失了DejaVu字体的相关核心文件

具体解决步骤

1. 修复ttfontdata文件夹权限

确保你的web服务器运行用户(比如Apache的www-data、Nginx的nginx)对/test_project/php/mpdf/ttfontdata文件夹有读写权限。可以用命令行设置:

chown -R www-data:www-data /test_project/php/mpdf/ttfontdata
chmod -R 755 /test_project/php/mpdf/ttfontdata

2. 清空字体缓存文件

直接删除ttfontdata文件夹里所有的.dat后缀文件,mPDF在下次运行时会自动重新生成对应的字体缓存,这通常能解决缓存损坏的问题。

3. 检查代码是否隐含字体配置

仔细看看你为了添加自定义字体修改的那段代码,有没有不小心设置了和DejaVu相关的配置?比如:

// 有没有类似这样的代码?
$mpdf->fontdata['dejavusanscondensed'] = array(
    'R' => 'DejaVuSansCondensed.ttf',
    'B' => 'DejaVuSansCondensed-Bold.ttf'
);

如果有的话,要么确保对应的ttf文件在ttfonts文件夹里,要么注释掉这段,改用mPDF默认的配置。

4. 顺便解决横向PDF的问题

你之前提到生成的PDF不是横向,其实在初始化mPDF的时候直接指定页面格式就行,比如:

// A4横向,同时指定默认字体避免触发DejaVu加载
$mpdf = new mPDF('', 'A4-L', '', '', 15, 15, 16, 16, 9, 9);

5. 重新安装完整的mPDF包

如果上面的方法都没用,可能是你下载的mPDF 6.0包不完整,建议重新下载完整的安装包,替换掉当前的mpdf文件夹,确保ttfonts里的DejaVu字体文件(比如DejaVuSansCondensed-Bold.ttf)存在。

内容的提问来源于stack exchange,提问作者RossW

火山引擎 最新活动