La secuencia de comandos Guardar en IDML no funciona en CC2017

Soy relativamente nuevo en el uso de scripts y el kit de herramientas ExtendScript, y trabajo en un entorno de oficina en el que uso Adobe CC2017 y mis compañeros de trabajo usan CS5.

Para que mis archivos de InDesign puedan ser utilizados por todos en mi departamento, entiendo que necesito guardar mis archivos como archivos IDML. Idealmente, me encantaría un script u opción que siempre me permitiera guardar archivos como .idml (por defecto) o como .indd e .idml.

El script que estaba usando fue el que se proporciona en la respuesta a continuación. (Tenga en cuenta que esta no era una solución ideal, ya que solo se activó cuando elegí "Guardar como" y no "Guardar". Una solución ideal sería una opción para guardar como .idml de forma predeterminada).

Script para guardar siempre IDML con 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);
});

Sin embargo, después de mi actualización CC2017, aparece el siguiente mensaje de error cuando intento ejecutar el script:

¡No se puede ejecutar el script en la 'sesión' del motor de destino! (#57) ¡La 'sesión' del motor no existe!

¿Alguien más ha experimentado este mismo problema y, de ser así, tiene algún consejo sobre cómo restaurar el script (o sugerir una mejor solución para guardar en .idml de forma predeterminada)?

Respuestas (2)

No hay motivo para utilizar un script en las ediciones más recientes de InDesign, ya que la función IDML se encuentra en Exportar. Simplemente vaya a File -> Exportelegir Formato: InDesign Markup (IDML). Si le preocupan los pasos continuos, aprenda a usar atajos, que es cmd+ E, luego elija Formato: InDesign Markup (IDML).

Si realmente desea usar el script, necesitará consultar la documentación para descubrir dónde está la diferencia, ya que Adobe es conocido por cambiar el nombre y las funciones de los objetos. Algunas buenas fuentes son:

Para aclarar, es posible que Adobe haya modificado sus objetos, como suelen hacer cuando lanzan una nueva versión y, mientras esto está integrado, podría trabajar en su secuencia de comandos y crear un validador para verificar si guardó como IDML. Si le preocupa si la exportación se realizó correctamente, luego de la exportación, vuelva a abrir la revisión del archivo o guárdelo como INDD para probar.


EDITAR:

También tenga en cuenta que para guardar un documento como IDML también puede usar la save asfunción ubicada desde File -> Save Aso presionando Ctrl+Alt+Shift+S(Windows) o Command+Option+Shift+S(Mac OS)

Adobe es conocido por cambiar el nombre y las funciones de los objetos. Totalmente de acuerdo con eso .

Recientemente encontré una solución para mi problema. Ashraf Ali tiene una publicación de blog que aborda mi problema aquí: 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);
  });
});

Ahora estoy de vuelta en mi flujo de trabajo deseado de guardar automáticamente en IDML cuando guardo (o cierro) un archivo INDD.