TTF字体文件内容获取
项目开中,在等级证书打印的模块中,规定使用指定的字体,但是涉及到了广大考生的姓名就出现了问题.因中国文化博大精深,考生的名字也是丰富多彩的,在打印证书的过程中,发现规定使用的字体根本不够用,总有一些考生的姓名中包含有生僻字,结果就会出现PDF证书上面名字打印不出来.
总结:在使用字体渲染某些字符时,有可能渲染出空白或者“口”字形,原因在于该字体文件中不包含该字符的字形。
出现这个问题后,首先想到的是在生成证书之前,对广大考生的姓名进行扫描检测,事先知道哪些考生姓名中的字在规定使用的字体中不存在,这时候就需要对字体文件(.ttf)内容进行读取了. 下面是我的思路:
PHP中没有直接对ttf
文件操作的方法,那么想办法将ttf
转换下格式,我想到的是将ttf
文件转换为xml
类型的文件;
解决方案:
安装fonttools
:
fontTools
是一个使用Python
编写的用于处理字体的库。该项目包括TTX
工具,该工具可以将TrueType
和OpenType
字体与XML
文本格式(也称为TTX
)相互转换。它支持TrueType
,OpenType
,AFM
,并在某种程度上支持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字体文件内容获取相关推荐
- 【Flutter】Icons 组件 ( FlutterIcon 下载图标 | 自定义 svg 图标生成 ttf 字体文件 | 使用下载的 ttf 图标文件 )
文章目录 一.FlutterIcon 下载图标 二.自定义 svg 图标生成 ttf 字体文件 三.使用下载的 ttf 图标文件 四.完整代码示例 五.相关资源 一.FlutterIcon 下载图标 ...
- ttf文件 python 打开_[译]JS解析TTF字体文件
把字体拖到下边的方框,获取其中的奥妙!点此获取示例ttf字体文件. TTF文件拖到这里 在这篇文章,我们计划操作如下: 将字体文件拖入网页,并读取之 尽管ttf文件是为C语言读取设计的,但我们仍试图解 ...
- java 解析ttf字体文件
要了解ttf字体文件的原理更方便对代码的理解 package com.maoyan.movie.ttf.encode;public class PostTableHeader {public long ...
- 如何编辑ttf字体文件
libfreetype的目标是以最小的内存最快的速度,读取和渲染字体.因此libfreetype并不适宜用来编辑ttf字体文件. 编辑字体文件,可以用FontCreator.微软fonttools.f ...
- .ttf字体文件引入vue项目及使用
出自文章:.ttf字体文件引入vue项目及使用 UED要求使用非系统自带字体 1.在项目的assets文件夹中创建fonts文件夹,将下载好的.ttf字体文件放进去,并创建font.css文件 2.在 ...
- win7使用android字体文件,处置win7系统安装TTF字体文件的详细步骤
技术小编发觉操作系统在使用途中会有win7系统安装TTF字体文件的问题,但是很多朋友还不了解win7系统安装TTF字体文件的情况该怎么操作,今天我就来将win7系统安装TTF字体文件的方法分享给你们, ...
- css如何引用.ttf字体文件|@font-face
这里复习一下如何在css文件里引用.ttf字体文件. 如下图,红色圈起来的标题需要使用productsans字体,绿色圈起来的小标题需要使用roboto字体,字体文件已下载到fonts文件夹里,接下来 ...
- LVGL学习之路——基于lv_lib_freetype库的TTF字体文件动态加载中文字体(阿里普惠字体)
前言 在学习lvgl中,在英文字体上很多人都用过,但是中文字体往往需要靠取模去实现.那么我就在想,如何像windows那样加载动态的字体呢,这样想做多大字体都行.于是就开始了字体的移植. 什么是t ...
- 小程序引入ttf字体文件
首先要把我们需要使用的TTF字体文件上传到服务器上,拿到一个网络路径,如下图引入到wxss文件内: 然后直接使用上面我们定义的名称就可以.
- ttf能改成gfont吗_如何编辑ttf字体文件
展开全部 1.首先百度搜索"fontforge",找一个安全的网站进行32313133353236313431303231363533e4b893e5b19e31333431373 ...
最新文章
- Google Play服务中的条码扫描识别
- 微软的 Android 计划:邪恶的天才计划或只是邪恶?
- v系列服务器cpu,服务器cpu v什么意思
- mybatis教程--一对多查询
- java jni 数据类型_【Android JNI】Native层解析Java复杂数据类型HashMap
- 事件总线知多少(2)
- 我心中的核心组件~HttpHandler和HttpModule实现图像的缩放与Url的重写
- Eclipse SVN冲突解决方案
- 认证Authentication
- cpu win10 安装yolo_Win10 超详细 0基础 搭建YOLOV5教程【环境搭建篇】
- HTTP协议解说以及TCP/IP认识
- 年终工作总结汇报和述职报告ppt模板,内含范文可参考,精选20套可下载
- 图书信息管理系统设计与实现c语言,图书信息管理系统设计(c语言)
- 刚刚提取了金山毒霸的[垃圾清理] 和 [隐私清理], 分享方法,大家可以自己试一下
- 02-Spring的核心API
- java设置excel表头_设置Java导出Excel表头
- 神策面试官的修炼之道,选对人与吸引人 | 神策军
- 疫情当前,「在家远程办公」可能是最佳选择
- 苹果手机一卡通找不到了的解决方案 换手机 重下APP 找不到一卡通解决方案
- 部署DM MPP主备集群
热门文章
- 安全可靠的透明加密软件
- ML — 浅谈聚类和分类的区别
- 计算机dll修复工具,DLL修复工具有哪些?DLL修复工具盘点
- 基于群晖DS216+II的家庭存储解决方案
- 美国服务器查询网站查询网站查询网站查询网站查询,全球DNS节点查询网
- (SWAT-3)SWAT土壤数据库的建立
- 51单片机 多机串口通讯实验与双机串口通讯实验及proteus仿真
- 易语言静态连接器提取_正确易语言链接器link.exe,使易语言支持静态编译
- 图解TCPIP(第5版)
- bubblesort java,算法bubbleSort()