TweetFollow Us on Twitter

Introduction to Scripting InDesign

Volume Number: 22 (2006)
Issue Number: 11
Column Tag: AppleScript Essentials

Introduction to Scripting InDesign

by Benjamin S. Waldie

In last month's column, we discussed scripting page layout applications in order to automate your desktop publishing workflow. Specifically, we focused on getting started with scripting QuarkXPress <http://www.quark.com>. This month, we will be discussing another popular and well-known page layout application, Adobe InDesign <http://www.adobe.com/products/indesign/>.

Getting Started

Before we begin scripting InDesign, I'd like to briefly discuss InDesign's AppleScript support. When you open InDesign's dictionary for the first time, one of the things you may notice is that it is quite long. See figure 1.



Figure 1. InDesign's AppleScript Dictionary

InDesign contains extensive AppleScript support for automating almost anything that you can do manually. Sure, you may come across a feature here and there that doesn't have corresponding AppleScript support. However, these situations are certainly few and far between. Furthermore, InDesign's AppleScript support is constantly being revised, improved, and expanded with each new release of the application, so it just keeps on getting better.

Working with Documents

Within InDesign, you will most likely want to automate tasks that involve documents, so that is what we will focus on here. If you need to automate books, you are encouraged to explore InDesign's dictionary for the functionality you require.

Referring to Documents

A document is referenced using the document class, which can be found in the Basics Suite, in InDesign's dictionary. Documents may be referenced using their index (front to back positioning) or by their name. The following example code demonstrates how a document would be referenced using its index.

tell application "Adobe InDesign CS2"
   tell document 1
      -- Do something
   end tell
end tell

Similarly, the following code would reference a document by its name.

tell application "Adobe InDesign CS2"
   tell document "My Document.indd"
      -- Do something
   end tell
end tell

In most cases, unless you will always only have one document opened in InDesign, it is usually the safest to refer to a document by its name. This way, if the front to back positioning of a document changes, your script will continue to target the correct document.

Throughout this month's column, however, we will be referring to documents by their index. Specifically, we will reference document 1, which will refer to the frontmost document. Another way to target the frontmost document is to reference the active document property of the application class. For example:

tell application "Adobe InDesign CS2"
   tell active document
      -- Do something
   end tell
end tell

Checking for the Existence of a Document

Before your AppleScript begins interacting with a document, it is often a good idea to make sure that the document exists. This may be done using the exists command, as follows.

tell application "Adobe InDesign CS2"
   document 1 exists
end tell
--> true

As the example code above demonstrates, the result of the exists command is a true or false Boolean value indicating whether or not the document exists.

Creating Documents

Depending on your workflow, you may not need to work within an existing document, but within a new document. To create a new document via AppleScript, use the make command, as demonstrated below.

tell application "Adobe InDesign CS2"
   make new document
end tell
--> document "Untitled-1" of application "Adobe InDesign CS2"

The result of the make command is a reference to the newly created document, which may be placed in a variable and referenced later in order to perform additional tasks within the document.

Please note that in the example code above, we did not specify the size of the document to be created. In this situation, the document would be created using InDesign's default document size. To specify a size for the document, you may optionally specify values for the page width and page height properties, which are actually properties of the document preferences property of the document class. Here is an example of how this would be done:

tell application "Adobe InDesign CS2"
   make new document with properties {document preferences:{page width:8.5, page height:11}}
end tell
--> document "Untitled-1" of application "Adobe InDesign CS2"

Again, make note of the example code above. Here, although we have specified a size for the document, we have not specified unit of measurement, i.e. inches, points, centimeters, millimeters, etc. Because of this, the default unit of measurement will be used when creating the document. In other words, if InDesign's default unit of measurement is set to inches, then an 8.5" x 11" document would be created.

You may optionally choose to specify the unit of measurement when creating the document, as demonstrated below.

tell application "Adobe InDesign CS2"
   make new document with properties {document preferences:{page width:"8.5in", page height:"11in"}}
end tell
--> document "Untitled-1" of application "Adobe InDesign CS2"

