OTS 解析错误:无法从字体数据中实例化字体

Posted

技术标签:

【中文标题】OTS 解析错误:无法从字体数据中实例化字体【英文标题】:OTS parsing error: Unable to instantiate font face from font data 【发布时间】:2019-06-12 11:04:50 【问题描述】:

我将这些数据用于计算我的cmap 表:

 version:  type: 'USHORT', value: 0 ,
  numTables:  type: 'USHORT', value: 1 ,
  platformID:  type: 'USHORT', value: 0 ,
  encodingID:  type: 'USHORT', value: 6 ,
  offset:  type: 'ULONG', value: 12 ,
  format:  type: 'USHORT', value: 4 ,
  cmap4Length:  type: 'USHORT', value: 34 ,
  language:  type: 'USHORT', value: 0 ,
  segCountX2:  type: 'USHORT', value: 4 ,
  searchRange:  type: 'USHORT', value: 4 ,
  entrySelector:  type: 'USHORT', value: 1 ,
  rangeShift:  type: 'USHORT', value: 0 ,
  end_0:  type: 'USHORT', value: 97 ,
  end_1:  type: 'USHORT', value: 65535 ,
  reservedPad:  type: 'USHORT', value: 0 ,
  start_0:  type: 'USHORT', value: 97 ,
  start_1:  type: 'USHORT', value: 65535 ,
  idDelta_0:  type: 'SHORT', value: -97 ,
  idDelta_1:  type: 'SHORT', value: 1 ,
  idRangeOffset_0:  type: 'USHORT', value: 0 ,
  idRangeOffset_1:  type: 'USHORT', value: 0 ,
  glyph_0:  type: 'USHORT', value: 0  

生成的整体字体文件是这样的:

00000000: 4f54 544f 0009 0008 0003 0001 4346 4632  OTTO........CFF2
00000010: 0000 0000 0000 009c 0000 0055 636d 6170  ...........Ucmap
00000020: 0000 0000 0000 00f4 0000 002e 6865 6164  ............head
00000030: 0000 0000 0000 0124 0000 0036 6868 6561  .......$...6hhea
00000040: 0000 0000 0000 015c 0000 0024 686d 7478  .......\...$hmtx
00000050: 0000 0000 0000 0180 0000 0004 6d61 7870  ............maxp
00000060: 0000 0000 0000 0184 0000 0006 6e61 6d65  ............name
00000070: 0000 0000 0000 018c 0000 0006 4f53 2f32  ............OS/2
00000080: 0000 0000 0000 0194 0000 0064 706f 7374  ...........dpost
00000090: 0000 0000 0000 01f8 0000 0020 0200 0500  ........... ....
                                         ^ ^  ^ ^
                                         | |  | |__________________ 0
                                         | |  |____________________ 5
                                         | |_______________________ 0
                                         |_________________________ 2 (start of CFF table)

000000a0: 171e 0a00 1f1e 0f1e 0f1e 0a00 1f1e 0f1e  ................
           ^ ^  ^ ^  ^ ^  ^ ^  ^ ^  ^ ^  ^ ^  ^ ^
           | |  | |  | |  | |  | |  | |  | |  | |__________________ 30
           | |  | |  | |  | |  | |  | |  | |  |____________________ 15
           | |  | |  | |  | |  | |  | |  | |_______________________ 30
           | |  | |  | |  | |  | |  | |  |_________________________ 31
           | |  | |  | |  | |  | |  | |____________________________ 0
           | |  | |  | |  | |  | |  |______________________________ 10
           | |  | |  | |  | |  | |_________________________________ 30
           | |  | |  | |  | |  |___________________________________ 15
           | |  | |  | |  | |______________________________________ 30
           | |  | |  | |  |________________________________________ 15
           | |  | |  | |___________________________________________ 30
           | |  | |  |_____________________________________________ 31
           | |  | |________________________________________________ 0
           | |  |__________________________________________________ 10
           | |_____________________________________________________ 30 /cff2/header/fontmatrix
           |_______________________________________________________ 23

