読者です 読者をやめる 読者になる 読者になる

ごんれのラボ

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

InDesignでサムネイル一覧的なものを作るCEP Extensions

概要

昔、記事として JavaScript で書いたものをアップしていたのですが、いろいろ気になってるところがあって、書き直し。
InDesign でサムネイル一覧的な画像一覧を生成するためのもの。
その昔、千点以上ある素材の一覧を毎週出力するという苦行があり、あまりにも辛くて書いたんだっけ。
ついでに CEP Extensions にしてみた。

使い方

  1. サムネイル一覧出力したい画像をフォルダに集めておく
  2. パネルのプルダウンでドキュメントサイズを選択
  3. 横と縦の分割数を入力(初期値は 3 × 3)
  4. 実行ボタンを押す
  5. 選択ダイアログが表示されるので、1 のフォルダを選択
  6. 自動的に InDesign ドキュメントが生成されて、画像とファイル名が配置される
  7. 「処理が完了しました」というアラートが表示されたら、処理完了

実行結果 f:id:macneko-ayu:20170504150227p:plain

Extensions ダウンロード

下記からどうぞ。
ThumbnailList.zxp - Google ドライブ

証明書を信頼するかどうかの確認が出てしまうと思うけど、ご判断はお任せします。

ソースコード

Github にあげた。 github.com

必要そうなところだけ、一部抜粋。

index.html

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<link rel="stylesheet" href="css/styles.css"/>
<link id="hostStyle" rel="stylesheet" href="css/theme.css"/>
    <title>Create thumbnail list with Indesign.</title>
</head>
<body>
    <p class="base">
        <select name="page-size" id="select-page-size" required>
            <option value="">★ドキュメントサイズを選択してください★</option>
            <option value="A4Portrait">A4タテ</option>
            <option value="A4Landscape">A4ヨコ</option>
            <option value="B4Portrait">B4タテ</option>
            <option value="B4Landscape">B4ヨコ</option>
            <option value="A3Portrait">A3タテ</option>
            <option value="A3Landscape">A3ヨコ</option>
        </select>
    </p>
    <p class="base">
        <span class="label">横の分割数: </span><input type="text" id="horizontal-division" placeholder="3"><br />
        <span class="label">縦の分割数: </span><input type="text" id="vertical-division" placeholder="3">
    </p>
    <p class="base">
        <button id="button">実行</button>
    </p>
<script src="js/libs/CSInterface-4.0.0.js"></script>
<script src="js/libs/jquery-2.0.2.min.js"></script>
<script src="js/themeManager.js"></script>
<script src="js/main.js"></script>
</body>
</html>

main.js

(function () {
    'use strict';
    var csInterface = new CSInterface();
    function init() {
        themeManager.init();
        $("#button").click(function () {
            var selectedPageSize = $("#select-page-size").val();
            var horizontalDivision = $("horizontal-division").text();
            var verticalDivision = $("vertical-division").text();
            var params = "" + selectedPageSize + "\t" + horizontalDivision + "\t" + verticalDivision;
            csInterface.evalScript('makeThumbnailList("' + params + '")');
        });
    }
    init();
}());

hostscript.jsx

var CR = String.fromCharCode(13);

