Script để luôn lưu IDML với INDD


8

Có một tập lệnh hiện có cho InDesign sẽ lưu tệp INDD và bản sao IDML cùng một lúc không?

Tôi làm việc với hàng chục nhà thiết kế độc lập trong các dự án hợp tác và những người trong chúng tôi với Creative Cloud phải nhớ lưu một bản sao IDML cho những người trên các phiên bản trước. Và chúng ta thường quên.

Ví dụ, tôi hy vọng tìm thấy hoặc điều chỉnh một tập lệnh sẽ thêm một mục menu có tên là 'Lưu bằng IDML' và sẽ lưu cả tài liệu hiện tại và bản sao IDML cùng với nó.


Bạn luôn có thể đóng gói, thay vì lưu
Manly

Câu trả lời:


7

Ví dụ này sẽ giúp bạn bắt đầu. Bạn cần chạy tập lệnh một lần cho mỗi phiên InDesign. Bạn có thể thêm nó dưới dạng một kịch bản khởi động chẳng hạn. Nó sẽ lưu mọi lúc người dùng lưu tài liệu một tệp 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);
});

Nếu bạn muốn điều này như là một lệnh đơn bạn có thể mất cái nhìn vào bài viết trên blog này trên indiscripts .


5

Cảm ơn, @fabiantheblind, hoạt động tuyệt vời. Tôi đã điều chỉnh để làm cho nó hoạt động như một Script Script (nó chờ tài liệu được mở).

// 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
Điều này không có ý nghĩa - bạn đang thêm lại trình nghe sự kiện với mỗi tài liệu đã mở. Điều đó có nghĩa là sau khi tài liệu mở thứ năm, việc xuất khẩu sẽ diễn ra năm lần! Chỉ cần sử dụng kịch bản của fabian và bạn sẽ ổn
Tobias Kienzler

Cảm ơn, @TobiasKienzler! Tôi đã chỉnh sửa phiên bản của mình để tránh điều đó.
Arthur

Có vẻ tốt hơn nhiều đối với tôi :)
Tobias Kienzler

0

Tôi đã tìm thấy kịch bản của @ Arthur rất hữu ích. Tuy nhiên, tôi chỉ muốn sử dụng nó afterSavemà còn afterSaveAs(rất dễ mở rộng: chỉ cần nối thêm một lệnh nghe sự kiện khác) và afterSaveACopy(mà tôi không thể tự mình thực hiện được; tôi đã tìm kiếm sự giúp đỡ tại Community.adobe.com ).

Bây giờ tôi có một kịch bản làm việc hoạt động cho cả ba trường hợp sử dụng, xem bên dưới.

// 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);
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.