よろよろ帳

InDesign JavaScript 勉強中

パッケージ

フォルダ内のインデザインファイルをパッケージします。
【InDesign javascript】 指定フォルダ内にあるinddファイルをPDF書き出しやPS保存またはパッケージをするスクリプト: いろいろなメモ
↑こちらをありがたく使わせてもらってましたが
パッケージは選択フォルダ直下のファイルでいいので短く書いてみました。
InDesign ExtendScript API (16.0)
packageForPrintのオプション6個あります。

var Fol= Folder.selectDialog("フォルダを選択");
if(!Fol)exit();//キャンセルで終了
var D=Fol.getFiles(/.*\.indd$/);
for(var i=0; i<D.length; i++){
    app.open(File(D[i]));
    var Doc=app.activeDocument;
    var pFol= new Folder(Doc.filePath+"/"+Doc.name.replace(/\.indd$/,""));
    Doc.packageForPrint(pFol,true,true,false,true,true,true,false/*,true,true,"プリセット名"*/);
//保存フォルダ,フォント,リンク,カラープロファイル,更新,含非表示,エラー無視,出力仕様書,/*オプション:idml,pdf,pdfプリセット*/
    Doc.close(SaveOptions.no);
    }

https://www.drscripto.com/indesign-how-many-links-really-need-to-be-collected/
↑パッケージ後に追加配置したらこちらが便利。リンクフォルダにない分をコピーして更新してくれます。入稿前チェックにもいいです。AppleScriptです。

同じ値のセル結合

結合解除した空白セルに一つ上の値を入れるの逆バージョン。
セルを縦方向にまとめます。

app.doScript (main, ScriptLanguage.JAVASCRIPT, [], UndoModes.FAST_ENTIRE_SCRIPT);
function main (){
var Col = app.selection[0].columns.everyItem().getElements();//表かセルを選択
for (var i = 0; i < Col.length; i++) {
    app.findGrepPreferences.findWhat = "\r";
    app.changeGrepPreferences.changeTo="\n"
    Col[i].changeGrep();
    }//セル内改行→強制改行に
for (var i = 0; i < Col.length; i++) {
    var Ce = Col[i].cells.everyItem().getElements();
    for (j = Ce.length-1; j >= 1; j--) {
        if (Ce[j].texts[0].contents == Ce[j-1].texts[0].contents) {
            Ce[j-1].merge (Ce[j]);
            app.findGrepPreferences.findWhat = "(^[^\\r]+)\\r\\1+";
            app.changeGrepPreferences.changeTo="$1";
            Ce[j].changeGrep();
            }
        }
    }
}

↓参考
javascript - Adapting merge cells in InDesign script - Stack Overflow

結合解除した空白セルに一つ上の値を入れる

縦方向に結合された表に並べ替えが発生した時などに。

f:id:keruteru:20211227155346p:plain
app.doScript (main, ScriptLanguage.JAVASCRIPT, [], UndoModes.FAST_ENTIRE_SCRIPT);
function main (){
var sel=app.activeDocument.selection[0];//表を選択
sel.unmerge();//結合解除
for(var i=0; i<sel.cells.length; i++){
    if(sel.cells[i].contents==""){
        var N=sel.cells[i].name.split(":");//(列:行)
        var C=N[0]+":"+(N[1]-1);
        sel.cells[i].contents=sel.cells[i].parent.cells.itemByName(C).texts[0].contents
        }
    }
}

表をテキストに変換

ドキュメント上の表全部テキストに変換します。

app.doScript (main, ScriptLanguage.JAVASCRIPT, [], UndoModes.FAST_ENTIRE_SCRIPT);
function main (){//コマンドZで復帰
var Doc = app.activeDocument;
app.findTextPreferences.findWhat ="<0016>";//表を検索
var Res=Doc.findText();
for(var i=0; i<Res.length; i++){
    Res[i].tables[0].convertToText("\t", "\r");//タブと改行で変換
    }
app.findTextPreferences.findWhat =NothingEnum.nothing;//検索クリア
}

プリンタのデフォルト設定

↓参考(大感謝)
Macプリント設定のデフォルト値を変更する方法 | わいのイッヌが世界一かわいい

新しい複合機が両面印刷になってうざい!Windowsはデフォルト変えられるけどMacは無理プリセット使ってと代理店の人に言われましたが変えられますやん。最初ターミナル立上げ時に出るウィンドウにコマンドペーストしてしまいました。間違い。シェル→新規コマンドのウィンドウです。
terminal_command

こちらはレイアウト1に両面印刷設定がありました。
preference

指定値で等倍に変形

選択したものを入力値に合わせて縦横比固定で拡大縮小します。
↓変形のいろいろ
https://www.indesignjs.de/extendscriptAPI/indesign-latest/#TransformationMatrices.html

↓基準点のいろいろ
https://www.indesignjs.de/extendscriptAPI/indesign-latest/#AnchorPoint.html

//幅で合わす
function main(){
var sel=app.activeDocument.selection, WS=prompt ("幅","30");
for(var i=0; i<sel.length; i++){
    var selGB=sel[i].geometricBounds, 
    selW=selGB[3]-selGB[1], selSc=WS/selW,
    myW=app.transformationMatrices.add({horizontalScaleFactor:selSc, verticalScaleFactor:selSc})
    sel[i].transform(CoordinateSpaces.pasteboardCoordinates, AnchorPoint.BOTTOM_CENTER_ANCHOR, myW);//底中央基点
    }
}app.doScript(main, ScriptLanguage.JAVASCRIPT, [], UndoModes.FAST_ENTIRE_SCRIPT);
//高さで合わす
function main(){
var sel=app.activeDocument.selection, HS=prompt ("高さ","50");
for(var i=0; i<sel.length; i++){
    var selGB=sel[i].geometricBounds, 
    selH=selGB[2]-selGB[0], selSc=HS/selH,
    myH = app.transformationMatrices.add({horizontalScaleFactor:selSc, verticalScaleFactor:selSc})
    sel[i].transform(CoordinateSpaces.pasteboardCoordinates, AnchorPoint.BOTTOM_CENTER_ANCHOR, myH);
    }
}app.doScript(main, ScriptLanguage.JAVASCRIPT, [], UndoModes.FAST_ENTIRE_SCRIPT);