000000b0: 0f0c 07aa 11cd 0c24 a818 da0c 2500 0000  .......$....%...
           ^ ^  ^ ^  ^ ^  ^ ^  ^ ^  ^ ^  ^ ^  ^ ^
           | |  | |  | |  | |  | |  | |  | |  | |__________________ 0
           | |  | |  | |  | |  | |  | |  | |  |____________________ 0
           | |  | |  | |  | |  | |  | |  | |_______________________ 0 /globalsubr count32
           | |  | |  | |  | |  | |  | |  |_________________________ 37  = op2 \cff2\header
           | |  | |  | |  | |  | |  | |____________________________ 12  = op1
           | |  | |  | |  | |  | |  |______________________________ 218 = 139 + 79
           | |  | |  | |  | |  | |_________________________________ 24  = op
           | |  | |  | |  | |  |___________________________________ 168 = 139 + 29
           | |  | |  | |  | |______________________________________ 36  = op2
           | |  | |  | |  |________________________________________ 12  = op1
           | |  | |  | |___________________________________________ 205 = 139 + 66
           | |  | |  |_____________________________________________ 17  = op
           | |  | |________________________________________________ 170 = 139 + 31
           | |  |__________________________________________________ 7 \cff2\header\fontmatrix
           | |_____________________________________________________ 12
           |_______________________________________________________ 15

000000c0: 0000 0000 0000 0101 011d 95f7 3405 8b77  ............4..w
           ^ ^  ^ ^  ^ ^  ^ ^  ^ ^  ^ ^  ^ ^  ^ ^
           | |  | |  | |  | |  | |  | |  | |  | |__________________ 119 = 139 - 20
           | |  | |  | |  | |  | |  | |  | |  |____________________ 139 = 0
           | |  | |  | |  | |  | |  | |  | |_______________________ 5   = op 5
           | |  | |  | |  | |  | |  | |  |_________________________ 52  = 160 - 108
           | |  | |  | |  | |  | |  | |____________________________ 247 = int2
           | |  | |  | |  | |  | |  |______________________________ 149 = 139 + 10
           | |  | |  | |  | |  | |_________________________________ 29 offset
           | |  | |  | |  | |  |___________________________________ 1 /charstring offsets
           | |  | |  | |  | |______________________________________ 1 /charstring offSize
           | |  | |  | |  |________________________________________ 1 
           | |  | |  | |___________________________________________ 0
           | |  | |  |_____________________________________________ 0
           | |  | |________________________________________________ 0 /charstring count
           | |  |__________________________________________________ 0
           | |_____________________________________________________ 0 /vstore length16
           |_______________________________________________________ 0

000000d0: 15db 9f05 3b8b 05db 8b15 3b77 058b c715  ....;.....;w....
           ^ ^  ^ ^  ^ ^  ^ ^  ^ ^  ^ ^  ^ ^  ^ ^
           | |  | |  | |  | |  | |  | |  | |  | |__________________ 21 = op 21
           | |  | |  | |  | |  | |  | |  | |  |____________________ 199 = 139 + 60
           | |  | |  | |  | |  | |  | |  | |_______________________ 139 = 139
           | |  | |  | |  | |  | |  | |  |_________________________ 5 = op 5
           | |  | |  | |  | |  | |  | |____________________________ 119 = 139 - 20
           | |  | |  | |  | |  | |  |______________________________ 59 = 139 - 80
           | |  | |  | |  | |  | |_________________________________ 21 = op 21
           | |  | |  | |  | |  |___________________________________ 139 = 139
           | |  | |  | |  | |______________________________________ 219 = 139 + 80
           | |  | |  | |  |________________________________________ 5 = op 5
           | |  | |  | |___________________________________________ 139 = 139
           | |  | |  |_____________________________________________ 59 = 139 - 80
           | |  | |________________________________________________ 5 = op 5
           | |  |__________________________________________________ 159 = 139 + 20
           | |_____________________________________________________ 219 = 139 + 80
           |_______________________________________________________ 21  = op 21 