function makeThumbnailList(paramsStr) {
    var params = paramsStr.split("\t");
    var selectedPageSize = params[0];
    var horizontalDivision = params[1];
    var verticalDivision = params[2];

    // ページサイズを選択していない場合は処理を停止
    if (selectedPageSize.length === 0) {
        alert("ドキュメントサイズを選択してください");
        return;
    }

    // 分割数が未入力の場合は初期値を入れる
    if (horizontalDivision.length === 0) {
        horizontalDivision = 3;
    }
    if (verticalDivision.length === 0) {
        verticalDivision = 3;
    }

    var marginValue = 10; // マージン
    var myLabelWidth = 100; // ラベルの横幅
    var myControlWidth = 60; // コントロールの横幅

    //ページサイズ
    var pageA4 = ["210","297"];
    var pageB4 = ["257","364"];
    var pageA3 = ["297","420"];

    //配列を作成
    var pictureList = new Array();
    var fileListEPS = new Array();
    var fileListAI = new Array();
    var fileListPSD = new Array();
    var fileListJPEG = new Array();
    var fileListTIFF = new Array();

    var folderObj = Folder.selectDialog("一覧にしたい画像のあるフォルダを選択してください");
    var fileListEPS = folderObj.getFiles("*.eps");//EPSファイルを配列化(小文字・大文字無視)
    var fileListAI = folderObj.getFiles("*.ai");//AIファイルを配列化(小文字・大文字無視)
    var fileListPSD = folderObj.getFiles("*.psd");//PSDファイルを配列化(小文字・大文字無視)
    var fileListJPEG = folderObj.getFiles("*.jpg");//JPEGファイルを配列化(小文字・大文字無視)
    if (folderObj.getFiles("*.jpeg").length != 0) {
        fileListJPEG = fileListJPEG.concat(folderObj.getFiles("*.jpeg"));//拡張子がjpegの場合を考慮。concatは配列の結合
    }
    var fileListTIFF = folderObj.getFiles("*.tiff");//tiffファイルを配列化(小文字・大文字無視)
    if (folderObj.getFiles("*.tif").length != 0) {
        fileListTIFF = fileListTIFF.concat(folderObj.getFiles("*.tif"));//拡張子がtifの場合を考慮。concatは配列の結合
    }

    var pipictureList = [];
    //配置画像の配列をひとつに
    if (fileListEPS.length != 0) {
        pictureList = pictureList.concat(fileListEPS);
    }
    if (fileListAI.length != 0) {
        pictureList = pictureList.concat(fileListAI);
    }
    if (fileListPSD.length != 0) {
        pictureList = pictureList.concat(fileListPSD);
    }
    if (fileListJPEG.length != 0) {
        pictureList = pictureList.concat(fileListJPEG);
    }
    if (fileListTIFF.length != 0) {
        pictureList = pictureList.concat(fileListTIFF);
    }

    //配置画像の数
    var pictureListLength = pictureList.length;

    //台紙を作成
    var docObj = app.documents.add();
    docObj.documentPreferences.facingPages = false;

    //サイズを変更
    if (selectedPageSize === "A4Portrait") {
        docObj.documentPreferences.pageWidth = pageA4[0];
        docObj.documentPreferences.pageHeight = pageA4[1];
    } else if (selectedPageSize === "A4Landscape") {
        docObj.documentPreferences.pageWidth = pageA4[1];
        docObj.documentPreferences.pageHeight = pageA4[0];
    } else if (selectedPageSize === "B4Portrait") {
        docObj.documentPreferences.pageWidth = pageB4[0];
        docObj.documentPreferences.pageHeight = pageB4[1];
    } else if (selectedPageSize === "B4Landscape") {
        docObj.documentPreferences.pageWidth = pageB4[1];
        docObj.documentPreferences.pageHeight = pageB4[0];
    } else if (selectedPageSize === "A3Portrait") {
        docObj.documentPreferences.pageWidth = pageA3[0];
        docObj.documentPreferences.pageHeight = pageA3[1];
    } else {
        docObj.documentPreferences.pageWidth = pageA3[1];
        docObj.documentPreferences.pageHeight = pageA3[0];
    }

    //マスターのマージンを決めてページに適用
    var myMaster = docObj.masterSpreads[0]; //適用するマスターを変数に
    for (var i = 0, pagesLength = myMaster.pages.length; i < pagesLength; i++) {
        myMaster.pages[i].marginPreferences.top = marginValue;//天
        myMaster.pages[i].marginPreferences.left = marginValue;//左
        myMaster.pages[i].marginPreferences.right = marginValue;//右
        myMaster.pages[i].marginPreferences.bottom = marginValue;//地
    }

    docObj.pages[0].appliedMaster = myMaster;//適用

    //ドキュメントの幅・高さ
    var pageWidth = docObj.documentPreferences.pageWidth;
    var pageHeight = docObj.documentPreferences.pageHeight;

    //1ページ当たりの配置数
    var maxHorizontalDivision = horizontalDivision * verticalDivision;

    //総ページ数
    var allPage = Math.ceil(pictureListLength / maxHorizontalDivision); // 小数点以下切り上げ

    //キャプの高さ
    var capHeight = 3;

    //1フレームの幅・高さ
    var frameWidth = (pageWidth - (marginValue * (horizontalDivision - 1)) - (marginValue * 2)) / horizontalDivision;
    var frameHeight = (pageHeight - (marginValue * (verticalDivision - 1)) - (verticalDivision * capHeight) - (marginValue * 2)) / verticalDivision;

    //フレームカウント用
    var lineCount = 0;

    //ページ数を増やす
    for (i = 0; i < (allPage - 1); i++) {
        docObj.pages.add();
    }

    //配置するフレーム作成
    for (var i = 0, pagesLength = docObj.pages.length; i < pagesLength; i++) {
        var pageObj = docObj.pages[i];
        for (var y = 0; y < verticalDivision; y++){
            for (var x = 0; x < horizontalDivision; x ++) {
                //画像フレーム作成
                var pictFrame = pageObj.textFrames.add();
                pictFrame.visibleBounds = [marginValue + (y * marginValue) + (frameHeight * y) + (capHeight * y),
                                           marginValue + (x * marginValue) + (frameWidth * x),
                                           marginValue + (y * marginValue) + (frameHeight * (y + 1)) + (capHeight * y),
                                           marginValue + (x * marginValue) + (frameWidth * (x + 1))];
                pictFrame.contentType = ContentType.graphicType;
                pictFrame.name = "pict" + lineCount.toString();

                //キャプションフレーム作成
                var capFrame = pageObj.textFrames.add();
                capFrame.visibleBounds = [marginValue + (y * marginValue) + (frameHeight * (y + 1)) + (capHeight * y),
                                          marginValue + (x * marginValue) + (frameWidth * x),
                                          marginValue + (y * marginValue) + (frameHeight * (y + 1)) + (capHeight * (y + 1)),
                                          marginValue + (x * marginValue) + (frameWidth * (x + 1))];
                capFrame.contentType = ContentType.textType;
                capFrame.name = "cap" + lineCount.toString();
                capFrame.textFramePreferences.verticalJustification = VerticalJustification.bottomAlign

                lineCount ++;
            }
        }
    }

    for (var p = 0; p < pictureListLength; p++){
        //画像配置
        docObj.pageItems.itemByName("pict" + p).select();
        var pictFrameSel = app.selection[0];

        var selFile = new File(pictureList[p]);
        pictFrameSel.place(selFile);
        pictFrameSel.fit(FitOptions.proportionally);

        //キャプ流し込み
        docObj.pageItems.itemByName("cap" + p).select();
        var capFrameSel = app.selection[0];

        var capKakou = pictureList[p].name;
        capContents = File.decode(capKakou) + CR;

        capFrameSel.contents = capContents;
        capFrameSel.paragraphs[0].pointSize = "10Q";

        if (capFrameSel.overflows) {
            var w = 100;
            while ((capFrameSel.overflows) && (w > 10)) {
                w--;
                capFrameSel.paragraphs[0].horizontalScale = w;
            }
        }
    }
    alert("処理が完了しました");
}