Another way to ensure that the proper unit of measurement will be used when the document is created is to modify the default unit of measurement. This is done by setting the value of the horizontal measurement units and vertical measurement units properties of the document's view preferences to the desired unit type. For example, the following sample code will set the default unit of measurement to inches, and then create the document, ensuring an 8.5" x 11" document.

tell application "Adobe InDesign CS2"
   tell view preferences
      set horizontal measurement units to inches
      set vertical measurement units to inches
   end tell
   make new document with properties {document preferences:{page width:8.5, page height:11}}
end tell
--> document "Untitled-1" of application "Adobe InDesign CS2"

Since InDesign's default unit of measurement may vary from user to user, changing the default unit of measurement to the desired value at the beginning of an InDesign-specific AppleScript is usually good practice. In addition to ensuring that a newly created document will be the correct size, specifying the default unit of measurement at the beginning of your script will help to ensure that resizing or creating other elements, such as text frames, rectangles, etc., will be done using the desired unit of measurement.

Working with Text

Developers that are automating InDesign will often have the need to interact with text frames in InDesign documents, whether that need is to insert text, extract text, format text, or more. We will now discuss a number of ways to interact with text frames in InDesign.

Creating a Text Frame

First and foremost is creating new text frames. This will be necessary if you intend to add text to a newly created document.

Before creating a text frame, the first thing you will want to do is identify where the text frame will be created, and how large it will be. Once you have determined this information, you will need to translate it into a list of bounds, which can be specified via AppleScript when the text frame is created. Bounds of a text frame will be specified as a list of four items, formatted as follows:

{top position, left position, bottom position, right position}

Once you have determined the desired bounds for a text frame, use the make command to create the text frame. In doing so, specify the bounds for the text frame using the geometric bounds property of the text frame, as demonstrated below.

tell application "Adobe InDesign CS2"
   tell page 1 of document 1
      make new text frame with properties {geometric bounds:{1, 1, 3, 6}}
   end tell
end tell
--> text field id 191 of page id 159 of spread id 154 of document "Untitled-1" of 
   application "Adobe InDesign CS2"

Assuming that the default unit of measurement is set to inches, the code above would create a 5" x 2" text frame that is 1" down and 1" across on the first of page of the frontmost document.

Placing Text

Now that you have a text frame, you are ready to insert text into it. To insert text into a text frame, replacing any existing content, set the contents property of the text frame's parent story to the desired text.

tell application "Adobe InDesign CS2"
   tell parent story of text frame 1 of page 1 of document 1
      set contents to "My Project Text"
   end tell
end tell

It is also possible to insert text into a specific location within a text frame, appending it to existing text. This is done by setting the contents property of a specified insertion point within the parent story of the text frame to a specified value. For example, the following code would append the text "My Project Text" to the end of any existing text within the specified text frame, without replacing the existing text.

tell application "Adobe InDesign CS2"
   tell parent story of text frame 1 of page 1 of document 1
      set contents of insertion point -1 to "My Project Text"
   end tell
end tell

Styling Text

Text in InDesign possesses numerous properties, including font, point size, color, and much more, which are accessible via AppleScript. The following example code demonstrates one way that these properties could be modified. This particular code will set the font of the text within the specified text frame to "Arial", the point size of the second word to 24, and the color of the first three words to specified values.

tell application "Adobe InDesign CS2"
   tell parent story of text frame 1 of page 1 of document 1
      set applied font to "Arial"
      set point size of word 2 to 24
      set fill color of word 1 to "C=0 M=0 Y=100 K=0"
      set fill color of word 2 to "C=100 M=0 Y=0 K=0"
      set fill color of word 3 to "C=0 M=100 Y=0 K=0"
   end tell
end tell

Please note that, in the above example, the colors specified correspond to the names of colors in InDesign's Swatches palette. See figure 2.



Figure 2. InDesign's Color Swatches Palette

Figure 3 shows the result of executing the previous code on a text frame that contains the text "My Project Text".



Figure 3. Styled Text in InDesign

