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 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) блок, строка изменения размера выдает ошибку "Изображение заблокировано" (потому что не удается разблокировать его). Без попытки / улова, но сохраняя if(image.locked) блок выдает ошибку "Свойство не применимо в текущем состоянии". при попытке доступа image.locked,

Итак, в каком "состоянии" находится мое изображение, и почему оно не "применимо", даже если приложение явно использует его, чтобы предотвратить изменение его размера? Как изменить размер моего изображения, учитывая, что это автоматизированный процесс, и в процессе работы у меня не будет доступа к InDesign, чтобы предварительно отредактировать его вручную?

1 ответ

Решение

Как указано в документации Adobe, контейнер изображения - родительский фрейм вокруг изображения, который является универсальным SplineItem - можно заблокировать и разблокировать, изменив логическое свойство чтения / записи. locked,

В InDesign CS4 и более ранних версиях Graphic У класса не было этого свойства, но, начиная с InDesign CS5, свойство locked также появляется там и во всех его производных классах. Согласно документации Adobe это свойство чтения / записи. Тем не менее, это, кажется, неправильно. Экспериментируя с CS6, я нашел locked Свойство графики внутри родительского фрейма отражает только состояние родителя и фактически доступно только для чтения.

В пользовательском интерфейсе InDesign в CS4 и более ранних версиях пункт меню "Блокировка" отключен, если выбран рисунок внутри рамки. В пользовательском интерфейсе от CS5 и позже заблокированный элемент не может быть выбран, поэтому пункт меню не может быть вызван.

Самый простой обходной путь, учитывая дескриптор графического изображения, состоит в проверке и / или изменении состояния через его родителя:

image = app.activeDocument.allGraphics[0]; // a handle to the first graphic
image.parent.locked = false; // unlock it
Другие вопросы по тегам