諦めたところ

プルダウンに CSS を適用するのがわりとめんどくさい感じだったので、諦めた。
あとフォント周りは CSS が適用されなかったので、themeManager.js に直接書いている。
いけてないね!

もっと詳しく

質問、要望があれば、Twitter にて。

Illustratorドキュメントに配置されている画像の上にファイル名を配置する

概要

Illustrator ドキュメントに配置されている画像の上にファイル名を配置する。
ファイル名のテキストフレーム配置用に FileName というレイヤーを生成するので、ファイル名配置後に好きな書式設定を適用する想定。
テキストフレームは配置画像の天地左右センターに配置される

使い方

  1. AppleScript にコピペして適当なところに保存
  2. ドキュメントを開く
  3. AppleScript を実行する
  4. 配置画像の上にファイル名のテキストフレームが生成される
  5. お好きにどうぞ

Before f:id:macneko-ayu:20170501135058p:plain

After f:id:macneko-ayu:20170501135158p:plain

こんなときに使ってみたら

  • 画像補正部署にドキュメントに貼り込まれた状態のデザインと一緒に配置画像名を伝えたいとき
  • (カスタマイズして)ファイル名と拡大率を表示して、Photoshop で縮小するときの参考にしたいとき
  • (カスタマイズして)ファイル名と解像度を表示して、お客さんに高解像度の画像を寄越せとお願いしたいとき(これ便利だった)

