<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
    <channel>
        <title>InDesign的JavaScript程式設計-- 錨定物件</title>
        <description>一般的物件，如文字框，矩形框，圖片，是放在頁面上，
錨定物件則是將這些物件放在文章裡面，或者說把這些物件放在包含這些文章的物件(如文字框)裡面

(一)手動設定的方法：

(1)直接插入：
假設在Indesign裡面，有一個文字框，且包含文字如下：
[img]http://algebra.byethost11.com/InDesign%20Image%20for%20Mepo/sshot-1.png[/img]
如果我們想要在圖中的文字「圖片」和「進來」之間插入一個圖片
可以先利用游標將插入點放在「圖片」進來」之間
然後再執行正常程序的「置入」圖片
就可以得到下面的結果
[img]http://algebra.byethost11.com/InDesign%20Image%20for%20Mepo/sshot-2.png[/img]
現在，這個圖片就是一個錨定物件




(2)剪下、貼上
也可以先以正常程序在「頁面」上置入圖片
然後將這個圖片剪下，再將插入點放在「圖片」和「進來」之間
再執行「貼上」，結果也會和上面一樣



(3)錨定物件的意義：

(a)先提一個題外話，上面說「這個圖片就是一個錨定物件」，這句話有點不對
問題不在「錨定物件」，而是在「圖片」
因為當我們在Indesign中置入一個「圖片」的時候，Indesign「一定」會順便送你一個「矩形框」(rectangle)，把它包起來
「圖片」一定在某一個「矩形框」裡面(上面的結果，看不到這個矩形框，但是它真的存在)，
所以其實上面的情形，應該說那個「矩形框」才是「錨定物件」
(關於圖片的這個性質，下次再另為文說明)

(b) 錨定物件是在一個「字元」(character)裡面：
我們知道，當「文字框」的大小被改變的時候，文字框的內容也會跟著適應，現在，我們試著隨便改變一下上面那個文字框的大小，結果如下：
[img]http://algebra.byethost11.com/InDesign%20Image%20for%20Mepo/sshot-3.png[/img]
結果這個「錨定物件」就跟著其它文字一樣，一起去適應這個新的文字框大小
就好像它是在文字「圖片」和「進來」之間的另一個「文字」
事實上，Indesign確實把「圖片」和「進來」之間看成有一個文字，但這個文字並不是那個「錨定物件」，
比較明確的定位是：「錨定物件」是那個文字所包含的一個物件
其實如果只是單純設計，不是寫程式的話，把那個「錨定物件」看成就像一個「文字」也還好，
只是如果要寫程試去操控InDesign話，它們之間的定位應該是：
Indesign把「圖片」和「進來」之間看成有「一個字元(character)」這個字元裡面又包含了一個物件，就是那個矩形框
我們可以把包含這個框形框的字元，叫這個框形框的「爸爸」(在Indesign的物件模型裡面，這個字元就是這個矩形框的 parent 屬性，父母?家長?爸爸?)
他的爸爸是一個「字元」(character)，但沒有「字元」的內容，卻包含了一個「矩形框」




(4)設定錨定物件的性質：

 (a) 錨定物件會跟著文章一起改變位置，這是「錨定物件」最大的特性，常常也是我們想要作出一個錨定物件的原因。它之所以會動，詳細的說，是因為它的爸爸是文章中的一個字元，文章中的字元當然會跟著文章一起動，它的爸爸會動，它是在它的爸爸裡面的一個物件，所以它當然也就跟著一起動。
但是，重點來了，它雖然一定會跟著它的爸爸一起動，但它在它的爸爸裡面的位置是可以改變的，也就是我們可以設定它在它爸爸裡面的「相對位置」，比如說，你可以設定它一定要在它的爸爸的下面10公分的地方，如果它的爸爸往左移了20公分，它也會跟著往左移20公分，所以它就還是保持著它在它的爸爸下面的10公分

(b)那要怎麼設定「錨定物件」跟它爸爸之間的「相對距離」呢?就這樣：
   (b-1)先選取這個錨定物件
   (b-2)再選功能表裡的「物件」--&gt;「錨定物件」--&gt;「選項」
   (b-3)會出現一個「錨定物件選項」的對話視窗，這視窗裡面的一堆設定，就是在設定「錨定物件」跟「它的爸爸」之間的相對距離
   (b-4)至於每一個設定是什麼意思?有空再聊了


