2

我正在制作一个 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

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

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

笔记:

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

  • Electra LH,斜体
  • Electra LH、Bold Small Caps 和 Oldstyle Figures
  • 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, Small Caps & Oldstyle Figures
  • Electra LH,草书
  • Electra LH,大胆的老式人物
4

1 回答 1

2

问题可能来自缺少字体,您可以先尝试检查这些,看看是否能解决您的问题:

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;
    }
}
于 2012-05-24T12:10:26.227 回答