4.文字を描いてみる

今回はVBからイラストレータで文字を描く方法です。単純な文字を描くのはパス同様、いたって簡単です。
文字オブジェクトはテキストアート(TextArt)と言い、このオブジェクトを操作することで文字を描けます。
まずはサンプルプロジェクトをここからダウンロードしてください。

今回のサンプルでは、プログラム開始時(FormLoad時)に空ドキュメントを作成し、前回説明したColorオブジェクトも作成していますので、その部分についてはサンプルのソースをご覧ください。
では、文字描画の解説です。まず、ボタン1ではシンプルな文字を作成しています。
Private Sub Command1_Click()
    Dim textArt As Illustrator.TextArtItem                          'テキストアート

    Set textArt = aiDoc.TextArtItems.Add                            'TextArtItemを追加
    textArt.Contents = Text1.Text                                   'テキストの内容
    textArt.TextRange.Filled = True                                 '塗りつぶし
    textArt.TextRange.FillColor = lnColor                           '色
    textArt.TextRange.Stroked = False                               '輪郭
    textArt.TextRange.Font = "MS-PMincho"                           'フォント名
    textArt.TextRange.Size = 24                                     'サイズ
    textArt.Position = Array(100, 100)                              'テキストの座標(左上角を指定)
'    textArt.Width = 100                                            
End Sub

文字はテキストアートを通して操作します。
  Dim textArt As Illustrator.TextArtItem

ドキュメントにAddするのはパスと同じですね。テキストの内容は、Contentsに入れます。ここで注意が必要なのはフォント名です。
フォント名は日本語フォントであっても英語名で表記しなければいけません。英語名を知るには実際にイラストレータ上で文字を描いてみて、文字のプロパティから知ることができます。
方法は、まずイラストレータで適当な文字を描き、その文字のフォント設定で知りたいフォントします。次にメニューの「編集」->「環境設定」の「キー入力・オートトレース」のページで、「フォント名を英語表記」にします。
これで、文字設定ウインドウにフォント名が英語表記されますが、VBで使用する場合は、スペースの部分を-(ハイフン)に置換しなければなりません。例えば、「MS PMincho」なら「MS-PMincho」です。
これで、普通に文字を描くことができます。
さて、ここで問題ですが、書類上に表などを作るためにある一定幅の文字列を作りたい場合どうすればいいでしょうか?
それを試みたのが、
  ' textArt.Width = 100
です。一度コメントを外して試してみてください。
そう、このままでは文字列の幅を調整できるもの、一つ一つの文字まで引き伸ばされてしまうのです。
これは、イラストレータ上の文字ツールで1クリックの後文字を入力し、それを引き伸ばした時と同じ結果となります。
場合によってはこれでもいいのですが、表などの体裁を整えるのには向きません。そこで、イラストレータのテキストボックス(書類上でクリックした後ドラッグすると青い枠が現れる)の状態で文字を入力して、文字揃えを設定するようなやり方がベストです。この状態だと、右揃えやセンタリング、両端を揃えて均等に割りつけるといったこともできます。

VBでこの機能を使うにはテキストアートのKindプロパティにaiAreaTextをセットすることになります。が、単に上記の例に設定するだけでは上手くいきません。ボタン2のコードを見てください。
Private Sub Command2_Click()
    Dim textArt As Illustrator.TextArtItem
    Dim prag As Illustrator.Paragraph                               'パラグラフオブジェクト
    
    Set textArt = aiDoc.TextArtItems.Add
    textArt.Contents = "dummy"                                      'ダミー文字列
    textArt.Kind = aiAreaText                                       'テキストのタイプ
    textArt.TextRange.Paragraphs.RemoveAll                          'パラグラフを削除
    Set prag = textArt.TextRange.Paragraphs.Add                     'パラグラフを追加
    prag.Contents = String(LenB(Text1), "*")                        '日本語対応
    prag.Justification = aiAllLines                                 '両端揃え
    prag.Filled = True
    prag.FillColor = lnColor
    prag.Stroked = False
    prag.Font = "MS-PMincho"
    prag.Size = 24
    prag.Contents = Text1                                           'パラグラフの内容
    textArt.Width = 100                                             '全体の幅
    textArt.TextRange.Scaling = Array(100, 100)                     'スケーリング
    textArt.Position = Array(100, 200)
End Sub
Paragraphは段落のことですが、一つのテキストアートには複数のPragraphが存在し、文章揃えは段落ごとに行う必要があるのです。
結論から言えば上記の例で文章揃えを実現できますが、注意が必要な点が何点かあります。

   textArt.Contents = "dummy"
まず、文字列が空っぽのままだとKindプロパティを設定する時にエラーになります。このためダミーの文字列を入れておきます。

   textArt.TextRange.Paragraphs.RemoveAll
   Set prag = textArt.TextRange.Paragraphs.Add
ダミー文字を含めたParagraphを削除して、新たなParagraphを追加します。

   prag.Contents = String(LenB(Text1), "*")
2バイト文字を処理するにはこの操作が必要なので注意してください。ここで直接日本語を入れて後のプロパティを設定した場合はエラーになるようです。
本来代入したい文字列はフォントの設定が終わった後にContentsに代入します。

   prag.Justification = aiAllLines
中央揃えの場合はaiCenterなどが使えます。

他はTextArtItemにするのと同じ操作でいいのですが、最後に
   textArt.TextRange.Scaling = Array(100, 100)
としておかないと、文字が引き伸ばされた状態のままになってしまいます。スケーリングを縦横100%にしています。
ボタン2の例ではフォントの設定などをParagraphに対して行っていますが、上位オブジェクトのTextArtItemに対して行うこともできます。

これで、文字揃えができますが、例えばテキストアートのKindプロパティをaiPathTextにすれば、パスに沿ったラインアートのような文字列が作れます。
以上で、文字操作の説明は終わりですが、私が初めてVBでイラストレータを操作するアプリを作成したとき、言語の壁(マニュアル自体英語だし、上記のように2バイト文字を扱うのに一筋縄ではいかないといった二重苦があります)や情報の少なさに泣かされました。
ただ、「Illustrator Scripting Guide.pdf」は平易な英語でVBの項目は非常に見やすく整理されていまし、サンプルが非常に役立ちました。また、VBのオブジェクトブラウザで「Illustrator」の項目を見るとメソッド、プロパティなど類推しやすいものがあります。
これからイラストレータ用のアプリを作られる方も険しい道のりになると思いますが、くじけずに頑張ってください。

戻る