Script pour toujours enregistrer IDML avec INDD

8

Existe-t-il un script pour InDesign qui enregistrera un fichier INDD et une copie IDML en même temps?

Je travaille avec des dizaines de designers indépendants sur des projets collaboratifs, et ceux d'entre nous avec Creative Cloud doivent se rappeler d'enregistrer une copie IDML pour ceux des versions antérieures. Et nous oublions souvent.

J'espère trouver ou modifier un script qui, par exemple, ajoutera un élément de menu appelé, par exemple, `` Enregistrer avec IDML '', et enregistrera à la fois le document actuel et une copie IDML à côté.

Arthur
la source
Vous pouvez toujours emballer, au lieu de sauvegarder
Manly

Réponses:

7

Cet exemple devrait vous aider à démarrer. Vous devez exécuter le script une fois par session InDesign. Vous pouvez l'ajouter comme script de démarrage par exemple. Il enregistre chaque fois que l'utilisateur enregistre le document dans un fichier 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 vous le souhaitez en tant que commande de menu, vous pouvez consulter ce billet de blog sur des indiscripts .

fabianmoronzirfas
la source
5

Merci, @fabiantheblind, cela fonctionne à merveille. J'ai adapté cela pour qu'il fonctionne comme un script de démarrage (il attend qu'un document soit ouvert).

// 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
la source
1
Cela n'a aucun sens - vous ajoutez à nouveau l'écouteur d'événements à chaque document ouvert. Cela signifie par exemple qu'après le cinquième document ouvert, l'exportation se produira cinq fois! Utilisez simplement le script de fabian et tout va bien
Tobias Kienzler
Merci, @TobiasKienzler! J'ai édité ma version pour éviter cela.
Arthur
Ça me va beaucoup mieux :)
Tobias Kienzler
0

J'ai trouvé le script de @ Arthur très utile. Cependant, je voulais l'utiliser uniquement afterSave, mais aussi afterSaveAs(ce qui était facile à étendre: il suffit d'ajouter une autre commande d'écoute d'événements) et afterSaveACopy(ce que je ne pouvais pas accomplir par moi-même; j'ai demandé l'aide sur community.adobe.com ).

J'ai maintenant un script qui fonctionne pour les trois cas d'utilisation, voir ci-dessous.

// 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 ([email protected]), modified by Arthur ([email protected]), modified by Sunil_Yadav1 ([email protected])
// 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);
tukusejssirs
la source