JavaScriptで文書作成

[4839]JavaScriptで文書作成 | 投稿者:jizo | 投稿日:2010/06/25(Fri) 13:02:05
InDesignCS4を使っています。

JavaScriptを使用して、独自フォーマットの文書をInDesign上で再構築しようとしています。

基本的な質問で恐縮ですが、ParagraphクラスやTextクラスの
インスタンスを新規に作成して、インスタンスに対して文字
や文字修飾を設定した上でテキストフレームにセットする、
というようなコードが書けるのかを教えて頂きたいと思います。

例えばテキストフレームを新規作成するのであれば、

var myTextFrame = myPage.textFrames.add();

という書き方で新規にインスタンスを作成することができま
すが、段落の場合、

var newPara = myTextFrame.parentStory.paragraphs.add();

のような関数が用意されていません。


なにぶん始めたばかりで見当違いな質問かもしれませんが、
方法をご存知の方、あるいは別の方法をご紹介頂ける方、
宜しくお願い致します。
» 1
[4840]Re: JavaScriptで文書作成 | 投稿者:こうちゃん犬猫まみれ | 投稿日:2010/06/25(Fri) 13:57:36
はじめまして、こんにちは。

>基本的な質問で恐縮ですが、ParagraphクラスやTextクラスの
>インスタンスを新規に作成して、インスタンスに対して文字
>や文字修飾を設定した上でテキストフレームにセットする、
>というようなコードが書けるのかを教えて頂きたいと思います。

こういう場合はあらかじめInDesignのファイル側に段落スタイル及び文字スタイルを作成しておいてから、JavaScriptでスタイルを適用したほうがいいと思います。

myTextFrame.paragraphs[0].appliedParagraphStyle = "見出し" ;

こんな感じで段落スタイルを適用できますよ。

また私はやったことがないんですが、JavaScriptで段落スタイルを作成することもできます。
(細かい設定はparagraphStylesのプロパティをいじってあげてください)

midashiPstyle = docObj.paragraphStyles.add({name:"見出し"});

あと、textFramesにcontentsがないとスタイル適用でエラーが出るかもしれないので、適当な文字を入れておくといいかもしれません。
空のフレームにしたいなら、上記のあと全角スペース(空だとのちのち面倒だと思うので)に設定し直せばOKかと。

というわけで、まとめると下記のような感じでしょうか。

var myTextFrame = myPage.textFrames.add();;
myTextFrame.contents = "ダミー文言です" ;
myTextFrame.paragraphs[0].appliedParagraphStyle = "見出し" ;
myTextFrame.contents = " " ;

検証もしてませんし、殴り書きなので、エラーが出たら申し訳ありません。
ほら、デバッグするのが上達の近道って言いますよね?ね?
...言わないか...。
» 2
[4842]Re: JavaScriptで文書作成 | 投稿者:せうぞー | 投稿日:2010/06/25(Fri) 14:06:42
ExtendScriptToolkitのヘルプメニューから「オブジェクトモデルビューア」を見てください。
textFramesにはadd()メソッドがありますが、Paragraphsにはありません。
おっしゃるように、ParagraphはParagraphsのインスタンスですが、メソッドが用意されていないということです。

いろいろなやり方があると思いますが、特定のストーリーの最後に新しい段落を追加したいなら、
app.documents[0].stories[0].insertionPoints[-1].contents = "hogehoge";
などとしたあとに、このParagraphに対してプロパティを変更する(あるいは段落スタイルを設定する)のがよいでしょう。
もちろん、story対象でなくても、TextFrameでもかまいません。insertionPoint(挿入点)を明示しなければ、書き換えになります。
» 3
[4843]Re: JavaScriptで文書作成 | 投稿者:jizo | 投稿日:2010/06/25(Fri) 15:54:32
こうちゃんさん、せうぞーさん
早速のコメントをありがとうございます。

お二人のアドバイスの通り、やはりまずはInDesign側に段落
を用意してから、そこに対して修飾情報を反映していくとい
う方法になりそうですね。

HTMLを例に出すと、

<p align="center">あいうえお<font face="Arial">ABC</font></p>

という段落をInDesignで再現しようとしたときに、段落クラス、
テキストクラスのインスタンス生成できるのであれば、

①テキストインスタンス1を生成し"あいうえお"をセット
②テキストインスタンス2を生成し"ABC"をセット
③テキストインスタンス2のフォントを"Arial"にセット
④段落インスタンスを生成し、テキストインスタンス1、
 テキストインスタンス2を追加、段落修飾を設定
⑤テキストフレームに段落インスタンスを追加

という手順で実現することを期待していたのですが、今回の
お話を聞いて、

①テキストフレームに"あいうえおABC"を追加
②①で作られた段落を取得、「後ろ3文字」の"ABC"をテキス
 トインスタンスとして取得
③②で取得したテキストインスタンスに"Arial"を設定
④②で取得した段落に段落修飾を設定

という手順を取ることになりそうだ、という理解です。

段落中の部分的な文字修飾をするために、位置を特定しなが
ら設定しなければならないことを避けたかったのですが。。。


お二方ともありがとうございました。感謝しております。
この記事の書き込み元へのリンク (コメントや質問などはこちらへどうぞ)

このページをシェア