ソースコード

tell application "Adobe Illustrator"
    tell document 1
        set ruler origin to {0, 0}
        
        try
            set nameLayer to layer "FileName"
        on error
            set nameLayer to make layer at beginning with properties {name:"FileName"}
        end try
        
        --配置されているファイル分繰り返す
        repeat with i from 1 to count placed item
            try
                tell placed item i --配置ファイルi個目に命令
                    set myFilePath to file path as alias --ファイルパスを取得
                    set myFilePath to myFilePath as Unicode text
                    set myName to last item of my searchSplit(myFilePath, ":") --ファイル名を抽出
                    
                    --座標値取得
                    set myPlacedBox to geometric bounds
                    set P_x1 to (item 1 of myPlacedBox) as real
                    set P_y1 to (item 2 of myPlacedBox) as real
                    set P_x2 to (item 3 of myPlacedBox) as real
                    set P_y2 to (item 4 of myPlacedBox) as real
                    set P_Height to (P_y1 - P_y2) as real
                    set P_Width to (P_x2 - P_x1) as real
                end tell
                
                tell nameLayer
                    set myNameItem to make text frame at beginning with properties {contents:myName}
                    
                    tell myNameItem
                        set justification of paragraph 1 to center --センター揃え
                        --幅と高さを取得
                        set myNameBounds to geometric bounds
                        set N_x1 to (item 1 of myNameBounds) as real
                        set N_y1 to (item 2 of myNameBounds) as real
                        set N_x2 to (item 3 of myNameBounds) as real
                        set N_y2 to (item 4 of myNameBounds) as real
                        set N_Height to (N_y1 - N_y2) as real
                        set N_Width to (N_x2 - N_x1) as real
                        
                        --座標値を変更
                        set position to {P_x1 + ((P_Width - N_Width) / 2), P_y1 - ((P_Height - N_Height) / 2)}
                    end tell
                end tell
            end try
        end repeat
    end tell
end tell

--分割サブルーチン
to searchSplit(targetStr, splitStr)
    set str to targetStr as Unicode text
    set OriginalDelimiters to AppleScript's text item delimiters
    set AppleScript's text item delimiters to splitStr
    set itemsList to text items of str
    set AppleScript's text item delimiters to OriginalDelimiters
    --itemsListにリストで代入されているからあとはご自由に
    return itemsList
end searchSplit

カスタマイズするとしたら

拡大率、回転率なんかを一緒に書き出したら便利。
行方不明だけど、昔書いたのでやろうと思えばできる。

もっと詳しく

質問、要望があれば、Twitter にて。

Drag&Drop したファイルのファイルパスを NSTextFeild に表示する方法

概要

Window 内に Finder 経由でファイルを Drag&Drop したら、ファイルパスを改行で区切って NSTextFeild に表示する。

使い方

  1. 起動する
    f:id:macneko-ayu:20170426131000p:plain  
     
  2. Drag&Drop
    f:id:macneko-ayu:20170426131015p:plain
     
  3. 表示される
    f:id:macneko-ayu:20170426131910p:plain

