此页面由社区从英文翻译而来。了解更多并加入 MDN Web Docs 社区。

View in English Always switch to English

FontData

有限可用

此特性不属于基线,因为它尚未在主流浏览器中得到支持。

Want more browser support for this feature? Tell us why.

实验性: 这是一项实验性技术
在将其用于生产之前,请仔细检查浏览器兼容性表格。

Local Font Access API 的 FontData 接口表示单个本地字体。

实例属性

FontData.family 只读

返回字体的字体族。

FontData.fullName 只读

返回字体的全名。

FontData.postscriptName 只读

返回字体的 PostScript 名称。

FontData.style 只读

返回字体的样式。

实例方法

FontData.blob()

返回一个会兑现包含底层字体文件的原始字节的 Blob 的 Promise。

示例

有关实时演示,请参阅字体选择演示。

字体枚举

以下代码片段将查询所有可用的字体并打印元数据。例如,这可以用于填充字体选择器控件。

js
async function logFontData() {
  try {
    const availableFonts = await window.queryLocalFonts();
    for (const fontData of availableFonts) {
      console.log(fontData.postscriptName);
      console.log(fontData.fullName);
      console.log(fontData.family);
      console.log(fontData.style);
    }
  } catch (err) {
    console.error(err.name, err.message);
  }
}

访问底层数据

blob() 方法提供对底层 SFNT 数据的访问——这是一种可以包含其他字体格式的字体文件格式,例如 PostScript、TrueType、OpenType 或 Web 开放字体格式(WOFF)。

js
async function computeOutlineFormat() {
  try {
    const availableFonts = await window.queryLocalFonts({
      postscriptNames: ["ComicSansMS"],
    });
    for (const fontData of availableFonts) {
      // `blob()` 方法返回一个包含有效且完整的 SFNT 包装字体数据的 Blob。
      const sfnt = await fontData.blob();
      // 仅裁剪出我们需要的字节部分:前 4 个字节是 SFNT 版本信息。
      // 规范:https://learn.microsoft.com/zh-cn/typography/opentype/spec/otff#organization-of-an-opentype-font
      const sfntVersion = await sfnt.slice(0, 4).text();

      let outlineFormat = "UNKNOWN";
      switch (sfntVersion) {
        case "\x00\x01\x00\x00":
        case "true":
        case "typ1":
          outlineFormat = "truetype";
          break;
        case "OTTO":
          outlineFormat = "cff";
          break;
      }
      console.log("矢量字体格式:", outlineFormat);
    }
  } catch (err) {
    console.error(err.name, err.message);
  }
}

规范

规范
Local Font Access API
# fontdata-interface

浏览器兼容性

参见