call 存储过程时必须声明表示符_位图字体存储格式 (BDF) 规范

阿道比公司官方写的,去年翻译的,姑且先发到这里吧。
囿于知乎专栏格式限制,阅读体验不是很好,我建议您在下面下载PDF版本来观看。
链接

387e4716772c5425e9147e5f09299901.png

1 简介

本文档描述了阿道比™ 位图字体分布格式(后称BDF)。这是种以 对人类与计算机皆易理解之目标设计的格式。本文档所述规则会在 没有任何预先告知的情况下更改。[1]

2 磁带存储格式

阿道比系统图元位图通常储存于磁带上。每张磁带的存储密度为1600位每英寸。磁带共有九个无标号磁道,包含有两个以上个(含两个)文 件。每一个文件的结尾都以一个文件结束(EOF)标识符结束。磁带的 最后一个文件以两个EOF标识符结束。物理记录的长度为512字节,而 最后一段物理记录(末尾有一个EOF标识符)只能存储少于512字节的 内容。每个文件都以ASCII可打印字符(&40~&176,包括回车和换行 符)编码。每一个文件都由可变长行序列构成。每行都由 附注 字体磁带也能从UNIX® tar格式中获取。请确保是指定的tar格式。 目前,阿道比系统不支持其它磁带格式。每行都由回车符(&015)和换行符(&012)截止。磁带上的第一个文件是阿道比系统版权提示。后面的文件是字体文件。下面会介绍字体文件 之格式。[2]

3 文件格式

BDF文件以ASCII 编码且此格式人类可读。文件以字体的全局信息开 始。后面跟着的是单个字形的位图信息,此数据描述了字体的单一尺 寸和位置。 在单个文件中可存储多个书写指示。

BDF文件拥有下节描述的通常形式。每个项目都于文件的单行文本中 被描述。行内项目以空格分隔,而行是无限长的。

文件给定的值为以下三类类型之一:字符串、数字或整型。数字类型包括 实数和整型;同样,该类型亦包括有符号和无符号两种数字存储类 型。此外,包不包含小数点或前导负号都是可以的。[3]

3.1 全局字形信息

下列关键字描述了对整个字体有效的全局信息。

STARTFONT 数字
STARTFONT 后的是文件使用的BDF标准版本号(例如“2.1”)。
COMMENT 字符串
注释行以关键字COMMENT声明。任何程序读取本文件时都将忽视该类 注释行。
FONT 字符串
FONT 后的是字体名。该字体名应遵守Post-Script™ 语言中对应的矢量 轮廓字体名(FontName )规范。
SIZE 字型尺寸 分辨率x 分辨率y
SIZE 后的是字形的尺寸(以PT计),而指示符x和y是显示设备的分辨 率(以DPI)。
FONTBOUNDINGBOX 字体包围盒x 字体包围盒y 分辨率x 分辨率y
FONTBOUNDINGBOX 后的是x轴之宽度及y方向之高度,以及x与y分别 照左下角原点的位移(水平书写方向上的)。且四值均以像素为单 位,类型为整型。(详见第四节范例。)
METRICSSET 整型 (可选)
METRICSSET 的整型值可为0、1、2。此三值分别对应到写模 式0(从左向右)、1(自上而下)或兼有。若未输入值,则该参数取 缺省值0。若该参数取1,则DWIDTH和SWIDTH 两关键字可选。 SWIDTH DWIDTH SWIDTH1 DWIDTH1 VVECTOR 这些度量关键字可以在全局层上定义整个字体的全部字形相关度量 值,但单个字形可在其定义部分藉由与本条相同的关键字及值重写其 字形度量信息。对于表意文字(汉字等)复合字体,因其含大量相同 度量信息,故于全局层定义度量信息可显著减小所得BDF文件。
STARTPROPERTIES n [4]
STARTPROPERTIES 后的是可选属性的数量(n)。 在之后的属性列表 里,有n 行特殊属性声明语句。这类语句在关键词后可能是整型值或 8 位图字体存储格式(BDF)规范 (93-3-22) 以ASCII双引号(八进制编码的ASCII代码:042)包裹的字符串值。 一行内使用两个引号字符将声明此二引号所包裹的字符串是内部引用 字符。
ENDPROPERTIES
关键字ENDPROPERTIES用于界定字体文件中STARTPROPERTIES关键 字引导的可选属性列表的范围。

3.2 单个字形信息

单字形节信息存储范围由关键字CHARS (后接字体字形数)指定。单 个字形定义数据范围由关键字STARTCHAR和ENDCHAR界定。该数据 声明度量信息及位图数据。

字形度量信息包括可缩放宽度(对应矢量字体的显示无关宽度)和屏 幕字体字形宽度,两者均以像素表示。应用程序可通过可缩放宽度精 确计算行宽并补偿舍入误差。

下列关键字描述了字形数据部分的信息。

