Wordのテキストボックス内のテキストに合わせてフォントサイズをプログラムで調整する

StackOverflow https://stackoverflow.com/questions/425593

質問

私のアプリケーションの1つは、MS Wordとドキュメントの作成/編集/フォーマットを扱っています。 VS 2008を備えたOffice 2007を使用しており、Microsoft.Office.Interop.Wordライブラリに対してコーディングしています。これは2003または2008のいずれかで動作するようです。

Document.Shapes.AddTextboxメソッドを使用してドキュメント内にTextboxを作成し、テキストを入力します。テキストがテキストボックス内に収まるかどうかをプログラムで判断できるようにし、収まらない場合は収まるまでフォントサイズを小さくします。

私はいくつかの異なる方法を試しました:

1)bool Shape.TextFrame.Overflowingプロパティを使用

while (textbox.TextFrame.Overflowing) // adjust font size

ただし、ドキュメントを開いたときにテキストがボックスに収まることがわかりますが、これはTRUEを返します。

2)テキストの最後の文字のX / Y位置を確認し、その座標がテキストボックスの境界内に収まるかどうかを確認する

lastCharX = System.Convert.ToSingle (tb.TextFrame.TextRange.Characters.Last.get_Information (WdInformation.wdHorizontalPositionRelativeToPage));
lastCharY = System.Convert.ToSingle (tb.TextFrame.TextRange.Characters.Last.get_Information (WdInformation.wdVerticalPositionRelativeToPage));
bool outsideFrameBoundaries = lastCharX + lastCharWidth > frameBoundaryX || lastCharY + lastCharHeight > frameBoundaryY;

ただし、これはほとんど常にボックス内にあるX / Yを返しますが、ドキュメントを開くと、ボックスに収まらないため文字が表示されません。

だから私はここでアイデアを使い果たしており、他の誰かがこれを経験したことがあるかどうか、そして相互運用という言葉である不正確な混乱に対処するための提案があるかどうか尋ねていますか?

役に立ちましたか?

解決

解決策を思いつきました。

Wordの狂気の方法を見つけたときに始まりました。文字のX / Y座標を取得し、その文字がテキストボックス領域の外側にある場合、Wordは実際には正しいX値を返しますが、Y値はテキストボックスの最後に表示される行のY値です。

だから、すべての文字を最後からスキャンして、重複する座標を見つけたら、オーバーフローがあることを知っています。また、Y値+フォントサイズがテキストボックスの下限よりも大きいかどうかを確認する必要があります。しかし、これはテキストボックスがオーバーフローしているかどうかを検出するために(ゆっくりと)かなり確実に機能するようです。オーバーフローしているかどうかを確認したら、そうなるまでフォントサイズを小さくし続けます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top