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

VOX 3.5.5 - Music player that supports m...
VOX just sounds better! The beauty is in its simplicity, yet behind the minimal exterior lies a powerful music player with a ton of features and support for all audio formats you should ever need.... Read more
WiFiSpoof 3.9 - Change your WiFi MAC add...
WiFiSpoof quickly and easily allows you to change your WiFi MAC address via hot-key or the system menu bar. Startup optimizations Fixed an issue with getting the correct Address for some devices... Read more
FileMaker Pro 19.6.3.302 - Quickly build...
FileMaker Pro is the tool you use to create a custom app. You also use FileMaker Pro to access your app on a computer. Start by importing data from a spreadsheet or using a built-in Starter app to... Read more
RapidWeaver 9.0.0 - Create template-base...
RapidWeaver is a next-generation Web design application to help you easily create professional-looking Web sites in minutes. No knowledge of complex code is required, RapidWeaver will take care of... Read more
Burn 3.1.6 - Easily burn data, audio, vi...
Burn... There are a lot of ways to approach burning discs. Burn keeps it simple, but still offers a lot of advanced options. Create data discs with advanced data settings like, file permissions, the... Read more
XMind Pro 22.11.3656 - Popular mind mapp...
XMind Pro claims to be the most popular mind-mapping tool on the planet. You can use it to work through an individual brainstorming session and it will record and collect inspirations as you go. It... Read more
A Better Finder Rename 11.58 - File, pho...
A Better Finder Rename is the most complete renaming solution available on the market today. That's why, since 1996, tens of thousands of hobbyists, professionals and businesses depend on A Better... Read more
Duet 3.2.0.0 - Use your iPad as an exter...
Duet is the first app that allows you to use your iDevice as an extra display for your Mac using the Lightning or 30-pin cable. Note: This app requires a iOS companion app. Release notes were... Read more
iStat Menus 6.70 - Monitor your system r...
iStat Menus lets you monitor your system right from the menubar. Included are 8 menu extras that let you monitor every aspect of your system. Features: CPU - Monitor cpu usage. 7 display modes,... Read more
Opera 95.0.4635.25 - High-performance We...
Opera is a fast and secure browser trusted by millions of users. With the intuitive interface, Speed Dial and visual bookmarks for organizing favorite sites, news feature with fresh, relevant content... Read more

Latest Forum Discussions

See All

