Quantcast
Channel: MEPO Forum - 程式設計
Viewing all articles
Browse latest Browse all 99

InDesign的JavaScript程式設計-- 錨定物件 (3 replies)

$
0
0
一般的物件,如文字框,矩形框,圖片,是放在頁面上,
錨定物件則是將這些物件放在文章裡面,或者說把這些物件放在包含這些文章的物件(如文字框)裡面

(一)手動設定的方法:

(1)直接插入:
假設在Indesign裡面,有一個文字框,且包含文字如下:
http://algebra.byethost11.com/InDesign%20Image%20for%20Mepo/sshot-1.png
如果我們想要在圖中的文字「圖片」和「進來」之間插入一個圖片
可以先利用游標將插入點放在「圖片」進來」之間
然後再執行正常程序的「置入」圖片
就可以得到下面的結果
http://algebra.byethost11.com/InDesign%20Image%20for%20Mepo/sshot-2.png
現在,這個圖片就是一個錨定物件




(2)剪下、貼上
也可以先以正常程序在「頁面」上置入圖片
然後將這個圖片剪下,再將插入點放在「圖片」和「進來」之間
再執行「貼上」,結果也會和上面一樣



(3)錨定物件的意義:

(a)先提一個題外話,上面說「這個圖片就是一個錨定物件」,這句話有點不對
問題不在「錨定物件」,而是在「圖片」
因為當我們在Indesign中置入一個「圖片」的時候,Indesign「一定」會順便送你一個「矩形框」(rectangle),把它包起來
「圖片」一定在某一個「矩形框」裡面(上面的結果,看不到這個矩形框,但是它真的存在),
所以其實上面的情形,應該說那個「矩形框」才是「錨定物件」
(關於圖片的這個性質,下次再另為文說明)

(b) 錨定物件是在一個「字元」(character)裡面:
我們知道,當「文字框」的大小被改變的時候,文字框的內容也會跟著適應,現在,我們試著隨便改變一下上面那個文字框的大小,結果如下:
http://algebra.byethost11.com/InDesign%20Image%20for%20Mepo/sshot-3.png
結果這個「錨定物件」就跟著其它文字一樣,一起去適應這個新的文字框大小
就好像它是在文字「圖片」和「進來」之間的另一個「文字」
事實上,Indesign確實把「圖片」和「進來」之間看成有一個文字,但這個文字並不是那個「錨定物件」,
比較明確的定位是:「錨定物件」是那個文字所包含的一個物件
其實如果只是單純設計,不是寫程式的話,把那個「錨定物件」看成就像一個「文字」也還好,
只是如果要寫程試去操控InDesign話,它們之間的定位應該是:
Indesign把「圖片」和「進來」之間看成有「一個字元(character)」這個字元裡面又包含了一個物件,就是那個矩形框
我們可以把包含這個框形框的字元,叫這個框形框的「爸爸」(在Indesign的物件模型裡面,這個字元就是這個矩形框的 parent 屬性,父母?家長?爸爸?)
他的爸爸是一個「字元」(character),但沒有「字元」的內容,卻包含了一個「矩形框」




(4)設定錨定物件的性質:

(a) 錨定物件會跟著文章一起改變位置,這是「錨定物件」最大的特性,常常也是我們想要作出一個錨定物件的原因。它之所以會動,詳細的說,是因為它的爸爸是文章中的一個字元,文章中的字元當然會跟著文章一起動,它的爸爸會動,它是在它的爸爸裡面的一個物件,所以它當然也就跟著一起動。
但是,重點來了,它雖然一定會跟著它的爸爸一起動,但它在它的爸爸裡面的位置是可以改變的,也就是我們可以設定它在它爸爸裡面的「相對位置」,比如說,你可以設定它一定要在它的爸爸的下面10公分的地方,如果它的爸爸往左移了20公分,它也會跟著往左移20公分,所以它就還是保持著它在它的爸爸下面的10公分

(b)那要怎麼設定「錨定物件」跟它爸爸之間的「相對距離」呢?就這樣:
(b-1)先選取這個錨定物件
(b-2)再選功能表裡的「物件」-->「錨定物件」-->「選項」
(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」兩種可能值

Viewing all articles
Browse latest Browse all 99

Trending Articles