1、使用sfnttool 工具,sfnttool是一个java的tar包,下载地址阿里云盘

2、下载后解压,windows在下载文件夹中打开powershell,linux直接在当前文件夹下,运行以下命令(需要java运行环境,Java环境的配置方法自行搜索)

java -jar sfnttool.jar -s '测试文字' 源字体.ttf 压缩后的字体.ttf

出现以下内容表示可正常使用

java -jar sfnttool.jar -h
subset [-?|-h|-help] [-b] [-s string] fontfile outfile
prototype font subsetter
-?,-help print this help information
-s,-string string to subset
-b,-bench benchmark (run 10000 iterations)
-h,-hints strip hints
-w,-woff output woff format
-e,-eot output eot format
-x,-mtx enable microtype express compression for eot format

3、新建php接口,以下为laravel中的实现,(在项目根目录创建jar目录,将下载好的sfnttool.jarcopy至此目录)

class FontController extends Controller
{
    public function index()
    {
        $font_id = public_path('PingFangSCRegular.ttf');#此处为源字体,可自行下载其他类型
        $_word = request('word');#需要生成字体的字符串
        $_font_word_file_name = public_path("font/".md5($_word.$font_id).".ttf");#生成的新字体
        $url = asset("font/".md5($_word.$font_id).".ttf");#新字体URL
        if (file_exists($_font_word_file_name)) {
            return ['err' => false, "data" => $url];
        }
        exec("java -jar ".base_path('jar/sfnttool.jar')." -s '".$_word."' ".$font_id." ".$_font_word_file_name, $output); //执行字体抽取压缩
        if (file_exists($_font_word_file_name)) {
            return ['err' => false, "data" => $url];
        }
        #注:字体文件损坏则无法抽取压缩字体
        return ['err' => true, "msg" => 'fail']; 
    }
}

PHP+java实现动态生成字体