Working with Graphics

Interaction with graphics is often another important aspect of scripting InDesign. In InDesign, graphics are typically placed within rectangles. However, it is also possible to place them into text frames. For the sake of reducing confusion, in this column, we will discuss working with graphics in rectangles.

Creating a Graphic Frame

Like text frames, rectangles may be created via AppleScript by using the make command, and specifying the desired bounds for the rectangle. For example, assuming the default unit of measurement is set to inches, the following code would create a 3" x 5" rectangle 1" across and 3" down.

tell application "Adobe InDesign CS2"
   tell page 1 of document 1
      make new rectangle with properties {geometric bounds:{3, 1, 6, 6}}
   end tell
end tell
--> rectangle id 385 of page id 159 of spread id 154 of document "Untitled-1" of 
   application "Adobe InDesign CS2"

Again, here, the result of the make command is a reference to the newly created rectangle.

Placing a Graphic

Once a rectangle exists, the place command may be used to place a graphic within the rectangle. The place command requires a reference to the graphic file to be placed. For example:

set theImage to choose file with prompt "Please select an image to place:" without 
   invisibles
tell application "Adobe InDesign CS2"
   tell rectangle 1 of page 1 of document 1
      place theImage
   end tell
end tell
--> image id 391 of rectangle id 385 of page id 159 of spread id 154 of document "Untitled-1" of 
   application "Adobe InDesign CS2"

Here, the result of the place command is a reference to the newly placed image, within the rectangle. Figure 4 shows an example of a placed graphic within a rectangle on an InDesign document page.



Figure 4. A Placed Graphic

Labeling Page Items

Throughout this column, we have referenced text frames and rectangles by index. When we discussed referencing documents, I mentioned that a more accurate way of referring to documents was by name. The same rule applies to text frames, rectangles, and other page items within InDesign documents. The reason for this is that, if a new page item is created, or page items are repositioned within the document, the index of a page item may change.

To always ensure that your script is referencing the correct page item, you may apply a script label to the item. This may be done via AppleScript, for example:

tell application "Adobe InDesign CS2"
   tell text frame 1 of page 1 of document 1
      set label to "myTextFrame"
   end tell
end tell

Applying script labels to page items may also be done manually within InDesign by using the Script Label palette, which can be made visible via the Window > Automation menu. See figure 5.



Figure 5. InDesign's Script Label Palette

Once a script label has been applied to a page item, you may reference it by that label, rather than by its index. For example:

tell application "Adobe InDesign CS2"
   tell text frame "myTextFrame" of page 1 of document 1
      -- Do something
   end tell
end tell

Next Steps and Resources

Documentation and Support

If you plan to continue scripting InDesign in order to automate processes in your own workflow, there are a number of resources available to you for continued learning.

First and foremost, Adobe provides detailed documentation for scripting InDesign. A very comprehensive InDesign Scripting Reference and InDesign Scripting Guide may be downloaded from the Adobe website at <http://www.adobe.com/products/indesign/scripting.html>. These documents contain extensive documentation with regard to all of InDesign's scripting features, and will no doubt prove to be an important addition to any InDesign scripter's arsenal.

The online Adobe support forums at <http://www.adobe.com/support/forums/> are a tremendous resource for anyone using or scripting InDesign, or any other Adobe application for that matter. Here, you will find numerous application-specific forums, including the InDesign Scripting forum, where you may post your questions to other InDesign scripters.

Expanding InDesign's AppleScript Support

While InDesign's AppleScript support is quite extensive, there's always room for improvement, right? Well, with InDesign's plug-in architecture, it is actually possible to expand its AppleScript support with the addition of scriptable plug-ins. There are numerous scriptable plug-ins available for InDesign, including InCatalog and InData, available from Em Software (http://www.emsoftware.com/), which can be used to automate many complex data-driven publishing tasks. For a list of many available InDesign plug-ins, visit the InDesign plug-ins page on Adobe's website at http://www.adobe.com/products/plugins/indesign/. Also, be sure to check out the Adobe Studio Exchange at http://www.adobestudioexchange.com/.