CHARS 图形数量
CHARS后的是图形数量,即后方所引字形的数量。为确保实际读取并 处理正确数量的字形,推荐在文件末尾施行错误检查。 单个字形均由以下关键字所描述。
STARTCHAR 字符串
关键字STARTCHAR 后的字符串是字形名称。该名称应与PostScript基 字体之矢量字形编码名一致。在写模式0字体中,本值可为字形序号 的数字偏移。 [5]
ENCODING 整型 (整型)
ENCODING 后的是以阿道比标准编码编码的十进制正整数。若该字符 未收录于阿道比标准编码,则值应取–1。第二值是可选的,该值可声 明非标准编码值字形索引。
SWIDTH 可缩放宽度x0 可缩放宽度y0
SWIDTH 后的是可缩放宽度x0和可缩放宽度y0。即在写模式0情况 下,x和y方向上字形的可缩放宽度。此二可缩放宽度值为数字类型, 且以字形尺寸之1/1000为单位,同相应AFM矢量字体文件之宽度相 同。若设字形大小为p点,则宽度信息必以p/1000缩放以使打印机中输 出宽度等同于此位图字形以同等矢量字形之物理宽度显示所需宽度。 该宽度信息应被视为指示次字形原点照本字形原点之向量。写模式0字 体中,SWIDTH 关键字是必须的。 若需将可缩放宽度转为设备实际显示像素宽度,则请将上已给二值分别带 入公式:

分辨率以像素每英寸(PPI)为单位。实际设备宽度一定是整数,并根 据DWIDTH 节得出。
DWIDTH 设备宽度x0 设备宽度y0
DWIDTH 后以设备宽度x0、设备宽度y0两变量声明设备实显像素。与 SWIDTH关键字类似,该宽度信息同应被视为指示次字形原点照本字形 原点之向量。写模式0字体中,SWIDTH 关键字同是必须的。
SWIDTH1 可缩放宽度x1 可缩放宽度y1
SWIDTH1后的是swx1和swy1,即写模式1字体x、y轴上字形可缩放宽 度。值的类型是数字,声明了平面空间上的字形宽度。 DWIDTH1 设备宽度x1 设备宽度y1 DWIDTH1 声明了字形中x、y轴上字形像素宽度。与SWIDTH1关键字类 似,该宽度信息同应被视为指示次字形原点照本字形原点之向量。写 模式1字体中,SWIDTH 关键字同是必须的。 [6]
VVECTOR x偏移 y偏移
VVECTOR(可选)声明自原点0至原点1之矢量分量。上述二原点分别 指写模式0、1的原点。若METRICSSET值为1或2,则VVECTOR必被声 明于全局或单独字形。若于全局声明,则全部字形之VVECTOR均相同。 另,于单独字形内重声明此关键字将将该关键字值重定义。
图1分别指示了关键字VVECTOR中写模式0、1内原点位置。

0a14d22d10bdee97d5cda0d041b14bc2.png
图1 写模式0、1之间的度量关系
BBX 包围盒宽度 包围盒高度 包围盒x偏移0x 包围盒y偏移0y
BBX后的是包围盒宽度,即x轴上有涂黑像素的最大宽度;之后是BB 高度,即y轴上的高度。后二者为x与y轴上的位移长度包围盒x偏移0 和包围盒y偏移0。此二值基于位图左下角原点0计算。全部值为整 型,以像素为单位。
若字体已声明写模式为1,则VVECTOR 声明自原点0至原点1的偏移 量。例如,在自上至下书写顺序模式中,自原点1至位图左下角之偏 移为:

BITMAP <十六进制数据>
BITMAP 以十六进制字符串声明了字符位图数据。自包围盒X的高度值 始,在十六进位编码位图中读取高度行,并在尾补二进制零至最近整 字节位(即,二进制位数可被8整除。)十六进制数据可由单次取二 字节而转为二进制,所读数据之高低字节分别代表八位值的前后两四 字节部分。例如,二进制01101101可转为两十六进制数字,即6 (二进 制0110)、D (二进制1101)。
ENDCHAR
ENDCHAR 关键字标志当前字形声明结束。
ENDFONT
文件以关键字ENDFONT结束。若在全部字型定义前读取本关键字,则将报错。

4 范例

图2至4及例1演示了位图格式及字形度量信息。图2及3展示了两个单 字形,二者代码均举于例1所示字体中以供参考。图4则展示了写模式 0、1兼而有之的字形。

bd7d769836d1f0c2346ff7553703a86c.png
图2 字形“j”的位图及度量信息。