実装方法

  1. NSView を継承した FileDragDropView クラスを作成して、そこに一連の処理を書く
  2. Storyboard の NSViewController に NSView を配置して、クラスを FileDragDropView にする
  3. ビルドしたら完成

ソースコード

FileDragDropView クラスだけ抽出。

import Cocoa

class FileDragDropView: NSView {

    var acceptableTypes: Set<String> {
        return [NSURLPboardType]
    }
    var nonURLTypes: Set<String>  {
        return [String(kUTTypeText)]
    }
    let filteringOptions = [NSPasteboardURLReadingContentsConformToTypesKey:["public.text"]]
    var label: NSTextField?

    override func draw(_ dirtyRect: NSRect) {
        super.draw(dirtyRect)
    }

    override init(frame frameRect: NSRect) {
        super.init(frame: frameRect)
        setup()
    }
    
    required init?(coder: NSCoder) {
        super.init(coder: coder)
        setup()
    }
    
    override func awakeFromNib() {
        super.awakeFromNib()
        label = NSTextField(frame: NSRect(x: 20, y: 20, width: self.frame.width - 40, height: 40))
        label?.stringValue = ""
        label?.textColor = NSColor.black
        self.addSubview(label!)
    }
    
    func setup() {
        self.register(forDraggedTypes: Array(acceptableTypes))
    }
    
    func shouldAllowDrag(_ draggingInfo: NSDraggingInfo) -> Bool {
        var canAccept = false
        let pasteBoard = draggingInfo.draggingPasteboard()
        if pasteBoard.canReadObject(forClasses: [NSURL.self], options: filteringOptions) {
            canAccept = true
        } else if let types = pasteBoard.types, nonURLTypes.intersection(types).count > 0 {
            canAccept = true
        }
        return canAccept
    }
    
    override func draggingEntered(_ sender: NSDraggingInfo) -> NSDragOperation {
        let allow = shouldAllowDrag(sender)
        return allow ? .copy : NSDragOperation()
    }
    
    override func prepareForDragOperation(_ sender: NSDraggingInfo) -> Bool {
        let allow = shouldAllowDrag(sender)
        return allow
    }
    
    override func performDragOperation(_ sender: NSDraggingInfo) -> Bool {
        let pasteBoard = sender.draggingPasteboard() as NSPasteboard
        if let urls = pasteBoard.readObjects(forClasses: [NSURL.self], options: filteringOptions) as? [URL], urls.count > 0 {
            label?.stringValue = ""
            let files = pasteBoard.propertyList(forType: NSFilenamesPboardType) as! [String]
            for file in files {
                label?.stringValue += file + "\n"
            }
            return true
        }
        else if let types = pasteBoard.types, types.contains(NSFilenamesPboardType) {
            label?.stringValue = ""
            let files = pasteBoard.propertyList(forType: NSFilenamesPboardType) as! [String]
            for file in files {
                label?.stringValue += file + "\n"
            }
            return true
        }
        return false
    }
}

更新履歴

2017/4/27 テキスト形式のファイルのみ Drag&Drop できるようにフィルタリング処理を追加
2017/4/26 初版

参考

[macOS] [Swift3.0] Drag & Dropでファイルパスを取得
Drag and Drop Tutorial for macOS

「DTPerのスクリプトもくもく会」を立ち上げました

DTPerのスクリプトもくもく会 とは

スクリプトを書いてる人、書きたいと思っている人が集まって、勉強できる場として立ち上げました。
参加者同士で教えあったり、議論したり、もくもくしたり、わいわいしましょう。 定期的に開催予定です。

なんで立ち上げたのか

DTPのスクリプトに関する勉強会的なものがあったらなーと前から思っていて、ふと「自分で立ち上げればええんちゃうの」と気づいたので、立ち上げました。
あと「これからスクリプトを始めてみたい」という人の手助けができたらなーという思いもあり。
私自身、いろいろな方の書いたものを読んだり、直接教えていただいたりして、いまがあるわけで。
間接的ですが恩返しができたらいいなーと思っています。

