Your prescription for increased productivity and profitability
Often are the times you may need to place multiple images in a document. If placing manually you would probably use the place gun. But if an image, or multiple images need to be placed multiple times, you might want a better (more automated) way to do it.
Perhaps you have a catalog where a specific image is used to designate each item category. The containers for the images could be flagged to indicate the category. All that would be needed is a script to place the graphic required for the category. If, for instance, the category were “personal” the “personal.jpeg” image would be placed. Another possibility would use a number for the tag to designate the item within a list. The latter option would provide more flexibility as items within the list could be changed. The following scripts demonstrate:
This script places the images to rectangles which have been tagged with strings representing the index of the name of the image to be placed from within a list as in “1”, “2”, and so on. It assumes the images are saved on the user’s desktop in a folder indicated by the variable thePath.
set theFolder to (path to desktop from user domain) as string set thePath to "catalog:images:" set pics to ["garden.jpeg", "family.jpeg", "personal.jpeg", "health.jpeg", "books.jpeg"] set theCount to 0 tell application "Adobe InDesign CC 2017" set measurement unit of script preferences to points set docRef to active document set containers to rectangles of docRef try repeat with i from 1 to length of containers set theRect to item i of containers set theTag to name of item i of containers set theIndex to theTag as integer set imageName to item theIndex of pics set imagePath to (theFolder & thePath & imageName) as alias tell theRect place imagePath end tell set theCount to theCount + 1 end repeat end try end tell activate display dialog "Images placed: " & theCount giving up after 5
In this example, the images are placed at the beginning of paragraphs in the order in which they are indexed within the “pics” list. The container of the images is styled using an object style defined by the variable objStyleName. Text frames containing the targeted paragraphs have been named as identified by the variable frameName.
set theFolder to (path to desktop from user domain) as string set thePath to "catalog:images:" set pics to ["garden.jpeg", "family.jpeg", "personal.jpeg", "health.jpeg", "books.jpeg"] set objStyleName to "Images" set frameName to "listItems" tell application "Adobe InDesign CC 2017" set measurement unit of script preferences to points set docRef to active document set spreadRef to spread 1 of docRef set objStyleRef to object style objStyleName of docRef set frameList to text frames of docRef where name is frameName repeat with i from 1 to length of frameList set frameRef to item i of frameList set paraArr to paragraphs of frameRef repeat with j from 1 to length of paraArr set pictName to item j of pics set pictRef to (theFolder & thePath & pictName) as alias set paraRef to (a reference to paragraph j of frameRef) tell insertion point 1 of paraRef place pictRef end tell set theRect to rectangle 1 of paraRef set geometric bounds of theRect to {0, 0, 12, 12} set applied object style of theRect to objStyleRef tell theRect to fit given center content end repeat end repeat end tell frameList
Instead of placing multiple items, you may want to place the same image multiple times. This could be a document with a nunber of stories at the end of which the client wants a specific image to be placed. Again a simple script can be written to do the work. This script assumes that each story is either contained by a single text frame or threaded through linked text frames.
Images to be placed should be exact size so as to fit within the line spacing (leading) of the paragraph.
(*Places the image chosen by the user at the end of every story in the active document. Reports at end of number of stories affected.*) set imageRef to choose file with prompt "Choose image for placing" set theCounter to 0 tell application "Adobe InDesign CC 2017" set docRef to document 1 set objStyleRef to object style "Images" of docRef set foundStories to stories of docRef try repeat with i from length of foundStories to 1 by -1 set storyRef to item i of foundStories tell insertion point -1 of storyRef set thePlaced to place imageRef end tell set theImage to item 1 of thePlaced set theContainer to parent of theImage tell theContainer set applied object style to objStyleRef fit given center content end tell set theCounter to theCounter + 1 end repeat end try end tell display dialog "End images placed: " & theCounter giving up after 5
In the End of Story script, If the text frame does not accommodate the image, an overset condition will occur. You might want to add a procedure to check for the overflows state of the text frame container and adjust its size accordingly.
As you can see these are simple scripts that demonstrate a specific functionality. They could be part of a larger script that performs a number of tasks to automate a document. You may think of some similar applications that could take advantage of these concepts.
Scripts are provided as examples for educational purposes only. No representation is given to the correctness nor completeness of the scripts. Users are advised to use these scripts at their own discretion.