Skip to main content
Harbs.
Legend
April 12, 2010
Question

With CS5, some things have changed

  • April 12, 2010
  • 22 replies
  • 62285 views

This discussion is for changes to the scripting DOM which can affect legacy scripts.

Please use this discussion for discussing new scripting features in CS5.

Please keep in mind that all changes are specific to version 7 DOM. InDesign supports versioning, so you should be able to use legacy scripts in CS5 without issues. Versioning can be done in two ways:

1) Place the script in a folder named: "Version 6.0 Scripts" (or 5.0, 4.0, 3.0). The folder must be named exactly as specified.

2) Set the script version preferences at the start of your script. (i.e. app.scriptPreferences.version = 6), but it's highly recommended to reset the scripting version at the end of the script, and even to enclose the script in a try/catch/finally block to ensure that the script preferences are reset correctly.

Here's quick links to issues brought up in this thread:

  1. PageItem.parent
  2. PageItem.itemByName()
  3. PageItem.cornerOption and PageItem.cornerRadius
  4. Text values returned as Strings instead of Numbers
  5. PointType.LINE_TYPE was changed to PointType.PLAIN
  6. PasteBoardPreference.minimumSpaceAboveAndBelow was removed.

Harbs

This topic has been closed for replies.

22 replies

Andreas Jansson
Inspiring
January 17, 2011

I just found a difference in the results from allPageItems, in CS5, which I have to code some kind of exception / condition for, in my scripts before upgrading them to CS5:

allPageItems now includes "contained" objects (images and other linked objects, that reside inside rectangles and such) in CS5.

As a simple test, placing an EPS on an empty page in a new document, I run the following code in CS4 and CS5 respectively:

CS5:
app.activeDocument.pages[0].allPageItems
Result: [object Rectangle],[object EPS]

CS4:
app.activeDocument.pages[0].allPageItems
Result: [object Rectangle]

As you can see, we get the container rectangle only, in CS4, while CS5 is returning the object contained as well.

In a larger result set I get the following objects included in the allPageItems in CS5 (not present in the same call in CS4):

[object Image]
[object EPS]
[object Polygon]
[object PDF]

-- Andreas

Harbs.
Harbs.Author
Legend
January 17, 2011

Interesting. Thanks!

I wonder if it has something to do with the introduction of spline items...

Harbs

October 28, 2010

I cant my progress bar working in CS5, it works if i dont trigger it from the menu.

Does anyone have a working script like this?

Here is the script that i made that adds a menu and when you fire the submenu a progress bar should start working in a window, but nothing is happening except when i add an alert, then it fires.

#targetengine "session" // Create menu item var test_menu = app.menus.item('$ID/Main').submenus.add('Test menu'); // Create sub menu action var test_sub_menu = app.scriptMenuActions.add('Run progressbar'); // Set on invoke action test_sub_menu.eventListeners.add('onInvoke', function() {      // Create a simple window      var win = new Window(           "window { \                progressbar: Progressbar { size: [400, 10] } \           }"      );      // Center and show the window      win.center();      win.show();            // Set max value for the progressbar      win.progressbar.maxvalue = 5;            // Make a simple loop from 0 to 4      for(var i = 0; i < 5; i++) {           // This should happen every second           win.progressbar.value = i;                      // Sleep for a second           $.sleep(1000);      }            // Remove the test menus actions      app.scriptMenuActions.item('Run progressbar').remove();            // Remove the test menu      app.menus.item('$ID/Main').submenus.item('Test menu').remove(); }); // Add the sub menu action test_menu.menuItems.add(test_sub_menu);

Participant
October 28, 2010

Hi everybody,

I'm a vb script developer and I use to access TextFrames with labels, for instance :

set oFrame = myPage.TextFrames.item("bText")

it seems this method no longer exist in CS5... is it a bug ?

Thanks in advance for your answers,

Philippe

Peter Kahrel
Community Expert
Community Expert
October 28, 2010

This is dealt with earlier in this same thread.

Peter

Participant
October 28, 2010

Thanks Peter,

so here is the "traduction" of the code in VB to access a TextFrame with the label :

Public Sub GetItemFromCollection(ByVal label As String, ByRef collection As InDesign.TextFrames, ByRef oTextFrame As InDesign.TextFrame)
     scriptVersion = oInd.ScriptPreferences.Version
     If scriptVersion > 6 Then oInd.ScriptPreferences.Version = 6
     Set oTextFrame = collection.Item(label)
     oInd.ScriptPreferences.Version = scriptVersion