(二) JavaScript 設定「錨定物件」的方法：
  
(a) 以上面的情形為例子，如果我們想要在「圖片」和「進來」之間置入一個圖片, 那就是在「圖片」和「進來」之間的「插入點」插入一個圖片，我們先把這個插入點叫做 myInsertionPoint
如果上面的例子裡，Indesign只有一個文件，這個文件只有一頁，而且這頁只有這個文字框，我們可以這樣寫：

myInsertionPoint = app.documents[0].pages[0].textFrames[0].insertionPoints[14];

假設這個圖片放在電腦的c:\crab.jpg
要在這個插入點置入上面這個圖片，可以這樣寫：

myInsertionPoint.place('c:\crab.jpg');

這樣，結果就會如上面的第二圖所示

但如果，要給插入的這張圖取一個名字，以便之後的操作，可以這樣寫

myImages = myInsertionPoint.place('c:\crab.jpg');

但，麻煩來了，myImages 並不是這張圖，因為 place() 函式傳回的是一個陣列(array)，這個陣列了包含了一堆place()函式所設定的物件，(這有點無聊，因為明明只設定了一個物件，但沒辦法，它就是要傳回陣列)，因為我們只設定了一個物件，這個物件就是這傳回陣列的第一個元素，所以要找到這張圖，可以這樣寫：

myImage = myImages[0];

這樣 myImage 就是我們放的這張圖了。(所以，請注意，我一開始用的名字是 myImages，後面有加s，表示傳回的是一堆，之後的這個名字才沒有s)

或者也可以直接這樣寫

myImage = myInsertionPoints.place('c:\crab.jpg')[0];

這樣 myImage就直接代表了這張圖了

但我前面提到，圖片一定包含在一個「矩形框」裡面，這個矩形框就是這個圖片的parent屬形，所以要給這個矩形框取一個名字叫做myRectangle的話，可以這樣做：

myRectangle = myImage.parent

另一個跳過myImage，直接給myRectangle取名字的方法是

myRectangle = myInsertionPoint.place('c:\crab.jpg')[0].parent;

很high吧，javascript的便利性很大


(b)另外提一下：
如果不是要插入圖片，而是要在 myInsertionPoint新建一個錨定的文字框，可以這樣寫：

myTextFrame = myInsertionPoint.textFrames.add();


(c)它的爸爸：
我們前面提到，「錨定物件」一定有一個爸爸，這個爸爸是一個字元，前例中插入圖片後，錨定物件應該是指那個「矩形框」，這個矩形框的爸爸就是這個字元，我們可以這樣指到他的爸爸

myCharacter = myRectangle.parent





(3)JavaScript 設定「錨定物件」的性質(相對位置)
  「錨定物件」的相對位置的設定是在該錨定物件的anchoredObjectSetting屬性裡面

  如前例，如果要設定插入之後的錨定物件跟它的爸爸之間的相對位置，那就要設定 myRectangle.anchoredObjectSetting

anchoredObjectSetting 下面的子屬性如下：



(a) anchoredPosition：就是「錨定物件選項」視窗中的「位置」選項，它有下列3種可能值

AnchorPosition.INLINE_POSITION ：對應到選項視窗中的「行中」
AnchorPosition.ABOVE_LINE：對應到選項視窗中的「行上方」
AnchorPosition.ANCHORED ：對應到選項視窗中的「自訂」



(b) anchorPoint：錨定物件的「參考點」，這個只在「位置」選「自訂」時才有意義，也就是  anchoredPosition = AnchorPosition.ANCHORED
它是「自訂」視窗中的「錨定物件」「參考點」的位置設定
它有下列9個可能值，分別對應到一個方形圖裡的9個參考點(邊邊8個，中間1個)
AnchorPoint.TOP_LEFT_ANCHOR
AnchorPoint.TOP_CENTER_ANCHOR
AnchorPoint.TOP_RIGHT_ANCHOR
AnchorPoint.LEFT_CENTER_ANCHOR
AnchorPoint.CENTER_ANCHOR
AnchorPoint.RIGHT_CENTER_ANCHOR
AnchorPoint.BOTTOM_LEFT_ANCHOR
AnchorPoint.BOTTOM_CENTER_ANCHOR
AnchorPoint.BOTTOM_RIGHT_ANCHOR


