PSDで使用しているフォントをテキストに出力

詳細は後ほど

var PassOffset = "\\.\\";  // PSDと同じフォルダに出力。一つ上の場合は\\..\\

var Data = new Array();
var FontTable = CreateFontTables();
var rootFolderObj = Folder.selectDialog("フォント情報を抜き出すフォルダを選択してください");
if ( rootFolderObj != null )
{
    var fList = GetFilesAll(rootFolderObj, [".psd"]); // 拡張子は小文字で
    for(var i=0; i<fList.length; i++)
    {
        var file = fList[i];
        var d = null;
        try
        {
            var d = app.open(file);
        }
        catch( ex)
        {
        }
        if ( d != null )
        {
            Collect();
            d.close( SaveOptions.DONOTSAVECHANGES );
        }
    }
}
function Collect()
{
    Data.length = 0;
    // レイヤー検索をして、使用しているフォントを取得する。
    for ( var i = 0; i < activeDocument.layers.length; ++i )
    {
        CollectUseFont( activeDocument.layers[ i ] );
    }
    Write();
}



function CollectUseFont( l )
{
    if ( l.kind == LayerKind.TEXT )
    {
        try
        {
            var item = l.textItem;
            var family = FontTable[ item.font ];
            if ( !ContainsArray( Data, family ) )
            {
                Data.push( family );
            }
        }
        catch(ex){}
    }
    else if ( l.typename == "LayerSet" )
    {
        for ( var i = 0; i < l.layers.length; ++i )
        {
            CollectUseFont( l.layers[i] );
        }
    }
}

function Write()
{
    if ( Data.length == 0 ){ return; }
    var name = activeDocument.name.substr( 0, activeDocument.name.length-4 );
    var path = activeDocument.path + PassOffset;
    fObj = new File( path + name + ".txt" );
    if ( fObj.exists ){ return ; }
    var flag = fObj.open("w");
    if ( flag )
    {
        for each ( var d in Data )
        {
            fObj.writeln( d );
        }
        fObj.close();
    }
}

function CreateFontTables()
{
    var table = new Object();
    var f = app.fonts;
    for ( var i = 0; i < f.length; ++i )
    {
        table[ f[i].postScriptName ] = f[i].family;
    }
    return table;
}
function ContainsArray( ary, value )
{
    for each ( var d in ary )
    {
        if ( d == value ){ return true; }
    }
    return false;
}
function GetFilesAll( obj, ext )
{
    var l = new Array();
    GetFiles(l, obj, ext);

    return l;
}
function GetFiles( l, obj, ext )
{
    var fileList = obj.getFiles();
    for (var i=0; i<fileList.length; i++)
    {
        if (fileList[i].getFiles)
        {
            GetFiles(l, fileList[i], ext );
        }
        else
        {
            var f = fileList[i].name.toLowerCase();
            for(var j=0; j<ext.length; j++)
            {
                if (f.indexOf(ext[j]) > -1) { l.push(fileList[i]); }
            }
        }
    }
}