Blue-Screeeeeeen.net-youichi7imazekiのDTPメモ-

トップページ » InDesign » 【InDesign】ai/pdfのアートボード/ページを指定して同一ファイルに再リンクするスクリプト

【InDesign】ai/pdfのアートボード/ページを指定して同一ファイルに再リンクするスクリプト

公開日:2017年3月27日 最終更新日:2017年4月21日

 アートボードを使用したaiファイル、または複数ページのPDFをInDesignに配置しているとき、「ページ数を変えて再リンク」するのは思いのほか面倒です。通常、「配置」([リンク]パネルメニューの[再リンク…])→「配置するファイルを選ぶ」→「[読み込みオプションを表示]にチェック」→「ページ数指定」の4ステップが必要ですが、これがどうにも辛かったので、ページ数だけ変更して再リンクするスクリプトを作りました。


 ざっくり計測ですが、1枚あたり約10秒の短縮になりました。


使い方

1.配置されている複数アートボードのaiファイル、複数ページのpdfを選択します。(ダイレクト選択ツールで中身を選択しても、選択ツールでフレームを選択しても可)

ai/pdfが配置されているフレーム(または中身)を選択してスクリプトを実行
ai/pdfが配置されているフレーム(または中身)を選択してスクリプトを実行


2.スクリプトを実行すると、ページ番号を入力するダイアログが表示されるので、変更したいページ数を入力します※。

※アートボード/ページの数を超える数値を入力すると、1ページ目に再リンクされます。

変更したいページ数を入力
変更したいページ数を入力


3.ai/pdfが、指定したページ数に再リンクされます。

指定したページ数に再リンクされる
指定したページ数に再リンクされる


使用できるのはaiファイルかpdfだけで、それ以外の画像例えばpsd、jpg、pngではアラートが出て中断されます。



使用例

使用例GIF
使用例GIF

スクリプト本文

スクリプト本文を見る(Mac版)

スクリプト本文を見る(Win版)

Mac版とWindows版では、ファイルパスの区切り文字が異なるため、それぞれ別ファイルにしています。


CS4動作時の注意点

CS4〜CS6で動作を確認していますが、CS4に関しては本エントリ記載のコードそのままでは使えません。「app.pdfPlacePreferences.pdfCrop = PDFCrop.CROP_CONTENT_VISIBLE_LAYERS;」という文がありますが、この「CROP_CONTENT_VISIBLE_LAYERS」はCS4では対応していないトリミング方法を指定するコードです。


そのため、この部分は「app.pdfPlacePreferences.pdfCrop = PDFCrop.CROP_ART;」のように、CS4に対応した指定に書き換えておく必要があります。

CS4では一部変更が必要
CS4では一部変更が必要



/*読み込みオプションでページ数を指定して再リンク
用途:選択した配置済みaiやpdfのページ数を変更したいとき
仕様:配置されているファイルと同じものに再リンクするため、他のai/pdfを指定することはできません。
変更できるのはアートボード番号およびページ数のみ。
入力したページ数がアートボード数を超えていた場合は1ページめに再リンクされます。
PDF互換オプションにチェックを入れていないaiはそもそも表示されないので一応動作対象にする

動作確認:InDesign CS4~6、CS4は条件付き

★重要!
【動作対象オブジェクト】
・ダイレクト選択ツールで、ai、pdfが配置されているグラフィックフレームの中身を選択しているとき
・選択ツールで、ai、pdfが配置されているグラフィックフレームを選択しているとき
・グループを選択していて、そのなかにai,pdfがあるとき。ただし複数画像が含まれる場合は一番上のものが再リンクされる。
(上記の理由から、グループに含まれるai、pdfはダイレクト選択ツールで都度選択したほうが安全)
*/

//配置設定
function pla(){
  //ページ指定
  var repPage=prompt("再リンクするアートボード番号(PDFの場合はページ数)を入力","1");
  prrep = repPage.replace(/[A-Za-z0-9]/g, function(s) {
  //全角数字対応
  return String.fromCharCode(s.charCodeAt(0) - 0xFEE0);
  });
  var prnum=Number(prrep);
  //PDF、ai読み込みオプション
  app.pdfPlacePreferences.pdfCrop = PDFCrop.CROP_CONTENT_VISIBLE_LAYERS;//トリミング範囲
  /*トリミング範囲のプロパティ
   CROP_ART アート
   CROP_BLEED 裁ち落とし
   CROP_CONTENT バウンディングボックス(~CS4)
   CROP_CONTENT_VISIBLE_LAYERS 境界線ボックス(表示されているレイヤー:CS5~)
   CROP_CONTENT_ALL_LAYERS 境界線ボックス(全てのレイヤー:CS5~)
   CROP_MEDIA メディア
   CROP_PDF トリミング
   CROP_TRIM トンボ
   */
  app.pdfPlacePreferences.transparentBackground = true;//透明
  app.pdfPlacePreferences.pageNumber=prnum;
  }
 
try{
 var selobj = app.activeDocument.selection[0];
 if(selobj.constructor.name==="PDF"){
  var selimgPath=selobj.itemLink.filePath
  var selimgSep=selimgPath.split(":");//パスの区切り文字で分割する。
  var selimgJoi= selimgSep.join("/")//再リンクできるように区切り文字を変えて結合する。
  pla();
  selobj.place(selimgJoi);//再リンク
  }else if(selobj.constructor.name==="Image"){
   alert("ai、pdfでない画像を選択しています")
  }
 else{
  //選択している画像のフルパスを求め、再リンクできる形へ整形する
  var selobjPath=selobj.allGraphics[0].itemLink.filePath;
  var selobjSep=selobjPath.split(":");
  var selobjJoi= selobjSep.join("/");

  //選択しているオブジェクトの拡張子のみを取得
  var selobjName=selobj.allGraphics[0].itemLink.name
  var selobjNamecount=selobjName.length;
  var selobjNamerev = selobjPath.split("").reverse().join("");//ファイル名文字列反転
  result = selobjNamerev.indexOf(".");//拡張子が先頭に来るので、最初のドットまでの文字数を取得できる
  var exp = selobjNamerev.substr(0, result);//ファイル名文字数-拡張子文字数-ドットの位置を終了位置にしてファイル名全体から文字列切り出し
  var exprev=exp.split("").reverse().join("");
 
 if((exprev=="ai")||(exprev=="AI")||(exprev=="pdf")||(exprev=="PDF")){
  pla();
  selobj.allGraphics[0].place(selobjJoi);//再リンク
  }
 else{
  alert("ai、pdf以外のファイルを選択しています") 
  }
 }
}
catch(e){
alert("画像が選択されていないか、操作が中断されました") 
 }

タグ:


  • 最近の投稿

  • カテゴリー

  • 月別の記事

  • おことわり

     Adobe、InDesign、Illustrator、Photoshop、Acrobatは、Adobe Systems Incorporated(アドビシステムズ社)の米国および他の国における商標または登録商標です。本サイトでは、RおよびTMを省略しております。