Существует ли сценарий для InDesign, который одновременно сохраняет файл INDD и копию IDML?
Я работаю с десятками независимых дизайнеров над совместными проектами, и те из нас, у кого есть Creative Cloud, должны помнить о сохранении копии IDML для тех, кто использует более ранние версии. И мы часто забываем.
Я надеюсь найти или настроить сценарий, который, например, добавит пункт меню, скажем, «Сохранить с помощью IDML», и сохранит вместе с ним как текущий документ, так и копию IDML.
Этот пример должен помочь вам начать. Вам необходимо запустить скрипт один раз за сеанс InDesign. Вы можете добавить его, например, в качестве сценария запуска. Он будет сохраняться каждый раз, когда пользователь сохраняет документ в файле idml.
#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);
});
Если вы хотите использовать это как команду меню, вы можете посмотреть этот пост в блоге о indisscripts .
Спасибо, @fabiantheblind, это прекрасно работает. Я адаптировал это, чтобы заставить его работать как сценарий запуска (он ожидает открытия документа).
// Set a targetengine to make this work
#targetengine "session"
function saveIDML() {
// Exit if no documents are open.
if(app.layoutWindows.length == 0) {
return;
} else {
// Get the current document
var doc = app.activeDocument;
$.writeln('Saving IDML of ' + doc + ' ...');
// Catch errors
if (!doc.saved) {
alert('Sorry, there was a problem and the document was not saved.');
exit();
}
// Create a new .idml file name from the .indd file name
var inddName = doc.name;
var idmlName = inddName.replace("indd", "idml");
// Create the new .idml file next to the .indd file
var theFile = File(File(doc.filePath).fsName + "/" + idmlName);
doc.exportFile(ExportFormat.INDESIGN_MARKUP, theFile, false);
}
}
// Listen for the save event
app.addEventListener('afterSave', saveIDML, false);
Я нашел сценарий @Arthur очень полезным. Однако я хотел использовать его не только afterSave
, но также afterSaveAs
(что было легко расширить: просто добавить еще одну команду прослушивателя событий) и afterSaveACopy
(чего я не мог сделать сам; я обратился за помощью на community.adobe.com ).
Теперь у меня есть рабочий скрипт, который работает для всех трех вариантов использования, см. ниже.
// src: https://community.adobe.com/t5/indesign/get-the-name-of-the-document-created-by-save-a-copy/m-p/10997427#M179868 (based on https://graphicdesign.stackexchange.com/a/71770, which is based on https://graphicdesign.stackexchange.com/a/71736)
// author: Fabian Morón Zirfas (fabianmoronzirfas@graphicdesign.stackexchange.com), modified by Arthur (Arthur@graphicdesign.stackexchange.com), modified by Sunil_Yadav1 (Sunil_Yadav1@community.adobe.com)
// date: 24 March 2020
// Set a targetengine to make this work
#targetengine "session"
function saveIdml() {
if(app.layoutWindows.length == 0) {
return;
} else if (! app.activeDocument.saved) {
alert('Sorry, there was a problem and the document was not saved.');
return;
}
var idmlPath = app.activeDocument.filePath.fsName.replace(/\\/g,'/') + '/' + app.activeDocument.name.replace(/\.indd|\.indt/g, '.idml');
app.activeDocument.exportFile(ExportFormat.INDESIGN_MARKUP, idmlPath, false);
}
function saveACopyIdml(e) {
var idmlPath = File(e.properties.fullName).fsName.toString().replace(/\\/g,'/').replace(/\.indd|\.indt/g, '.idml');
app.activeDocument.exportFile(ExportFormat.INDESIGN_MARKUP, idmlPath, false);
}
// Listen for the save event
app.addEventListener('afterSave', saveIdml, false);
app.addEventListener('afterSaveAs', saveIdml, false);
app.addEventListener('afterSaveACopy', saveACopyIdml, false);
мужественный