C
HAPTER
5: Working with Page Items
Transforming Page Items     71
set myTransformationMatrixA to make transformation matrix with properties 
{counterclockwise rotation angle:30}
set myTransformationMatrixB to make transformation matrix with properties {horizontal 
translation:72, vertical translation:72}
set myRectangle to rectangle -1 of page 1 of document 1
set myNewRectangle to duplicate myRectangle
--Rotate the duplicated rectangle.
transform myNewRectangle in pasteboard coordinates from center anchor with matrix 
myTransformationMatrixA
set myNewRectangle to duplicate myRectangle
--Move the duplicate (unrotated) rectangle.
transform myNewRectangle in pasteboard coordinates from center anchor with matrix 
myTransformationMatrixB
--Merge the two transformation matrices.
set myTransformationMatrix to catenate matrix myTransformationMatrixA with matrix 
myTransformationMatrixB
set myNewRectangle to duplicate myRectangle
--The duplicated rectangle will be both moved and rotated.
transform myNewRectangle in pasteboard coordinates from center anchor with matrix 
myTransformationMatrix
When an object is transformed, you can get the transformation matrix that was applied to it, using the 
transform
values
of
method, as shown in the following script fragment. (For the complete script, see 
TransformValuesOf.)
set myRectangle to rectangle -1 of page 1 of document 1
--Note that transform values of always returns a list containing a 
--single transformation matrix.
set myTransformArray to transform values of myRectangle in pasteboard coordinates
set myTransformationMatrix to item 1 of myTransformArray
set myRotationAngle to counterclockwise rotation angle of myTransformationMatrix
set myShearAngle to clockwise shear angle of myTransformationMatrix
set myXScale to horizontal scale factor of myTransformationMatrix
set myYScale to vertical scale factor of myTransformationMatrix
set myXTranslate to horizontal translation of myTransformationMatrix
set myYTranslate to vertical translation of myTransformationMatrix
set myString to "Rotation Angle: " & myRotationAngle & return
set myString to myString & "Shear Angle: " & myShearAngle & return
set myString to myString & "Horizontal Scale Factor: " & myXScale & return
set myString to myString & "Vertical Scale Factor: " & myYScale & return
set myString to myString & "Horizontal Translation: " & myXTranslate & return
set myString to myString & "Vertical Translation: " & myYTranslate & return & return
set myString to myString & "Note that the Horizontal Translation and" & return
set myString to myString & "Vertical Translation values are the location" & return
set myString to myString & "of the center anchor in pasteboard coordinates."
display dialog (myString)
N
OTE
: The values in the horizontal- and vertical-translation fields of the transformation matrix returned by 
this method are the location of the upper-left anchor of the object, in pasteboard coordinates.
Coordinate spaces
In the transformation scripts we presented earlier, you might have noticed the 
pasteboard
coordinates
enumeration provided as a parameter for the transform method. This parameter determines the system of 
coordinates, or coordinate space, in which the transform operation occurs. The coordinate space can be 
one of the following values:
How to convert pdf into tiff - control application system: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
How to convert pdf into tiff - control application system: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
5: Working with Page Items
Transforming Page Items     72
X
pasteboard coordinates
is the coordinate space of the entire InDesign document. This coordinate 
space extends behind all spreads in a document. It does not correspond to InDesign’s rulers or zero 
point, nor does it have anything to do with the pasteboard area you can see around pages in the 
InDesign user interface. Transformations applied to objects have no effect on this coordinate space 
(e.g., the angle of the horizontal and vertical axes do not change).
X
parent coordinates
is the coordinate space of the parent of the object. Any transformations applied 
to the parent affect the parent coordinates; for example, rotating the parent object changes the angle 
of the horizontal and vertical axes of this coordinate space. In this case, the parent object refers to the 
group or page item containing the object; if the parent of the object is a page or spread, parent 
coordinates are the same as spread coordinates.
X
inner coordinates
is the coordinate space in which the object itself was created. 
X
spread coordinates
is the coordinate space of the spread. The origin of this space is at the center of 
the spread, and does not correspond to the rulers you see in the user interface.
The following script shows the differences between the coordinate spaces. (For the complete script, see 
CoordinateSpaces.)
set myRectangle to rectangle 1 of group 1 of page 1 of document 1
set myString to "The page contains a group which has been" & return
set myString to myString & "rotated 45 degrees (counterclockwise)." & return
set myString to myString & "The rectangle inside the group was" & return
set myString to myString & "rotated 45 degrees counterclockwise before" & return
set myString to myString & "it was added to the group." & return & return
set myString to myString & "Watch as we apply a series of scaling" & return
set myString to myString & "operations in different coordinate spaces."
display dialog myString
set myTransformationMatrix to make transformation matrix with properties {horizontal 
scale factor:2}
--Transform the rectangle using inner coordinates.
transform myRectangle in inner coordinates from center anchor with matrix 
myTransformationMatrix
--Select the rectangle and display an alert.
select myRectangle
display dialog "Transformed using inner coordinates."
--Undo the transformation.
tell document 1 to undo
--Transform using parent coordinates.
transform myRectangle in parent coordinates from center anchor with matrix 
myTransformationMatrix
select myRectangle
display dialog "Transformed using parent coordinates."
tell document 1 to undo
--Transform using pasteboard coordinates.
transform myRectangle in pasteboard coordinates from center anchor with matrix 
myTransformationMatrix
select myRectangle
display dialog "Transformed using pasteboard coordinates."
tell document 1 to undo
Transformation origin
The transformation origin is the center point of the transformation. The transformation origin can be 
specified in several ways:
control application system:C# Create PDF from Tiff Library to convert tif images to PDF in C#
desStream). Description: Convert to PDF/TIFF with specified resolution and save it into stream. Parameters: Name, Description, Valid Value.
www.rasteredge.com
control application system:C# PDF insert text Library: insert text into PDF content in C#.net
Parameters: Name, Description, Valid Value. value, The char wil be added into PDF page, 0
www.rasteredge.com
C
HAPTER
5: Working with Page Items
Transforming Page Items     73
X
Bounds space:
Z
anchor — An anchor point on the object itself.
center anchor
X
Ruler space:
Z
(x, y), page index — A point, relative to the ruler origin on a specified page of a spread.
{{72, 144}, 1}
Z
(x, y), location — A point, relative to the parent page of the specified location of the object. 
Location can be specified as an anchor point or a coordinate pair. It can be specified relative to the 
object’s geometric or visible bounds, and it can be specified in a given coordinate space.
{{72, 144}, center anchor}
X
Transform space:
Z
(x, y) — A point in the pasteboard coordinate space.
{72, 72}
Z
(x, y), coordinate system — A point in the specified coordinate space.
{{72, 72}, parent coordinates}
Z
((x, y)) — A point in the coordinate space given as the 
in
parameter of the 
transform
method.
{{72, 72}}
The following script example shows how to use some of the transformation origin options. (For the 
complete script, see TransformationOrigin.)
set myRectangle to rectangle 1 of document 1
set myString to "Watch as we rotate the rectangle using different anchor points," & 
return
set myString to myString & "bounds types, and coordinate spaces." & return & return
set myString to myString & "You might have to drag the alert aside to" & return
set myString to myString & "see the effect of the transformation."
set myNewRectangle to duplicate myRectangle
set myTransformationMatrix to make transformation matrix with properties 
{counterclockwise rotation angle:30}
--Rotate around the duplicated rectangle's center point.
transform myNewRectangle in pasteboard coordinates from center anchor with matrix 
myTransformationMatrix
--Select the rectangle and display an alert.
select myNewRectangle
display dialog "Rotated around center anchor."
--Undo the transformation.
tell document 1 to undo
--Rotate the rectangle around the ruler location [-100, -100]. Note that the anchor 
point specified here specifes the page
--containing the point--*not* that transformation point itself. The transformation gets 
the ruler coordinate [-100, -100] based
control application system:C# PDF Convert to Word SDK: Convert PDF to Word library in C#.net
zoomValue, The magnification of the original PDF page size. 0.1f
www.rasteredge.com
control application system:Online Convert Excel to PDF file. Best free online export xlsx
Download Free Trial. Convert a Excel File to PDF. Drag and drop your excel file into the box or click the green button to browse for a file to upload.
www.rasteredge.com
C
HAPTER
5: Working with Page Items
Transforming Page Items     74
--on that page. Setting the considerRulerUnits parameter to true makes certain that the 
transformation uses the current
--ruler units.
transform myNewRectangle in pasteboard coordinates from {{-100, -100}, top left anchor} 
with matrix myTransformationMatrix with considering ruler units
--Move the page guides to reflect the transformation point.
tell guide 1 of page 1 of document 1 to set location to -100
tell guide 2 of page 1 of document 1 to set location to -100
--Select the rectangle and display an alert.
select myNewRectangle
display dialog "Rotated around -100x, -100y."
--Undo the transformation and the guide moves.
tell document 1 to undo
tell document 1 to undo
tell document 1 to undo
Resolving locations
Sometimes, you need to get the location of a point specified in one coordinate space in the context of 
another coordinate space. To do this, you use the 
resolve
method, as shown in the following script 
example. (For the complete script, see ResolveLocation.)
set myRectangle to rectangle 1 of group 1 of page 1 of document 1
--Get ruler coordinate {72, 72} in pasteboard coordinates.
set myPageLocation to resolve myRectangle location {{72, 72}, top right anchor} in 
pasteboard coordinates with considering ruler units
--resolve returns a list containing a single item.
set myPageLocation to item 1 of myPageLocation
display dialog "Pasteboard Coordinates:" & return & return & "X: " & item 1 of 
myPageLocation & return & "Y: " & item 2 of myPageLocation
--Get ruler coordinate {72, 72} in parent coordinates.
set myPageLocation to resolve myRectangle location {{72, 72}, top right anchor} in 
parent coordinates with considering ruler units
--resolve returns a list containing a single item.
set myPageLocation to item 1 of myPageLocation
display dialog "Parent Coordinates:" & return & return & "X: " & item 1 of 
myPageLocation & return & "Y: " & item 2 of myPageLocation
Transforming points
You can transform points as well as objects, which means scripts can perform a variety of mathematical 
operations without having to include the calculations in the script itself. This is particularly useful for 
AppleScript, which lacks the basic trigonometric functions (sine, cosine) required for most 
transformations. The ChangeCoordinates sample script shows how to draw a series of regular polygons 
using this approach:
control application system:C# PDF insert image Library: insert images into PDF in C#.net, ASP
Support various image formats, like Jpeg or Jpg, Png, Gif, Bmp, Tiff and other Import graphic picture, digital photo, signature and logo into PDF document.
www.rasteredge.com
control application system:C# TIFF: TIFF Editor SDK to Read & Manipulate TIFF File Using C#.
Convert Tiff file to bmp, gif, png, jpeg, and scanned PDF files to Tiff, like Word, Excel, PowerPoint, PDF, and images. to add XImage.OCR for .NET into C# Tiff
www.rasteredge.com
C
HAPTER
5: Working with Page Items
Transforming Page Items     75
--General purpose routine for drawing regular polygons from their center point.
on myDrawPolygon(myParent, myCenterPoint, myNumberOfPoints, myRadius, myStarPolygon, 
myStarInset)
local myPathPoints, myTransformedPoint
tell application "Adobe InDesign CS5"
set myPathPoints to {}
set myPoint to {0, 0}
if myStarPolygon is true then
set myNumberOfPoints to myNumberOfPoints * 2
end if
set myInnerRadius to myRadius * myStarInset
set myAngle to 360 / myNumberOfPoints
set myRotateMatrix to make transformation matrix with properties
{counterclockwise rotation angle:myAngle}
set myOuterTranslateMatrix to make transformation matrix with properties
{horizontal translation:myRadius}
set myInnerTranslateMatrix to make transformation matrix with properties
{horizontal translation:myInnerRadius}
repeat with myPointCounter from 0 to myNumberOfPoints - 1
--Translate the point to the inner/outer radius.
if myStarInset = 1 or my myIsEven(myPointCounter) is true then
set myTransformedPoint to change coordinates 
myOuterTranslateMatrix point myPoint
else
set myTransformedPoint to change coordinates 
myInnerTranslateMatrix point myPoint
end if
--Rotate the point.
set myTransformedPoint to change coordinates 
myRotateMatrix point myTransformedPoint
copy myTransformedPoint to the end of myPathPoints
set myRotateMatrix to rotate matrix myRotateMatrix by angle myAngle
end repeat
--Create a new polygon.
tell myParent
set myPolygon to make polygon
end tell
--Set the entire path of the polygon to the array we've created.
set entire path of path 1 of myPolygon to myPathPoints
--If the center point is somewhere other than [0,0], 
--translate the polygon to the center point.
if item 1 of myCenterPoint is not equal to 0 or item 2 of 
myCenterPoint is not equal to 0 then
set myTransformationMatrix to make transformation matrix with properties
{horizontal translation:item 1 of myCenterPoint, 
vertical translation:item 2 of myCenterPoint}
transform myPolygon in pasteboard coordinates from {myCenterPoint, 
control application system:RasterEdge XDoc.Tiff for .NET - SDK for Tiff Document Imaging
Convert Word, Excel, PowerPoint to Tiff. Convert PDF to Tiff. Convert Jpeg Images to Tiff. Tiff File Process. Tiff Page Edit. Insert Pages into Tiff File.
www.rasteredge.com
control application system:C# PDF File Split Library: Split, seperate PDF into multiple files
Divide PDF File into Two Using C#. This is an C# example of splitting a PDF to two new PDF files. Split PDF Document into Multiple PDF Files in C#.
www.rasteredge.com
C
HAPTER
5: Working with Page Items
Transforming Page Items     76
center anchor} with matrix myTransformationMatrix with considering 
ruler units
end if
end tell
end myDrawPolygon
--This function returns true if myNumber is even, false if it is not.
on myIsEven(myNumber)
set myResult to myNumber mod 2
if myResult = 0 then
set myResult to true
else
set myResult to false
end if
return myResult
end myIsEven
You also can use the 
change
coordinates
method to change the positions of curve control points, as 
shown in the FunWithTransformations sample script.
Transforming again
Just as you can apply a transformation or sequence of transformations again in the user interface, you can 
do so using scripting. There are four methods for applying transformations again:
X
transform
again
X
transform
again
individually
X
transform
sequence
again
X
transform
sequence
again individually
The following script fragment shows how to use 
transform
again
. (For the complete script, see 
TransformAgain.)
set myTransformationMatrix to make transformation matrix with properties 
{counterclockwise rotation angle:45}
transform myRectangleA in pasteboard coordinates from center anchor with matrix 
myTransformationMatrix
set myRectangleB to duplicate myRectangleA
transform myRectangleB in pasteboard coordinates from {{0, 0}, top left anchor} with 
matrix myTransformationMatrix with considering ruler units
set myRectangleC to duplicate myRectangleB
set myResult to transform again myRectangleC
set myRectangleD to duplicate myRectangleC
set myResult to transform again myRectangleD
set myRectangleE to duplicate myRectangleD
set myResult to transform again myRectangleE
set myRectangleF to duplicate myRectangleE
set myResult to transform again myRectangleF
set myRectangleG to duplicate myRectangleF
set myResult to transform again myRectangleG
set myRectangleH to duplicate myRectangleG
set myResult to transform again myRectangleH
transform myRectangleB in pasteboard coordinates from center anchor with matrix 
myTransformationMatrix
set myResult to transform again myRectangleD
set myResult to transform again myRectangleF
set myResult to transform again myRectangleH
C
HAPTER
5: Working with Page Items
Resize and Reframe     77
Resize and Reframe
In addition to scaling page items using the transform command, you can also change the size of the shape 
using two other commands: resize and reframe. These commands change the location of the path points 
of the page item without scaling the content or stroke weight of the page item. The following script 
fragment shows how to use the resize command. For the complete script, see Resize.
--Given a reference to a rectangle "myRectangle"...
set myDuplicate to duplicate myRectangle
resize myDuplicate in inner coordinates from center anchor by multiplying current 
dimensions by values{2, 2}
The following script fragment shows how to use the reframe command. For the complete script, see 
Reframe.
--Given a reference to a rectangle "myRectangle"...
set myBounds to geometric bounds of myRectangle
set myX1 to item 2 of myBounds - 72
set myY1 to item 1 of myBounds - 72
set myX2 to item 4 of myBounds + 72
set myY2 to item 3 of myBounds + 72
set myDuplicate to duplicate myRectangle
myDuplicate = myRectangle.duplicate();
reframe myDuplicate in inner coordinates opposing corners {{myY1, myX1},{myY2, myX2}}
78
6
Text and Type
Entering, editing, and formatting text are the tasks that make up the bulk of the time spent working on 
most InDesign documents. Because of this, automating text and type operations can result in large 
productivity gains.
This chapter shows how to script the most common operations involving text and type. 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. We also assume that you have some knowledge of working with text in InDesign 
and understand basic typesetting terms.
Entering and Importing Text
This section covers the process of getting text into your InDesign documents. Just as you can type text into 
text frames and place text files using the InDesign user interface, you can create text frames, insert text 
into a story, or place text files on pages using scripting.
Creating a text frame
The following script creates a text frame, sets the bounds (size) of the frame, then enters text in the frame 
(for the complete script, see the MakeTextFrame tutorial script):
--Given a document "myDocument"...
set myDocument to document 1
set myPage to page 1 of myDocument
tell myPage
set myTextFrame to make text frame
--Set the bounds of the text frame.
set geometric bounds of myTextFrame to {72, 72, 288, 288}
--Enter text in the text frame.
set contents of myTextFrame to "This is some example text."
--Note that you could also use a properties record
--to set the bounds and contents of the text in a 
--single line:
--set myTextFrame to make text frame with properties{geometric bounds:{72, 72, 288, 
288}, contents:"This is some example text."}
end tell
The following script shows how to create a text frame that is the size of the area defined by the page 
margins. 
myGetBounds
is a useful function that you can add to your own scripts, and it appears in many 
other examples in this chapter. (For the complete script, see MakeTextFrameWithinMargins.)
--Given a document "myDocument"
set myPage to page 1 of myDocument
tell myPage
set myTextFrame to make text frame
--Set the bounds of the text frame.
set geometric bounds of myTextFrame to my myGetBounds(myDocument, myPage)
end tell
C
HAPTER
6: Text and Type
Entering and Importing Text     79
The following script fragment shows the myGetBounds handler.
on myGetBounds(myDocument, myPage)
tell application "Adobe InDesign CS5"
tell document preferences of myDocument
set myPageWidth to page width
set myPageHeight to page height
end tell
tell margin preferences of myPage
if side of myPage is left hand then
set myX2 to left
set myX1 to right
else
set myX1 to left
set myX2 to right
end if
set myY1 to top
set myY2 to bottom
end tell
set myX2 to myPageWidth - myX2
set myY2 to myPageHeight - myY2
return {myY1, myX1, myY2, myX2}
end tell
end myGetBounds
Adding text
To add text to a story, use the 
contents
property of the insertion point at the location where you want to 
insert the text. The following sample script uses this technique to add text at the end of a story (for the 
complete script, see AddText):
--Given a document "myDocument" with a text frame on page 1
set myTextFrame to text frame 1 of page 1 of myDocument
--Add text to the end of the text frame. To do this,
--We'll use the last insertion point in the story.
set myNewText to "This is a new paragraph of example text."
tell parent story of myTextFrame
set contents of insertion point -1 to return & myNewText
end tell
Stories and text frames
All text in an InDesign layout is part of a story, and every story can contain one or more text frames. 
Creating a text frame creates a story, and stories can contain multiple text frames. 
In the preceding script, we added text at the end of the parent story rather than at the end of the text 
frame. This is because the end of the text frame might not be the end of the story; that depends on the 
length and formatting of the text. By adding the text to the end of the parent story, we can guarantee that 
the text is added, regardless of the composition of the text in the text frame.
You always can get a reference to the story using the 
parent
text
frame
property of a text frame. It can be 
useful to work with the text of a story instead of the text of a text frame; the following script demonstrates 
the difference. The alerts shows that the text frame does not contain the overset text, but the story does 
(for the complete script, see StoryAndTextFrame).
C
HAPTER
6: Text and Type
Entering and Importing Text     80
--Given a document "myDocument" with a text frame on page 1...
set myTextFrame to text frame 1 of myDocument
--Now add text beyond the end of the text frame.
set myString to return & "This is some overset text"
tell insertion point -1 of myTextFrame to set contents to myString
set myString to contents of text 1 of myTextFrame
display dialog ("The last paragraph in this dialog should be \"This is some overset 
text\". Is it?" & return & myString)
set myString to contents of parent story of myTextFrame
display dialog ("The last paragraph in this alert should be \"This is some overset 
text\". Is it?" & return & myString)
For more on understanding the relationships between text objects in an InDesign document, see 
“Understanding Text Objects” on page 88
.
Replacing text
The following script replaces a word with a phrase by changing the contents of the appropriate object (for 
the complete script, see ReplaceWord):
--Given a document "myDocument" with a text frame on page 1...
set myTextFrame to text frame 1 of page 1 of myDocument
--Replace the third word with the phrase "a little bit of".
tell word 3 of parent story of myTextFrame
set contents to "a little bit of"
end tell
The following script replaces the text in a paragraph (for the complete script, see ReplaceText):
--Given a document "myDocument" with a text frame on page 1...
set myTextFrame to text frame 1 of page 1 of myDocument
--Replace the text in the second paragraph without
--replacing the return character at the end of the paragraph
--(character -2 is the character before the return).
tell parent story of myTextFrame
set myText to object reference of text from character 1 to character -2 of paragraph 
2
set contents of myText to "This text replaces the text in paragraph 2."
end tell
end tell
In thepreceding script , we excluded the return character because deleting the return might change the 
paragraph style applied to the paragraph. To do this, we supplied a character range—from the first 
character of the paragraph to the last character before the return character that ends the paragraph.
Inserting special characters
Because the Script Editor supports Unicode, you can simply enter Unicode characters in text strings that 
you send to InDesign.  The following script shows several ways to enter special characters. (We omitted the 
myGetBounds
function from this listing; you can find it in “Creating a text frame” on page78
” or in the 
SpecialCharacters tutorial script.)
Documents you may be interested
Documents you may be interested