Hatena::ブログ(Diary)

名もないテクノ手 このページをアンテナに追加 RSSフィード Twitter

EPUB版『InDesign者のための正規表現入門』

InDesignのTips一覧

2011-09-12

[][][]任意のプリフライトプロファイルをイベント駆動で自動実行する

何をするスクリプトか?

通常、作業用のプリフライトプロファイルは「[基本]」になっていますが、細かいチェックをしてくれません。もっと細かくチェックできるプロファイルを作業用にしてしまうと、InDesignアプリケーション全体の動作が遅くなってしまいます。ですから、必要な時だけ別のプロファイルでプリフライトできればいいですね。このスクリプトは

  • ドキュメント開いた時
  • (PDFなどに)書き出す時
  • プリント時
  • 保存時

に任意のプロファイルでプリフライトを自動チェックします。エラーがあればアラートダイアログを表示します。

D


同梱ファイル(2Files)

Readme.txt このファイルです。とにかく最初によんでください。

preflight_check.jsx スクリプト本体です。


使用条件

このスクリプトが正常に動作する環境は以下の通りです。Windows環境でも動作する可能性がありますが未検証です。


ダウンロード

http://www.seuzo.jp/st/scripts_InDesignCS5/index.html#preflight_check


インストールと準備

(1)スクリプトをエディタ等で開き、15行目あたりにあるプロファイル名

var my_profile_name = "[基本]"; //使用するプリフライトのプロファイル名

の「[基本]」の部分をチェックしたいプロファイル名に書き換えます。

(2)スクリプト本体(preflight_check.jsx)を「Startup Scripts」フォルダ

~/Library/Preferences/Adobe InDesign/Version 7.0-J/ja_JP/Scripts/Startup Scripts/

にコピーしてください。エイリアスを入れておくだけでもかまいません。


使用方法

インストール場所さえ間違えなければ、特に使用手順はありません。

プリフライトでエラーがあれば、エラーがあればアラートダイアログを表示します。


既知の不具合、またはToDo



免責事項

  • 本アプリケーションはInDesignにおける作業効率支援なのであって、処理結果を保証するものではありません。かならず確認をされることをおすすめします。
  • このツールを使用する上でデータの破損などのあらゆる不具合・不利益については一切の責任を負いかねますのでご了解ください。
  • このツールはすべてのMacintoshMac OS上で動作をするという確認をとっていませんし、事実上出来ません。したがって、動作を保証するものではありません。

ライセンス

GNU GPLv3

http://sourceforge.jp/projects/opensource/wiki/licenses%252FGNU_General_Public_License_version_3.0


履 歴

2011-09-11 ver 0.1 とりあえず http://d.hatena.ne.jp/seuzo/20110912/1315797240


コード

/*
preflight_check.jsx
(c)2011 seuzo.jp
ドキュメントを開いた後、プリントする前、書出し前、保存する前に指定したプロファイルでプリフライトチェックをします。
15行目あたりにあるmy_profile_nameにチェックしたいプロファイル名を記入してください

2011-09-11  ver 0.1 とりあえず
*/

#target "InDesign"
#targetengine "preflight_check"

(function(){
//////////////設定
var my_profile_name = "[基本]"; //使用するプリフライトのプロファイル名

function check_preflight(my_event){
    if (app.documents.length === 0){return;}
    if ((parseInt(app.version) >= 7) &&
        (my_event.eventType === "afterOpen") &&
        (my_event.target instanceof LayoutWindow)){
        return;
    }
    var my_doc = app.documents[0];    
    
    ////preflightProfileオブジェクトに変換
    if ((/^\[?(基本|Basic)\]?$/i).test(my_profile_name)) {
        var my_profile = app.preflightProfiles.item[0];//[基本]プロファイルは名前参照できないみたい
    } else {
          ////入力されたmy_profile_nameの名前が存在しているかどうか
         var tmp_str = "[";//すべてのプロファイルを繋げた文字列
         for (var i = 0; i < app.preflightProfiles.length; i++) {
             tmp_str += app.preflightProfiles[i].name + "][";
          }
        if (tmp_str.indexOf(my_profile_name) === -1) {
              alert("「" + my_profile_name + "」プロファイルは存在しません"); 
              return;
         }
        var my_profile = app.preflightProfiles.itemByName(my_profile_name);
    }
    
    /////プリフライトチェックを実行
    var my_process = app.preflightProcesses.add(my_doc, my_profile);
    my_process.waitForProcess();
    var my_results = my_process.processResults;//返事
    my_process.remove();//プロセスをクリーンアップする
    //$.writeln(my_results);

    
    ////エラーがあれば警告ダイアログを出す
    //プリフライトでOKが出ると"None\r\n"が返る(CS5)
    if ((my_results.length < 7) && (/^None/i).test(my_results)) {
        return;
    } else {
        alert("プリフライトエラーです\rプロファイル名:" + my_profile_name);
    }

}//function check_preflight

    app.addEventListener("afterOpen", check_preflight, false);//ドキュメントを開いた後
    app.addEventListener("beforeExport", check_preflight, false);//書出し前
    app.addEventListener("beforePrint", check_preflight, false);//プリント前
    app.addEventListener("beforeSave", check_preflight, false);//保存前
})();

seuzoseuzo 2011/09/12 12:46 プリフライトって本来、こうあるべきなんだよね。常時監視じゃなくて。
作業用プリフライトをオフにしておいても、このスクリプトは動作します。

通りすがり通りすがり 2012/11/20 12:07 プリフライトを自動実行するタイミングに”書き出し前に実行”とありますが、これはコピー&ペースト時にも実行されてしまいます。
PDF書き出し時にのみ実行させたいと思い、あれやこれややってみたのですがエラー続出でした。
なにか上手く解決する方法があれば良いのですが。

そもそもコピー&ペーストも書き出しに含まれているのが私的には驚きでした。

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

トラックバック - http://d.hatena.ne.jp/seuzo/20110912/1315797240
Connection: close