Script per salvare sempre IDML con INDD


8

Esiste uno script esistente per InDesign che salverà contemporaneamente un file INDD e una copia IDML?

Lavoro con dozzine di designer indipendenti su progetti collaborativi e quelli di noi con Creative Cloud devono ricordare di salvare una copia IDML per quelli su versioni precedenti. E spesso dimentichiamo.

Spero di trovare o modificare uno script che, ad esempio, aggiungerà una voce di menu chiamata, diciamo, "Salva con IDML", e salverà sia il documento corrente che una copia IDML al suo fianco.


Puoi sempre pacchettizzare, invece di salvare
Manly,

Risposte:


7

Questo esempio dovrebbe iniziare. È necessario eseguire lo script una volta per sessione di InDesign. Ad esempio, è possibile aggiungerlo come script di avvio. Salverà ogni volta che l'utente salva il documento in un file 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);
});

Se lo desideri come comando di menu, puoi dare un'occhiata a questo post sul blog su indiscripts .


5

Grazie, @fabiantheblind, funziona alla grande. L'ho adattato per farlo funzionare come uno script di avvio (attende l'apertura di 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
Questo non ha senso: stai aggiungendo di nuovo il listener di eventi con ogni documento aperto. Ciò significa, ad esempio, dopo il quinto documento aperto, l'esportazione avverrà cinque volte! Usa solo la sceneggiatura di fabian e stai bene
Tobias Kienzler l'

Grazie, @TobiasKienzler! Ho modificato la mia versione per evitarlo.
Arthur,

Mi sembra molto meglio :)
Tobias Kienzler

0

Ho trovato la sceneggiatura di @ Arthur molto utile. Tuttavia, volevo usarlo solo afterSave, ma anche afterSaveAs(che era facile da estendere: basta aggiungere un altro comando listener di eventi) e afterSaveACopy(che non ho potuto realizzare da solo; ho cercato l'aiuto su community.adobe.com ).

Ora ho uno script funzionante che funziona con tutti e tre i casi d'uso, vedi sotto.

// 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);
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.