Skript zum Speichern von IDML mit INDD

8

Gibt es ein vorhandenes Skript für InDesign, das gleichzeitig eine INDD-Datei und eine IDML-Kopie speichert?

Ich arbeite mit Dutzenden unabhängiger Designer an Kooperationsprojekten, und diejenigen von uns mit Creative Cloud müssen daran denken, eine IDML-Kopie für diejenigen in früheren Versionen zu speichern. Und wir vergessen oft.

Ich hoffe, ein Skript zu finden oder zu optimieren, das beispielsweise einen Menüpunkt mit dem Namen "Mit IDML speichern" hinzufügt und sowohl das aktuelle Dokument als auch eine IDML-Kopie daneben speichert.

Arthur
quelle
Sie könnten immer packen, anstatt zu speichern
Manly

Antworten:

7

Dieses Beispiel soll Ihnen den Einstieg erleichtern. Sie müssen das Skript einmal pro InDesign-Sitzung ausführen. Sie können es beispielsweise als Startskript hinzufügen. Es wird jedes Mal gespeichert, wenn der Benutzer das Dokument als IDml-Datei speichert.

#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);
});

Wenn Sie dies als Menübefehl möchten, können Sie sich diesen Blog-Beitrag über Indiskripte ansehen .

fabianmoronzirfas
quelle
5

Danke, @fabiantheblind, das funktioniert hervorragend. Ich habe das angepasst, damit es als Startskript funktioniert (es wartet darauf, dass ein Dokument geöffnet wird).

// 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
quelle
1
Dies ist nicht sinnvoll. Sie fügen den Ereignis-Listener mit jedem geöffneten Dokument erneut hinzu. Das heißt, zB nach dem fünften geöffneten Dokument erfolgt der Export fünfmal! Verwenden Sie einfach Fabians Skript und es geht Ihnen gut
Tobias Kienzler
Danke, @TobiasKienzler! Ich habe meine Version bearbeitet, um dies zu vermeiden.
Arthur
Sieht für mich viel besser aus :)
Tobias Kienzler
0

Ich fand @ Arthurs Skript sehr nützlich. Ich wollte es jedoch nur verwenden afterSave, aber auch afterSaveAs(was einfach zu erweitern war: fügen Sie einfach einen anderen Befehl zum Zuhören von Ereignissen hinzu) und afterSaveACopy(was ich selbst nicht erreichen konnte; ich habe die Hilfe bei community.adobe.com gesucht ).

Jetzt habe ich ein funktionierendes Skript, das für alle drei Anwendungsfälle funktioniert (siehe unten).

// 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
quelle