InDesign scripting : lesson 20

this is a perfect example of how becoming familiar with applescript will save you (well, at least your time). just last week a new problem presented itself. artwork for thirty signs had to be sent to a signwriter who required all text be converted to outlines.

now that’s not too difficult — select all (command-a), create outlines (command-shift-o), repeat for remaining 29 pages. but, when you know a little applescript (and when you know you’ll be doing this for future projects for the same signwriter) it makes sense to create an automated solution.

if you check the scripting dictionary you’ll see that the command create outlines can address a whole bunch of stuff — characters, words, lines, stories, text frames, etc. the first attempt at this script addressed stories :

tell application "Adobe InDesign CS4"
  tell active document
    tell every story
      create outlines
    end tell
  end tell
end tell

… and got more complex with each attempt :

tell application "Adobe InDesign CS4"
  tell active document
    repeat with thisStory in every story
      tell thisStory
        create outlines
      end tell
    end repeat
  end tell
end tell
tell application "Adobe InDesign CS4"
  tell active document
    repeat with x from (count every story) to 1 by -1
      tell story x
        try
          create outlines with delete original
        end try
      end tell
    end repeat
  end tell
end tell

these sort of worked, kind of ok, some of the time — in other words, they were bloody useless.

so it made sense to try a different tact — surprisingly, perhaps (or perhaps not), this simple variation of the original script works much better :

tell application "Adobe InDesign CS4"
  tell active document
    tell every text frame
      create outlines
    end tell
  end tell
end tell

so far, only one other hassle has presented itself — groups. applescript doesn’t recognise text frames if they are part of a group (unless you specify to check inside groups). to check this for yourself, create an InDesign document with three text frames — group two of the text frames together — then run this script :

tell application "Adobe InDesign CS4"
  tell active document
    set theFrames to count text frames
    set theGroups to count text frames of group 1
    
    display dialog "text frames = " & theFrames & return & "text frames in groups = " & theGroups
  end tell
end tell

no worries — for this workflow we could just ungroup all the groups before converting to outlines :

tell application "Adobe InDesign CS4"
  tell active document
    repeat until (count of groups) = 0
      ungroup every group
    end repeat
    tell every text frame
      create outlines
    end tell
  end tell
end tell

the repeat loop ensures we get every group — that means groups within groups within… etc.

your homework for today is to come up with a solution which does not involve ungrouping the groups.

macgrunt icon

2 thoughts on “InDesign scripting : lesson 20

    • G’day Annadurai
      Do you only want to count the text frames in groups of groups?
      Or do you want to count all text frames including those within groups, and groups of groups, etc?
      Also, are you counting for the whole document, or on a page-by-page basis?
      m.

thoughtful and respectful comments welcome

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s