- 締切済み
AdobeイラストレーターCS5保存処理自動化
デザイン関係の仕事をしています。 最近CS5への移行が始まりまして、 これを機会に入稿事故防止の為に、ルーチン作業を自動化出来ないか検討しています。 詳しい方のお知恵を拝借出来れば幸いです。 【実現したい機能】 イラストレーターCS5で作成したファイル「example.ai」に対して下記のバッチ処理を実行 1. ファイル名の末尾に作業バージョンを示す文字列「_cs5」を追加して、保存 2. ファイル名の末尾に下位保存バージョンを示す文字列「_cs4」を追加して、CS4に落として下位保存 3. 全てのオブジェクト、レイヤーのロックを解除。全てのテキストをアウトライン化。再度全レイヤーをロック。 1のファイル名末尾にアウトライン済みで有ることを示す「_cs5_ol」を付けて、保存 4.上記3の状態で、下位保存バージョンと、アウトライン済みで有ることを示す文字列「_cs4_ol」を追加して、CS4に落として下位保存 5.「画質:最高、カラーモード:RGB、解像度:350dpi」で、JPEG画像を書き出し 6. ファイル名を元にした「example.ai_collected」をデスクトップの指定ディレクトリに作成。 これを出力先として、純正プリセットスクリプトの「collect for output」を実行する。 【希望する動作結果】 example.ai を開いている時に実行すると、下記の5つのファイルを書き出し example_cs5.ai example_cs5_ol.ai example_cs4.ai example_cs4_ol.ai example_cs5_ol.jpg その後、"collect for"の動作で、 「example.ai + 全リンク画像」を指定フォルダに収集 【現時点での実現度】 「collect for output」を、開いているファイル名を元に自動で実行する処理(上記6)は、 純正スクリプトの改修で実現出来ました。 この過程でUnixパス("/"区切り)とAppleScriptパス(":"区切り)の変換手法は学習出来ました。 しかしながら特定の形式で任意に下位保存させる為の方法がわからず、苦戦しています。 アドビの資料は全て英語でしたので、分かる範囲で勉強していますが、 http://www.adobe.com/jp/devnet/illustrator/scripting.html 今回の主目的はスクリプトの学習ではなく、業務の改善ですので、 もし既に似たような生産性向上目的のスクリプトが存在したり、販売されている、 又は依頼してスクリプト作成を受託して下さる方が居るなら その利用を優先的に選択したいと思います。 もちろん独自に実装できそうなら、それは喜んで実行したいところです。 ついては同種のスクリプト例文集等をご紹介頂くのも嬉しいです。 私はunixの簡単なシェルスクリプトが書ける程度の知識があります。 Apple関係は学習を始めたばかりです。 【環境】 イラストレーターCS5 / Mac10.6及び10.7 Apple Script又はJava Scriptで実装 よろしくおねがいします。
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- adobe_san
- ベストアンサー率21% (2103/9759)
そうそう! 一つ致命的な処理をしないとお望みのこと出来ないの判った。 作業は多分CS5だと思うけど CS5のai保存後に「CS5アウト」もしくは「CS4ai」保存後に一度閉じて 再度CS5aiを開いた後、残りの作業行わないとダメだよ。 アウト後のCS4ai保存は意味無いし、CS4ai保存後にCS5アウト保存も実質的にSC4アウトだからね。 開いたままでの処理は諦めたほうが良いんじゃない?
- adobe_san
- ベストアンサー率21% (2103/9759)
どうも! 気になったのでネット検索した具材でちょこっと作ってみました。 イラレ保存オプション 下記がソース(jsxだよ) ↓↓↓ここから↓↓↓ //フォルダを選択 var folderObj = Folder.selectDialog("aiファイルのあるフォルダを選択してください") ; //保存先を選択 var saveObj = Folder.selectDialog("保存先のフォルダを選択してください") ; var saveObj = saveObj + "/" ; //末尾に区切りのスラッシュが抜けているので足しておく //inddファイルを配列化(小文字・大文字無視) var fileListIAI = folderObj.getFiles("*.ai") ; //AI保存時のオプション設定 var aiOptions = new IllustratorSaveOptions; with (aiOptions) { compatibility = Compatibility.ILLUSTRATOR14 ; //バージョン CS=11/CS2=12/CS3=13/CS4=14/CS5=15 pdfCompatible = true ; //PDF互換ファイルを作成→チェックオン embedLinkedFiles = false ; //配置した画像を含む→チェックオフ embedICCProfile = false ; //ICCプロファイルを埋め込む→チェックオフ compressed = true ; //圧縮を使用する→チェックオン } //ファイル数分繰り返す for (i = 0; i < fileListIAI.length ; i ++) { //ファイルを開く app.open(fileListIAI[i]) ; //作業するドキュメントなどを変数に代入 var docObj = app.activeDocument; //ドキュメント名を取得 var fsName = docObj.name ; var fsArray = fsName.split(".") ; var aiName = fsArray[0] ; //ドキュメント名取得できた //ファイル生成 var saveFile = new File(saveObj + aiName + "_CS4" + ".ai"); //保存 docObj.saveAs(saveFile, aiOptions); //ドキュメントを閉じる app.activeDocument.close() ; } ↑↑↑ここまで↑↑↑ レイヤー管理 下記がソース(jsxだよ) ↓↓↓ここから↓↓↓ var folderObj = Folder.selectDialog("Illustratorファイルの入っているフォルダを選択してください"); var folder = Folder.selectDialog("保存するフォルダを選択してください"); if (folderObj != null){ fileList = new Array; fileList = folderObj.getFiles("*.ai"); for (f = 0 ; f <= fileList.length-1 ; f++){ var fileObj = new File(fileList[f]); open(fileObj); flag = fileObj.open(); if (flag == true){ mydocument = app.activeDocument; // レイヤーをカウントする。 layercount = mydocument.layers.length; // レイヤーのロックを行う。 for( i=0; i<layercount; i++ ){ mylayer = mydocument.layers[i]; mylayer.locked = true; //ロック解除は false } } namecount = (fileObj.name).lastIndexOf("."); // fileObj.nameの値で"."の位置を取得 fname = (fileObj.name).substr(0, namecount); options = new IllustratorSaveOptions(); options.embedICCProfile=true; savefile = new File(folder.fsName+"/"+fname+".ai"); mydocument.saveAs(savefile,options); activeDocument.close(SaveOptions.DONOTSAVECHANGES); } } ↑↑↑ここまで↑↑↑ 文字のアウトライン 下記がソース(jsxだよ) ↓↓↓ここから↓↓↓ var mydoc = app.documents[0]; //レイヤーのロックだけは解除しておく layerUnLock(mydoc); var tfitems = mydoc.textFrames; var tfcount = tfitems.length; var mymsg = ""; for(var i = tfcount - 1;i > -1;i--){ try{ visiblebak = tfitems[i].hidden; tfitems[i].locked = false; var newgroup = tfitems[i].createOutline(); newgroup.hidden = visiblebak; }catch(e){ mymsg = "アウトラインできなかったオブジェクトがあります。"; } } if(mymsg != ""){ alert(mymsg); } function layerUnLock(myObj){ var lycount = myObj.layers.length; for(var n = 0;n < lycount;n++){ if(myObj.layers[n].visible == true){ myObj.layers[n].locked = false; layerUnLock(myObj.layers[n]) } } } ↑↑↑ここまで↑↑↑ jpeg保存時のオプション設定 下記がソース(jsxだよ) ↓↓↓ここから↓↓↓ function getJPEGOptions() { var jpegExportOpts = new ExportOptionsJPEG(); //ExportOptionsJPEGを定義 var matteRGBColor = new RGBColor(); //マットカラーの指定RGB別 matteRGBColor.red = 255; matteRGBColor.green = 255; matteRGBColor.blue = 255; jpegExportOpts.antiAliasing = true; //アンチエイリアス:true,false jpegExportOpts.artBoardClipping = true; //アートボードサイズで?:true,false jpegExportOpts.blurAmount = 0.0; //ぼかし足し:0.0 to 2.0 jpegExportOpts.horizontalScale = 100.0; //横方向拡大縮小:100.0=100% jpegExportOpts.matte = true; //マット有り無し:true,false jpegExportOpts.matteColor = matteRGBColor; //マットの色:RGBColorで指定 jpegExportOpts.optimization = true; //最適化する?:true,false jpegExportOpts.qualitySetting = 80; //画質は?:0 to 100 jpegExportOpts.saveAsHTML = false; //HTMLも保存する?:true,false jpegExportOpts.verticalScale = 100.0; //縦方向拡大縮小:0.0 to 776.19 jpegExportOpts.typename = 'WEB'; //Read-only return jpegExportOpts; //jpegExportOptsを設定 } ↑↑↑ここまで↑↑↑ 以上! 後はお好きなように並べ替えて使ってください。 で、一つ言いたいのが 既に開いてる書類の作業なのでスクリプトで行うより「アクション」の方が管理しやすいと思うのですが・・・ 自己責任でお願いします。
- adobe_san
- ベストアンサー率21% (2103/9759)
補足有難うございます。 と言うか 何したいの???? なんで5つもの保存データ作りたいの? その意味で「アウトは同じだよ」と回答したんだけど・・・ 先方がPDFがNGなら保存変えれば良いこと。 何か「なんでもかんでも自動で!」と思い込んでませんか? 私が言いたいのは「同じデータで5つの保存を行うこと自体間違いでは?」です。 仮にワンクリックで出来たと仮定して 物理的トラブルが発生した場合、何を持って「最新データ」を証明するの? 一括処理の場合のそのリスクは考慮済みですか? その辺教えて下さい。 この事案で私なりの対応は頭の中で思い浮かんではいますが。
- adobe_san
- ベストアンサー率21% (2103/9759)
初めまして 教えて頂きたいのですが お望みの事 必ず1回の作業でないとダメなのでしょうか? それと「example_cs5_ol.ai」「example_cs4_ol.ai」はなぜバージョン単位で必要なのでしょうか? アウトラインという性質上「PDF保存」ではダメなのですか? 「.ai」は理解できます。 1.【example_cs5.ai】保存作業 2.【example_cs4.ai】保存作業 3.【example_ol.pdf】保存作業 4.【example_ol.jpg】保存作業 ではダメですか?
補足
回答ありがとうございます。 PDF保存は今回利用出来ません。 理由は入稿先の規定に定められているからです。 #特色や箔押し、特殊印刷などの加工に対応する為にはネイティブ.aiファイルが必要だと言うのが先方の製版ご担当者の見解です。 #.編集機能を保持したpdfでも問題無いように感じましたが、残念ながら抗弁出来ない状況です また、アウトライン処理の部分について、自己解決できましたので追記します。 「全てロック解除ーアウトライン、全レイヤーを再度ロック」の処理に関して、 イラストレーターに「全てのレイヤーをロック解除」コマンドは有っても、「全てをロック」コマンドが無かったので (代わりに「他の全てのレイヤーをロック」機能は有る)アクションで実行出来ないかと思いましたが、 一度、「作業用レイヤー」を作成して「他をロック」、この後「作業用レイヤー」を削除する事で希望の動作が実現出来る事が解りました。 ついては、 ・任意のファイル名で、バージョンを指定して保存するアップルスクリプトの書き方 (save コマンドのリファレンスに有るように思います) ・AIアクションをスクリプトからコールする方法 が習得できれば、希望の動作が実現出来るかと思いました。
補足
バージョン管理システムが稼働していますので、 ご心配頂いた「最新データの証明」について、その必要性は存在しないと考えています。 一括処理のリスクとは何の事でしょうか? 上記5種のデータ書き出しは入稿先、クライアントとの規定ですので その前提に関して問うことは元の質問の趣旨から外れています。 スクリプトの動作以外でのご提案は、お気持ちは感謝致しますが 元来の趣旨から外れるのであれば不要です