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.

 
AAPL
$116.47
Apple Inc.
+0.16
MSFT
$47.98
Microsoft Corpora
-0.72
GOOG
$537.50
Google Inc.
+2.67

MacTech Search:
Community Search:

Software Updates via MacUpdate

Cobook 3.0.7 - Intelligent address book....
Cobook Contacts is an intuitive, engaging address book. Solve the problem of contact management with Cobook Contacts and its simple interface and powerful syncing and integration possibilities.... Read more
StatsBar 1.9 - Monitor system processes...
StatsBar gives you a comprehensive and detailed analysis of the following areas of your Mac: CPU usage Memory usage Disk usage Network and bandwidth usage Battery power and health (MacBooks only)... Read more
Cyberduck 4.6 - FTP and SFTP browser. (F...
Cyberduck is a robust FTP/FTP-TLS/SFTP browser for the Mac whose lack of visual clutter and cleverly intuitive features make it easy to use. Support for external editors and system technologies such... Read more
Maya 2015 - Professional 3D modeling and...
Maya is an award-winning software and powerful, integrated 3D modeling, animation, visual effects, and rendering solution. Because Maya is based on an open architecture, all your work can be scripted... Read more
Evernote 6.0.1 - Create searchable notes...
Evernote allows you to easily capture information in any environment using whatever device or platform you find most convenient, and makes this information accessible and searchable at anytime, from... Read more
calibre 2.11 - Complete e-library manage...
Calibre is a complete e-book library manager. Organize your collection, convert your books to multiple formats, and sync with all of your devices. Let Calibre be your multi-tasking digital... Read more
Herald 5.0.1 - Notification plugin for M...
Note: Versions 2.1.3 (for OS X 10.7), 3.0.6 (for OS X 10.8), and 4.0.8 (for OS X 10.9) are no longer supported by the developer. Herald is a notification plugin for Mail.app, Apple's Mac OS X email... Read more
Firetask 3.7 - Innovative task managemen...
Firetask uniquely combines the advantages of classical priority-and-due-date-based task management with GTD. Stay focused and on top of your commitments - Firetask's "Today" view shows all relevant... Read more
TechTool Pro 7.0.6 - Hard drive and syst...
TechTool Pro is now 7, and this is the most advanced version of the acclaimed Macintosh troubleshooting utility created in its 20-year history. Micromat has redeveloped TechTool Pro 7 to be fully 64... Read more
PhotoDesk 3.0.1 - Instagram client for p...
PhotoDesk lets you view, like, comment, and download Instagram pictures/videos! (NO Uploads! / Image Posting! Instagram forbids that! AND you *need* an *existing* Instagram account). But you can do... Read more

Latest Forum Discussions

See All

Ubisoft Gives Everyone Two New Ways to E...
Ubisoft Gives Everyone Two New Ways to Earn In-Game Stuff for Far Cry 4 Posted by Jessica Fisher on November 21st, 2014 [ permalink ] | Read more »
Golfinity – Tips, Tricks, Strategies, an...
Dig this: Would you like to know what we thought of being an infinite golfer? Check out our Golfinity review! Golfinity offers unlimited ways to test your skills at golf. Here are a few ways to make sure your score doesn’t get too high and your... | Read more »
Dark Hearts, The Sequel to Haunting Meli...
Dark Hearts, The Sequel to Haunting Melissa, is Available Now Posted by Jessica Fisher on November 21st, 2014 [ permalink ] Universal App - Designed for iPhone and iPad | Read more »
Meowza! Toyze Brings Talking Tom to Life...
Meowza! | Read more »
Square Enix Announces New Tactical RPG f...
Square Enix Announces New Tactical RPG for Mobile, Heavenstrike Rivals. Posted by Jessica Fisher on November 21st, 2014 [ permalink ] With their epic stories and gorgeous graphics, | Read more »
Quest for Revenge (Games)
Quest for Revenge 1.0.0 Device: iOS Universal Category: Games Price: $4.99, Version: 1.0.0 (iTunes) Description: The great Kingdom of the west has fallen. The gods ignore the prayers of the desperate. A dark warlord has extinguished... | Read more »
Threadz is a New Writing Adventure for Y...
Threadz is a New Writing Adventure for You and Your Friends Posted by Jessica Fisher on November 21st, 2014 [ permalink ] In the tradition of round-robin storytelling, | Read more »
SteelSeries Stratus XL Hardware Review
Made by: SteelSeries Price: $59.99 Hardware/iOS Integration Rating: 4 out of 5 stars Usability Rating: 4.5 out of 5 stars Reuse Value Rating: 4.25 out of 5 stars Build Quality Rating: 4.5 out of 5 stars Overall Rating: 4.31 out of 5 stars | Read more »
ACDSee (Photography)
ACDSee 1.0.0 Device: iOS iPhone Category: Photography Price: $1.99, Version: 1.0.0 (iTunes) Description: Capture, perfect, and share your photos with ACDSee. The ACDSee iPhone app combines an innovative camera, a powerful photo... | Read more »
ProTube for YouTube (Entertainment)
ProTube for YouTube 2.0.2 Device: iOS Universal Category: Entertainment Price: $1.99, Version: 2.0.2 (iTunes) Description: ProTube is the ultimate, fully featured YouTube app. With it's highly polished design, ProTube offers ad-free... | Read more »

Price Scanner via MacPrices.net

15″ 2.2GHz Retina MacBook Pro on sale for $17...
 B&H Photo has the 2014 15″ 2.2GHz Retina MacBook Pro on sale today for $1749. Shipping is free, and B&H charges NY sales tax only. B&H will also include free copies of Parallels Desktop... Read more
27-inch 3.5GHz 5K iMac in stock today and on...
 B&H Photo has the new 27″ 3.5GHz 5K iMac in stock today and on sale for $2299 including free shipping plus NY sales tax only. Their price is $200 off MSRP, and it’s the lowest price available... Read more
21-inch 1.4GHz iMac on sale for $979, save $1...
B&H Photo has the new 21″ 1.4GHz iMac on sale for $979.99 including free shipping plus NY sales tax only. Their price is $120 off MSRP. B&H will also include free copies of Parallels Desktop... Read more
13-inch 1.4GHz/256GB MacBook Air on sale for...
B&H Photo has lowered their price on the 13″ 1.4GHz/256GB MacBook Air to $1059.99 including free shipping plus NY sales tax only. Their price is $140 off MSRP, and it’s the lowest price for this... Read more
Save up to $400 with Apple refurbished 2014 1...
The Apple Store has restocked Apple Certified Refurbished 2014 15″ Retina MacBook Pros for up to $400 off the cost of new models. An Apple one-year warranty is included with each model, and shipping... Read more
New 13-inch 1.4GHz MacBook Air on sale for $8...
 Adorama has the 2014 13″ 1.4GHz/128GB MacBook Air on sale for $899.99 including free shipping plus NY & NJ tax only. Their price is $100 off MSRP. B&H Photo has the 13″ 1.4GHz/128GB MacBook... Read more
Apple Expected to Reverse Nine-Month Tablet S...
Apple and Samsung combined accounted for 62 percent of the nearly 36 million branded tablets shipped in 3Q 2014, according to early vendor shipment share estimates from market intelligence firm ABI... Read more
Stratos: 30 Percent of US Smartphone Owners t...
Stratos, Inc., creator of the Bluetooth Connected Card Platform, has announced results from its 2014 Holiday Mobile Payments Survey. The consumer survey found that nearly one out of three (30 percent... Read more
2014 1.4GHz Mac mini on sale for $449, save $...
 B&H Photo has lowered their price on the new 1.4GHz Mac mini to $449.99 including free shipping plus NY tax only. Their price is $50 off MSRP, and it’s the lowest price available for this new... Read more
Check Apple prices on any device with the iTr...
MacPrices is proud to offer readers a free iOS app (iPhones, iPads, & iPod touch) and Android app (Google Play and Amazon App Store) called iTracx, which allows you to glance at today’s lowest... Read more

Jobs Board

*Apple* Solutions Consultant (ASC) - Apple (...
**Job Summary** The ASC is an Apple employee who serves as an Apple brand ambassador and influencer in a Reseller's store. The ASC's role is to grow Apple Read more
*Apple* Solutions Consultant (ASC)- Retail S...
**Job Summary** The ASC is an Apple employee who serves as an Apple brand ambassador and influencer in a Reseller's store. The ASC's role is to grow Apple Read more
Project Manager, *Apple* Financial Services...
**Job Summary** Apple Financial Services (AFS) offers consumers, businesses and educational institutions ways to finance Apple purchases. We work with national and Read more
*Apple* Store Leader Program - College Gradu...
Job Description: Job Summary As an Apple Store Leader Program agent, you can continue your education as you major in the art of leadership at the Apple Store. You'll Read more
*Apple* Retail - Multiple Positions (US) - A...
Sales Specialist - Retail Customer Service and Sales Transform Apple Store visitors into loyal Apple customers. When customers enter the store, you're also the Read more
All contents are Copyright 1984-2011 by Xplain Corporation. All rights reserved. Theme designed by Icreon.