DTPオペレーターのInDesign、Javascript関連セーブデータ。ただいま過去記事の整理中のため、記事が突然消えたり現れたり、記事の内容が微妙に変わったりします。最近は主にTwitter(@subi_omu)で活動。
スポンサーサイト
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
InDesignでグラフ作成その1 棒グラフ
グラフ作成のあるDTPの仕事が来たとき、普通はIllustratorで作成してInDesignに配置すると思います。
でも、グラフの数が大量でフォーマットが固定なら、InDesignでグラフを作るのもアリです。

InDesignで棒グラフを作成
こうちゃん黒猫まみれさんのブログからヒントをいただきました。
グラフィックフレームの横幅を、読み込んだ外部テキストの数値に従って変えるという方法をこちらの記事で紹介されていますが、棒グラフ内に数値を入れたいのでテキストフレームや表組みのセルを使い、中の数値に従ってグラフの長さを変えるというやり方にしました。


まずは完成見本。

キャプチャ10271831

選択されているのは縦線・横線・目盛りをグループ化したもの。処理が終わってからアンカー付きオブジェクトとして貼り付けます。

処理前の状態はこちら。
上は塗りを設定したテキストフレーム、下は表組のセルを、それぞれグラフの棒部分にしています。

キャプチャ10271832

・グラフの数値専用の文字スタイル(この例では「グラフ内文字」)を作る
・グラフの数値をデータ結合などでグラフの棒にするテキストフレームやセルの中の内部に読み込み、数値に専用の文字スタイルを適用しておく
・タイトル前の♪は最後に検索置換でグループ化した目盛りをアンカー付きオブジェクトとして貼り付けるためものもの


スクリプトがこちら。
グラフの数値を文字スタイルから検索し、数値が入っているテキストフレームまたはセルの幅を数値と同じ幅にします。
デフォルトだと、グラフに50が入っていると横幅は50mm(単位は設定による)になります。
Number(myWidth)をNumber(myWidth*0.5)にすれば、数字が50のとき25mm(単位は設定による)の横幅にできます。
#target indesign

app.findGrepPreferences=NothingEnum.nothing;​
app.changeGrepPreferences=NothingEnum.nothing;

//グラフの横幅の値に文字スタイルを設定
app.findGrepPreferences.appliedCharacterStyle = 'グラフ内文字';
app.findGrepPreferences.findWhat = '[0-9]+'
var myNum = app.activeDocument.findGrep();

for(var i=0, mx=myNum.length;i<mx; i++){
var myWidth = myNum[i].contents;
//文字がテキストフレームの中にある時
if (myNum[i].parent.constructor.name=='Story') {
var myBar = myNum[i].parentTextFrames[0];
var y1 = myBar.visibleBounds[0];
var x1 = myBar.visibleBounds[1];
var y2 = myBar.visibleBounds[2];
var x2 = myBar.visibleBounds[3];
myBar.visibleBounds = [y1, x1, y2, x1+Number(myWidth)];
}
//文字が表組セルの中にある時
else if (myNum[i].parent.constructor.name=='Cell') {
var myCell = myNum[i].parent;
myNum[i].parent.width = Number(myWidth);
}
}

スクリプト適用後。

キャプチャ10271833

わざわざテキストフレームとセルと2通りの方法を考えた理由は次の記事で説明します〜
関連記事
スポンサーサイト
コメント
コメント
コメントの投稿
URL:
本文:
パスワード:
非公開コメント: 管理者にだけ表示を許可する
 
トラックバック
トラックバック URL
トラックバック
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。