When I started scripting, about a year ago, I was really frustrated that app.selection didn’t returned correct selection order I used while selecting objects, instead, it returned sorted selection by object ID’s. To make things even worse, just few versions back, app.selection DID returned correct selection order! So, somebody messed things really bad!
As you probably know, layers really important when creating complex layouts. Layers in last version of InDesign (CS5) are radically improved! Till now, you could just manage top-level layers, but starting with CS5, top-level layers can be expanded and you can see complete object structure! (for more info about layers in CS5, read great article written by Steve Werner on InDesignSecrets [Hidden Gems: The Layers Panel in CS5]) That’s really great! But, main limitation is that we are not able to set “default” layers for every new document. But! That’s why we have scripts!
But, if you have bunch of links, you need to sort them first, select just embedded ones and then click Unembed Link from Links panel menu, or from context menu. But, it can be done much more easily with help of short script! Let’s see how!
So, what’s so special about this “new version”?
Like I said, it’s new year, new beginning, I’m full with new ideas, and I hope that this year will be awesome like last was, so, here is another really cool script that will help you overcome BUG which was mentioned here: Auto Apply Object Style to Placed Image.
Also, you will not need special “Place Fun Frame” Object Style to apply desired object style while placing objects, and you will be able to even select different while placing multiple objects. Really?! Well, yes, I hope so!
When building complex scripts with lot of options that user can choose, it’s always great to allow user to also save selected settings and reuse them on next launch. We already discussed about this topic in earlier post [Saving script data within document] but I recently found better way for serializing and storing data.
In first post, I used simple “*” to separate multiple values, and at load time used split(*) to separate values back to Array. That’s not bad, and it’s working fine, but there is another much more elegant solution!
I created short sample to demonstrate usage and shortly explain how it works. Of course, you can extend it as you wish! So, let’s get started!
Counting words and also paragraphs, stories, characters is something pretty easy to achieve, but very often done in wrong way. Most of the time, people are looping through stories, text frames, paragraphs and adding word count. That is OK, for short documents, with short stories, but as document length increases, script needs more and more time to loop through all stories, and get all words. People are forgetting about awesome method called everyItem! Method remained undocumented until InDesign CS3, but scripting experts such as Dave Saunders had already pointed out its forcefulness and already knew how to exploit it. It allows us to get all elements within collection. For more info about everyItem method be sure to check two awesome articles by Marc Autret: On ‘everyItem()’ – Part 1 and On ‘everyItem()’ – Part 2. So, let’s take a look how everyItem method can help us count stuff.
After long time here comes new post about InDesign scripting!
This one is really cool and handy. Simply select files and script will load them directly into PlaceGun tool! Really simple and handy! Also there are some options that you can set while loading files into PlaceGun, but we will just focus on simple loading. One more thing. InDesign CS5 DOM introduced new class that is directly connected to PlaceGun. It has some more options like: abortPlaceGun and rotate among others. So, let’s get started!
Almost every media file contains info about it’s contents. Adobe’s XMP (Extensible Metadata Platform) is, as they say, “a labeling technology that allows you to embed data about a file, known as Metadata, into the file itself”.
This was text part for first post about reading and writing XMP data. Metadata is powerful and you can store all kind of data. Some most common used fields are: Document title, Author, Author Title, Description and Keywords.
So, I decided to create small panel that shows you number of currently selected objects. It will not count objects inside groups.
Hope you will find this panel useful and handy!
At last! Real ScriptUI manual is alive thanks to Peter Kahrel, all that wrapped up into search able PDF with example pictures on the side.
Here is part of announcement from Peter’s page:
Few days ago, my very good friend Martinho da Gloria posted picture that inspired me. It was picture of web of panel based web browser inside InDesign CS5! It was simple, just with address bar and page window, and I decided to expand it little bit more. I added back/forward, refresh, stop buttons, little menu with some useful links. Hope you will find it useful as much as I do!
Do you need information about fonts used in your document(s)? Do you want to check is some fonts missing in a more than one file? You can do that with FontReporter®!
As you probably know, in CS5, it’s really pain to work with Script Label‘s, and there is no easy way to address objects by Script Label. In pre-CS5 versions of InDesign, with item() we’ve received element Script Label but in CS5 we receive element name from Layer‘s panel. Using script versioning we can achieve pre-CS5 behavior, but it’s not really safe. So, why not copy all existing Script Label‘s into Layer‘s panel element names?
Inspired by yesterday post about making Panel Names to Title Case, I made small script to help you enable/disable this feature (Easter Egg) through scripting. What script actually does? It checks if folder “noallcaps” exists in InDesign start up folder, and depending on our selection it creates/removes folder. I also added check for folder contents, so if there are files inside, folder will not be deleted.
You can download script here:
Are you annoyed with all panel names in All Caps?! There is really easy way to turn them into Title Case! Tested with InDesign and InCopy CS4 and CS5!
Be sure you check out Don’t Like All Caps in the Interface? Try This For Some Relief on InDesign Secrets website!
Few days ago on Adobe’s InDesign Scripting forum I found question about duplicating all anchored and inline objects to another layer. It’s quite simple task, and all we have to do, is to get all page items, and check item parent. If parent is Character, then it’s anchored/inline object. So, let’s take a look!
Storing data within InDesign document is possible with insertLabel() but there is another place to save information about document. As we know, all InDesign documents have metadata stored in file itself. For more info take a look at other Metadata related posts listed at the end.
We are able to insert our own data into Industry standard namespaces, but also we can create our own namespace, and insert data into it. We will go through few examples. So, let’s start!
Wanna insert text variable to text frame through scripting? No problem. It’s fast and easy! Question about this showed up about one week ago on Adobe’s InDesign Scripting forum, and I was also curious how to do it. I don’t want to write much, so, let’s go down to business
A few days on Adobe’s InDesign Scripting forum I found question about inserting info into XMP InDesign file info. Also, mission was to find text formatted into specific paragraph style, and insert found content into XMP’s ‘Document Title’. Easiest way to achieve this is to use ‘Find’ and search for paragraph style. But, I also wanted to insert some more info into XMP like keywords or author, through scripting. So, I created document with some text from Adobe InDesign Features page, created two paragraph styles for Title and Author, and character style for keywords. So I formatted title and author with paragraph styles, and also I ran through text and formatted some words with ‘Keyword’ character style. So, let’s see how it works!
Some of Adobe file format’s (INDD, PDF, AI) are using Metadata to store low-res preview of file inside file itself. For example InDesign allows you to select how many pages do you want to include in these previews and also preview size/quality. We have to keep in mind that data is not stored in binary format. It’s stored in, so called, Base64 encoding scheme, that represent binary data in an ASCII string format. So, in addition to extracting data we have to decode it to binary, and then save it to file. So, let’s get started!
How to check if a number is even or odd? We can use Modulus operator (%), which returns the remainder of a division operation. If you divide some number by two, a remainder of 0 indicates an even number, while a remainder of 1 indicates an odd number. Best and easiest way is to create ‘Number’ prototype.
Do you want to import styles from other document through scripting? It’s really easy to achieve, and you also have control about overwriting styles with same name. Also, you can import all kind of styles, you are not limited to just Paragraph or Character styles. We will take a look to the style ‘importStyles()’, but I also prepared short example how to implement it in dialog. Also, keep in mint that we can import to the document or to the application. So, let’s get started!
Does this image looks familiar?! Do you want to change missing font through scripting? Then I have good news for you, it can be done really fast and easy! We are going to look easiest way for retrieving missing fonts from document, and also I will share this script integrated into dialog and font selector. This idea came up to me yesterday while I was studying ‘BeforePrint.jsx’ from Scripting guide that you can download from Adobe InDesgin scripting page. Also, Marc Autret posted script on Adobe’s InDesign Scripting forum for changing missing fonts inside styles, so be sure you check it! So, let’s get started!
Few days ago on Adobe’s InDesign scripting forum I found question how to create custom menu to insert predefined text items into ScriptUI text box. I started to research and found really easy and good way you achieve this handy “menu”. All we need is dropdown and short script for controlling insert behavior.
Well, this is almost ‘Most Wanted’ snippet around Have you ever wanted user to prevent executing some menu item? I did, but I didn’t had answer how to do it. There is no way to disable menu item, but what we can do is to cancel executing it. What we are going to do is to add event to ‘menuActions’. So, let’s take a look.
Have you ever wanted to add a dropdown/listbox item but with icon beside? This is not really possible with native InDesign dialog manager, but it can be done with ScriptUI! It’s really easy to achieve this great little feature. So, let’s take a short look how to do this.