000000e0: db4f 058b c715 0000 0001 0101 048b 8b12  .O..............
           ^ ^  ^ ^  ^ ^  ^ ^  ^ ^  ^ ^  ^ ^  ^ ^
           | |  | |  | |  | |  | |  | |  | |  | |__________________ 18 = op
           | |  | |  | |  | |  | |  | |  | |  |____________________ 139 = 0
           | |  | |  | |  | |  | |  | |  | |_______________________ 139 = 0
           | |  | |  | |  | |  | |  | |  |_________________________ 4 /fontindex offsets
           | |  | |  | |  | |  | |  | |____________________________ 1 /fontindex offsets 
           | |  | |  | |  | |  | |  |______________________________ 1 /fontindex offsize
           | |  | |  | |  | |  | |_________________________________ 1
           | |  | |  | |  | |  |___________________________________ 0
           | |  | |  | |  | |______________________________________ 0
           | |  | |  | |  |________________________________________ 0 /fontindex count
           | |  | |  | |___________________________________________ 21 = op 21 /charstring
           | |  | |  |_____________________________________________ 199 = 139 + 60
           | |  | |________________________________________________ 139 = 139
           | |  |__________________________________________________ 5 = op 5
           | |_____________________________________________________ 79 = 139 - 60
           |_______________________________________________________ 219 = 139 + 80

000000f0: 0000 0000 0000 0001 0000 0006 0000 000c  ................
           ^ ^  ^ ^  ^ ^  ^ ^  ^ ^  ^ ^  ^ ^  ^ ^
           | |  | |  | |  | |  | |  | |  | |  | |__________________ 12
           | |  | |  | |  | |  | |  | |  | |  |____________________ 0
           | |  | |  | |  | |  | |  | |  | |_______________________ 0
           | |  | |  | |  | |  | |  | |  |_________________________ 0 /offset
           | |  | |  | |  | |  | |  | |____________________________ 6
           | |  | |  | |  | |  | |  |______________________________ 0 /encodingID
           | |  | |  | |  | |  | |_________________________________ 0
           | |  | |  | |  | |  |___________________________________ 0 /platformID
           | |  | |  | |  | |______________________________________ 1
           | |  | |  | |  |________________________________________ 0 /numTables
           | |  | |  | |___________________________________________ 0
           | |  | |  |_____________________________________________ 0 /version
           | |  | |________________________________________________ 0
           | |  |__________________________________________________ 0
           | |_____________________________________________________ 0
           |_______________________________________________________ 0

00000100: 0004 0022 0000 0004 0004 0001 0000 0061  ..."...........a
           ^ ^  ^ ^  ^ ^  ^ ^  ^ ^  ^ ^  ^ ^  ^ ^
           | |  | |  | |  | |  | |  | |  | |  | |__________________ 97
           | |  | |  | |  | |  | |  | |  | |  |____________________ 0 /end_0
           | |  | |  | |  | |  | |  | |  | |_______________________ 0
           | |  | |  | |  | |  | |  | |  |_________________________ 0 /rangeShift
           | |  | |  | |  | |  | |  | |____________________________ 1
           | |  | |  | |  | |  | |  |______________________________ 0 /entrySelector
           | |  | |  | |  | |  | |_________________________________ 4
           | |  | |  | |  | |  |___________________________________ 0 /searchRange
           | |  | |  | |  | |______________________________________ 4
           | |  | |  | |  |________________________________________ 0 /segCountX2
           | |  | |  | |___________________________________________ 0
           | |  | |  |_____________________________________________ 0 /language
           | |  | |________________________________________________ 34
           | |  |__________________________________________________ 0 /cmap4length
           | |_____________________________________________________ 4
           |_______________________________________________________ 0 /format

00000110: ffff 0000 0061 ffff ff9f 0001 0000 0000  .....a..........
           ^ ^  ^ ^  ^ ^  ^ ^  ^ ^  ^ ^  ^ ^  ^ ^
           | |  | |  | |  | |  | |  | |  | |  | |__________________ 0
           | |  | |  | |  | |  | |  | |  | |  |____________________ 0 /idRangeOffset_1
           | |  | |  | |  | |  | |  | |  | |_______________________ 0
           | |  | |  | |  | |  | |  | |  |_________________________ 0 /idRangeOffset_0
           | |  | |  | |  | |  | |  | |____________________________ 1
           | |  | |  | |  | |  | |  |______________________________ 0 /delta_1
           | |  | |  | |  | |  | |_________________________________ 159
           | |  | |  | |  | |  |___________________________________ 255 /delta_0
           | |  | |  | |  | |______________________________________ 255
           | |  | |  | |  |________________________________________ 255 /start_1
           | |  | |  | |___________________________________________ 97
           | |  | |  |_____________________________________________ 0 /start_0
           | |  | |________________________________________________ 0
           | |  |__________________________________________________ 0 /reservePad
           | |_____________________________________________________ 255
           |_______________________________________________________ 255 /end_1

