Skip to main content
scottr93836726
Participant
December 23, 2015
Question

I need to add in a page size text variable to my already working .jsx script

  • December 23, 2015
  • 2 replies
  • 3138 views

Hi all,

I was wondering if any of you scripters would know how to add in a piece of code that would allow me to generate a page size variable,

I have already found a script that adds in a user name to my slug but i dont know how to add one for page size as im not fluent in JavaScript.

Any help would be much appreciated!! see current script below:

----------------------------------------------------------------------------------

#targetengine 'usernameVariable'

//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 addVariables(openEvent){

   

    var doc = openEvent.parent;

   

    while ( doc.constructor.name != "Document" )

    {

        if ( doc.constructor.name == "Application" ){ return; }

      

       doc = doc.parent;

    }

   

    //Adding User name to text variables

    createTextVariable(doc, "User name", (Folder.myDocuments).parent.displayName );

   

    //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 !" );

   

}

//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(){

   

    var APLScript = "get computer name of (system info)";

    var VBScript = "Dim wshShell\

    Set wshShell = CreateObject( \"WScript.Shell\" )\

    strComputerName = wshShell.ExpandEnvironmentStrings( \"%COMPUTERNAME%\" )\

    app.scriptArgs.SetValue \"computerName\", strComputerName";

    var scpt = (File.fs=="Windows")? VBScript : APLScript;

    var language = (File.fs=="Windows")? ScriptLanguage.visualBasic : ScriptLanguage.APPLESCRIPT_LANGUAGE;

    var scriptResult = app.doScript(scpt, language);

    var computerName = (File.fs=="Windows")? app.scriptArgs.getValue("computerName") : scriptResult;

    return computerName;

}

//Add listeners to update file when opened.

app.addEventListener('afterOpen', addVariables);

2 replies

Known Participant
July 11, 2018

Scott, is there a reason why this script works fine in Mac OS "High Sierra", but slows down Indesign to a crawl in "Sierra"? When i open the script in the editor i get this error:

Loic.Aigon
Legend
July 12, 2018

Trevorׅ

(without permission, sorry Loic)

Waaaa

No problem, it's nice already that you took care of mentioning the source

Trevor:
Legend
December 24, 2015

If all the pages are the same size then you can use the below, if not then I would not recommend using text variables

See The intro comments

// https://forums.adobe.com/thread/2049382

// Main script by Loic Aigon Add highly customized Text Variables to InDesign | Ozalto

// Additions (First Page Dimensions and variable update on script execution)

// and modifications (without permission, sorry Loic) by Trevor http://www.creative-scripts.com

#targetengine 'usernameVariable'

//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

}

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 = 3;

    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

scottr93836726
Participant
December 27, 2015

This is Fantastic, thank you so much, just a couple more questions,

is there anyway to get the unit to display as "mm, in, px etc...." instead of Millimeters, Inches, Pixels,

also is there anyway that this script could look at the pahe size tool sizes instead of document setup sizes incase of multipage docs?

and also can bleed size be added?

Thanks again!!!

Trevor:
Legend
December 27, 2015

Hi Scott

mm, in etc. would be very easy as would bleed size.

If you want a page size variable that shows the size of each page that it appears on then you would need  a c++ custom plugin that would be quite expensive.

In my opinion what you need is a script that adds a textFrame in the bleed of each page of the document with the info that you want and not use variables.

This is a scripting forum which is for scripters to learn / share about scripting and not a script request forum.

For script requests I personally highly recommend Contact | Creative-Scripts.com some might say that as the site owner I'm biased.

Wouldn't cost a fortune.

I've got the flue and going to bed soon so don't expect any speedy response.

Regards

Trevor