End Sub

and to call it :

Call GetItemFromCollection("bTexte", oPage.TextFrames, oTexteFrame)

but it was easier before...

Philippe

Participating Frequently
October 14, 2010

I am using a javascript to export a pdf with settings. The script works fine in CS3 and CS4, but not CS5. I get an error from the following line of code for PDF preferences. I am exporting the PDF with OPI. What is the new syntax in CS5 for this setting?

contentToEmbed = PDFContentToEmbed.linkAll;

Larry G. Schneider
Community Expert
Community Expert
October 14, 2010

Jongware's CS3 Help document lists the proper form for that command as PDFContentToEmbed.LINK_ALL. Have you tried that.

edit:  Looking at the similar Help files for CS5, this property seems to no longer be supported.

Participating Frequently
October 15, 2010

That didn't work. There has to be some javascript command to do this. It is still available in the PDF settings.

Harbs.
Harbs.Author
Legend
October 3, 2010

As pointed out here, there is no longer a property PasteBoardPreferences.minimumSpaceAboveAndBelow.


Use PasteBoardPreference.pasteboardMargins instead.

Harbs

Harbs.
Harbs.Author
Legend
September 19, 2010

As Jongware points out here, PointType.LINE_TYPE is now PointType.PLAIN.

Harbs.
Harbs.Author
Legend
July 27, 2010

JPEGExportPreference.resolution became JPEGExportPreference.exportResolution

July 3, 2010

Footnote will allow the xml tags in CS5?

Arivu..

Inspiring
July 3, 2010

No. I don't think so.

One of the pain area for XML works in ID.

sudar1983_14 <forums@adobe.com>

07/03/10 02:41 PM

Please respond to

clearspace-721659546-639966-2-2945664@mail.forums.adobe.com

To

Pankaj Chaturvedi <pankaj.c@thomsondigital.com>

cc

Subject

Re: With CS5, some things have changed

Footnote will allow the xml tags in CS5?

Arivu..

July 5, 2010

Tagging of Footnote Text is not supported in InDesign CS5. Please find below the screen shot for the same.

Harbs.
Harbs.Author
Legend
June 24, 2010

Some (most) of the text properties which used to return Numbers can now return Strings. This can be a problem if you have a script which adjusts these values.

For example: myText.pointSize = myText.pointSize+1.

In CS4, this would take 12 point text and make it 13 points. In CS5, it'll take the same 12 point text and make it 121 points. This is becase it uses the String "+" operator rather than the Number one. This can catch you really off guard the first time it happens...

The fix is to cast the String as a Number like so: myText.pointSize = Number(myText.pointSize)+1.

Harbs

Inspiring
May 6, 2010

I'm not so sure that the .parentPage property does away with the need for findPage. I was just working on it right now and came to the conclusion that for a general function, it just changes it a bit:

function findPage(theObj) {
     if (theObj.hasOwnProperty("baseline")) {
          theObj = theObj.parentTextFrames[0];
     }
     while (theObj != null) {
          if (theObj.hasOwnProperty ("parentPage")) return theObj.parentPage;
          var whatIsIt = theObj.constructor;
          switch (whatIsIt) {
               case Page : return theObj;
               case Character : theObj = theObj.parentTextFrames[0]; break;
               case Footnote :; // drop through
               case Cell : theObj = theObj.insertionPoints[0].parentTextFrames[0]; break;
               case Note : theObj = theObj.storyOffset; break;
               case Application : return null;
          }
          if (theObj == null) return null;
          theObj = theObj.parent;
     }
     return theObj
} // end findPage

I believe that this function will work with any version of InDesign because it will behave the same as before in versions that don't support the parentPage property.

Of course, if you know you're dealing with an object that has a parentPage property in CS5, you can just go straight for the property.

Dave

Robert at ID-Tasker
Legend
May 6, 2010

I believe that this function will work with any version of InDesign because it will behave the same as before in versions that don't support the parentPage property.

I think it won't because of this line:

               case Character : theObj = theObj.parentTextFrames[0]; break;

In CS1 it's ParentTextFrame - one item - not array/collection.

robin

www.adobescripts.co.uk