Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Select an option

  • Save monokano/7bb68fd756ee66cb3aef5a8c396d3c19 to your computer and use it in GitHub Desktop.

Select an option

Save monokano/7bb68fd756ee66cb3aef5a8c396d3c19 to your computer and use it in GitHub Desktop.
InDesignのスクリプト。グラフィックフレームの端にリンクオブジェクトを揃えます。
(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,
"グラフィック揃え"
);
})();
@monokano

monokano commented Apr 14, 2025

Copy link
Copy Markdown
Author
  • グラフィックフレーム選択時のみ動作していたが、中のオブジェクトを選択した時も動作するようにした
  • 「#target indesign」削除

@monokano

monokano commented Apr 16, 2025

Copy link
Copy Markdown
Author

下記の揃えを追加

  • 上下中央(左右はそのまま)
  • 左右中央(上下はそのまま)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment