医療・医薬品添付文書、医薬品添付文書集、医療機器、SGML、新記載要領XMLの作成、組版から各種データ作成、印刷、加工、梱包まで当社にお任せ下さい
DaikoCrea技術Blog
  • HOME »
  • DaikoCrea技術Blog »
  • JavaScript

JavaScript

Indesignのスクリプト-表をHTMLにする

Indesignの機能を使ってHTMLを書き出すことができますが、任意のスタイルを当てるようにしたかったので、内容を見ながらゴリゴリとHTMLを記述するスクリプトを作成しました。

下記のように表を選択してスクリプトを実行すると。

Indesign_Table

こんな感じのHTMLを作成します。

(0:0) (1:0) / (2:0)
(0:1) / (0:2) (1:1) (2:1)
(1:2) (2:2)

HTMLに反映しているものはテーブルの構造とセル内のテキスト、文字寄せに関してのみなります。
使いどころが限られる代物ですが、何かしら使える・・・かも?

マージされたセルの処理方法に悩まされましたが、itemByNameでセルを取得することで、隣接するセルを逐一確認するという力技で解決。
itemByNameでセルを取得する方法に関しては以前書いた記事がございますので、こちらを確認して下さい。

また、作成したHTMLはドキュメントと同じフォルダに”CreateHTMLTableFromIndesign.html”というファイル名で作成されます。

ダウンロードはこちら

 

【注意事項】

Indesign上で可能な表示とHTML上で可能な表示は異なるので、正しく反映できない場合があります。
特殊文字などはHTML上に反映されませんので、事前に置換する等して避けて下さい。
HTML出力の際ディレクトリを参照するため、未保存の新規ドキュメントで実行するとディレクトリが参照できず、エラーになりますのでご注意ください。

【免責事項】

今回の動作確認はWindows7のIndesignCS6で行っています。
他のバージョンでも動作すると思われますが、保障はし兼ねます。
このスクリプトを使用し発生した不具合等については一切の責任を負い兼ねますのでご了承下さい。

Indesignのスクリプト-座標について

スクリプトで扱える座標についてまとめました、参考までにどうぞ。

ページの座標

ページの座標はboundsで取得できます。
上下左右の4辺の座標を配列で取得でき、上から反時計回りに格納されています。

フレームや図形の座標

フレームや図形の座標はgeometricBoundsvisibleBoundsで取得できます。
フレームなどを選択した際に四角く囲われると思いますが、その4辺の座標を取得・設定できるプロパティになります。
geometricBoundsは線幅を含まない座標、visibleBoundsは線幅を含んだ座標となります。
上下左右の4辺の座標を配列で取得でき、上から反時計回りに格納されています。

visibleBoundsも同様に取得できます。

テキストの座標

テキストの座標として取得出来る値は下記の4つです。

X座標に関しては文字の両端が取得出来ますが、Y座標に関してはベースラインが取得出来るのみです。
そもそもベースラインは欧文のための基準であり、日本語には直接関係ない値なため、文字の上下端が取得できている訳ではありません。
上下端の座標を調べたい場合は、ベースラインを元に、フォントサイズやベースラインシフト、アセント・ディセントなどを考慮して求めて下さい。

原点の位置

座標を指定・取得する際、原点となるのは定規(ルーラー)の[0,0]の位置になります。
定規の位置や基準はユーザーが任意に変更できるため、ドキュメントにより絶対位置が異なる場合があります。
座標を参考にする際は原点を確認をするか、設定を変更し原点を揃えるなどする必要が出てきます。

定規にはページ・スプレッド・ノド元の三種類の開始位置があり、これは下記の記述で変更が可能です。
(ドキュメントからは”メニュー/編集/環境設定/単位と増減値/定規の単位/開始位置”で設定できます。)

何を基準にして定規を置くかってことですね。
A4見開きのドキュメントを例とした場合、下図の位置が定規の開始位置となります。
RulerOrigin
ページ・スプレッドなら左上が、ノド元ならそのままノド元が開始位置となります。

また、開始位置に対する定規の原点(定規の[0,0]の位置)が下記で設定できます。(開始位置がページ・スプレッドの場合のみ)

基準を決めて定規を置くに当たり、[0,0]をどこに置くかということです。
例えばzeroPoint を[10,10]に設定すれば、定規の原点が左上から[10,10]の位置となります。
必要に合わせて設定して下さい。

Indesignのスクリプト-表内のセルの取得

今回はテーブル内のセルの取得方法についての、ちょっとした解説になります。
Indesigenの表のセルを取得するにはいくつかの方法がありますので、それぞれの違いを簡単にまとめてみました。
参考にテーブル内のセルに順に番号に振るスクリプトを用意しましたので、4行6列の表を例にそれぞれの方法を解説してきます。

・セルのインデックスで取得する方法

テーブル内のセルを一つずつ追って取得する方法です。
セルを取得する場合はこの方法が基本だと言っていいでしょう。

インデックスを使用した場合の取得方法はこちら。

テーブルを選択しスクリプトを実行した場合、以下のような結果になります。

【セルの結合なし】

0 1 2 3 4 5
6 7 8 9 10 11
12 13 14 15 16 17
18 19 20 21 22 23

【セルの結合あり】

0 1 2 3 4 5
6 7 8 9 10
11 12 13 14 15
16 17 18 19 20 21

テーブルを親とした場合、表の様に左上から順にインデックスが割り振られており、myTable.cells[iCell]といったようにインデックス番号を指定することでセルを取得することができます。
セルが結合されている場合でも取得できますが、結合した分だけインデックスの値が繰り上がる為、同じ位置のセルを同じインデックスで取得出来るとは限りません。 あくまで先頭から何番目にあるかどうかで判断されます。
上記の表ではセルが結合された分、インデックスが繰り上がっているのが確認できると思います。

・セルのIDで取得する方法

表の各セルに割り振られたIDを指定し、セルを取得します。

【セルの結合なし】

0 1 2 3 4 5
6 7 8 9 10 11
12 13 14 15 16 17
18 19 20 21 22 23

【セルの結合あり】

0 1 2 3 4 5
6 7
(8)
9 10
(16)
11
12 13 14 15 17
18 19 20 21 22 23

インデックスと同じに見えますが、インデックスはセルの結合で値が変動したのに対し、IDは値が固定されたままになっています。
IDはテーブルごとに一意の値が振られており、セルが結合されている場合は先頭のIDが結合セルに割り当てられ、残りのIDは無効となります。
上記の表で結合されたセルの”8”と”16”のIDは無効となっており、IDで取得しようとmyTable.cells.itemByID(8)といった様に指定すると、無効なオブジェクトとしてエラーになりますので注意が必要です。
表を見るとインデックスのように値が繰り上がることは無いので、同じ位置に同じIDが割り当てられているのが確認できます。

・セルの名前で取得する方法

各セルの名前を指定し、セルを取得します。

【セルの結合なし】

(0:0) (1:0) (2:0) (3:0) (4:0) (5:0)
(0:1) (1:1) (2:1) (3:1) (4:1) (5:1)
(0:2) (1:2) (2:2) (3:2) (4:2) (5:2)
(0:3) (1:3) (2:3) (3:3) (4:3) (5:3)

【セルの結合あり】

(0:0) (1:0) (2:0) (3:0) (4:0) (5:0)
(0:1) (1:1) & (2:1) (3:1) (4:1) & (4:2) (5:1)
(0:2) (1:2) (2:2) (3:2) (5:2)
(0:3) (1:3) (2:3) (3:3) (4:3) (5:3)

そもそもセルの名前とは何なのか疑問に思われるかも知れませんが、セルの名前は”(列のインデックス:行のインデックス)”で表される文字列のことを指します。
上記の”(1:0)”と書かれたセルであれば
myTable.cells.itemByName(1:0);
といった具合で指定でき、”1:0”がセルの名前となります。
セルが結合していても問題なく取得でき、結合セルは元の名前のいずれかで指定できます。
列・行それぞれのインデックスに対し一意である為、座標のような感覚でセルを指定することが可能です。
目的のセルが表のどこにあるのか探したい場合などに有効です。

【免責事項】

今回の動作確認はWindows7のIndesignCS6で行っています。
他のバージョンでも動作すると思われますが、保障はし兼ねます。
このスクリプトを使用し発生した不具合等については一切の責任を負い兼ねますのでご了承下さい。

Page 1 / 212
PAGETOP
Copyright © Daikocrea Co. Ltd. All Rights Reserved.