(c)horizontalReferencePoint：這個也是只在「位置」選「自訂」時才有意義，在「自訂」視窗中的「X相對於：」，有5個可能值
AnchoredRelativeTo.COLUMN_EDGE：欄邊緣
AnchoredRelativeTo.TEXT_FRAME：文字框
AnchoredRelativeTo.PAGE_MARGINS：頁面邊緣
AnchoredRelativeTo.PAGE_EDGE：頁面邊界
AnchoredRelativeTo.ANCHOR_LOCATION：錨點標記


(c)verticalReferencePoint：這個也是只在「位置」選「自訂」時才有意義，在「自訂」視窗中的「Y相對於：」，有9個可能值
VerticallyRelativeTo.COLUMN_EDGE
VerticallyRelativeTo.TEXT_FRAME
VerticallyRelativeTo.PAGE_MARGINS
VerticallyRelativeTo.PAGE_EDGE
VerticallyRelativeTo.LINE_BASELINE
VerticallyRelativeTo.LINE_XHEIGHT
VerticallyRelativeTo.LINE_ASCENT
VerticallyRelativeTo.CAPHEIGHT
VerticallyRelativeTo.TOP_OF_LEADING

(d)anchorXoffset：X偏移量，它是一個數值

(e)anchorYoffset：Y偏移量，它也是一個數值


