Сценарий сохранения в IDML не работает в CC2017

Я относительно новичок в использовании сценариев и набора инструментов ExtendScript, и я работаю в офисе, где я использую Adobe CC2017, а коллеги используют CS5.

Чтобы мои файлы InDesign могли использоваться всеми в моем отделе, насколько я понимаю, мне нужно сохранить мои файлы как файлы IDML. В идеале мне бы хотелось сценарий или вариант, который всегда позволял бы мне сохранять файлы как .idml (по умолчанию) или как .indd, так и .idml.

Сценарий, который я использовал, был приведен в ответе ниже. (Обратите внимание, что это не идеальное решение, поскольку оно срабатывает только тогда, когда я выбираю «Сохранить как», а не «Сохранить». Идеальным решением была бы опция сохранения по умолчанию как .idml.)

Скрипт, чтобы всегда сохранять IDML с INDD

#targetengine "session"
// we need a targetegine to make this work
var doc = app.activeDocument; // get the current doc

// now to the event listener
app.addEventListener('afterSave', function(theEvent) {
  $.writeln('saving'); // just to see whats going on
  if (!doc.saved) {
    // catch those possible mistakes
    alert('doc was never saved');
    exit();
  }
  var aName = doc.name; // get the name
  var newName = aName.replace("indd", "idml"); // replace the indd to idml
  // crate a new File Object next to the indd
  var theFile = File(File(doc.filePath).fsName + "/" + newName);
  // export
  doc.exportFile(ExportFormat.INDESIGN_MARKUP, theFile, false);
});

Однако после моего обновления CC2017 я получаю следующее сообщение об ошибке при попытке запустить скрипт:

Невозможно выполнить сценарий в «сеансе» целевого движка! (#57) "Сеанс" движка не существует!

Кто-нибудь еще сталкивался с такой же проблемой, и если да, то есть ли у вас какие-либо советы, как восстановить сценарий (или предложить лучшее решение для сохранения в .idml по умолчанию)?

Ответы (2)

Нет причин использовать сценарий в более новых версиях InDesign, поскольку функция IDML находится в разделе «Экспорт». Просто File -> Exportвыберите Формат: Разметка InDesign (IDML). Если вы беспокоитесь о непрерывных шагах, научитесь использовать ярлыки cmd+ , Eзатем выберите «Формат: разметка InDesign (IDML)».

Если вы действительно хотите использовать сценарий, вам нужно будет обратиться к документации, чтобы выяснить, в чем разница, поскольку Adobe известна тем, что меняет имена и функции объектов. Некоторые хорошие источники:

Чтобы уточнить, Adobe, возможно, изменила свои объекты, как они обычно делают при отправке новой версии, и пока это встроено, вы можете поработать над своим сценарием и создать валидатор, чтобы проверить, действительно ли вы сохранили как IDML. Если вы беспокоитесь о том, был ли экспорт выполнен правильно, после экспорта повторно откройте просмотр файла или сохраните его как INDD для проверки.


РЕДАКТИРОВАТЬ:

Также обратите внимание, что для сохранения документа в формате IDML вы также можете использовать save asфункцию, расположенную из File -> Save Asили нажав Ctrl+Alt+Shift+S(Windows) или Command+Option+Shift+S(Mac OS)

Adobe известна тем, что меняет названия и функции объектов Полностью с этим согласен

Недавно нашел решение своей проблемы. У Ашрафа Али есть сообщение в блоге, посвященное моей проблеме: https://ashrafali.net/thoughts/saving-idml-files-automatically-on-close-of-indesign-document

// This InDesign Startup Script saves an IDML copy of the doc alongside the INDD
// Save it in your Startup Scripts folder. (See https://forums.adobe.com/thread/588551)
// Thanks to fabiantheblind http://graphicdesign.stackexchange.com/a/71736/67488 for the original script
// Modified by Ashraf (ashrafali.net) for comment & code clarity as well as functionality on close

#targetengine "session"
// Activate a Target Engine to make this work. See https://stackoverflow.com/questions/14061690/what-is-targetengine

app.addEventListener('afterOpen', function(myEvent) {
  // Only run once a document is opened. See https://forums.adobe.com/message/5410190
  if(app.layoutWindows.length == 0) return; // This is here to avoid a run on first start when there are no windows 

  var doc = app.activeDocument; // Get the current doc

  // Switch to the event listener
  // If you want it to work on every save, change variable to afterSave
  app.addEventListener('afterClose', function(theEvent) {
    $.writeln('saving'); // just to see whats going on
    if (!doc.saved) {
      // catch those possible mistakes
      alert('Doc was never saved');
      exit();
    }
    var aName = doc.name; // get the name
    var newName = aName.replace("indd", "idml"); // replace the INDD to IDML
    // Create a new File Object next to the INDD
    var theFile = File(File(doc.filePath).fsName + "/" + newName);
    // export
    doc.exportFile(ExportFormat.INDESIGN_MARKUP, theFile, false);
  });
});

Теперь я вернулся к желаемому рабочему процессу автоматического сохранения в IDML при сохранении (или закрытии) файла INDD.