:note

フレームグリッドの作成メモ

InDesignフレームグリッドをスクリプトで生成する必要があったのですが、はまったのでメモ。でもきっと既知だ。

CS3, CS4ではフレームグリッドの字間と行間はどんな単位に設定していようとも単位はポイントになる、またCS1,CS2では字間、行間に加えて文字サイズもポイントになる模様。

なので、環境設定で組版単位を「歯」に指定してても、スクリプトでは数値がポイントに置換されるので、それを座標値に使ってフレームグリッドの大きさに利用しようとするとおかしなことになってしまうのです。

あとCS4ではフレームグリッドをいい感じにサイズの調整をしてくれるので多少変換誤差があってもまるめてくれますが、CS3だとmm/pt変換の精度を上げてあげないと行数や行文字数が足りなくなっちゃう場合がありました。

きっと一度座標系と組版系の単位を全部ポイントにしてしまうのが幸せなのでしょうね。

字間と行間はポイントでしか返事をしてくれません。

//文字サイズ24級、行間8歯、字間-1歯の15W×3Lのフレームグリッドをつくって
//内部で持っている値をダイアログ表示するテスト
var docObj = app.documents[0];
var fg = docObj.textFrames.add();
var fg_st = fg.parentStory;
fg_st.appliedParagraphStyle = docObj.paragraphStyles[0];
fg_st.contents = "もはうあびばくつあどどびばくはつ";
fg_st.storyPreferences.frameType = FrameTypes.FRAME_GRID_TYPE;
fg_st.gridData.pointSize = 24;
var fg_col = 15;
var fg_row = 3;
// 組版単位系が歯の場合
if (docObj.viewPreferences.typographicMeasurementUnits === MeasurementUnits.HA) {
  fg_st.gridData.lineAki = 8 / 0.352777  / 4; //単位をポイントにしないと行間8歯にならない
  fg_st.gridData.characterAki = -1 / 0.352777 / 4 //単位をポイントにしないと字間-1歯にならない
  if (app.version.split('.')[0] >= 5 ) {
    // 座標単位系がmmの場合、一度mmにする
    fg.geometricBounds = [0, 0,
    (fg_st.gridData.pointSize / 4 + fg_st.gridData.lineAki * 0.352777) * fg_row - fg_st.gridData.lineAki * 0.352777 ,
    (fg_st.gridData.pointSize / 4 + fg_st.gridData.characterAki * 0.352777) * fg_col - fg_st.gridData.characterAki * 0.352777
    ];
  }
}
else{
  //...その他の組み合わせいろいろ
}
fg.select();

var sel = app.selection[0].parentStory;
alert("GridFormat:n" +
  "point size: " + sel.gridData.pointSize + "n" +
  "char aki: " + sel.gridData.characterAki + "n" +
  "line aki: " + sel.gridData.lineAki
  );
 
comments powered by Disqus
back to top