Script untuk selalu menyimpan IDML dengan INDD

8

Apakah ada skrip yang ada untuk InDesign yang akan menyimpan file INDD dan salinan IDML pada saat yang sama?

Saya bekerja dengan puluhan desainer independen pada proyek kolaborasi, dan kami yang memiliki Creative Cloud harus ingat untuk menyimpan salinan IDML untuk mereka yang ada di versi sebelumnya. Dan kita sering lupa.

Saya berharap menemukan atau mengubah skrip yang akan, misalnya, menambahkan item menu yang disebut, katakan, 'Simpan dengan IDML', dan akan menyimpan dokumen saat ini dan salinan IDML di sampingnya.

Arthur
sumber
Anda selalu bisa mengemas, alih-alih menyimpan
Manly

Jawaban:

7

Contoh ini harus membantu Anda memulai. Anda perlu menjalankan skrip sekali per sesi InDesign. Anda dapat menambahkannya sebagai skrip startup misalnya. Ini akan menghemat setiap kali pengguna menyimpan dokumen 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);
});

Jika Anda ingin ini sebagai perintah menu, Anda dapat melihat posting blog ini di indiscripts .

fabianmoronzirfas
sumber
5

Terima kasih, @fabiantheblind, itu bekerja dengan sangat baik. Saya telah mengadaptasi itu untuk membuatnya berfungsi sebagai Skrip Startup (menunggu dokumen dibuka).

// 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
sumber
1
Ini tidak masuk akal - Anda menambahkan kembali pendengar acara dengan setiap dokumen yang dibuka. Itu berarti mis. Setelah dokumen dibuka kelima, ekspor akan terjadi lima kali! Cukup gunakan skrip fabian dan Anda baik
Tobias Kienzler
Terima kasih, @TobiasKienzler! Saya telah mengedit versi saya untuk menghindari itu.
Arthur
Terlihat jauh lebih baik bagi saya :)
Tobias Kienzler
0

Saya telah menemukan script @ Arthur sangat berguna. Namun, saya hanya ingin menggunakannya saja afterSave, tetapi juga afterSaveAs(yang mudah diperpanjang: cukup tambahkan perintah pendengar acara lain) dan afterSaveACopy(yang tidak bisa saya selesaikan sendiri; saya telah mencari bantuan di community.adobe.com ).

Sekarang saya memiliki skrip yang berfungsi untuk ketiga use case, lihat di bawah.

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