00000120: 0000 0000 0001 0000 0001 0000 0000 0000  ................
           ^ ^  ^ ^  ^ ^  ^ ^  ^ ^  ^ ^  ^ ^  ^ ^
           | |  | |  | |  | |  | |  | |  | |  | |__________________ 0
           | |  | |  | |  | |  | |  | |  | |  |____________________ 0
           | |  | |  | |  | |  | |  | |  | |_______________________ 0
           | |  | |  | |  | |  | |  | |  |_________________________ 0
           | |  | |  | |  | |  | |  | |____________________________ 0
           | |  | |  | |  | |  | |  |______________________________ 0
           | |  | |  | |  | |  | |_________________________________ 1
           | |  | |  | |  | |  |___________________________________ 0
           | |  | |  | |  | |______________________________________ 0
           | |  | |  | |  |________________________________________ 0
           | |  | |  | |___________________________________________ 1
           | |  | |  |_____________________________________________ 0
           | |  | |________________________________________________ 0
           | |  |__________________________________________________ 0 \cmap
           | |_____________________________________________________ 0
           |_______________________________________________________ 0 /glyph_0

00000130: 5f0f 3cf5 0003 03e8 0000 0000 d867 5bd6  _.<..........g[.
00000140: 0000 0000 d867 5bd6 0000 0000 005a 0000  .....g[......Z..
00000150: 0000 0003 0002 0000 0000 0000 0001 0000  ................
00000160: 00c8 0064 0000 005a 0000 0000 0000 0001  ...d...Z........
00000170: 0000 0000 0000 0000 0000 0000 0000 0001  ................
00000180: 005a 0000 0000 5000 0001 0000 0000 0000  .Z....P.........
00000190: 0006 0000 0005 0000 0000 0000 0000 028a  ................
000001a0: 02bb 0000 008c 028a 02bb 0000 01df 0031  ...............1
000001b0: 0102 0000 0000 0000 0000 0000 0000 0000  ................
000001c0: 0000 0000 0000 0000 0000 0000 0000 5858  ..............XX
000001d0: 5858 0000 0000 0000 0000 0000 0000 0000  XX..............
000001e0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000001f0: 0000 0000 0000 0000 0003 0000 0000 0000  ................
00000200: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000210: 0000 0000 0000 0000                      ........

想知道如果在第一个 JSON 中,一切看起来都不错/符合规范。我基本上只是连接来自该 JSON 的十进制值,然后将其放入缓冲区并将其写入文件,因此如果准确,则最终结果应该是准确的。

不确定 255 的值是否正确,否则我看不到任何会使其不正确的东西。想知道你是否能找到任何东西。

如果我在某些地方稍作改动,那么我会得到:

OTS parsing error: cmap: Failed to parse table

否则得到:

OTS parsing error: cmap: Failed to serialize table

不确定哪个离工作更近或更远。

如果我改变这两个:

platformID:  type: 'USHORT', value: 3 ,
encodingID:  type: 'USHORT', value: 1 ,

我明白了:

OTS parsing error: Unable to instantiate font face from font data.

【问题讨论】:

您可能需要解释您是如何制作字体的(您显示的许多值是计算值,而不是您需要自己写出的值),以及如何您正在运行 OTS,但除此之外,我强烈建议您使用 TTX 构建类似的 CFF2 并查看它与您提出的不同之处。 【参考方案1】:

这是一个非常普遍的错误,包含许多子错误。更多信息可以通过fontbakery 或Mac Font Validator 找到,它们提供的信息略有不同。还有其他项目,例如 Microsoft Font Validator 和 OTS,但这些项目提供了显着的调试改进。

仍未解决整体问题,但了解更好的错误消息有助于重新构建问题。

【讨论】:

以上是关于OTS 解析错误:无法从字体数据中实例化字体的主要内容,如果未能解决你的问题,请参考以下文章

Webpack“OTS 解析错误”加载字体

自托管 Google 的 Material Design 图标字体 - OTS 解析错误 - 无效的版本标签

Spring Boot - Font Awesome OTS 解析错误:转换失败

webpack 字体无法解析

如何用java编写图形化显示sql查询结果

如何解析包含样式、颜色、字体系列、字体大小等 Html 标签的数据,并在 android 的 textview 中设置