fonts - 为什么我的 ExtendScript 无法访问 `name` 返回给我的某些字体的 `app.activeDocument.fonts` 属性?

标签 fonts adobe extendscript adobe-indesign

我正在制作一个 ExtendScript 脚本,它会遍历 InDesign 文档中使用的所有字体并提醒它们的名称。这是代码

var usedFonts = app.activeDocument.fonts;
var nbUsedFonts = usedFonts.length;
var i;
for (i = 0; i < nbUsedFonts; ++i) {
  alert(usedFonts.item(i).name);
}

但是,对于某些字体,当我访问其 name 属性时,脚本会崩溃(对象无效)。我可以访问所有字体而不会崩溃的唯一属性是 isValid 属性,它允许我确定那些我无法访问 name 属性的字体都具有isValid === false,而访问 name 不会导致问题的所有字体都为 isValid === true

令我惊讶的是,如果我手动将光标放在使用有问题字体之一的文本中,其名称将显示为正常的字体选择器或任何名称。

为什么我无法访问 app.activeDocument.fonts 返回给我的某些字体的 name 属性?

注意:

以下是一些有问题的字体:

  • Electra LH,斜体
  • Electra LH、粗体小号大写字母和老式数字
  • Electra LH,老式人物
  • Ocean Sans MT、Light OsF

这些字体工作没有问题:

  • Ocean Sans MT、浅斜体 OsF
  • Ocean Sans MT、Semibold SC
  • Ocean Sans MT、Light SC
  • Ocean Sans MT,浅色
  • Electra LH、小型大写字母和老式数字
  • Electra LH,草书
  • Electra LH,大胆的老式人物

最佳答案

问题可能是由于字体丢失造成的,您可以先尝试检查这些字体,看看是否能解决您的问题:

var usedFonts = document.fonts;
for(var i = 0; i < usedFonts.length; i++){

    if(usedFonts[i].status != FontStatus.INSTALLED){
        //You can't rely on font.name if the font is missing
        var fontName = usedFonts[i].fontFamily+" "+usedFonts[i].fontStyleName;
    }else{
        var fontName = usedFonts[i].name;
    }
}

关于fonts - 为什么我的 ExtendScript 无法访问 `name` 返回给我的某些字体的 `app.activeDocument.fonts` 属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10726609/

相关文章:

emacs - 如何让我的 Emacs 在 X11 上*始终*使用 6x13

javascript - 使用 ExtendScript 访问内部预合成层

javascript - Adobe 套接字对象不适用于代理

javascript - 无法从 OAuth Google API 获取已安装应用程序的访问 token

javascript - Extendscript 获取调用者函数文件路径

css - 无法解码下载的字体 Laravel

c++ - 您如何确定全局构造函数的优先级?

java - 如何更改整个 Swing UI 应用程序中的字体

javascript - 如何在 Brackets 的项目文件树中查找文件

javascript - PDF JavaScript在Adobe Reader DC中不起作用,但在所有其他Reader中起作用