图2中,包围盒的表述方式同其它PostScript语言文件中的不同。(如阿道比字体度量(AFM)文件)包围盒X关键字后首二数字分别 指宽 度及高度,而末二字自左向右分别为于x、y轴的偏移量。 自原点(图中两指示符“+”之间)而算的宽度为8像素,即当前字符 原点距次字符原点之距离。该值与位图宽度无关。 位图字形的包围盒可用以预测位图节点读取数据量。首二数字给出位 图的宽高并与文件数据量严格对应。借由偏移量的设定可大量减少重 复空位。(参阅下文以了解实像素远离原点时的数据表示。)

274b57b20e848338e2c21f1e3a45b8de.png
图3 右单引号的位图字形及度量信息

图4中,实际位图照代码绘制位图尺寸更小。且偏移量将实际字型偏移 至原点(x轴偏移2像素、y轴偏移12像素) 。图2及图3的位图均为意大 利体。注意,右单引号的字形宽度使右原点位于涂黑像素左侧,这正 符合意大利体的书写模式。

位图部分由BITMAP 关键字引导,并以ENDCHAR 关键字结束(详见下 文例1)最好预测所需数据量(使用包围盒 信息)并以关键字 ENDCHAR 为查错方法。若您已读取完了了您所推导的位图数据信息, 若仍不可读到关键字ENDCHAR,则解析器应抛错:文件未完成或格式 出错。

位图信息由十六进位数字表示。每行均对应字形位图物理行。若表示 位图宽度被八整除不能,则应于其二进制末补零以至最近字节际。应 细心检查包围盒 信息以决定数据提取方式。

2ccf8c78e50ad1d16ee5b200f54c10e9.png
图4 写模式0、1的位图字形及度量

例1: BDF字体范例

下列代码为BDF位图文件的简单范例。该范例内包含两字形之声明。 (j及图2及图3中的右双引号):

 STARTFONT 2.1
COMMENT 该字体是BDF 2.1 格式的。
FONT Helvetica-BoldOblique
SIZE 8 200 200
FONTBOUNDINGBOX 9 24 -2 -6
STARTPROPERTIES 2
MinSpace 4
Copyright "版权所有 (c) 1987 Adobe Systems, Inc."
ENDPROPERTIES
CHARS 2
STARTCHAR j
ENCODING 106
SWIDTH 355 0
DWIDTH 8 0
BBX 9 22 -2 -6
BITMAP
0380
0380
0380
0380
0000
0700
0700
0700
0700
0E00
0E00
0E00
0E00
0E00
1C00
1C00
1C00
ENDCHAR
STARTCHAR c133
ENCODING 39
SWIDTH 1000 0
DWIDTH 22 0
BBX 17 17 2 -5
SWIDTH1 0 -1000
DWIDTH1 0 -22
VVECTOR 10 14
1C00
2C00
7800
F000
E000
ENDCHAR
STARTCHAR quoteright
ENCODING 39
SWIDTH 223 0
DWIDTH 5 0
BBX 4 6 2 12
BITMAP
70
70
60
E0
C0
ENDCHAR
ENDFONT

附录: 相照早期版本的改动


自一九八九年一月十六日以降的改动

  • 文档已新布局重格式化。同时进行了少量的编辑与更改。

自一九八九年一月十六日以降的改动

  • 对格式扩展以支持东亚文字垂直书写排版。为此增加了新关键字 METRICSSET、SWIDTH1、DWIDTH1、VVECTOR。
  • 增补新的全局关键字CONTENTVERSION。
  • 添加全局属性声明关键字。若任意度量相关关键字于首CHARS 关键 字后添加,则这些关键字的声明适用于全部字形。全局度量关键字 可被单个字形内度量关键字覆盖。
  • 字符串长及行长制限取消。2.1版及先前版本中,STARTCHAR 后字 形名称字符串长度被限为14字节内;而2.2版将字形名称长度增补至 65535字节,即PostScript语言字符串长度。

参考

  1. ^本文档的此版本中,术语“字符”已被更改为“字形”——这是字体 工业上通常所使用的正确术语。但顾及到兼容性,诸 如“CHARS”“START-CHAR”这样的关键字仍保留先前写法。
  2. ^字体磁带也能从UNIX® tar格式中获取。请确保是指定的tar格式。 目前,阿道比系统不支持其它磁带格式。
  3. ^此版本提高了行长的限制。在此版本,字符串类型变量最大长度被 提升至65535字节。故现在单行至少可以有此长度。虽然基于2.1标准 的解析器可以解析2.2标准的BDF文件,但也有出现兼容问题的可能 性。
  4. ^附注 此文档的2.1版仅准许存在字形层上的度量关键字SWIDTH和 DWIDTH。 若需兼容2.1版标准,则不应在全局信息部分定义本度量关键字。 这些关键字的具体含义将在3.2节“单个字形信息”中详细阐述。
  5. ^2.2版以前,此字符串值最长14字节。
  6. ^若METRICSSET设定为1或2,则SWIDTH1及DWIDTH1均需声明; 若METRICSSET设定为0,则前两者均不得声明。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值