日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

TTF字体文件内容获取

發布時間:2023/12/10 编程问答 53 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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字体文件内容获取的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。