2

InDesign ドキュメントで使用されているすべてのフォントを調べて、その名前を警告する ExtendScript スクリプトを作成しています。ここにコードがあります

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

ただし、特定のフォントでは、nameプロパティにアクセスするとスクリプトがクラッシュします (オブジェクトが無効です)。クラッシュせずにすべてのフォントにアクセスできる唯一の属性は属性です。これにより、プロパティisValidにアクセスできなかったフォントはすべて であり、アクセスしても問題が発生しなかったすべてのフォントは であることがわかりました。nameisValid === falsenameisValid === true

驚いたことに、問題のあるフォントの 1 つが使用されているテキストに手動でカーソルを置くと、その名前が通常のフォント チューザーまたはそれと呼ばれるものに表示されます。

nameによって返された一部のフォントのプロパティにアクセスできないのはなぜapp.activeDocument.fontsですか?

ノート:

問題のあるフォントの一部を次に示します。

  • エレクトラ LH、イタリック体
  • エレクトラ LH、ボールド スモール キャップス、オールドスタイル フィギュア
  • エレクトラ LH、オールドスタイル フィギュア
  • Ocean Sans MT、Light OsF

これらのフォントは問題なく動作します:

  • Ocean Sans MT、Light Italic OsF
  • Ocean Sans MT、Semibold SC
  • Ocean Sans MT、Light SC
  • Ocean Sans MT、ライト
  • エレクトラ LH、スモール キャップス、オールドスタイル フィギュア
  • エレクトラ LH、筆記体
  • エレクトラ 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 に答える