C
HAPTER
7: User Interfaces
Creating a More Complex User Interface     121
on myMakeDocument(myPointSize, myString)
tell application "Adobe InDesign CS5"
set myDocument to make document
tell view preferences of myDocument
end tell
tell page 1 of myDocument
--Create a text frame.
set myTextFrame to make text frame
set geometric bounds of myTextFrame to my myGetBounds
(myDocument, page 1 of myDocument)
--Apply the settings from the dialog box to the text frame.
set contents of myTextFrame to myString
--Set the point size of the text in the text frame.
set point size of text 1 of myTextFrame to myPointSize
end tell
end tell
end myMakeDocument
Creating a More Complex User Interface
In the next example, we add more controls and different types of controls to the sample dialog box. The 
example creates a dialog box that resembles the following:
For the complete script, see ComplexUI.
set myDialog to make dialog
--This example dialog box uses border panels and dialog columns to
--separate and organize the user interface items in the dialog.
tell myDialog
set name to "User Interface Example Script"
set myDialogColumn to make dialog column
tell myDialogColumn
set myBorderPanel to make border panel
tell myBorderPanel
set myDialogColumn to make dialog column
tell myDialogColumn
make static text with properties {static label:"Message:"}
end tell
set myDialogColumn to make dialog column
tell myDialogColumn
set myTextEditField to make text editbox with properties 
{edit contents:"Hello World!", min width:180}
end tell
end tell
set myBorderPanel to make border panel
tell myBorderPanel
set myDialogColumn to make dialog column
Pdf to tiff converter open source - SDK control service: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 - SDK control service: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
7: User Interfaces
Creating a More Complex User Interface     122
tell myDialogColumn
make static text with properties {static label:"Point Size:"}
end tell
set myDialogColumn to make dialog column
tell myDialogColumn
set myPointSizeField to make measurement editbox with 
properties {edit value:72, edit units:points}
end tell
end tell
set myBorderPanel to make border panel
tell myBorderPanel
set myDialogColumn to make dialog column
tell myDialogColumn
make static text with properties 
{static label:"Vertical Justification:"}
end tell
set myDialogColumn to make dialog column
tell myDialogColumn
set myVerticalJustificationMenu to make dropdown with properties
{string list:{"Top", "Center", "Bottom"}, selected index:0}
end tell
end tell
set myBorderPanel to make border panel
tell myBorderPanel
make static text with properties {static label:"Paragraph Alignment:"}
set myParagraphAlignmentGroup to make radiobutton group
tell myParagraphAlignmentGroup
set myLeftRadioButton to make radiobutton control with 
properties {static label:"Left", checked state:true}
set myCenterRadioButton to make radiobutton control with 
properties {static label:"Center"}
set myRightRadioButton to make radiobutton control with 
properties {static label:"Right"}
end tell
end tell
end tell
end tell
set myResult to show myDialog
if myResult is true then
--Get the settings from the dialog box.
--Get the point size from the point size field.
set myPointSize to edit value of myPointSizeField
--Get the example text from the text edit field.
set myString to edit contents of myTextEditField
--Get the vertical justification setting from the pop-up menu.
if selected index of myVerticalJustificationMenu is 0 then
set myVerticalJustification to top align
else if selected index of myVerticalJustificationMenu is 1 then
set myVerticalJustification to center align
else
set myVerticalJustification to bottom align
end if
--Get the paragraph alignment setting from the radiobutton group.
get properties of myParagraphAlignmentGroup
SDK control service: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
SDK control service: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
7: User Interfaces
Working with ScriptUI     123
if selected button of myParagraphAlignmentGroup is 0 then
set myParagraphAlignment to left align
else if selected button of myParagraphAlignmentGroup is 1 then
set myParagraphAlignment to center align
else
set myParagraphAlignment to right align
end if
--Remove the dialog box from memory.
destroy myDialog
my myMakeDocument(myPointSize, myString, 
myParagraphAlignment, myVerticalJustification)
else
destroy myDialog
end if
end tell
Here is the 
myMakeDocument
handler referred to in the above fragment:
on myMakeDocument(myPointSize, myString, myParagraphAlignment, 
myVerticalJustification)
tell application "Adobe InDesign CS5"
set myDocument to make document
tell view preferences of myDocument
end tell
set myPage to page 1 of myDocument
tell myPage
set myTextFrame to make text frame
set geometric bounds of myTextFrame to my myGetBounds(myDocument, myPage)
--Apply the settings from the dialog box to the text frame.
set contents of myTextFrame to myString
--Apply the vertical justification setting.
set vertical justification of text frame preferences of 
myTextFrame to myVerticalJustification
--Apply the paragraph alignment ("justification").
--"text 1 of myTextFrame" is all of the text in the text frame.
set justification of text 1 of myTextFrame to myParagraphAlignment
--Set the point size of the text in the text frame.
set point size of text 1 of myTextFrame to myPointSize
end tell
end tell
end myMakeDocument
Working with ScriptUI
JavaScripts can make create and define user-interface elements using an Adobe scripting component 
named ScriptUI. ScriptUI gives scripters a way to create floating palettes, progress bars, and interactive 
dialog boxes that are far more complex than InDesign’s built-in 
dialog
object. 
This does not mean, however, that user-interface elements written using Script UI are not accessible to 
AppleScript users. InDesign scripts can execute scripts written in other scripting languages using the do 
script method.
Creating a progress bar with ScriptUI
The following sample script shows how to create a progress bar using JavaScript and ScriptUI, then use the 
progress bar from an AppleScript (for the complete script, see ProgressBar):
SDK control service: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
SDK control service: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
7: User Interfaces
Working with ScriptUI     124
#targetengine "session"
//Because these terms are defined in the "session" engine,
//they will be available to any other JavaScript running
//in that instance of the engine.
var myMaximumValue = 300;
var myProgressBarWidth = 300;
var myIncrement = myMaximumValue/myProgressBarWidth;
myCreateProgressPanel(myMaximumValue, myProgressBarWidth);
function myCreateProgressPanel(myMaximumValue, myProgressBarWidth){
myProgressPanel = new Window('window', 'Progress');
with(myProgressPanel){
myProgressPanel.myProgressBar = add('progressbar', [12, 12,
myProgressBarWidth, 24], 0, myMaximumValue);
}
}
The following script fragment shows how to call the progress bar created in the above script using an 
AppleScript (for the complete script, see CallProgressBar):
set myDocument to make document
--Add pages to the active document.
--If you don't do this, the progress bar will
--go by too quickly.
--Note that the JavaScripts must use the "session"
--engine for this to work.
set myJavaScript to "#targetengine \"session\"" & return
set myJavaScript to myJavaScript & "myCreateProgressPanel(100, 400);" & return
set myJavaScript to myJavaScript & "myProgressPanel.show();" & return
do script myJavaScript language javascript
repeat with myCounter from 1 to 40
set myJavaScript to "#targetengine \"session\"" & return
set myJavaScript to myJavaScript & "myProgressPanel.myProgressBar.value = "
set myJavaScript to myJavaScript & myCounter & "/myIncrement;" & return
do script myJavaScript language javascript
tell myDocument to make page
if myCounter = 100 then
set myJavaScript to "#targetengine \"session\"" & return
set myJavaScript to myJavaScript & 
"myProgressPanel.myProgressBar.value = 0;" & return
set myJavaScript to myJavaScript & "myProgressPanel.hide();" & return
do script myJavaScript language javascript
close myDocument saving no
end if
end repeat
SDK control service: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
SDK control service: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
125
8
Events
InDesign scripting can respond to common application and document events, such as opening a file, 
creating a new file, printing, and importing text and graphic files from disk. In InDesign scripting, the 
event
object responds to an event that occurs in the application. Scripts can be attached to events using 
the 
event
listener
scripting object. Scripts that use events are the same as other scripts—the only 
difference is that they run automatically when the corresponding event occurs, rather than being run by 
the user (from the Scripts palette).
This chapter shows how to work with InDesign event scripting. The sample scripts in this chapter are 
presented in order of complexity, starting with very simple scripts and building toward more complex 
operations.
We assume that you have already read Adobe InDesign CS5 Scripting Tutorial and know how to create, 
install, and run a script.
For a discussion of events related to menus, see Chapter9, “Menus.”
The InDesign event scripting model is similar to the Worldwide Web Consortium (W3C) recommendation 
for Document Object Model Events. For more information, see http://www.w3c.org
.
Understanding the Event Scripting Model
The InDesign event scripting model consists of a series of objects that correspond to the events that occur 
as you work with the application. The first object is the 
event
, which corresponds to one of a limited series 
of actions in the InDesign user interface (or corresponding actions triggered by scripts).
To respond to an event, you register an 
event
listener
with an object capable of receiving the event. 
When the specified event reaches the object, the 
event
listener
executes the script function defined in 
its handler function (a reference to a script file on disk).
You can view the available events using the AppleScript Dictionary Viewer. In the AppleScript Dictionary 
viewer in your AppleScript editor, look at the event class in the Basics Suite. 
About event properties and event propagation
When an action—whether initiated by a user or by a script—triggers an event, the event can spread, or 
propagate, through the scripting objects capable of responding to the event. When an event reaches an 
object that has an 
event
listener
registered for that event, the 
event
listener
is triggered by the 
event. An event can be handled by more than one object as it propagates.
There are two types of event propagation:
X
None — Only the 
event
listeners
registered to the event target are triggered by the event. The 
beforeDisplay
event is an example of an event that does not propagate.
X
Bubbling — The event starts propagation at its 
target
and triggers any qualifying 
event
listeners
registered to the 
target
. The event then proceeds upward through the scripting object model, 
triggering any qualifying 
event
listeners
registered to objects above the 
target
in the scripting 
object model hierarchy.
SDK control service: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
SDK control service: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
8: Events
Working with Event Listeners     126
The following table provides more detail on the properties of an 
event
and the ways in which they relate 
to event propagation through the scripting object model.
Working with Event Listeners
When you create an 
event
listener
, you specify the event type and the event handler (as a handler or file 
reference). The following script fragment shows how to add an 
event
listener
for a specific event (for the 
complete script, see AddEventListener).
--Registers an event listener on the afterNew event.
tell application "Adobe InDesign CS5"
make event listener with properties {event type:"afterNew", 
handler:my myDisplayEventType}
end tell
The preceding script fragment refers to the following handler:
on myDisplayEventType()
tell application "Adobe InDesign CS5"
--"evt" is the event passed to this script by the event listener.
set myEvent to evt
display dialog ("This event is the "& event type of myEvent & "event.")
end tell
end myMessage
When you use an event handler defined in the script, rather than an event handler defined in a separate 
script file, the script will work correctly when run from the InDesign Scripts panel, but will not work when 
you run it from a script editing application (such as the Apple Script Editor).
To remove the 
event
listener
created by the preceding script, run the following script (from the 
RemoveEventListener tutorial script):
Property
Description
Bubbles 
If true, the 
event
propagates to scripting objects above the object initiating 
the 
event
.
Cancelable 
If true, the default behavior of the 
event
on its 
target
can be canceled. To do 
this, use the 
prevent
default
command .
CurrentTarget 
The current scripting object processing the 
event
. See 
target
in this table.
DefaultPrevented 
If true, the default behavior of the 
event
on the current 
target
was 
prevented, thereby canceling the action. See 
target
in this table.
EventPhase 
The current stage of the 
event
propagation process.
EventType 
The type of the 
event
, as a string (for example, 
"beforeNew"
).
PropagationStopped 
If true, the 
event
has stopped propagating beyond the 
current
target
(see 
target
in this table). To stop event propagation, use the 
stop
propagation
command .
Target 
The object from which the 
event
originates. For example, the 
target
of a 
beforeImport
event is a document; of a 
beforeNew
event, the application.
TimeStamp 
The time and date when the 
event
occurred.
SDK control service: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
SDK control service: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
8: Events
Working with Event Listeners     127
tell application "Adobe InDesign CS5"
remove event listener event type "afterNew" handler myDisplayEventType
end tell
When an 
event
listener
responds to an event, the event may still be processed by other 
event
listeners
that might be monitoring the event (depending on the propagation of the event). For 
example, the 
afterOpen
event can be observed by 
event
listeners
associated with both the application 
and the document.
event
listeners
do not persist beyond the current InDesign session. To make an 
event
listener
available in every InDesign session, add the script to the startup scripts folder. (For more on installing 
scripts, see "Installing Scripts" in Adobe InDesign CS5 Scripting Tutorial.) When you add an 
event
listener
script to a document, it is not saved with the document or exported to IDML.
N
OTE
: If you are having trouble with a script that defines an 
event
listener
, you can either run a script 
that removes the 
event
listener
or quit and restart InDesign.
An event can trigger multiple 
event
listeners
as it propagates through the scripting object model. The 
following sample script demonstrates an event triggering 
event
listeners
registered to different objects 
(for the full script, see MultipleEventListeners):
--Shows that an event can trigger multiple event listeners.
tell application "Adobe InDesign CS5"
set myDocument to make document
--You'll have to fill in a valid file path for your system
make event listener with properties {event type:"beforeImport",
handler:my myEventInfo}
tell myDocument
make event listener with properties {event type:"beforeImport",
handler:my myEventInfo}
end tell
end tell
The handler referred to in the preceding script fragment contains the following:
on myEventInfo(myEvent)
tell application "Adobe InDesign CS5"
set myString to "Current Target: " & name of current target of myEvent
display dialog (myString)
end tell
end myEventInfo
When you run the preceding script and place a file, InDesign displays alerts showing, in sequence, the 
name of the document, then the name of the application. To remove the event listeners added by the 
preceding script, run the RemoveMultipleEventListeners script.
The following sample script creates an 
event
listener
for each document event and displays information 
about the event in a simple dialog box. For the complete script, see EventListenersOn.
C
HAPTER
8: Events
Working with Event Listeners     128
tell application "Adobe InDesign CS5"
set myEventNames to {"beforeNew", "afterNew", "beforeQuit", "afterQuit", "beforeOpen", 
"afterOpen", "beforeClose", "afterClose", "beforeSave", "afterSave", "beforeSaveAs", 
"afterSaveAs", "beforeSaveACopy", "afterSaveACopy", "beforeRevert", "afterRevert", 
"beforePrint", "afterPrint", "beforeExport", "afterExport", "beforeImport", 
"afterImport", "beforePlace", "afterPlace"}
repeat with myEventName in myEventNames
make event listener with properties {event type:myEventName,
handler:"yukino:IDEventHandlers:GetEventInfo.applescript"}
end repeat
end tell
The preceding script refers to the following script. The file reference in the preceding script must match 
the location of this script on your disk. For the complete script, see 
GetEventInfo.applescript
.
main(evt)
on main(myEvent)
tell application "Adobe InDesign CS5"
set myString to "Handling Event: " & event type of myEvent & return
set myString to myString & "Target: " & name of target of myEvent & return
set myString to myString & "Current: " & name of current target of 
myEvent & return
set myString to myString & "Phase: " & my myGetPhaseName(event phase o
f myEvent) & return
set myString to myString & "Bubbles: " & bubbles of myEvent & return
set myString to myString & "Cancelable: " & cancelable of 
myEvent & return
set myString to myString & "Stopped: " & propagation stopped of 
myEvent & return
set myString to myString & "Canceled: " & default prevented of 
myEvent & return
set myString to myString & "Time: " & time stamp of myEvent & return
display dialog (myString)
end tell
end main
--Function returns a string corresponding to the event phase.
on myGetPhaseName(myEventPhase)
tell application "Adobe InDesign CS5"
if myEventPhase is at target then
set myString to "At Target"
else if myEventPhase is bubbling phase then
set myString to "Bubbling"
else if myEventPhase is done then
set myString to "Done"
else if myEventPhase is not dispatching then
set myString to "Not Dispatching"
else
set myString to "Unknown Phase"
end if
return myString
end tell
end myGetPhaseName
The following sample script shows how to turn off all 
event
listeners
on the application object. For the 
complete script, see EventListenersOff.
-tell application "Adobe InDesign CS5"
tell event listeners to delete
end tell
C
HAPTER
8: Events
Sample afterNew Event Listener     129
Sample afterNew Event Listener
The 
afterNew
event provides a convenient place to add information to the document, such as the user 
name, the date the document was created, copyright information, and other job-tracking information. The 
following tutorial script shows how to add this kind of information to a text frame in the slug area of the 
first master spread in the document (for the complete script, see AfterNew). This script also adds 
document metadata (also known as file info or XMP information).
--Registers an event listener on the afterNew event.
tell application "Adobe InDesign CS5"
make event listener with properties {event type:"afterNew", 
handler:"yukino:IDEventHandlers:AfterNewHandler.applescript"}
end tell
The preceding script refers to the following script. The file reference in the preceding script must match 
the location of this script on your disk. For the complete script, see 
AfterNewHandler.applescript
.
--AfterNewHandler.applescript
--An InDesign CS5 AppleScript
--
--This script is called by the AfterNew.applescript. It
--Sets up a basic document layout and adds XMP information
--to the document.
main(evt)
on main(myEvent)
tell application "Adobe InDesign CS5"
if user name = "" then
set user name to "Adobe"
end if
set myUserName to user name
--set myDocument to parent of myEvent
set myDocument to document 1
tell view preferences of myDocument
set horizontal measurement units to points
set vertical measurement units to points
set ruler origin to page origin
end tell
--MySlugOffset is the distance from the bottom of the page
--to the top of the slug.
set mySlugOffset to 12
--MySlugHeight is the height of the text frame
--containing the job information.
set mySlugHeight to 72
tell document preferences of myDocument
set documentSlugUniformSize to false
set slug bottom offset to mySlugOffset + mySlugHeight
set slug top offset to 0
set slug inside or left offset to 0
set slug right or outside offset to 0
end tell
repeat with myCounter from 1 to (count master spreads of myDocument)
set myMasterSpread to master spread myCounter of myDocument
repeat with myMasterPageCounter from 1 to (count pages of 
myMasterSpread)
set myPage to page myMasterPageCounter of myMasterSpread
set mySlugBounds to my myGetSlugBounds(myDocument, myPage,
mySlugOffset, mySlugHeight)
tell myPage
set mySlugFrame to make text frame with properties {geometric
C
HAPTER
8: Events
Sample beforePrint Event Listener     130
bounds:mySlugBounds, contents:"Created: " & 
time stamp of myEvent &
return & "by: " & myUserName}
end tell
end repeat
end repeat
tell metadata preferences of myDocument
set author to "Adobe Systems"
set description to "This is an example document 
containing XMP metadata. Created: " & time stamp of myEvent
end tell
end tell
end main
on myGetSlugBounds(myDocument, myPage, mySlugOffset, mySlugHeight)
tell application "Adobe InDesign CS5"
tell myDocument
set myPageWidth to page width of document preferences
set myPageHeight to page height of document preferences
end tell
set myLeft to left of margin preferences of myPage
set myRight to right of margin preferences of myPage
set myX1 to myLeft
set myY1 to myPageHeight + mySlugOffset
set myX2 to myPageWidth - myRight
set myY2 to myY1 + mySlugHeight
return {myY1, myX1, myY2, myX2}
end tell
end myGetSlugBounds
Sample beforePrint Event Listener
The 
beforePrint
event provides a perfect place to execute a script that performs various preflight checks 
on a document. The following script shows how to add an event listener that checks a document for 
certain attributes before printing (for the complete script, see BeforePrint):
--Adds an event listener that performs a preflight check on
--a document before printing. If the preflight check fails, 
--the script gives the user the opportunity to cancel the print job.
tell application "Adobe InDesign CS5"
make event listener with properties {event type:"beforePrint", 
handler:"yukino:IDEventHandlers:BeforePrintHandler.applescript"}
end tell
The preceding script refers to the following script. The file reference in the preceding script must match 
the location of this script on your disk. For the complete script, see 
BeforePrintHandler.applescript
.
Documents you may be interested
Documents you may be interested