:note

段落スタイルとりあえず割り当ての実験

あまり実用的でない実験です。

InDesignのドキュメント内で、段落スタイルが[段落スタイルなし]の段落からプロパティを全取得して、段落スタイルを作成出来ないかという試み。

プロパティのうち段落スタイルで受け付けないKeyを除外したものをはじいて、読み込んだ段落スタイルができます。

まだ表内のテキストも対象にしてません。

段落中にスタイル混在した場合は一文字目の設定で決まります。

スタイルの重複チェックもしないので、データによって大量に同じ設定の段落スタイルができます。

まだまだ、これから。

今日はここまで。

今回も kamiseto さんと kanemu さんにいろいろ助言・アイデアを頂き、ありがとうございました。

段落スタイルとりあえず割り当ての実験 /images/2010/09/754-apply_paragraph_style.png
//inddドキュメント内の[段落スタイルなし]の段落にスタイルをあてる
var doc=app.documents[0];
var storyObj=doc.stories;
for(var i=0; i < storyObj.length; i++){
  var paraObj=storyObj[i].paragraphs;
  for(var ii=0; ii < paraObj.length; ii++){
    if(paraObj[ii].appliedParagraphStyle.name == "[段落スタイルなし]"){
      main();
    }
  }
}
function main(){
  //$.writeln("before_"+getObjectKey(paraObj[ii]).length);
  //とりあえず段落スタイル作る
  var pstyle=doc.paragraphStyles.add();
  //参照渡しでないオブジェクトの複製をつくって
  //不要なプロパティをあらかじめ削除
  var cloneObj=creatClone(paraObj[ii].insertionPoints[0]);
  delete cloneObj.index;
  delete cloneObj.parent;
  delete cloneObj.properties;
  //手動カーニングのとき"Manual"を戻そうとするとエラーになるのでそれ以外に
  // "Metrics - Roman Only"(和文等幅), "Metrics", "Optical", "None"
  if(cloneObj.kerningMethod == "Manual"){
  cloneObj.kerningMethod="None";
  }
  var prop=getObjectKey(cloneObj);
  for(var iP=prop.length-1; iP >= 0; iP--){
    //段落スタイルに使えるプロパティかkeyをチェックする
    //okなら段落スタイルに当てていく
    try{
      pstyle[prop[iP]]=cloneObj[prop[iP]];
    }
    catch(e){//$.writeln("import_err__"+[prop[iP]]);
    }
  }
  if(pstyle){
    paraObj[ii].appliedParagraphStyle=pstyle;
    //$.writeln("after_"+getObjectKey(pstyle).length);
  }
}
//オブジェクトのプロパティのkeyを配列でかえす
function getObjectKey(obj){
  var arr=[];
  for(var i in obj){
    arr.push(i);
  }
  return arr;
}
//ベース段落から不要なものを削除する用のオブジェクトの分身を作成
function creatClone(srcObj){
  var newObj={}
  var obj={};
  for(var i in srcObj){
    try{
      obj[i]=uneval(srcObj[i]);
      for(var i in obj){
        newObj[i]=eval(obj[i]);
      }
    }catch(e){}
  }
  return newObj
}
 
comments powered by Disqus
back to top