3 返信 最新の回答 日時: Dec 26, 2003 4:14 PM ユーザー:(popochan)

    テキストフレームの大きさ

      文字あふれしたテキストフレームを、
      文字が全てぴったりと収まるように
      サイズを変えたいのですが、
      どのようにすると変更できますか?

      環境はMacOS9.2.2、InDesign2.0.2Jです。
      よろしくお願いします。
        • 1. Re: テキストフレームの大きさ
          これは結構難しい作業です。
          たとえば、横幅を固定して、縦の高さだけを変える、というのでしたら、まだ何とかいけると思いますが、縦・横を両方変えてもいいとなると、難題です。
          「縦の高さだけ」の方法ですとこんな感じになるでしょう:
          プラグイン用のC++APIを用います。
          まず、ITextUtils::IsOverset(ITextParcelList*)を用いて、フレームに対してテキストがオーバーセットされているがどうか確認します。もしそうであった ら、一旦テキストフレームを出来るだけ縦方向に伸ばします。(それでもオーバーセットされているなら、新フレームをつくりリンクさせなければならないでしょう。あえてここではその必要はないと 想定します。)そして、そのフレームに表示されているテキストの高さを計算することが出来ます。(Programming Guide.pdf Chapter15、15.6.2. Estimating the Depth of Text in a Frame)そのサイズを元に、フレームの縦の高さを変えます。

          さて、上記の方法は、横組みテキストでの方法です。縦組みテキストの場合は、「縦」と「横」を入れ替えてください。

          スクリプティングでは、組まれているテキスト(Textオブジェクト、またはTextLineオブジェクト)のあらゆるサイズ属性を用いて、似たような計算が出来るのではないでしょうか?
          • 2. Re: テキストフレームの大きさ
            Level 1
            伊佐桑 様
            どうもありがとうございます。

            質問では文字あふれのテキストフレームと限定してしまいましたが、
            少し訂正させて頂きます。

            作業としては、テキストフレームを作り、このテキストフレームに文字列を挿入します。
            その挿入した文字列の大きさに合わせてテキストフレームのサイズを変更したいのです。

            あらかじめ大きいテキストフレームを作成して文字を挿入し、そこから文字列に合わせてテキストフレームを変更するのは難しいのでしょうか?

            それと、テキストフレームのサイズを変更するAPIがよくわかりません。
            どのAPIを使用すればいいのか教えて頂ければ幸いです。
            • 3. Re: テキストフレームの大きさ
              藤森です<br />>それと、テキストフレームのサイズを変更するAPIがよくわかりません。 <br />>どのAPIを使用すればいいのか教えて頂ければ幸いです。 <br />方法はいくつかあるみたいですが、僕がよく使うのはkSetBoundingBoxCmdBossですね。<br /><br />InterfacePtr<ICommand> boundBoxCmd(CmdUtils::CreateCommand(kSetBoundingBoxCmdBoss));<br />UIDList itemList(splineRef);//splineRefはTextFrameから取得したkSplineItemBoss<br /><br />boundBoxCmd->SetItemList(itemList);<br />InterfacePtr<ISetBoundingBoxCmdData> cmdData(boundBoxCmd,IID_ISETBOUNDINGBOXCMDDATA);<br />PMRectCollection rectCollect;<br />rectCollect.Append(rect);//rectは事前に設定すべきX,Y,幅,高さをセット<br />//rectがPasteBoardの座標の場合<br />IGeometry::CoordinateSpace boundsSpace = IGeometry::kPasteboardCoordinateSpace;<br />IGeometry::BoundsKind boundsKind = IGeometry::kStrokeBoundsKind;<br />IGeometry::SetAction action = <br />IGeometry::kResizeItemAndChildren; cmdData->SetBoundingBoxData(rectCollect,<br />boundsSpace,boundsKind,action);<br />CmdUtils::ProcessCommand(boundBoxCmd);<br /><br />こんな感じです。<br />(書き込みスペースが小さいのでもしかしたら読みづらいかも...)