書いたコード
var doc = app.activeDocument;
var ro = app.activeDocument.viewPreferences.rulerOrigin;
app.activeDocument.viewPreferences.rulerOrigin = RulerOrigin.PAGE_ORIGIN;
pl: for (var i = 0; i < doc.pages.length; i++) {
if (i % 2 === 0) {
var tmpxLefts = getEvenPInfo(i)[0];
var tmpxRights = getEvenPInfo(i)[1];
var tmpyTop = getEvenPInfo(i)[2];
var tmpyBottom = getEvenPInfo(i)[3];
} else {
var tmpxLefts = getOddPInfo(i)[0];
var tmpxRights = getOddPInfo(i)[1];
var tmpyTop = getEvenPInfo(i)[2];
var tmpyBottom = getEvenPInfo(i)[3];
}
for (var j = 0; j < doc.pages[i].textFrames.length; j++) {
if (!existInArr(tmpxLefts, roundFp(doc.pages[i].textFrames[j].geometricBounds[1], 3))) {
$.writeln((i + 1) + "ページ 左 " + roundFp(doc.pages[i].textFrames[j].geometricBounds[1], 3))
}
if (!existInArr(tmpxRights, roundFp(doc.pages[i].textFrames[j].geometricBounds[3], 3))) {
$.writeln((i + 1) + "ページ 右 " + roundFp(doc.pages[i].textFrames[j].geometricBounds[3], 3))
}
if (roundFp(doc.pages[i].textFrames[j].geometricBounds[0], 3) !== tmpyTop) {
$.writeln((i + 1) + "ページ 天 " + roundFp(doc.pages[i].textFrames[j].geometricBounds[0], 3) + "/" + tmpyTop)
}
if (roundFp(doc.pages[i].textFrames[j].geometricBounds[2], 3) !== tmpyBottom) {
$.writeln((i + 1) + "ページ 地 " + roundFp(doc.pages[i].textFrames[j].geometricBounds[2], 3) + "/" + tmpyBottom)
}
}
}
app.activeDocument.viewPreferences.rulerOrigin = ro;
function getEvenPInfo(p) {
var refP = doc.pages[p];
var pBounds = refP.bounds;
var pHeight = pBounds[2] - pBounds[0];
var pWidth = pBounds[3] - pBounds[1];
var margin = refP.marginPreferences.properties;
var yTop = margin.top;
var yBottom = roundFp(pHeight - margin.bottom, 3);
var gridWidth = pWidth - (margin.left + margin.right);
var clCnt = refP.marginPreferences.columnCount;
var clGttr = refP.marginPreferences.columnGutter;
var clWidth = (gridWidth - clGttr * (clCnt - 1)) / clCnt;
var xLefts = [roundFp(margin.left, 3)];
var xRights = [roundFp(xLefts[0] + clWidth, 3)];
for (var i = 0, tmpCnt = clCnt - 1; i < tmpCnt; i++) {
xLefts.push(roundFp(xLefts[i] + (clWidth + clGttr), 3));
xRights.push(roundFp(xLefts[i + 1] + clWidth, 3));
}
var pInfo = [xLefts, xRights, yTop, yBottom];
return pInfo;
}
function getOddPInfo(p) {
var refP = doc.pages[p];
var pBounds = refP.bounds;
var pHeight = pBounds[2] - pBounds[0];
var pWidth = pBounds[3] - pBounds[1];
var margin = refP.marginPreferences.properties;
var yTop = margin.top;
var gridWidth = pWidth - (margin.left + margin.right);
var clCnt = refP.marginPreferences.columnCount;
var clGttr = refP.marginPreferences.columnGutter;
var clWidth = (gridWidth - clGttr * (clCnt - 1)) / clCnt;
var xLefts = [roundFp(margin.right, 3)];
var xRights = [roundFp(xLefts[0] + clWidth, 3)];
for (var i = 0, tmpCnt = clCnt - 1; i < tmpCnt; i++) {
xLefts.push(roundFp(xLefts[i] + (clWidth + clGttr), 3));
xRights.push(roundFp(xLefts[i + 1] + clWidth, 3));
}
var pInfo = [xLefts, xRights, yTop];
return pInfo;
}
function existInArr(arr, tgt) {
var arrLen = arr.length;
for (var p = 0; p < arrLen; p++) {
if (arr[p] === tgt) {
return true;
}
}
}
function roundFp(num, digit) {
var tmp = Math.pow(10, digit);
result = Math.round(num * tmp) / tmp;
return result;
}
メモ
分かったこと
- marginPreferences.propertiesは四方のマージンを一括で設定することを可能にするもの。
各要素の値はmarginPreferences.top/left/bottom/rightと同じ。
積み残しというかなんというか
- びみょ~に版面からずれてるんだよね、みたいなのを拾いたかったんだが、丸め処理をかけたら拾えない。
版面にフィットさせるスクリプトを書くべきだったのでは?
- 縦組み対応
参考