In Closing

For those desktop publishers currently using InDesign and looking to become more efficient, hopefully, this month's column has helped to shed some light on the possibilities. Be sure to continue exploring InDesign's AppleScript support on your own, and don't forget to check out the resources that I have mentioned above.

Until next time, keep scripting!


Ben Waldie is the author of the best selling books "AppleScripting the Finder" and the "Mac OS X Technology Guide to Automator", available from http://www.spiderworks.com, as well as an AppleScript Training CD, available from http://www.vtc.com. Ben is also president of Automated Workflows, LLC, a company specializing in AppleScript and workflow automation consulting. For years, Ben has developed professional AppleScript-based solutions for businesses including Adobe, Apple, NASA, PC World, and TV Guide. For more information about Ben, please visit http://www.automatedworkflows.com, or email Ben at ben@automatedworkflows.com.

 

Community Search:
MacTech Search:

Software Updates via MacUpdate

Latest Forum Discussions

See All

Fresh From the Land Down Under – The Tou...
After a two week hiatus, we are back with another episode of The TouchArcade Show. Eli is fresh off his trip to Australia, which according to him is very similar to America but more upside down. Also kangaroos all over. Other topics this week... | Read more »
TouchArcade Game of the Week: ‘Dungeon T...
I’m a little conflicted on this week’s pick. Pretty much everyone knows the legend of Dungeon Raid, the match-3 RPG hybrid that took the world by storm way back in 2011. Everyone at the time was obsessed with it, but for whatever reason the... | Read more »
SwitchArcade Round-Up: Reviews Featuring...
Hello gentle readers, and welcome to the SwitchArcade Round-Up for July 19th, 2024. In today’s article, we finish up the week with the unusual appearance of a review. I’ve spent my time with Hot Lap Racing, and I’m ready to give my verdict. After... | Read more »
Draknek Interview: Alan Hazelden on Thin...
Ever since I played my first release from Draknek & Friends years ago, I knew I wanted to sit down with Alan Hazelden and chat about the team, puzzle games, and much more. | Read more »
The Latest ‘Marvel Snap’ OTA Update Buff...
I don’t know about all of you, my fellow Marvel Snap (Free) players, but these days when I see a balance update I find myself clenching my… teeth and bracing for the impact to my decks. They’ve been pretty spicy of late, after all. How will the... | Read more »
‘Honkai Star Rail’ Version 2.4 “Finest D...
HoYoverse just announced the Honkai Star Rail (Free) version 2.4 “Finest Duel Under the Pristine Blue" update alongside a surprising collaboration. Honkai Star Rail 2.4 follows the 2.3 “Farewell, Penacony" update. Read about that here. | Read more »
‘Vampire Survivors+’ on Apple Arcade Wil...
Earlier this month, Apple revealed that poncle’s excellent Vampire Survivors+ () would be heading to Apple Arcade as a new App Store Great. I reached out to poncle to check in on the DLC for Vampire Survivors+ because only the first two DLCs were... | Read more »
Homerun Clash 2: Legends Derby opens for...
Since launching in 2018, Homerun Clash has performed admirably for HAEGIN, racking up 12 million players all eager to prove they could be the next baseball champions. Well, the title will soon be up for grabs again, as Homerun Clash 2: Legends... | Read more »
‘Neverness to Everness’ Is a Free To Pla...
Perfect World Games and Hotta Studio (Tower of Fantasy) announced a new free to play open world RPG in the form of Neverness to Everness a few days ago (via Gematsu). Neverness to Everness has an urban setting, and the two reveal trailers for it... | Read more »
Meditative Puzzler ‘Ouros’ Coming to iOS...
Ouros is a mediative puzzle game from developer Michael Kamm that launched on PC just a couple of months back, and today it has been revealed that the title is now heading to iOS and Android devices next month. Which is good news I say because this... | Read more »

Price Scanner via MacPrices.net

