よろよろ帳

InDesign JavaScript 勉強中

字形検索置換

商標記号小さいのにして詰めます。tsume=100にしたら10000%になってびっくりしました。

changeGlyphDialogsample

app.doScript (main, ScriptLanguage.JAVASCRIPT, [], UndoModes.FAST_ENTIRE_SCRIPT);
function main (){
var Doc=app.activeDocument;
app.findGrepPreferences.findWhat = "®";
var Res=Doc.findGrep();
app.findGlyphPreferences=app.changeGlyphPreferences=NothingEnum.nothing;
for(var i=0; i<Res.length; i++){
    var F=Res[i].appliedFont.name;
    app.findGlyphPreferences.appliedFont = app.fonts.itemByName(F);
    app.findGlyphPreferences.glyphID =154;
    app.changeGlyphPreferences.appliedFont = app.fonts.itemByName(F);
    Res[i].tsume=1;//文字ツメ100%
    if(Res[i].parentStory.storyPreferences.storyOrientation==StoryHorizontalOrVertical.VERTICAL){
        app.changeGlyphPreferences.glyphID =12105;//縦用
        Res[i].changeGlyph();
        }else{
            app.changeGlyphPreferences.glyphID =12104;//横用
            Res[i].changeGlyph();
        }
    }
}

タイル印刷

B3ぐらいの大きさの下半分(右半分)だけA3で出力したい時に。全部出したい時はタイル用のプリセットで印刷しています。上半分(左半分)はタイルのチェックを外すだけでOKなのですが、2枚目はルーラー変更してタイル手動にするとか煩雑で結局プリセットで両方出すもったいないことをしていました。印刷前にファイルが保存されているか確認させてプリントダイアログボックスを開きます。プリント後は保存せず閉じるか復帰。
tiledPrinting

var Doc=app.activeDocument;
if(Doc.saved===false||Doc.modified===true) //保存確認
alert("please save a document");
var W= Doc.documentPreferences.pageWidth;
var H= Doc.documentPreferences.pageHeight;
var Pp = Doc.printPreferences;
Pp.paperSize="A3";
Pp.allPrinterMarks=true;
Pp.colorBars=false;
Pp.useDocumentBleedToPrint=false;//ドキュメントの裁ち落とし設定を使用(しない)
Pp.includeSlugToPrint=true;//印刷可能領域(含む)
if(W<=H){
    Doc.zeroPoint=[(420-W)/-2,H/2-(297-H/2)+15]; Pp.printPageOrientation=PrintPageOrientation.LANDSCAPE//+15はざっくりとんぼ分
    }else{Doc.zeroPoint=[W/2-(297-W/2)+15,(420-H)/-2]; Pp.printPageOrientation=PrintPageOrientation.PORTRAIT}

Pp.tile = true; // タイルON
Pp.tilingType =TilingTypes.MANUAL
app.menuActions.item("プリント...").invoke();

Photoshop検版

配列2つの共通のものだけ抜き出したい……indexOfポリフィル試すもやりたいことは2つのフォルダ内の同名ファイルを開きたいだったので、パス名変更でよかったのでした。修正PDFと同名の元PDFをPhotoshopで開いてデジタル検版のアクションかけてPDFで保存します。

#target "photoshop"
var Fol= Folder.selectDialog("修正PDFが入ったフォルダを選択");
//if(!Fol)exit();//キャンセルで終了(exit()はindesignのみ)
var D=Fol.getFiles(/.*\.pdf$/);

var Fol2= Folder.selectDialog("元PDFが入ったフォルダを選択");
//if(!Fol2)exit();//キャンセルで終了
//var D2=Fol2.getFiles(/.*\.pdf$/);

var SF= Folder.selectDialog("保存フォルダを選択");

for(var i=0; i<D.length; i++){
    var Op= new PDFOpenOptions();
    Op.mode= OpenDocumentMode.RGB;
    Op.cropPage=CropToType.MEDIABOX;
    Op.resolution=100;
    app.open(File(D[i]),Op)
    app.open(File(Fol2+"/"+D[i].name),Op)
    doAction("セット名","アクション名")
    activeDocument.flatten();//画像を統合
    var Opt= new PDFSaveOptions(); 
    Opt.presetFile="プリセット名";//photoshopでプリセット作っておく
    Opt.preserveEditing=false;
    app.activeDocument.saveAs(SF,Opt,false,Extension.LOWERCASE);
    activeDocument.close();
    }
alert ("Done!")

テキスト変数

↓参考
Text Variables and Scripts - Adobe Support Community - 1137980
メニューからカスタムテキストの入力めんどくさいな…と思って調べました。

var Doc=app.activeDocument;
Doc.textVariables.item ('M').variableOptions.contents = "3";
Doc.textVariables.item ('D').variableOptions.contents = "25";

テキストからファイル複製

台紙をたくさん複製したい時などに。ファイル名(拡張子付き)を改行で区切ったテキストを用意して実行。同階層に行数分複製します。テキストからフォルダ作成複数フォルダにファイルコピーの合わせ技です。

var myT=File.openDialog("テキストファイルを選択");
if(!myT) exit();
myT.open("r");
var myD=[];
for(;!myT.eof;)myD.push(myT.readln());
var myC=File.openDialog("複製元を選択");
if(!myC)exit();
for(var i=0; i<myD.length; i++){
    var myF=myT.parent+"/"+myD[i];
    myC.copy(myF);
    }
alert ("Done!");