Javascript InDesign服务器-Can';t调整图像大小-图像已锁定,可以';不要打开它

Javascript InDesign服务器-Can';t调整图像大小-图像已锁定,可以';不要打开它,javascript,adobe-indesign,indesign-server,Javascript,Adobe Indesign,Indesign Server,我正在编写一些JS代码来重新链接图像,然后调整其大小以适合包含的对象。代码的简化版本: 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 longe

我正在编写一些JS代码来重新链接图像,然后调整其大小以适合包含的对象。代码的简化版本:

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;
}
当try/catch块位于
if(image.locked)
块周围时,调整大小行抛出错误“image is locked”(因为它无法解锁它)。如果没有try/catch,但保持
if(image.locked)
块,则在尝试访问
image.locked
时会抛出错误“属性在当前状态下不适用”


那么,我的图像处于什么“状态”,为什么它不“适用”,即使应用程序显然在使用它来阻止我调整它的大小?鉴于这是一个自动化过程,而且在生产过程中,我无法访问InDesign来事先手动编辑图像,如何调整图像大小?

正如Adobe文档中所述,这是一个图像容器--图像周围的父框架,这是一个泛型--可以通过更改读/写布尔属性
locked
来锁定和解锁

在InDesign CS4和更早版本中,
Graphic
类没有此属性,但自InDesign CS5之后,属性
locked
也出现在该类及其所有派生类中。根据Adobe的数据,它是一种读/写属性。但是,这似乎是错误的。在使用CS6进行实验时,我发现父帧中图形的
locked
属性只反映父帧的状态,实际上是只读的

在CS4及更早版本的InDesign用户界面中,当选择框架内的图形时,菜单项“锁定”被禁用。在CS5及更高版本的用户界面中,无法选择锁定项,因此无法调用菜单项

给定图形图像的句柄,最简单的解决方法是通过其父级检查和/或更改状态:

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

图像是什么类型的对象?我相信在未显示的代码中,您正在容器(可以锁定和解锁)和内部实际图像(不能锁定)之间交替。通常会锁定容器页面项,而不是“内部”的图形对象。
image
变量是一个
image
对象。根据IDS文档,
locked
Image
对象上的读/写布尔属性,用于指定图像是否被锁定。我相信我可以使用
图像访问容器项。parent
-也许我可以尝试解锁它,看看会发生什么?让我惊讶。我的主要工作是CS4,所以我刚刚检查了该版本,您无法锁定图形。但是:从下一个版本开始,你可以。我不知道锁定或解锁容器是否也会修改其内容。文件上似乎也不清楚,你猜怎么着?如果我使用
image.parent.locked
而不是
image.locked
它可以正常工作。重新发布你的评论作为回答,我会很高兴地接受它,并给你你的赏金。谢谢:)