项目开中,在等级证书打印的模块中,规定使用指定的字体,但是涉及到了广大考生的姓名就出现了问题.因中国文化博大精深,考生的名字也是丰富多彩的,在打印证书的过程中,发现规定使用的字体根本不够用,总有一些考生的姓名中包含有生僻字,结果就会出现PDF证书上面名字打印不出来.
总结:在使用字体渲染某些字符时,有可能渲染出空白或者“口”字形,原因在于该字体文件中不包含该字符的字形。

出现这个问题后,首先想到的是在生成证书之前,对广大考生的姓名进行扫描检测,事先知道哪些考生姓名中的字在规定使用的字体中不存在,这时候就需要对字体文件(.ttf)内容进行读取了. 下面是我的思路:

PHP中没有直接对ttf文件操作的方法,那么想办法将ttf转换下格式,我想到的是将ttf文件转换为xml类型的文件;

解决方案:

安装fonttools:

fontTools是一个使用Python编写的用于处理字体的库。该项目包括TTX工具,该工具可以将TrueTypeOpenType字体与XML文本格式(也称为TTX)相互转换。它支持TrueTypeOpenTypeAFM,并在某种程度上支持Type 1和某些Mac特定格式。

安装命令:

该软件包在Python软件包索引(PyPI)中列出,因此您可以使用pip进行安装:

pip install fonttools

安装fonttools后,将ttf转换为xml格式可以使用文本化的形式查看字体:

ttx test.ttf

也可以指定某个表导出:

ttx -t GlyphOrder test.ttf

此时ttf文件转换为了ttx文件.

接着用PHP代码(本人是在Laravel框架中写的示例)获取ttx文件内容,取出对应的字体:

        $file = "/Users/zhouqinghe/Desktop/test.ttx";$xml_data = simplexml_load_file($file, "SimpleXMLElement", LIBXML_NOCDATA);$json = json_encode($xml_data);$array = json_decode($json, TRUE);$glyph = $array["GlyphOrder"]['GlyphID'];$array_font = [];foreach ($glyph as $value) {$uni_name = $value["@attributes"]["name"];if (Str::startsWith($uni_name, 'uni') && !Str::endsWith($uni_name, '.vert')) {$unicode = "\u" . substr($uni_name, 3);$font_cn = json_decode(sprintf('"%s"', $unicode));if (empty($font_cn)) {continue;}$font_data = ['unicode' => $unicode,'font' => $font_cn];$array_font[] = $font_data;}}dd($array_font);

结果


最后我是把获取结果整理为一个JSON格式的文件「当然也可以存到了数据表中」,隔一定的时间扫描最新增加的考生姓名,再以邮件通知的形式告诉管理员,哪些考生的姓名中存在规定使用字体文件中没有的字形. 对于这些考生需要单独进行处理

