@Laubender is spot on. I made a file with two sections—"A" and "B"—with pages numbers starting at 1 in each. The myPageNames array was 1,2,3,4,1,2,3,4 which won't work. I changed the script to use page specifiers instead of page names and seems to work correctly now, but specifiers are a bit ugly to look at. See what you think. A refinement would be to make a list for the UI of combined Section prefix and page number.
- Mark
Edit: changed to mm, minor adjustments to script.
/* AdjustLayout_modified2.jsx
Moves the content of even/odd pages by specified amounts; attempts to get
objects back into the correct position after a master page margin change
and/or page insertion.
Quick modification to use page specifiers rather than page names
*/
function main() {
//Make certain that user interaction (display of dialogs, etc.) is turned on.
app.scriptPreferences.userInteractionLevel = UserInteractionLevels.interactWithAll;
if (app.documents.length != 0) {
if (app.activeDocument.pageItems.length != 0) {
myDisplayDialog();
}
else {
alert("Document contains no page items.");
}
}
else {
alert("Please open a document and try again.");
}
}
function myDisplayDialog() {
var myLabelWidth = 70;
var mm = 2.83465;
var myDialog = app.dialogs.add({ name: "Adjust Layout" });
var myPageSpecifiers = myGetPageSpecifiers();
with (myDialog.dialogColumns.add()) {
with (borderPanels.add()) {
with (dialogColumns.add()) {
with (dialogRows.add()) {
with (dialogColumns.add()) {
staticTexts.add({ staticLabel: "Start Page:", minWidth: myLabelWidth });
}
with (dialogColumns.add()) {
var myStartPageDropdown = dropdowns.add({ stringList: myPageSpecifiers, selectedIndex: 0 });
}
}
with (dialogRows.add()) {
with (dialogColumns.add()) {
staticTexts.add({ staticLabel: "End Page:", minWidth: myLabelWidth });
}
with (dialogColumns.add()) {
var myEndPageDropdown = dropdowns.add({ stringList: myPageSpecifiers, selectedIndex: myPageSpecifiers.length - 1 });
}
}
}
}
with (borderPanels.add()) {
with (dialogRows.add()) {
with (dialogColumns.add()) {
staticTexts.add({ staticLabel: "Even Pages", minWidth: myLabelWidth });
staticTexts.add({ staticLabel: "Horizontal:", minWidth: myLabelWidth });
staticTexts.add({ staticLabel: "Vertical:", minWidth: myLabelWidth });
}
with (dialogColumns.add()) {
staticTexts.add({ staticLabel: "" });
var myEvenXField = measurementEditboxes.add({ editValue: -10 * mm, editUnits: MeasurementUnits.millimeters });
var myEvenYField = measurementEditboxes.add({ editValue: 0, editUnits: MeasurementUnits.millimeters });
}
}
}
with (borderPanels.add()) {
with (dialogRows.add()) {
with (dialogColumns.add()) {
staticTexts.add({ staticLabel: "Odd Pages", minWidth: myLabelWidth });
staticTexts.add({ staticLabel: "Horizontal:", minWidth: myLabelWidth });
staticTexts.add({ staticLabel: "Vertical:", minWidth: myLabelWidth });
}
with (dialogColumns.add()) {
staticTexts.add({ staticLabel: "" });
var myOddXField = measurementEditboxes.add({ editValue: 10 * mm, editUnits: MeasurementUnits.millimeters });
var myOddYField = measurementEditboxes.add({ editValue: 0, editUnits: MeasurementUnits.millimeters });
}
}
}
}
var myResult = myDialog.show();
if (myResult == true) {
var myStartPageSpecifier = myPageSpecifiers[myStartPageDropdown.selectedIndex];
var myEndPageSpecifier = myPageSpecifiers[myEndPageDropdown.selectedIndex];
if (myCheckPageRange(myStartPageSpecifier, myEndPageSpecifier) == true) {
var myEvenX = myEvenXField.editValue;
var myEvenY = myEvenYField.editValue;
var myOddX = myOddXField.editValue;
var myOddY = myOddYField.editValue;
myDialog.destroy();
myAdjustPages(myEvenX, myEvenY, myOddX, myOddY, myStartPageSpecifier, myEndPageSpecifier);
}
else {
myDialog.destroy();
alert("Invalid page range.");
}
}
else {
myDialog.destroy();
}
}
function myAdjustPages(myEvenX, myEvenY, myOddX, myOddY, myStartPageSpecifier, myEndPageSpecifier) {
var myPage, myPageAdjust;
app.scriptPreferences.measurementUnit = MeasurementUnits.POINTS;
//Save the old page numbering
var myOldPageNumbering = app.generalPreferences.pageNumbering;
app.generalPreferences.pageNumbering = PageNumberingOptions.section;
var myStartPage = resolve(myStartPageSpecifier);
var myEndPage = resolve(myEndPageSpecifier);
//Set page numbering to absolute
app.generalPreferences.pageNumbering = PageNumberingOptions.absolute;
//Does the document start with an even page?
if (myCheckPageStart(app.activeDocument) == false) {
myPageAdjust = 0;
}
else {
myPageAdjust = 1;
}
for (var myCounter = (myStartPage.documentOffset); myCounter <= myEndPage.documentOffset; myCounter++) {
myPage = app.activeDocument.pages.item(myCounter);
var myPageValue = myPage.documentOffset;
myPageValue = myPageValue + myPageAdjust;
if (myPageValue % 2 == 0) {
//Page is an even page.
myAdjustPage(myPage, myEvenX, myEvenY);
}
else {
//Page is an odd page.
myAdjustPage(myPage, myOddX, myOddY);
}
}
app.generalPreferences.pageNumbering = myOldPageNumbering;
}
function myAdjustPage(myPage, myX, myY) {
var myPageItem;
var myResetItemLock = false;
var myResetLayerLock = false;
for (var myCounter = 0; myCounter < myPage.pageItems.length; myCounter++) {
myPageItem = myPage.pageItems.item(myCounter);
if (myPageItem.locked == true) {
myPageItem.locked = false;
myResetItemLock = true;
}
if (myPageItem.itemLayer.locked == true) {
myPageItem.itemLayer.locked = false;
myResetLayerLock = true;
}
myPageItem.move(undefined, [myX, myY]);
if (myResetItemLock == true) {
myPageItem.locked = true;
}
if (myResetLayerLock == true) {
myPageItem.itemLayer.locked = true;
}
}
}
function myGetPageSpecifiers() {
var myPageSpecifiers = new Array;
for (myCounter = 0; myCounter < app.activeDocument.pages.length; myCounter++) {
myPageSpecifiers.push(app.activeDocument.pages.item(myCounter).toSpecifier());
}
return myPageSpecifiers;
}
function myCheckPageStart(myDocument) {
var mySection = myDocument.sections.item(0);
if (mySection.pageNumberStart % 2 == 0) {
//Starting page number is an even page.
return false;
}
else {
//Starting page number is an odd page.
return true;
}
}
function myCheckPageRange(myStartPageSpecifier, myEndPageSpecifier) {
var myStartIndex = resolve(myStartPageSpecifier).documentOffset;
var myEndIndex = resolve(myEndPageSpecifier).documentOffset;
if (myStartIndex <= myEndIndex) {
return true;
}
else {
return false;
}
}
app.doScript(main, ScriptLanguage.JAVASCRIPT, undefined, UndoModes.ENTIRE_SCRIPT, 'Adjust Layout');