主にInDesignによる新聞組版Tips中心です。Mac使いですが業務はWin多め。Win DTP Tipsを増やしたい

【InDesign】フォルダー内inddを一括でversion up(もしくはダウングレード)

14ヶ月放ったらかしですね。そうですね いやメンテナンスはしていたんだよ

まあ今さら小ネタ晒しも・・・ と思ってたんですが、やる事ないならやるべきですね(意味不明)

条件テキスト一括指定辺りとやってる事は変わり映えありませんが、沈黙破りとして。


たまに「テンプレート100枚を全部ダウングレードして」やら、アップグレードやらの依頼がきます。昔はBookに収めてそのBookを上位バージョンで開けば、登録inddが全てBookを開いたバージョンに自動アップデートされちゃうという荒業が存在した記憶があるのですが、これは非常に迷惑 最近のBookは事前に警告メッセージを出した挙げ句、同期をかけた瞬間登録*.inddを全て上位に手動変換アクションが始まります。

f:id:chocomarine:20220308132031j:plain
上位バージョンで下位Bookを開いたところ

100枚分、ヤメテ止めて。付き合ってられんわ。ということで自動化です。

フォルダー内*.inddを一括でidml化(ダウングレード下準備)

//DESCRIPTION:フォルダー内inddを一括IDML書き出し(サブフォルダー含)(らーで閣下)
//2019.1.30

(function()
{
    alert("フォント検索、画像のリンク切れor更新もれがあった際は処理を終了します") ;

 try {
        var folderObj = Folder.selectDialog ("処理するInDesignファイルのあるフォルダを選択");
        if (! folderObj)
        {
            exit(); //キャンセル押されたら
            } else
        {
        app.colorSettings.mismatchAskWhenOpening = false; //ファイルを開いた時、カラー設定の不一致ダイアログを表示しない
        var count = 0;
            makeList (folderObj);
            //--------------------------- inddファイルを求める関数
            function makeList (folderObj)
            {
                var fileList = folderObj.getFiles("*.indd"); //ファイルとフォルダを取得
                for (i=0; i<fileList.length; i++)
                {
                    fileObj = new File(fileList[i].fsName);
                    app.open(File(fileObj)); 

                    var saveObj = folderObj + "/" ; //末尾に区切りのスラッシュを追加
                    var myDoc = app.activeDocument; //今開いている分
                    var myDocName = myDoc.name ; //ドキュメント名を取得
                    var fsArray = myDocName.split(".") ;
                    var inddName = fsArray[0] ; //ドキュメント名取得できた
                    var saveIDMLName2 = new File(saveObj+ inddName + ".idml") ; //保存フルパス
                    myDoc.exportFile(ExportFormat.INDESIGN_MARKUP, saveIDMLName2, false);
                    //最後のブーリアン= 保存オプションを出すか否か
                    }
                //サブフォルダへもぐっていく
                for (var j=0; j<fileList.length; j++)
                {
                    try { //不可視fileとか、変なもの居る可能性もあるので
                        var filename =
                        decodeURI (fileList[j].fsName);
                        } catch(e) {
                            var filename = fileList[j].fsName;
                            }
                        count = count + 1;
                } //try前のforの閉じ

            fileList = folderObj.getFiles();
            for (var k=0; k<fileList.length; k++)
            {
                //フォルダかどうか調べる
                if (fileList[k].getFiles)
                {
                    makeList (fileList[k]);//フォルダなら再帰呼び出し
                    }
                }

            } //MakeListのfunction閉じ
        } //最初のelseの閉じ

    } //最初のtryの閉じ
catch(e) {
    alert(e+"\n処理を中止します") ;
    if (myDoc == 0)
    myDoc.close(SaveOptions.no) ;
    } //e処理(最初のtry)の閉じ

alert ("end"); //終了時のメッセージ
app.quit(SaveOptions.no);

})();

フォルダー内*.idmlを一括でindd化(最新・旧バージョンへ)

//DESCRIPTION:IDMLを探しinddに一括保存(サブフォルダ含)(らーで閣下)
//2019.1.30

(function()
{
    alert("フォント検索は基本放置を(OKで進んで下さい)") ;

    try { //idml以外はスルー
        var folderObj = Folder.selectDialog ("処理する「IDML」ファイルのあるフォルダを選択");
        if (! folderObj)
        {
            exit(); //キャンセル押されたら
            } else
        {
            app.colorSettings.mismatchAskWhenOpening = false;
            var count = 0; //41Lで使う
            makeList (folderObj);

            //--------------------------- inddファイルを求める関数
            function makeList (folderObj)
            {
                var myFileList = folderObj.getFiles("*.idml"); //ファイルとフォルダを取得
                for (i=0; i<myFileList.length; i++)
                {
                    fileObj = new File(myFileList[i].fsName);
                    app.open(File(fileObj)); 

                    var myDoc = app.activeDocument; //今開いている分
                    var myDocName = myDoc.name ; //ドキュメント名取得
                    var fsArray = myDocName.split(".") ; //ドットで分割(拡張子をカット)
                    var inddName = fsArray[0] ; //splitの先頭だけ取得
                    var saveINDDName = new File(folderObj + "/" + inddName + ".indd") ; //保存フルパス(上書きモード)
                    myDoc.save(saveINDDName);
                    }
                //サブフォルダへもぐっていく
                for (var j=0; j<myFileList.length; j++)
                {
                    try { //不可視fileとか、変なもの居る可能性もあるので
                        var myFileName =
                        decodeURI (myFileList[j].fsName);
                        } catch(e) {
                            var myFileName = myFileList[j].fsName;
                            }
                        count = count + 1;
                } //try前のforの閉じ

            myFileList = folderObj.getFiles();
            for (var k=0; k<myFileList.length; k++)
            {
                //フォルダかどうか調べる
                if (myFileList[k].getFiles)
                {
                    makeList (myFileList[k]);//フォルダなら再帰呼び出し
                    }
                }

            } //MakeListのfunction閉じ
        } //最初のelseの閉じ

    } //最初のtryの閉じ
    catch(e) {
        alert(e+"\n処理を中止します") ;
        if (myDoc == 0)
        myDoc.close(SaveOptions.no) ;
        } //e処理(最初のtry)の閉じ

alert ("end"); //終了時のメッセージ
app.quit(SaveOptions.no);

})();

何やら懇切丁寧なComments付き…

参考にしたのは、条件テキストのページにあります「再帰処理」の方々です。フォルダーを潜りながら拡張子*.inddを探して開き、idml書き出ししているだけ。最後にアプリケーションも終了しています。

途中の

app.colorSettings.mismatchAskWhenOpening = false; //ファイルを開いた時、カラー設定の不一致ダイアログを表示しない

は、賛否両論あるかと思いますが、ノータッチ一括を重視して。本当は設定を取得→false→最後に戻す が必要ですが、プロファイルから取得か個別に取得変更か…など考え出すと面倒なので、取り敢えず無理やり変更・戻さない形で← いつもの

どうせスタイルの並びや一部設定名称が欧文化するなど、開いてチェックする必要はあるかと思うので(本末転倒と言わないで)、そのついでにカラー設定をドキュメントに付け直す前提に。


****

一番最初のBook警告メッセージ、

これ、最後までよく読んだら、自動変換設定が付けられるんやないすか(呆)

・・・・まあ、わざわざブックに入れて設定全てOFFって、するより速い。はず(