TTF字体文件内容获取相关推荐

  1. 【Flutter】Icons 组件 ( FlutterIcon 下载图标 | 自定义 svg 图标生成 ttf 字体文件 | 使用下载的 ttf 图标文件 )

    文章目录 一.FlutterIcon 下载图标 二.自定义 svg 图标生成 ttf 字体文件 三.使用下载的 ttf 图标文件 四.完整代码示例 五.相关资源 一.FlutterIcon 下载图标 ...

  2. ttf文件 python 打开_[译]JS解析TTF字体文件

    把字体拖到下边的方框,获取其中的奥妙!点此获取示例ttf字体文件. TTF文件拖到这里 在这篇文章,我们计划操作如下: 将字体文件拖入网页,并读取之 尽管ttf文件是为C语言读取设计的,但我们仍试图解 ...

  3. java 解析ttf字体文件

    要了解ttf字体文件的原理更方便对代码的理解 package com.maoyan.movie.ttf.encode;public class PostTableHeader {public long ...

  4. 如何编辑ttf字体文件

    libfreetype的目标是以最小的内存最快的速度,读取和渲染字体.因此libfreetype并不适宜用来编辑ttf字体文件. 编辑字体文件,可以用FontCreator.微软fonttools.f ...

  5. .ttf字体文件引入vue项目及使用

    出自文章:.ttf字体文件引入vue项目及使用 UED要求使用非系统自带字体 1.在项目的assets文件夹中创建fonts文件夹,将下载好的.ttf字体文件放进去,并创建font.css文件 2.在 ...

  6. win7使用android字体文件,处置win7系统安装TTF字体文件的详细步骤

    技术小编发觉操作系统在使用途中会有win7系统安装TTF字体文件的问题,但是很多朋友还不了解win7系统安装TTF字体文件的情况该怎么操作,今天我就来将win7系统安装TTF字体文件的方法分享给你们, ...

  7. css如何引用.ttf字体文件|@font-face

    这里复习一下如何在css文件里引用.ttf字体文件. 如下图,红色圈起来的标题需要使用productsans字体,绿色圈起来的小标题需要使用roboto字体,字体文件已下载到fonts文件夹里,接下来 ...

  8. LVGL学习之路——基于lv_lib_freetype库的TTF字体文件动态加载中文字体(阿里普惠字体)

    前言   在学习lvgl中,在英文字体上很多人都用过,但是中文字体往往需要靠取模去实现.那么我就在想,如何像windows那样加载动态的字体呢,这样想做多大字体都行.于是就开始了字体的移植. 什么是t ...

  9. 小程序引入ttf字体文件

    首先要把我们需要使用的TTF字体文件上传到服务器上,拿到一个网络路径,如下图引入到wxss文件内: 然后直接使用上面我们定义的名称就可以.

  10. ttf能改成gfont吗_如何编辑ttf字体文件

    展开全部 1.首先百度搜索"fontforge",找一个安全的网站进行32313133353236313431303231363533e4b893e5b19e31333431373 ...

最新文章

  1. Google Play服务中的条码扫描识别
  2. 微软的 Android 计划:邪恶的天才计划或只是邪恶?
  3. v系列服务器cpu,服务器cpu v什么意思
  4. mybatis教程--一对多查询
  5. java jni 数据类型_【Android JNI】Native层解析Java复杂数据类型HashMap
  6. 事件总线知多少(2)
  7. 我心中的核心组件~HttpHandler和HttpModule实现图像的缩放与Url的重写
  8. Eclipse SVN冲突解决方案
  9. 认证Authentication
  10. cpu win10 安装yolo_Win10 超详细 0基础 搭建YOLOV5教程【环境搭建篇】
  11. HTTP协议解说以及TCP/IP认识
  12. 年终工作总结汇报和述职报告ppt模板,内含范文可参考,精选20套可下载
  13. 图书信息管理系统设计与实现c语言,图书信息管理系统设计(c语言)
  14. 刚刚提取了金山毒霸的[垃圾清理] 和 [隐私清理], 分享方法,大家可以自己试一下
  15. 02-Spring的核心API
  16. java设置excel表头_设置Java导出Excel表头
  17. 神策面试官的修炼之道,选对人与吸引人 | 神策军
  18. 疫情当前,「在家远程办公」可能是最佳选择
  19. 苹果手机一卡通找不到了的解决方案 换手机 重下APP 找不到一卡通解决方案
  20. 部署DM MPP主备集群

热门文章

  1. 安全可靠的透明加密软件
  2. ML — 浅谈聚类和分类的区别
  3. 计算机dll修复工具,DLL修复工具有哪些?DLL修复工具盘点
  4. 基于群晖DS216+II的家庭存储解决方案
  5. 美国服务器查询网站查询网站查询网站查询网站查询,全球DNS节点查询网
  6. (SWAT-3)SWAT土壤数据库的建立
  7. 51单片机 多机串口通讯实验与双机串口通讯实验及proteus仿真
  8. 易语言静态连接器提取_正确易语言链接器link.exe,使易语言支持静态编译
  9. 图解TCPIP(第5版)
  10. bubblesort java,算法bubbleSort()