Script para guardar siempre IDML con INDD


8

¿Existe un script existente para InDesign que guardará un archivo INDD y una copia IDML al mismo tiempo?

Trabajo con docenas de diseñadores independientes en proyectos colaborativos, y aquellos de nosotros con Creative Cloud tenemos que recordar guardar una copia IDML para aquellos en versiones anteriores. Y a menudo lo olvidamos.

Espero encontrar o ajustar un script que, por ejemplo, agregue un elemento de menú llamado, digamos, 'Guardar con IDML', y guardará tanto el documento actual como una copia IDML junto a él.


Siempre puede empaquetar, en lugar de guardar
Manly

Respuestas:


7

Este ejemplo debería ayudarlo a comenzar. Debe ejecutar el script una vez por sesión de InDesign. Podría agregarlo como un script de inicio, por ejemplo. Se guardará cada vez que el usuario guarde el documento en un archivo 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);
});

Si desea esto como un comando de menú, puede echar un vistazo a esta publicación de blog sobre indiscripts .


5

Gracias, @fabiantheblind, eso funciona de manera brillante. Lo he adaptado para que funcione como un script de inicio (espera a que se abra un documento).

// 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);

1
Esto no tiene sentido: está volviendo a agregar el detector de eventos con cada documento abierto. Eso significa, por ejemplo, después del quinto documento abierto, ¡la exportación se realizará cinco veces! Solo usa el guión de fabian y estarás bien
Tobias Kienzler

Gracias, @TobiasKienzler! He editado mi versión para evitar eso.
Arthur

Me parece mucho mejor :)
Tobias Kienzler

0

He encontrado el guión de @ Arthur muy útil. Sin embargo, quería usarlo solo afterSave, pero también afterSaveAs(que fue fácil de extender: solo agregue otro comando de escucha de eventos) y afterSaveACopy(que no pude lograr por mí mismo; he buscado la ayuda en community.adobe.com ).

Ahora tengo un script de trabajo que funciona para los tres casos de uso, ver más abajo.

// 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);
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.