(f)pinPosition：這個也是只在「位置」選「自訂」時才有意義，在「自訂」視窗中的「保持在項端/底部的邊界內」
 這的個logical值，只有「true」跟「false」兩種可能值</description>
        <link>http://mepopedia.com/forum/read.php?37,5316,5316#msg-5316</link>
        <lastBuildDate>Tue, 26 May 2026 17:02:05 +0800</lastBuildDate>
        <generator>Phorum 5.2.7</generator>
        <item>
            <guid>http://mepopedia.com/forum/read.php?37,5316,7252#msg-7252</guid>
            <title>Re: InDesign的JavaScript程式設計-- 錨定物件</title>
            <link>http://mepopedia.com/forum/read.php?37,5316,7252#msg-7252</link>
            <description><![CDATA[Jony 兄  真抱歉<br />
沒有注意到你的回文<br />
<br />
結果已經是好幾月前的事了<br />
<br />
當初寫這幾篇文章  <br />
是因為 寫程式的過程中  好不容易弄懂的東西 <br />
一段時間沒碰 很容易就 整個忘光光<br />
<br />
而且 indesign 的  javascript 設計 甚至 vbscript applescript<br />
一直是個 資源非常稀少的領域 不管是 台灣 還是 國外<br />
連 adobe 自已出的手冊 功能都很粗略<br />
<br />
稍微深入一點的功能 大概都要自已摸索<br />
<br />
所以 那時就把自已好不容易弄清楚的觀念 趁著 它還熱熱的時候 趕快把它記下來<br />
免得下次要再用的時候  又要從新開始<br />
<br />
難得看到同好  觀迎來交流~~~~]]></description>
            <dc:creator>RandomVariable</dc:creator>
            <category>程式設計</category>
            <pubDate>Thu, 05 Aug 2010 21:53:41 +0800</pubDate>
        </item>
        <item>
            <guid>http://mepopedia.com/forum/read.php?37,5316,6034#msg-6034</guid>
            <title>「他的爸爸」實在太妙了 - Re: InDesign的JavaScript程式設計-- 錨定物件</title>
            <link>http://mepopedia.com/forum/read.php?37,5316,6034#msg-6034</link>
            <description><![CDATA[看到 Jony 兄的回應才發現「他的爸爸」實在用得很妙......<br />
<br />
其實如果在和 InDesign 搏鬥的半夜裡看到，應該會突然笑出來......]]></description>
            <dc:creator>HP</dc:creator>
            <category>程式設計</category>
            <pubDate>Fri, 30 Apr 2010 23:30:01 +0800</pubDate>
        </item>
        <item>
            <guid>http://mepopedia.com/forum/read.php?37,5316,6033#msg-6033</guid>
            <title>Re: InDesign的JavaScript程式設計-- 錨定物件</title>
            <link>http://mepopedia.com/forum/read.php?37,5316,6033#msg-6033</link>
            <description><![CDATA[才從QuarkXpress.AppleScript的世界出走，初學JavaScript.Indesign，有RandomVariabe兄的分享，比自己看原文省力多了！<br />
<br />
感恩.....為了在受氣時不侵犯女性..時常把他爸爸掛嘴上...用在解釋parent真是太洽如其分了...^^]]></description>
            <dc:creator>Jony</dc:creator>
            <category>程式設計</category>
            <pubDate>Fri, 30 Apr 2010 23:09:41 +0800</pubDate>
        </item>
        <item>
            <guid>http://mepopedia.com/forum/read.php?37,5316,5316#msg-5316</guid>
            <title>InDesign的JavaScript程式設計-- 錨定物件</title>
            <link>http://mepopedia.com/forum/read.php?37,5316,5316#msg-5316</link>
            <description><![CDATA[一般的物件，如文字框，矩形框，圖片，是放在頁面上，<br />
錨定物件則是將這些物件放在文章裡面，或者說把這些物件放在包含這些文章的物件(如文字框)裡面<br />
<br />
(一)手動設定的方法：<br />
<br />
(1)直接插入：<br />
假設在Indesign裡面，有一個文字框，且包含文字如下：<br />
[img]http://algebra.byethost11.com/InDesign%20Image%20for%20Mepo/sshot-1.png[/img]<br />
如果我們想要在圖中的文字「圖片」和「進來」之間插入一個圖片<br />
可以先利用游標將插入點放在「圖片」進來」之間<br />
然後再執行正常程序的「置入」圖片<br />
就可以得到下面的結果<br />
[img]http://algebra.byethost11.com/InDesign%20Image%20for%20Mepo/sshot-2.png[/img]<br />
現在，這個圖片就是一個錨定物件<br />
<br />
<br />
<br />
<br />
(2)剪下、貼上<br />
也可以先以正常程序在「頁面」上置入圖片<br />
然後將這個圖片剪下，再將插入點放在「圖片」和「進來」之間<br />
再執行「貼上」，結果也會和上面一樣<br />
<br />
<br />
<br />
(3)錨定物件的意義：<br />
<br />
(a)先提一個題外話，上面說「這個圖片就是一個錨定物件」，這句話有點不對<br />
問題不在「錨定物件」，而是在「圖片」<br />
因為當我們在Indesign中置入一個「圖片」的時候，Indesign「一定」會順便送你一個「矩形框」(rectangle)，把它包起來<br />
「圖片」一定在某一個「矩形框」裡面(上面的結果，看不到這個矩形框，但是它真的存在)，<br />
所以其實上面的情形，應該說那個「矩形框」才是「錨定物件」<br />
(關於圖片的這個性質，下次再另為文說明)<br />
<br />
(b) 錨定物件是在一個「字元」(character)裡面：<br />
我們知道，當「文字框」的大小被改變的時候，文字框的內容也會跟著適應，現在，我們試著隨便改變一下上面那個文字框的大小，結果如下：<br />
[img]http://algebra.byethost11.com/InDesign%20Image%20for%20Mepo/sshot-3.png[/img]<br />
結果這個「錨定物件」就跟著其它文字一樣，一起去適應這個新的文字框大小<br />
就好像它是在文字「圖片」和「進來」之間的另一個「文字」<br />
事實上，Indesign確實把「圖片」和「進來」之間看成有一個文字，但這個文字並不是那個「錨定物件」，<br />
比較明確的定位是：「錨定物件」是那個文字所包含的一個物件<br />
其實如果只是單純設計，不是寫程式的話，把那個「錨定物件」看成就像一個「文字」也還好，<br />
只是如果要寫程試去操控InDesign話，它們之間的定位應該是：<br />
Indesign把「圖片」和「進來」之間看成有「一個字元(character)」這個字元裡面又包含了一個物件，就是那個矩形框<br />
我們可以把包含這個框形框的字元，叫這個框形框的「爸爸」(在Indesign的物件模型裡面，這個字元就是這個矩形框的 parent 屬性，父母?家長?爸爸?)<br />
他的爸爸是一個「字元」(character)，但沒有「字元」的內容，卻包含了一個「矩形框」<br />
<br />
<br />
<br />
<br />
(4)設定錨定物件的性質：<br />
<br />
 (a) 錨定物件會跟著文章一起改變位置，這是「錨定物件」最大的特性，常常也是我們想要作出一個錨定物件的原因。它之所以會動，詳細的說，是因為它的爸爸是文章中的一個字元，文章中的字元當然會跟著文章一起動，它的爸爸會動，它是在它的爸爸裡面的一個物件，所以它當然也就跟著一起動。<br />
但是，重點來了，它雖然一定會跟著它的爸爸一起動，但它在它的爸爸裡面的位置是可以改變的，也就是我們可以設定它在它爸爸裡面的「相對位置」，比如說，你可以設定它一定要在它的爸爸的下面10公分的地方，如果它的爸爸往左移了20公分，它也會跟著往左移20公分，所以它就還是保持著它在它的爸爸下面的10公分<br />
<br />
(b)那要怎麼設定「錨定物件」跟它爸爸之間的「相對距離」呢?就這樣：<br />
   (b-1)先選取這個錨定物件<br />
   (b-2)再選功能表裡的「物件」-->「錨定物件」-->「選項」<br />
   (b-3)會出現一個「錨定物件選項」的對話視窗，這視窗裡面的一堆設定，就是在設定「錨定物件」跟「它的爸爸」之間的相對距離<br />
   (b-4)至於每一個設定是什麼意思?有空再聊了<br />
<br />
<br />
(二) JavaScript 設定「錨定物件」的方法：<br />
  <br />
(a) 以上面的情形為例子，如果我們想要在「圖片」和「進來」之間置入一個圖片, 那就是在「圖片」和「進來」之間的「插入點」插入一個圖片，我們先把這個插入點叫做 myInsertionPoint<br />
如果上面的例子裡，Indesign只有一個文件，這個文件只有一頁，而且這頁只有這個文字框，我們可以這樣寫：<br />
<br />
myInsertionPoint = app.documents[0].pages[0].textFrames[0].insertionPoints[14];<br />
<br />
假設這個圖片放在電腦的c:\crab.jpg<br />
要在這個插入點置入上面這個圖片，可以這樣寫：<br />
<br />
myInsertionPoint.place('c:\crab.jpg');<br />
<br />
這樣，結果就會如上面的第二圖所示<br />
<br />
但如果，要給插入的這張圖取一個名字，以便之後的操作，可以這樣寫<br />
<br />
myImages = myInsertionPoint.place('c:\crab.jpg');<br />
<br />
但，麻煩來了，myImages 並不是這張圖，因為 place() 函式傳回的是一個陣列(array)，這個陣列了包含了一堆place()函式所設定的物件，(這有點無聊，因為明明只設定了一個物件，但沒辦法，它就是要傳回陣列)，因為我們只設定了一個物件，這個物件就是這傳回陣列的第一個元素，所以要找到這張圖，可以這樣寫：<br />
<br />
myImage = myImages[0];<br />
<br />
這樣 myImage 就是我們放的這張圖了。(所以，請注意，我一開始用的名字是 myImages，後面有加s，表示傳回的是一堆，之後的這個名字才沒有s)<br />
<br />
或者也可以直接這樣寫<br />
<br />
myImage = myInsertionPoints.place('c:\crab.jpg')[0];<br />
<br />
這樣 myImage就直接代表了這張圖了<br />
<br />
但我前面提到，圖片一定包含在一個「矩形框」裡面，這個矩形框就是這個圖片的parent屬形，所以要給這個矩形框取一個名字叫做myRectangle的話，可以這樣做：<br />
<br />
myRectangle = myImage.parent<br />
<br />
另一個跳過myImage，直接給myRectangle取名字的方法是<br />
<br />
myRectangle = myInsertionPoint.place('c:\crab.jpg')[0].parent;<br />
<br />
很high吧，javascript的便利性很大<br />
<br />
<br />
(b)另外提一下：<br />
如果不是要插入圖片，而是要在 myInsertionPoint新建一個錨定的文字框，可以這樣寫：<br />
<br />
myTextFrame = myInsertionPoint.textFrames.add();<br />
<br />
<br />
(c)它的爸爸：<br />
我們前面提到，「錨定物件」一定有一個爸爸，這個爸爸是一個字元，前例中插入圖片後，錨定物件應該是指那個「矩形框」，這個矩形框的爸爸就是這個字元，我們可以這樣指到他的爸爸<br />
<br />
myCharacter = myRectangle.parent<br />
<br />
<br />
<br />
<br />
<br />
(3)JavaScript 設定「錨定物件」的性質(相對位置)<br />
  「錨定物件」的相對位置的設定是在該錨定物件的anchoredObjectSetting屬性裡面<br />
<br />
  如前例，如果要設定插入之後的錨定物件跟它的爸爸之間的相對位置，那就要設定 myRectangle.anchoredObjectSetting<br />
<br />
anchoredObjectSetting 下面的子屬性如下：<br />
<br />
<br />
<br />
(a) anchoredPosition：就是「錨定物件選項」視窗中的「位置」選項，它有下列3種可能值<br />
<br />
AnchorPosition.INLINE_POSITION ：對應到選項視窗中的「行中」<br />
AnchorPosition.ABOVE_LINE：對應到選項視窗中的「行上方」<br />
AnchorPosition.ANCHORED ：對應到選項視窗中的「自訂」<br />
<br />
<br />
<br />
(b) anchorPoint：錨定物件的「參考點」，這個只在「位置」選「自訂」時才有意義，也就是  anchoredPosition = AnchorPosition.ANCHORED<br />
它是「自訂」視窗中的「錨定物件」「參考點」的位置設定<br />
它有下列9個可能值，分別對應到一個方形圖裡的9個參考點(邊邊8個，中間1個)<br />
AnchorPoint.TOP_LEFT_ANCHOR<br />
AnchorPoint.TOP_CENTER_ANCHOR<br />
AnchorPoint.TOP_RIGHT_ANCHOR<br />
AnchorPoint.LEFT_CENTER_ANCHOR<br />
AnchorPoint.CENTER_ANCHOR<br />
AnchorPoint.RIGHT_CENTER_ANCHOR<br />
AnchorPoint.BOTTOM_LEFT_ANCHOR<br />
AnchorPoint.BOTTOM_CENTER_ANCHOR<br />
AnchorPoint.BOTTOM_RIGHT_ANCHOR<br />
<br />
<br />
(c)horizontalReferencePoint：這個也是只在「位置」選「自訂」時才有意義，在「自訂」視窗中的「X相對於：」，有5個可能值<br />
AnchoredRelativeTo.COLUMN_EDGE：欄邊緣<br />
AnchoredRelativeTo.TEXT_FRAME：文字框<br />
AnchoredRelativeTo.PAGE_MARGINS：頁面邊緣<br />
AnchoredRelativeTo.PAGE_EDGE：頁面邊界<br />
AnchoredRelativeTo.ANCHOR_LOCATION：錨點標記<br />
<br />
<br />
(c)verticalReferencePoint：這個也是只在「位置」選「自訂」時才有意義，在「自訂」視窗中的「Y相對於：」，有9個可能值<br />
VerticallyRelativeTo.COLUMN_EDGE<br />
VerticallyRelativeTo.TEXT_FRAME<br />
VerticallyRelativeTo.PAGE_MARGINS<br />
VerticallyRelativeTo.PAGE_EDGE<br />
VerticallyRelativeTo.LINE_BASELINE<br />
VerticallyRelativeTo.LINE_XHEIGHT<br />
VerticallyRelativeTo.LINE_ASCENT<br />
VerticallyRelativeTo.CAPHEIGHT<br />
VerticallyRelativeTo.TOP_OF_LEADING<br />
<br />
(d)anchorXoffset：X偏移量，它是一個數值<br />
<br />
(e)anchorYoffset：Y偏移量，它也是一個數值<br />
<br />
<br />
(f)pinPosition：這個也是只在「位置」選「自訂」時才有意義，在「自訂」視窗中的「保持在項端/底部的邊界內」<br />
 這的個logical值，只有「true」跟「false」兩種可能值]]></description>
            <dc:creator>RandomVariable</dc:creator>
            <category>程式設計</category>
            <pubDate>Fri, 12 Mar 2010 22:54:11 +0800</pubDate>
        </item>
    </channel>
</rss>
