9 Replies Latest reply on Jul 12, 2018 8:28 AM by Laubender

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

    scottr93836726

      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);

        • 1. Re: I need to add in a page size text variable to my already working .jsx script
          Trevorׅ Adobe Community Professional

          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
          
          • 2. Re: I need to add in a page size text variable to my already working .jsx script
            scottr93836726 Level 1

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

            • 3. Re: I need to add in a page size text variable to my already working .jsx script
              Trevorׅ Adobe Community Professional

              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

              • 4. Re: I need to add in a page size text variable to my already working .jsx script
                attil Level 1

                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:

                 

                Screen Shot 2018-07-11 at 2.42.07 PM.png

                • 5. Re: I need to add in a page size text variable to my already working .jsx script
                  Loic.Aigon Adobe Community Professional

                  Trevorׅ

                  (without permission, sorry Loic)

                  Waaaa

                   

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

                  • 6. Re: I need to add in a page size text variable to my already working .jsx script
                    Trevorׅ Adobe Community Professional

                    Loic.Aigon Anytime

                    attil I don't know why the script slows down InDesign on Sierra. Sounds strange

                    The linting bug is not connected and is not a bug in the script, the problem is that linters don't understand ExtendScripts # commands, you have to either set the linter to ignore them or just ignore the messages.

                    • 7. Re: I need to add in a page size text variable to my already working .jsx script
                      Trevorׅ Adobe Community Professional

                      Attil, you can try changing parts of the script to see if there's something in particular that's slowing it down.

                      Change units = toTitleCase(page.parent.parent.viewPreferences.horizontalMeasurementUnits.toString());

                      To units = page.parent.parent.viewPreferences.horizontalMeasurementUnits.toString();

                       

                      Remove the applescript and just return a fixed string.

                      Restart the app each time before you try out the change then you should be able to identify a point where things start to run smoothly and can work on changing the problematic element.

                      • 8. Re: I need to add in a page size text variable to my already working .jsx script
                        attil Level 1

                        Will do, i'll give it a shot when i get a sec. Thank you for your help. I'll let you know how it goes.

                        • 9. Re: I need to add in a page size text variable to my already working .jsx script
                          Laubender Adobe Community Professional & MVP

                          attil  wrote

                           

                          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:

                           

                          Screen Shot 2018-07-11 at 2.42.07 PM.png

                          Ah. Then this is the original post and that one is a double post initially done in the InDesign forum:

                          Script works fine in "High Sierra" but not "Sierra"

                           

                          Should we run both?

                          Or should the one I linked to be closed?

                           

                          Regards,
                          Uwe