Here’s Your Stinkin’ Proof of Life – The...
Yes, we are alive. After taking most of December off from recording we did our big end of year show with the intention of coming back in full force in the new year, but instead we just sort of… took another month off. I really apologize to those who... | Read more »
TouchArcade Game of the Week: ‘1 Bit Sur...
Well, if you’ve been following TouchArcade for a while and you generally have an idea of what our tastes are, then this week’s pick shouldn’t really be much of a surprise. Cool retro-style pixel graphics? Dungeon crawling mechanics? Roguelike... | Read more »
SwitchArcade Round-Up: Reviews Featuring...
Hello gentle readers, and welcome to the SwitchArcade Round-Up for February 3rd, 2023. We start things off with a review of Fashion Police Squad from our pal Mikhail. Gosh, he’s quite the keener. After that, we look at the dozen or so new releases... | Read more »
The 10 Best Arcade Archives Beat-Em-Ups...
A little while ago, we put up a list of our favorite shoot-em-ups in Hamster’s Arcade Archives line-up. There are hundreds of games available thanks the weekly releases, so it can be a little hard to find the cream of the crop if you’re coming in a... | Read more »
Cyan announces iOS port for Myst to cele...
One of the best things about old games being remastered and ported is it gives people the chance to try those old games that were slightly too difficult when they were younger, and thanks to indie studio Cyan, mobile users can now experience the... | Read more »
‘Castle Crumble’ From ‘Spire Blast’ Deve...
Spire Blast developers Orbital Knight have released Castle Crumble () on Apple Arcade today. If you played Spire Blast you will right at home here, and I think I like it more based on the first few levels I played. It features cannonballs, magic... | Read more »
SwitchArcade Round-Up: ‘Life is Strange...
Hello gentle readers, and welcome to the SwitchArcade Round-Up for February 2nd, 2023. We’ve actually got a little news to look at today, and that’s where we’ll start things. There are also a ton of new games, some of them very good (Life is Strange... | Read more »
‘Dead Space’ Remake Steam Deck Review –...
Need for Speed Unbound was one of the first new current generation only games to impress me on Steam Deck. I’ve played many games that have been ported to PC from other platforms and also games built for PC from the start, but it is always great... | Read more »
The Stunning Remake of ‘Myst’ Is Coming...
Indie developer Cyan who developed the 2021 reimagining of the classic Myst have just announced that it is coming to iOS as Myst Mobile. Myst Mobile will bring the complete experience to iPhone and iPad devices in the future. Considering the... | Read more »
Psychedelic Horror Experience ‘Happy Gam...
Amanita Design’s psychedelic horror experience Happy Game is out now on iOS and Android worldwide following its debut on Nintendo Switch and PC platforms a little while ago. Happy Game is a standard paid game on iOS and Android, and not included... | Read more »

Price Scanner via MacPrices.net

Deal Alert! 13″ M2 Midnight MacBook Air with...
Tiger Direct is continuing their Apple fire sale with this new 13″ M2 MacBook Air with 16GB of RAM and a 512GB SSD, in Midnight, for only $858.99 including $7 shipping. Their price is an amazing $841... Read more
Deal Alert! 13″ M2 Midnight MacBook Air with...
Tiger Direct is continuing their Apple fire sale with this new 13″ M2 MacBook Air with 16GB of RAM and a 256GB SSD, in Midnight, for only $707.99 including $7 shipping. Their price is a whopping $692... Read more
Deal Alert! 13″ M2 MacBook Pros with 16GB of...
Tiger Direct continues their Apple Fire Sale (see our home page for these latest amazing deals) by offering a $650 discount on new 13″ M2 MacBook Pros with 16GB of RAM and 256GB SSDs: – 13″ M2... Read more
Deal Alert! 13″ M2 MacBook Air with 16GB RAM...
Tiger Direct is continuing their Apple fire sale with this new 13″ M2 MacBook Air with 16GB of RAM and a 256GB SSD, in Space Gray, for only $757.99 including $7 shipping. Their price is a whopping $... Read more
Deal Alert! Apple iPad fire sale continues, n...
Apple retailer Tiger Direct continues to offer fire sale prices on new 2022 10th-generation iPads with prices as low as 50% off MSRP. This is am amazing deal, and we don’t know how long it will last... Read more
Deal Alert! Select Apple M1 10.9″ iPad Airs o...
Tiger Direct is offering a 48% discount on select Apple M1-powered 10.9″ iPad Airs. This is an amazing sale, and we don’t know how long it will last. Their prices are the lowest available among the... Read more
Deal Alert! Apple Studio Display with Nano-Te...
Tiger Direct has the Apple Studio Display (Nano glass, Tilt & Height Adjustable Stand) on sale for $1059 off Apple’s MSRP for a limited time. Shipping is free: – Studio Display (Nano glass, Tilt... Read more
Deal Alert! Apple 10th-generation 64GB WiFi i...
Tiger Direct has the Apple 10th-generation 64GB WiFi iPad (in Silver) in stock today and on sale for $224.99 shipped. Their price is $225 (50%) off Apple’s MSRP. That’s an amazing deal, and we... Read more
New sale at Sams Club: Take $60 off every App...
Sams Club has Apple Watch Series 8 models on sale for $60 off Apple’s MSRP from now through Valentine’s Day 2023. $45 Sams Club Membership required. Note that sale prices are for online orders only,... Read more
Apple to update HomePod mini, AirPods Max, an...
Analyst Ming-Chi Kuo, in his latest post, predicts that Apple will update their ‘acoustic’ products next year sometime. He believes that it will be in the middle of 2024 before Apple will release the... Read more

Jobs Board

Hair Stylist - *Apple* Blossom Mall - JCPen...
Hair Stylist - Apple Blossom Mall Location:Winchester, VA, United States (https://jobs.jcp.com/jobs/location/191170/winchester-va-united-states) - Apple Blossom Read more
Optometrist- *Apple* Valley, CA- Target Opt...
Optometrist- Apple Valley, CA- Target Optical Date: Feb 3, 2023 Brand: Target Optical Location: Apple Valley, CA, US, 92308 **Requisition ID:** 796045 At Target Read more
Sales Floor Associate - *Apple* Blossom Mal...
Sales Floor Associate - Apple Blossom Mall Location:Winchester, VA, United States (https://jobs.jcp.com/jobs/location/191170/winchester-va-united-states) - Apple Read more
Sales Floor Assistant - *Apple* Blossom Mal...
Sales Floor Assistant - Apple Blossom Mall Location:Winchester, VA, United States (https://jobs.jcp.com/jobs/location/191170/winchester-va-united-states) - Apple Read more
*Apple* Tech Support Analyst - Sesame Worksh...
Sesame Workshop is looking for an Apple Tech Support Analyst. We're looking for someone with an enthusiastic personality, articulate communication skills and a Read more
All contents are Copyright 1984-2011 by Xplain Corporation. All rights reserved. Theme designed by Icreon.