2015-08-11 5 views
0

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

У меня есть документ InDesign, идентификатор прямоугольника, содержащего какое-либо изображение, и путь к новому изображению, которое должно заменить изображение.

Изображение должно быть заменено, но настройки, подобные FitOptions и т. Д., Должны оставаться неизменными. Кроме того, новый файл должен быть встроен в документ InDesign. Уже есть какой-то код такого рода работ:

function changeImages(doc) { 
    var arrayLength = changeImage.length; 
    for (var i = 0; i < arrayLength; i++) { 
     var fr = doc.textFrames.itemByID(1 * changeImage[i].id); 
     if (!fr) 
      continue; 
     var file = File(imagePath + changeImage[i].file); 
     fr.place(file); 
     fr.fit (FitOptions.CONTENT_TO_FRAME); 
     fr.fit (FitOptions.PROPORTIONALLY); 
     fr.fit (FitOptions.CENTER_CONTENT); 

    } 
} 

Это не кажется правильным. Почему он использует doc.textFrames, когда объект является прямоугольником? Я действительно запутался, что это даже работает.

Также он просто устанавливает некоторые FitOptions, но я хочу сохранить существующее.

Я очень новичок в написании сценариев InDesign, поэтому я потерялся здесь. Я читаю docs и other resources, но я смущен. например, почему существует doc.textFrames.itemByID, но ничего подобного для других фреймов? Нужно ли мне перебирать doc.allPageItems и сравнивать идентификаторы?

ответ

2

itemByID - метод, доступный для всех pageItems, и оба textFrames и rectangles являются подклассом pageItem. Таким образом, у вас есть доступ к этому методу от обоих, и он даст тот же результат. Вы также должны использовать doc.rectangles.itemByID. См: http://www.indesignjs.de/extendscriptAPI/indesign11/#Rectangles.html#d1e201999__d1e202138

Но вы правы, что описание немного сбивает с толку, он говорит:

Возвращает TextFrame с указанным идентификатором.

который, очевидно, нет. Если у вас уже есть идентификаторы, на которые вы хотите настроить таргетинг, вы можете использовать doc.pageItems.itemByID, что, возможно, менее запутанно, так как в основном вы ищете pageItems при использовании itemByID.

Что касается fitting options, они являются свойством вашего объекта прямоугольника, поэтому размещение нового изображения не должно изменять параметры фитинга. Если вы хотите сохранить то же самое, просто удалите вызовы на fit(). См список свойств Rectangle, frameFittingOptions: http://www.indesignjs.de/extendscriptAPI/indesign11/#Rectangle.html

1

Josef,

я имел такую ​​же проблему с InDesign CS4 с сохранением оригинальных FitOptions. Я никогда не мог понять, как получить настройки, которые в настоящее время используются в InDesign CS4.

Чтобы обойти эту проблему, что я сделал, чтобы установить значение в Установочное на пустом кадре в Рамочные слесарных Параметров в документе InDesign.

enter image description here

Затем в коде, я использовал эту настройку, что-то вроде этого:

changeImages (app.activeDocument); 
function changeImages(doc) 
{ 
    with(doc) 
    { 
     var rec = doc.rectangles.itemByID(207); 
     var file = new File("c:\\new_image.png"); 
     rec.place(file); 
     rec.fit(rec.frameFittingOptions.fittingOnEmptyFrame); 
    } 
}