Skip to main content
attilioL
Participant
January 17, 2025
Question

Tweeking a Page Dimension script...

  • January 17, 2025
  • 2 replies
  • 135 views

How do i turn off math rounding (below) so i get exact page dimensions when the script is activated?

 

//This function adds static text variables in InDesign
//They won't be dynamically updated though.
//That's why we need the updating function below

function toTitleCase(s) { // By Trevor
return s.toLowerCase().replace(/\b\w/g, function () {return arguments[0].toUpperCase()});
}

function myRound(thisNumber, digits) { // By Trevor
digits = (digits) ? Math.pow(10, digits) : 1000;
return Math.round(thisNumber * digits) / digits;
}

function addVariables(openEvent){
if (!openEvent) return;
var doc = (openEvent.constructor == Document) ? openEvent : openEvent.parent; // By Trevor
while ( doc.constructor.name != "Document" )
{
if ( doc.constructor.name == "Application" ){ return; }

doc = doc.parent;
}

//Adding User name to text variables
createTextVariable(doc, "User name", $.getenv($.os[0] == "M" ? "USER" : "username") ); // changed by Trevor
//Adding Computer name to text variables
createTextVariable(doc, "HD Name", (Folder.system).parent.displayName );

//Adding Computer name to text variables
createTextVariable(doc, "Computer Name", getComputerName() );

//Adding a link to my website
createTextVariable(doc, "_About Loic Aigon", "Feel free to visit my website: http://www.loicaigon.com !" );

//Adding a link to my website
createTextVariable(doc, "_About Trevor", "Feel free to visit my website: http://www.creative-scripts.com !" ); // by Trevor

//Adding First Page Dimensions
createTextVariable(doc, "First Page Dimensions", getPageDimentions(doc.pages[0])); // by Trevor

//Adding Bleed
pagesize = app.activeDocument.textVariables.itemByName("Bleed");
pagesize.variableOptions.contents = ('' + app.activeDocument.documentPreferences.documentBleedBottomOffset + " in")

//Adding Margins
pagesize = app.activeDocument.textVariables.itemByName("Margins");
pagesize.variableOptions.contents = ('' + app.activeDocument.layoutWindows[0].activePage.marginPreferences.left + " in")

}

addVariables(app.properties.activeDocument); // callback by Trevor

//Generic function to add static custom text variables
function createTextVariable(target, variableName, variableContents){

var usernameVariable = target.textVariables.itemByName(variableName);
if(!usernameVariable.isValid){
usernameVariable = target.textVariables.add();
usernameVariable.variableType = VariableTypes.CUSTOM_TEXT_TYPE;
usernameVariable.name = variableName;
}
usernameVariable.variableOptions.contents = variableContents;
}


//Snippet for grabbing the deep name of the computer
function getComputerName(){ // by Trevor
return $.os[0] == "M" ? app.doScript("get computer name of (system info)", ScriptLanguage.APPLESCRIPT_LANGUAGE) : $.getenv("computername");
}

function getPageDimentions(page){ // by Trevor
var width, height, bounds, units, decPlaces;
// function presumes that normal pages
// i.e. same vertical and horizontal and no page shape transformations
decPlaces = 4;
units = toTitleCase(page.parent.parent.viewPreferences.horizontalMeasurementUnits.toString()); // If you forgot to include the toTitleCase function then remove the method
bounds = page.bounds;
height = bounds[2] - bounds[0];
height = myRound(height, decPlaces);
width = bounds[3] - bounds[1];
width = myRound(width, decPlaces);
return width + " X " + height + " " + units
}

//Add listeners to update file when opened.
app.addEventListener('afterOpen', addVariables);
// You might like to add some or all of these to make the update better
app.addEventListener('beforeSave', addVariables); // by Trevor
app.addEventListener('beforeSaveAs', addVariables); // by Trevor
app.addEventListener('beforeSaveACopy', addVariables); // by Trevor
app.addEventListener('beforeExport', addVariables); // by Trevor
app.addEventListener('beforePrint', addVariables); // by Trevor
app.addEventListener('beforeDeactivate', addVariables); // by Trevor
app.addEventListener('afterActivate', addVariables); // by Trevor

2 replies

Robert at ID-Tasker
Legend
January 17, 2025

@attilioL

 

Just in case - replace this:

function myRound(thisNumber, digits) { // By Trevor
digits = (digits) ? Math.pow(10, digits) : 1000;
return Math.round(thisNumber * digits) / digits;
}

with this: 

function myRound(thisNumber, digits) 
{
return thisNumber;
}

So you can always "bring back this functionality" without the need to think where it was used before.

 

Or in case you would like to "align to your own grid", etc. 

 

m1b
Community Expert
Community Expert
January 17, 2025

Hi @attilioL, basically, just remove this line:

height = myRound(height, decPlaces);

and this line:

width = myRound(width, decPlaces);

Those lines call the function that does the rounding.

 - Mark