Script para sempre salvar IDML com INDD


8

Existe um script existente para o InDesign que salve um arquivo INDD e uma cópia IDML ao mesmo tempo?

Trabalho com dezenas de designers independentes em projetos colaborativos, e nós da Creative Cloud devemos lembrar de salvar uma cópia IDML para as versões anteriores. E muitas vezes esquecemos.

Espero encontrar ou ajustar um script que, por exemplo, adicione um item de menu chamado, digamos, 'Salvar com IDML', e salve o documento atual e uma cópia IDML ao lado.


Você sempre pode empacotar, em vez de salvar #
262 Manly

Respostas:


7

Este exemplo deve começar. Você precisa executar o script uma vez por sessão do InDesign. Você pode adicioná-lo como um script de inicialização, por exemplo. Ele será salvo sempre que o usuário salvar o documento em um arquivo 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 você quiser isso como um comando de menu, poderá ler este post em indiscrições .


5

Obrigado, @fabiantheblind, que funciona de maneira brilhante. Eu adaptei isso para fazê-lo funcionar como um script de inicialização (espera que um documento seja aberto).

// 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
Isso não faz sentido - você está adicionando novamente o ouvinte de evento a todos os documentos abertos. Isso significa que, por exemplo, após o quinto documento aberto, a exportação acontecerá cinco vezes! Basta usar o roteiro de Fabian e você está bem
Tobias KIENZLER

Obrigado, @TobiasKienzler! Eu editei minha versão para evitar isso.
Arthur

Parece muito melhor para mim :)
Tobias KIENZLER

0

Eu achei o script de @ Arthur muito útil. No entanto, eu queria usá-lo apenas afterSave, mas também afterSaveAs(o que foi fácil de estender: basta acrescentar outro comando de ouvinte de evento) e afterSaveACopy(o que eu não consegui realizar sozinho; procurei a ajuda em community.adobe.com ).

Agora eu tenho um script de trabalho que funciona para todos os três casos de uso, veja abaixo.

// 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);
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.