2014-09-28 338 views
4

我正在編寫一些JS代碼來重新鏈接圖像,然後調整大小以適合包含的對象。代碼的簡化版本:InDesign Server - 無法調整圖像大小 - 已鎖定,無法解鎖

var image = (get image); 
try { 
    image.itemLink.relink(File(new_filename)); 
} 
catch(e) { 
    (log it); 
} 

var image = (find image again because after the relink it would otherwise cause error "Object no longer exists") 

(work out new width, height, v offset, h offset); 

try { 
    if(image.locked) { 
    lock_later = true; 
    image.locked = false; 
    } 
} 
catch(e) { } 

// Resize and reposition image 
image.geometricBounds = [(rectangle.geometricBounds[0] + h_offset) + "mm", (rectangle.geometricBounds[1] + w_offset) + "mm", (rectangle.geometricBounds[2] - h_offset) + "mm", (rectangle.geometricBounds[3] - w_offset) + "mm"]; 

// Lock the image again if it was locked before 
if(lock_later) { 
    image.locked = true; 
} 

與各地if(image.locked)塊的try/catch塊,調整大小行引發錯誤「圖片被鎖定」(因爲它未能解鎖)。沒有try/catch但保持if(image.locked)塊,它會拋出錯誤「該屬性不適用於當前狀態。」當試圖訪問image.locked

那麼,我的形象是什麼「狀態」,爲什麼它不是「適用的」,即使應用程序明確使用它來阻止我調整它的大小?如何調整圖像大小,因爲這是一個自動化過程,而且在生產中,我無法事先手動對InDesign進行編輯?

+0

什麼類型的對象是'image'?我相信在未顯示的代碼中,您將在容器(可以鎖定和解鎖)和內部實際圖像(不能)之間交替。通常會鎖定* container *頁面項目,而不是其內部的圖形對象。 – usr2564301 2014-10-03 08:38:01

+1

'image'變量是一個'Image'對象。根據IDS文檔,'locked'是'Image'對象的讀/寫布爾屬性,指定圖像是否被鎖定。我相信我可以通過'image.parent'訪問容器物品 - 也許我可以嘗試解鎖,看看會發生什麼? – 2014-10-03 08:50:09

+0

讓我感到驚訝。我的主要工作馬是CS4,所以我只檢查了該版本,並且無法鎖定圖形。但是:從下一個版本開始,你*可以*。我不知道鎖定或解鎖容器是否也會修改其內容。看起來文件也不清楚。 – usr2564301 2014-10-03 08:56:21

回答

4

如Adobe的文檔所述,圖像容器 - 父幀「周圍」上的圖像,這是一個通用SplineItem - 可以被鎖定並通過改變讀解鎖/寫布爾屬性locked

在InDesign CS4及更早版本中,Graphic類沒有此屬性,但自從InDesign CS5開始,屬性locked也出現在此處及其所有派生類中。根據Adobe的documentation這是一個讀/寫屬性。但是,這似乎是錯誤。試用CS6後,我發現locked屬性的一個圖形在其父框架內只有反映了父母的狀態,實際上是只讀

在CS4及更早版本的InDesign用戶界面中,選擇框架內的圖形時,禁用菜單項「鎖定」。在CS5及更高版本的用戶界面中,無法選擇鎖定的項目,因此無法調用該菜單項目。

最簡單的解決方法,給出一個處理一個圖形圖像,是檢查和/或通過其父更改狀態:

image = app.activeDocument.allGraphics[0]; // a handle to the first graphic 
image.parent.locked = false; // unlock it