Last active
April 17, 2025 01:45
-
-
Save monokano/7bb68fd756ee66cb3aef5a8c396d3c19 to your computer and use it in GitHub Desktop.
InDesignのスクリプト。グラフィックフレームの端にリンクオブジェクトを揃えます。
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| (function () { | |
| if (app.documents.length < 1) { | |
| alert("ドキュメントが開かれていません。"); | |
| return; | |
| } | |
| if (app.selection.length < 1) { | |
| alert("グラフィックフレームまたはその中のオブジェクトを選択してください。"); | |
| return; | |
| } | |
| // GUI | |
| var w = new Window("dialog", "揃え位置の選択"); | |
| w.alignChildren = "fill"; | |
| var grid = w.add("group"); | |
| grid.orientation = "column"; | |
| grid.alignChildren = ["center", "center"]; | |
| var rowTop = grid.add("group"); | |
| var alignTop = rowTop.add("radiobutton", undefined, "上"); | |
| var rowMid = grid.add("group"); | |
| var alignLeft = rowMid.add("radiobutton", undefined, "左"); | |
| var spacer = rowMid.add("statictext", undefined, ""); spacer.preferredSize = [30, 0]; | |
| var alignRight = rowMid.add("radiobutton", undefined, "右"); | |
| var rowBottom = grid.add("group"); | |
| var alignBottom = rowBottom.add("radiobutton", undefined, "下"); | |
| var rowCenter = grid.add("group"); | |
| var alignVCenter = rowCenter.add("radiobutton", undefined, "上下中央"); | |
| var alignHCenter = rowCenter.add("radiobutton", undefined, "左右中央"); | |
| var radios = [alignTop, alignBottom, alignLeft, alignRight, alignVCenter, alignHCenter]; | |
| for (var i = 0; i < radios.length; i++) { | |
| radios[i].value = false; | |
| (function(index) { | |
| radios[index].onClick = function () { | |
| for (var j = 0; j < radios.length; j++) { | |
| if (j !== index) radios[j].value = false; | |
| } | |
| }; | |
| })(i); | |
| } | |
| var btns = w.add("group"); | |
| btns.alignment = "right"; | |
| btns.add("button", undefined, "キャンセル", { name: "cancel" }); | |
| var ok = btns.add("button", undefined, "OK", { name: "ok" }); | |
| if (w.show() !== 1) return; | |
| function alignGraphics() { | |
| var selected = null; | |
| for (var i = 0; i < radios.length; i++) { | |
| if (radios[i].value) { | |
| selected = radios[i]; | |
| break; | |
| } | |
| } | |
| if (!selected) { | |
| alert("揃える方向を選択してください。"); | |
| return; | |
| } | |
| for (var i = 0; i < app.selection.length; i++) { | |
| var sel = app.selection[i]; | |
| var frame, placed; | |
| // フレーム選択 or 配置オブジェクト選択 | |
| if (sel instanceof Rectangle && sel.graphics.length > 0) { | |
| frame = sel; | |
| placed = sel.pageItems[0]; | |
| } else if (sel.hasOwnProperty("parent") && sel.parent instanceof Rectangle) { | |
| frame = sel.parent; | |
| placed = sel; | |
| } else { | |
| alert("対象がグラフィックフレームまたはその中のオブジェクトではありません。"); | |
| continue; | |
| } | |
| var originalRotation = frame.rotationAngle; | |
| frame.rotationAngle = 0; | |
| var frameBounds = frame.geometricBounds; | |
| var objectBounds = placed.geometricBounds; | |
| var offsetX = 0, offsetY = 0; | |
| if (alignTop.value) { | |
| offsetY = frameBounds[0] - objectBounds[0]; | |
| } else if (alignBottom.value) { | |
| offsetY = frameBounds[2] - objectBounds[2]; | |
| } else if (alignLeft.value) { | |
| offsetX = frameBounds[1] - objectBounds[1]; | |
| } else if (alignRight.value) { | |
| offsetX = frameBounds[3] - objectBounds[3]; | |
| } else if (alignVCenter.value) { | |
| var frameCenterY = (frameBounds[0] + frameBounds[2]) / 2; | |
| var objectCenterY = (objectBounds[0] + objectBounds[2]) / 2; | |
| offsetY = frameCenterY - objectCenterY; | |
| } else if (alignHCenter.value) { | |
| var frameCenterX = (frameBounds[1] + frameBounds[3]) / 2; | |
| var objectCenterX = (objectBounds[1] + objectBounds[3]) / 2; | |
| offsetX = frameCenterX - objectCenterX; | |
| } | |
| placed.move("offset", [offsetX, offsetY]); | |
| frame.rotationAngle = originalRotation; | |
| } | |
| } | |
| app.doScript( | |
| alignGraphics, | |
| ScriptLanguage.JAVASCRIPT, | |
| undefined, | |
| UndoModes.ENTIRE_SCRIPT, | |
| "グラフィック揃え" | |
| ); | |
| })(); |
Author
- グラフィックフレーム選択時のみ動作していたが、中のオブジェクトを選択した時も動作するようにした
- 「#target indesign」削除
Author
下記の揃えを追加
- 上下中央(左右はそのまま)
- 左右中央(上下はそのまま)
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.