もくもく会でなにをしたらいいのか

もくもくと自分のやりたいことをやっていただいて構いません。
同じ趣味?を持っている人が集まっているので、スクリプトの仕様や設計について、周囲の人に相談するというのも楽しいと思います。
一応、最初にその日になにを作るつもりで、最後に進捗を発表していただく予定です。
完成させることが目的ではなく、宣言することでモチベーションをあげることが目的なので、壮大な目標でもいいかと思います。
普段時間がないからスクリプトに関する書籍や、調べ物をするのもアリです。
その場合は、調べた結果を共有していただけると嬉しいですね。

どこから参加申し込みするのか

connpass のページは下記です。
興味のある方はご参加ください。
dtpmkmk.connpass.com

第一回の募集は埋まってしまっていますが、貼っておきます。
dtpmkmk.connpass.com

画像ファイルのドキュメントサイズを調べて指定サイズより大きかったらFinderでタグをつける方法

概要

画像ファイルのドキュメントサイズを調べて指定サイズより大きかったら Finder でタグをつける AppleScript のドロップレットを書いた。
Photoshop を使っています。

検証バージョンは Photoshop CC 2017。

使い方

  1. AppleScriptのドロップレットを適当なところに置いておく
  2. ドキュメントサイズを調べたい Photoshop で対応している画像ファイルをドラッグ&ドロップする
  3. 指定したサイズだったら、ファイルに赤色のタグがつく

ソースコード

on open fileList
    repeat with i in fileList
        tell application id "com.adobe.photoshop"
            set oldUnits to ruler units of settings
            set ruler units of settings to mm units --mm にしてるけど、ピクセルで調べたかったらここ変える
            open i
            tell current document
                activate
                set filePath to POSIX path of (file path as alias)
                resize image resolution 350 resample method none
                --使うときはここのサイズを変更してください。mm で指定します。ピクセルで調べたかったら上のほうでルーラーの単位を変えつつ、ここでピクセル指定する
                if (width > 100 and height > 148) then
                    my addTagOnFile(filePath)
                else if (width > 148 and height > 100) then
                    my addTagOnFile(filePath)
                end if
                
                close saving no
            end tell
            set ruler units of settings to oldUnits
        end tell
    end repeat
end open

to addTagOnFile(filePath)
    do shell script "xattr -w com.apple.metadata:_kMDItemUserTags '(\"レッド\\n6\")' " & filePath
end addTagOnFile

注意点

サーバーにあるファイルにタグがつかないことがあったので、ローカルにコピーして実行したほうがいいかも。

もっと詳しく

要望があれば、Twitter にて。

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 にて。

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

概要

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

  • fontFamily
  • fontStyleName
  • name
  • version

使い方

  1. JavaScript を ExtendScript Toolkit にコピペして、左上のプルダウンから使用したい InDesign のバージョンを指定する
  2. InDesign でドキュメントを1つ以上開く
  3. ExtendScpirt Toolkit から実行する
  4. ドキュメント上で使用しているフォントの一部情報がアラートで表示される

実行結果のキャプチャ

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

ソースコード

var docObj = app.activeDocument;
var str = "";
for (var i = 0; i < docObj.fonts.length; i++) {
    var font = docObj.fonts[i];
    str += "\n\n\nfontFamily: " + font.fontFamily;
    str += "\nfontStyleName: " + font.fontStyleName;
    str += "\nname: " + font.name;
    str += "\nversion: " + font.version;
}

alert(str);

注意点

段落スタイルなどのスタイル系で指定しているフォントは、実際にドキュメント上でそのスタイルが使用されていないと拾えない模様。
段落スタイルで使用しているフォントもほしい場合は、スタイル取得して for でぐるぐる回すなどするといいです。

もっと詳しく

要望があれば、Twitter にて。