Amazon is still selling 16-inch MacBook Pros...
Prime Day in July is over, but Amazon is still selling 16-inch Apple MacBook Pros for $500-$600 off MSRP. Shipping is free. These are the lowest prices available this weekend for new 16″ Apple... Read more
Walmart continues to sell clearance 13-inch M...
Walmart continues to offer clearance, but new, Apple 13″ M1 MacBook Airs (8GB RAM, 256GB SSD) online for $699, $300 off original MSRP, in Space Gray, Silver, and Gold colors. These are new MacBooks... Read more
Apple is offering steep discounts, up to $600...
Apple has standard-configuration 16″ M3 Max MacBook Pros available, Certified Refurbished, starting at $2969 and ranging up to $600 off MSRP. Each model features a new outer case, shipping is free,... Read more
Save up to $480 with these 14-inch M3 Pro/M3...
Apple has 14″ M3 Pro and M3 Max MacBook Pros in stock today and available, Certified Refurbished, starting at $1699 and ranging up to $480 off MSRP. Each model features a new outer case, shipping is... Read more
Amazon has clearance 9th-generation WiFi iPad...
Amazon has Apple’s 9th generation 10.2″ WiFi iPads on sale for $80-$100 off MSRP, starting only $249. Their prices are the lowest available for new iPads anywhere: – 10″ 64GB WiFi iPad (Space Gray or... Read more
Apple is offering a $50 discount on 2nd-gener...
Apple has Certified Refurbished White and Midnight HomePods available for $249, Certified Refurbished. That’s $50 off MSRP and the lowest price currently available for a full-size Apple HomePod today... Read more
The latest MacBook Pro sale at Amazon: 16-inc...
Amazon is offering instant discounts on 16″ M3 Pro and 16″ M3 Max MacBook Pros ranging up to $400 off MSRP as part of their early July 4th sale. Shipping is free. These are the lowest prices... Read more
14-inch M3 Pro MacBook Pros with 36GB of RAM...
B&H Photo has 14″ M3 Pro MacBook Pros with 36GB of RAM and 512GB or 1TB SSDs in stock today and on sale for $200 off Apple’s MSRP, each including free 1-2 day shipping: – 14″ M3 Pro MacBook Pro (... Read more
14-inch M3 MacBook Pros with 16GB of RAM on s...
B&H Photo has 14″ M3 MacBook Pros with 16GB of RAM and 512GB or 1TB SSDs in stock today and on sale for $150-$200 off Apple’s MSRP, each including free 1-2 day shipping: – 14″ M3 MacBook Pro (... Read more
Amazon is offering $170-$200 discounts on new...
Amazon is offering a $170-$200 discount on every configuration and color of Apple’s M3-powered 15″ MacBook Airs. Prices start at $1129 for models with 8GB of RAM and 256GB of storage: – 15″ M3... Read more

Jobs Board

*Apple* Systems Engineer - Chenega Corporati...
…LLC,** a **Chenega Professional Services** ' company, is looking for a ** Apple Systems Engineer** to support the Information Technology Operations and Maintenance Read more
Solutions Engineer - *Apple* - SHI (United...
**Job Summary** An Apple Solution Engineer's primary role is tosupport SHI customers in their efforts to select, deploy, and manage Apple operating systems and Read more
*Apple* / Mac Administrator - JAMF Pro - Ame...
Amentum is seeking an ** Apple / Mac Administrator - JAMF Pro** to provide support with the Apple Ecosystem to include hardware and software to join our team and Read more
Operations Associate - *Apple* Blossom Mall...
Operations Associate - Apple Blossom Mall Location:Winchester, VA, United States (https://jobs.jcp.com/jobs/location/191170/winchester-va-united-states) - Apple Read more
Cashier - *Apple* Blossom Mall - JCPenney (...
Cashier - Apple Blossom Mall Location:Winchester, VA, United States (https://jobs.jcp.com/jobs/location/191170/winchester-va-united-states) - Apple Blossom Mall Read more
All contents are Copyright 1984-2011 by Xplain Corporation. All rights reserved. Theme designed by Icreon.