ごんれのラボ

iOS、Android、Adobe系ソフトの自動化スクリプトのことを書き連ねています。

Illustratorのドキュメント上で使用されているフォントを取得して超雑にアラートで表示する方法

概要

Illustrator のドキュメント上で使用されているフォントを取得して超雑にアラートで表示するJavaScript。
表示される内容は

  • name

検証バージョンは Illustrator CC 2015.3。

InDesign 版はこちら。

www.macneko.com

使い方

  1. JavaScript を ExtendScript Toolkit にコピペして、左上のプルダウンから使用したい Illustrator のバージョンを指定する
  2. Illustrator でドキュメントを1つ以上開く
  3. ExtendScpirt Toolkit から実行する
  4. ドキュメント上で使用しているフォントの一部情報がアラートで表示される
  5. テキストがないフレームが存在した場合は、「※テキストのないフレームで使用しているフォントは含まれておりません。」とお知らせする

実行結果のキャプチャ

f:id:macneko-ayu:20170322134629p:plain

ソースコード

var docObj = app.activeDocument;
var textFrames = docObj.textFrames;
var textFramesLen = textFrames.length;
var tmpFontsNamesArr = new Array();
var usedFontsNamesArr = new Array();
var usedFontsNames = "";
var isNoContents = false;

for (var i = 0; i < textFramesLen; i++) {
    var textFrame = textFrames[i];
    var characters = textFrame.textRange.characters;
    var charactersLength = characters.length;
    if (charactersLength === 0) {
        isNoContents = true;
        continue;
    }
    for (var j = 0; j < charactersLength; j++) {
        tmpFontsNamesArr = tmpFontsNamesArr.concat(characters[j].characterAttributes.textFont.name);
    }
}

var usedFontsNamesArr = unique(tmpFontsNamesArr);
for (var i = 0; i < usedFontsNamesArr.length; i++) {
    if (i === 0) {
        usedFontsNames += usedFontsNamesArr[i];
    } else {
        usedFontsNames += "\n" + usedFontsNamesArr[i];
    }
}
if (isNoContents) {
    usedFontsNames += "\n\n" + "※テキストのないフレームで使用しているフォントは含まれておりません。";
}

alert(usedFontsNames);

function unique(array) {
    var storage = {};
    var uniqueArray = [];
    var i, value;
    for (i = 0; i <array.length; i++) {
        value = array[i];
        if (!(value in storage)) {
            storage[value] = true;
            uniqueArray.push(value);
        }
    }
    return uniqueArray;
}

注意点

InDesign と違い、ドキュメントがフォント情報を持っていないようなので、テキストフレームをぐるぐるして、その中の一文字一文字からフォント名を取得しているので、環境やドキュメントの作り込み方によっては、とても遅いかも。
あと使い方にも書いたけど、テキストのないテキストフレームに適用されているフォント名は取得できないので、注釈という形でその旨報告しています。
レイヤーのロック状態も見ていないので、必要であれば足してください。

もっと詳しく

要望があれば、Twitter にて。