Я относительно новичок в использовании сценариев и набора инструментов 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 по умолчанию)?
Нет причин использовать сценарий в более новых версиях 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)
Недавно нашел решение своей проблемы. У Ашрафа Али есть сообщение в блоге, посвященное моей проблеме: 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.
М. Халид Джунаид