C
HAPTER
9: Menus
Working with scriptMenuActions     141
For more about 
events
and 
event
listeners
, see Chapter8, “Events
.”
To change the items displayed in a menu, add an 
event
listener
for the 
beforeDisplay
event
. When 
the menu is selected, the 
event
listener
can then run a script that enables or disables menu items, 
changes the wording of menu item, or performs other tasks related to the menu. This mechanism is used 
internally to change the menu listing of available fonts, recent documents, or open windows.
Working with scriptMenuActions
You can use 
script
menu
action
to create a new 
menu
action
whose behavior is implemented through 
the script registered to run when the 
onInvoke
event
is triggered.
The following script shows how to create a 
script
menu
action
and attach it to a menu item (for the 
complete script, see MakeScriptMenuAction). This script simply displays an alert when the menu item is 
selected.
script menu 
action
afterInvoke 
Runs the attached script when the associated 
menu
item
is 
selected, but after the 
onInvoke
event.
beforeInvoke 
Runs the attached script when the associated 
menu
item
is 
selected, but before the 
onInvoke
event.
beforeDisplay 
Runs the attached script before an internal request for the 
enabled/checked status of the 
script
menu
actionscript
menu
action
.
onInvoke 
Runs the attached script when the 
script
menu
action
is 
invoked.
submenu
beforeDisplay 
Runs the attached script before the contents of the 
submenu
are shown.
Object
Event
Description
Pdf to tiff converter open source - software application project:C# PDF Convert to Tiff SDK: Convert PDF to tiff images in C#.net, ASP.NET MVC, Ajax, WinForms, WPF
Online C# Tutorial for How to Convert PDF File to Tiff Image File
www.rasteredge.com
Pdf to tiff converter open source - software application project:VB.NET PDF Convert to Tiff SDK: Convert PDF to tiff images in vb.net, ASP.NET MVC, Ajax, WinForms, WPF
Free VB.NET Guide to Render and Convert PDF Document to TIFF
www.rasteredge.com
C
HAPTER
9: Menus
Working with scriptMenuActions     142
tell application "Adobe InDesign CS5"
--Create the script menu action "Display Message" 
--if it does not already exist.
try
set myScriptMenuAction to script menu action "Display Message"
on error
set myScriptMenuAction to make script menu action 
with properties {title:"Display Message"}
end try
tell myScriptMenuAction
--If the script menu action already existed, 
--remove the existing event listeners.
if (count event listeners) > 0 then
tell every event listener to delete
end if
set myEventListener to make event listener with properties 
{event type:"onInvoke", handler:"yukino:message.applescript"}
end tell
tell menu "$ID/Main"
set mySampleScriptMenu to make submenu with properties 
{title:"Script Menu Action"}
tell mySampleScriptMenu
set mySampleScriptMenuItem to make menu item with properties
{associated menu action:myScriptMenuAction}
end tell
end tell
end tell
The 
message.applescript
script file contains the following code:
tell application "Adobe InDesign CS5"
display dialog ("You selected an example script menu action.")
end tell
To remove the 
menu
submenu
menu
item
, and 
script
menu
action
created by the above script, run the 
following script fragment (from the RemoveScriptMenuAction tutorial script):
tell application "Adobe InDesign CS5"
try
set myScriptMenuAction to script menu action "Display Message"
tell myScriptMenuAction
delete
end tell
tell submenu "Script Menu Action" of menu "$ID/Main" to delete
end try
end tell
You also can remove all 
script
menu
action
, as shown in the following script fragment (from the 
RemoveAllScriptMenuActions tutorial script). This script also removes the menu listings of the 
script
menu
action
, but it does not delete any menus or submenus you might have created.
tell application "Adobe InDesign CS5"
delete every script menu action
end tell
You can create a list of all current 
script
menu
actions
, as shown in the following script fragment (from 
the ListScriptMenuActions tutorial script):
software application project:C# PDF Text Extract Library: extract text content from PDF file in
it is feasible for users to extract text content from source PDF document file the following C# example code for text extraction from PDF page Open a document
www.rasteredge.com
software application project:VB.NET PDF Annotate Library: Draw, edit PDF annotation, markups in
Decode source PDF document file into an in-memory object, namely 2.pdf" Dim outputFilePath As String = Program.RootPath + "\\" Annot_8.pdf" ' open a PDF file
www.rasteredge.com
C
HAPTER
9: Menus
Working with scriptMenuActions     143
set myTextFile to choose file name {"Save Script Menu Action Names As"}
--If the user clicked the Cancel button, the result is null.
if myTextFile is not equal to "" then
tell application "Adobe InDesign CS5"
set myString to ""
set myScriptMenuActionNames to name of every script menu action
repeat with myScriptMenuActionName in myScriptMenuActionNames
set myString to myString & myScriptMenuActionName & return
end repeat
my myWriteToFile(myString, myTextFile, false)
end tell
end if
on myWriteToFile(myString, myFileName, myAppendData)
set myTextFile to open for access myFileName with write permission
if myAppendData is false then
set eof of myTextFile to 0
end if
write myString to myTextFile starting at eof
close access myTextFile
end myWriteToFile
script
menu
actions
also can run scripts during their 
beforeDisplay
event
, in which case they are 
executed before an internal request for the state of the 
script
menu
action
(e.g., when the menu item is 
about to be displayed). Among other things, the script can then change the menu names and/or set the 
enabled/checked status.
In the following sample script, we add an 
event
listener
to the 
beforeDisplay
event
that checks the 
current selection. If there is no selection, the script in the 
event
listener
disables the menu item. If an 
item is selected, the menu item is enabled, and choosing the menu item displays the type of the first item 
in the selection. (For the complete script, see BeforeDisplay.)
tell application "Adobe InDesign CS5"
--Create the script menu action "Display Message" 
--if it does not already exist.
try
set myScriptMenuAction to script menu action "Display Message"
on error
set myScriptMenuAction to make script menu action with properties
{title:"Display Message"}
end try
tell myScriptMenuAction
--If the script menu action already existed, 
--remove the existing event listeners.
if (count event listeners) > 0 then
tell every event listener to delete
end if
--Fill in a valid file path for your system.
software application project:C# PDF Page Extract Library: copy, paste, cut PDF pages in C#.net
Online C# source code for extracting, copying and pasting PDF The portable document format, known as PDF document, is of file that allows users to open & read
www.rasteredge.com
software application project:C# PDF File Merge Library: Merge, append PDF files in C#.net, ASP.
Free online C#.NET source code for combining multiple PDF pages together in .NET framework. Combine scanned images to PDF, such as tiff, jpg, png, gif, bmp
www.rasteredge.com
C
HAPTER
9: Menus
A More Complex Menu-scripting Example     144
make event listener with properties {event type:"onInvoke",
handler:"yukino:WhatIsSelected.applescript"}
end tell
tell menu "$ID/Main"
set mySampleScriptMenu to make submenu with properties 
{title:"Script Menu Action"}
tell mySampleScriptMenu
set mySampleScriptMenuItem to make menu item with properties
{associated menu action:myScriptMenuAction}
--Fill in a valid file path for your system.
make event listener with properties {event type:"beforeDisplay",
handler:"yukino:BeforeDisplayHandler.applescript"}
end tell
end tell
end tell
The BeforeDisplayHander tutorial script file contains the following script:
tell application "Adobe InDesign CS5"
try
set mySampleScriptAction to script menu action "Display Message"
set mySelection to selection
if (count mySelection) > 0 then
set enabled of mySampleScriptAction to true
else
set enabled of mySampleScriptAction to false
end if
on error
alert("Script menu action did not exist.")
end try
end tell
The WhatIsSelected tutorial script file contains the following script:
tell application "Adobe InDesign CS5"
set mySelection to selection
if (count mySelection) > 0 then
set myString to class of item 1 of mySelection as string
display dialog ("The first item in the selection is a " & myString & ".")
end if
end tell
A More Complex Menu-scripting Example
You have probably noticed that selecting different items in the InDesign user interface changes the 
contents of the context menus. The following sample script shows how to modify the context menu based 
on the properties of the object you select. Fragments of the script are shown below; for the complete 
script, see LayoutContextMenu.
The following snippet shows how to create a new menu item on the Layout context menu (the context 
menu that appears when you have a page item selected). The following snippet adds a 
beforeDisplay
event
listener
which checks for the existence of a 
menu
item
and removes it if it already exists. We do 
this to ensure the 
menu
item
does not appear on the context menu when the selection does not contain a 
graphic, and to avoid adding multiple menu choices to the context menu. The 
event
listener
then 
checks the selection to see if it contains a graphic; if so, it creates a new 
script
menu
item
.
software application project:VB.NET PDF File Split Library: Split, seperate PDF into multiple
Separate source PDF document file by defined page range in VB.NET class application. Divide PDF file into multiple files by outputting PDF file size.
www.rasteredge.com
software application project:C# Create PDF from OpenOffice to convert odt, odp files to PDF in
Best C# OpenOffice to adobe PDF file converter SDK for Visual Online source code for C#.NET class. Description: Convert to PDF/TIFF and save it on the disk.
www.rasteredge.com
C
HAPTER
9: Menus
A More Complex Menu-scripting Example     145
tell application "Adobe InDesign CS5"
--The locale-independent name (aka "key string") for the 
--Layout context menu is "$ID/RtMouseLayout".
set myLayoutMenu to menu "$ID/RtMouseLayout"
--Note that the following script actions only create the script menu action
--and set up event listeners--they do not actually add the menu item to the
--Layout context menu. That job is taken care of by the event handler scripts
--themselves. The Layout context menu will not display the menu item unless
--a graphic is selected.
tell myLayoutContextMenu
set myBeforeDisplayEventListener to make event listener with
properties{event type:"beforeDisplay",
handler:"yukino:IDEventHandlers:LayoutMenuBeforeDisplay.applescript",
captures:false}
end tell
end tell
The 
LayoutMenuBeforeDisplay.applescript
file referred to in the above example contains the 
following:
myBeforeDisplayHandler(evt)
on myBeforeDisplayHandler(myEvent)
tell application "Adobe InDesign CS5"
set myGraphicList to {PDF, EPS, image}
set myParentList to {rectangle, oval, polygon}
set myObjectList to {}
set myLayoutContextMenu to menu "$ID/RtMouseLayout"
if (count documents) > 0 then
set mySelection to selection
if (count mySelection) > 0 then
repeat with myCounter from 1 to (count mySelection)
set myObject to item myCounter of mySelection
if class of myObject is in myGraphicList then
copy myObject to end of myObjectList
else if class of myObject is in myParentList then
if (count graphics of myObject) > 0 then
copy graphic 1 of myObject to end of myObjectList
end if
end if
end repeat
if (count myObjectList) is not equal to 0 then
--The selection contains a qualifying item or items.
--Add the menu item if it does not already exist.
if my myMenuItemExists(myLayoutContextMenu, 
"Create Graphic Label") is false then
my myMakeLabelGraphicMenuItem(myLayoutContextMenu)
end if
else
--Remove the menu item if it exists.
if my myMenuItemExists(myLayoutContextMenu, 
"Create Graphic Label") is true then
tell myLayoutContextMenu
delete menu item "Create Graphic Label"
end tell
end if
end if
end if
end if
end tell
end myBeforeDisplayHandler
software application project:C# PDF: PDF Document Viewer & Reader SDK for Windows Forms
page, view PDF file in different display formats, and save source PDF file using C# UpPage: Scroll to previous visible page in the currently open PDF document.
www.rasteredge.com
software application project:C# Word - MailMerge Processing in C#.NET
da.Fill(data); //Open the document DOCXDocument document0 = DOCXDocument.Open( docFilePath ); int counter = 1; // Loop though all records in the data source.
www.rasteredge.com
C
HAPTER
9: Menus
A More Complex Menu-scripting Example     146
on myMakeLabelGraphicMenuItem(myLayoutContextMenu)
tell application "Adobe InDesign CS5"
if my myScriptMenuActionExists("Create Graphic Label") is false then
set myLabelGraphicMenuAction to make script menu action with
properties {name:"Create Graphic Label"}
tell myLabelGraphicMenuAction
set myLabelGraphicEventListener to make event listener 
with properties {event type:"onInvoke",handler:
"yukino:IDEventHandlers:LayoutMenuOnInvoke.applescript",
captures:false}
end tell
else
set myLabelGraphicMenuAction to script menu action 
"Create Graphic Label"
end if
tell myLayoutContextMenu
set myLabelGraphicMenuItem to make menu item with properties 
{associated menu action:myLabelGraphicMenuAction}
end tell
end tell
end myMakeLabelGraphicMenuItem
The 
LayoutMenuOnInvoke.applescript
referred to in the above example defines the 
script
menu
action 
that is activated when the 
menu
item
is selected (
onInvoke
event):
LabelGraphicEventHandler(evt)
on LabelGraphicEventHandler(myEvent)
tell application "Adobe InDesign CS5"
set myGraphicList to {PDF, EPS, image}
set myParentList to {rectangle, oval, polygon}
set myObjectList to {}
set myLayoutContextMenu to menu "$ID/RtMouseLayout"
if (count documents) > 0 then
set mySelection to selection
if (count mySelection) > 0 then
repeat with myCounter from 1 to (count mySelection)
set myObject to item myCounter of mySelection
if class of myObject is in myGraphicList then
copy myObject to end of myObjectList
else if class of myObject is in myParentList then
if (count graphics of myObject) > 0 then
copy graphic 1 of myObject to end of myObjectList
end if
end if
end repeat
if (count myObjectList) is not equal to 0 then
--The selection contains a qualifying item or items.
my myDisplayDialog(myObjectList)
end if
end if
end if
end tell
end LabelGraphicEventHandler
--Displays a dialog box containing label options.
on myDisplayDialog(myObjectList)
tell application "Adobe InDesign CS5"
set myLabelWidth to 100
set myStyleNames to my myGetParagraphStyleNames(document 1)
set myLayerNames to my myGetLayerNames(document 1)
set myDialog to make dialog with properties {name:"LabelGraphics"}
software application project:VB.NET PDF Convert to HTML SDK: Convert PDF to html files in vb.
Our PDF to HTML converter library control is a 100 you are able to perform high fidelity PDF to HTML files preserve all the contents of source PDF file, like
www.rasteredge.com
software application project:VB.NET PDF Page Extract Library: copy, paste, cut PDF pages in vb.
' Get PDFDocument object from a source file. This VB.NET code below can help you extract all images from PDF. ' Open a document.
www.rasteredge.com
C
HAPTER
9: Menus
A More Complex Menu-scripting Example     147
tell myDialog
tell (make dialog column)
--Label Type
tell (make dialog row)
tell (make dialog column)
make static text with properties 
{static label:"Label Type:", min width:myLabelWidth}
end tell
tell (make dialog column)
set myLabelTypeDropdown to make dropdown with properties 
{string list:{"File Name", "File Path", "XMP Author", 
"XMP Description"}, selected index:0}
end tell
end tell
--Text frame height
tell (make dialog row)
tell (make dialog column)
make static text with properties 
{static label:"Label Height:", min width:myLabelWidth}
end tell
tell (make dialog column)
set myLabelHeightField to make measurement editbox 
with properties {edit value:24, edit units:points}
end tell
end tell
--Text frame offset
tell (make dialog row)
tell (make dialog column)
make static text with properties 
{static label:"Label Offset:", min width:myLabelWidth}
end tell
tell (make dialog column)
set myLabelOffsetField to make measurement editbox with 
properties {edit value:0, edit units:points}
end tell
end tell
--Paragraph style to apply
tell (make dialog row)
tell (make dialog column)
make static text with properties 
{static label:"Label Style:", min width:myLabelWidth}
end tell
tell (make dialog column)
set myLabelStyleDropdown to make dropdown with properties 
{string list:myStyleNames, selected index:0}
end tell
end tell
--Layer
tell (make dialog row)
tell (make dialog column)
make static text with properties 
{static label:"Layer:", min width:myLabelWidth}
end tell
tell (make dialog column)
set myLayerDropdown to make dropdown with properties 
{string list:myLayerNames, selected index:0}
end tell
end tell
end tell
end tell
C
HAPTER
9: Menus
A More Complex Menu-scripting Example     148
set myResult to show myDialog
if myResult is true then
set myLabelType to (selected index of myLabelTypeDropdown)
set myLabelHeight to edit value of myLabelHeightField
set myLabelOffset to edit value of myLabelOffsetField
set myLabelStyleName to item ((selected index of 
myLabelStyleDropdown)+ 1) of myStyleNames
set myLayerName to item ((selected index of myLayerDropdown) + 1) 
of myLayerNames
destroy myDialog
tell view preferences of document 1
set myOldXUnits to horizontal measurement units
set myOldYUnits to vertical measurement units
set horizontal measurement units to points
set vertical measurement units to points
end tell
repeat with myCounter from 1 to (count myObjectList)
set myGraphic to item myCounter of myObjectList
my myAddLabel(myGraphic, myLabelType, myLabelHeight, 
myLabelOffset, myLabelStyleName, myLayerName)
end repeat
tell view preferences of document 1
set horizontal measurement units to myOldXUnits
set vertical measurement units to myOldYUnits
end tell
else
destroy myDialog
end if
end tell
end myDisplayDialog
on myAddLabel(myGraphic, myLabelType, myLabelHeight, myLabelOffset, myLabelStyleName, 
myLayerName)
tell application "Adobe InDesign CS5"
set myDocument to document 1
set myLabelStyle to paragraph style myLabelStyleName of myDocument
try
set myLabelLayer to layer myLayerName of myDocument
on error
tell myDocument
set myLabelLayer to make layer with properties {name:myLayerName}
end tell
end try
set myLink to item link of myGraphic
if myLabelType is 0 then
set myLabel to name of myLink
else if myLabelType is 1 then
set myLabel to file path of myLink
else if myLabelType is 2 then
try
set myLabel to author of link xmp of myLink
on error
set myLabel to "No author available."
end try
else if myLabelType is 3 then
try
set myLabel to description of link xmp of myLink
on error
set myLabel to "No description available."
end try
end if
C
HAPTER
9: Menus
A More Complex Menu-scripting Example     149
set myFrame to parent of myGraphic
set myBounds to geometric bounds of myFrame
set myX1 to item 2 of myBounds
set myY1 to (item 3 of myBounds) + myLabelOffset
set myX2 to item 4 of myBounds
set myY2 to myY1 + myLabelHeight
tell parent of myFrame
set myTextFrame to make text frame with properties 
{item layer:myLabelLayer, contents:myLabel, 
geometric bounds:{myY1, myX1, myY2, myX2}}
set first baseline offset of text frame preferences of 
myTextFrame to leading offset
tell myTextFrame
set applied paragraph style of paragraph 1 to myLabelStyle
end tell
end tell
end tell
end myAddLabel
150
10
Working with Preflight
Preflight is a way to verify that you have all required files, fonts, assets (e.g., placed images and PDF files), 
printer settings, trapping styles, etc., before you send a publication to an output device. For example, if you 
placed an image as a low-resolution proxy but do not have the high-resolution original image accessible 
on your hard disk (or workgroup server), that may result in an error during the printing process. Preflight 
checks for this sort of problem. It can be run in the background as you work.
This chapter demonstrates how to interact with the preflight system using scripting. For illustration 
purposes, we show how to configure preflight to raise an error if the page size is something other than 
letter size (8.5" x 11"). We briefly highlight how it is done in the user interface, then show how to achieve 
the same results through scripting.
We assume that you have already read Adobe InDesign CS5 Scripting Tutorial and know how to create, 
install, and run a script.
Exploring Preflight Profiles
InDesign’s preflight feature is profile based, rule driven, and parameterized. There might be one or more 
preflight profiles. Initially, there is one profile, [Basic], which is read-only; you cannot modify or delete it.
A preflight profile contains many preflight rules. Each rule has a name and multiple data objects. Each data 
object has a name, data type, and data value. The data value can be changed. Each rule can be configured 
as follows:
X
Disabled — The preflight rule is disabled.
X
Return as error — The preflight rule returns error-level feedback.
X
Return as warning — The preflight rule returns warning-level feedback.
X
Return as informational — The preflight rule returns informational-level feedback.
To check the profile in InDesign, choose Preflight Panel > Define Profiles. You also can get profile 
information by scripting.
Listing preflight profiles
This script fragment shows how to list all preflight profiles. For the complete script, see ListPreflightProfiles.
tell application "Adobe InDesign CS5"
set myProfiles to preflight profiles
set myProfileCount to count of myProfiles
set myStr to "Preflight profiles: "
repeat with i from 1 to myProfileCount
if i > 1 then
set myStr to myStr & ", "
end if
set myStr to myStr & name of item i of myProfiles
end repeat
display alert myStr
end tell
Documents you may be interested
Documents you may be interested