以编程方式调整字体大小以适合Word中文本框内的文本

时间:2009-01-08 19:42:37

标签: c# ms-word ms-office office-interop

我的一个应用程序处理MS Word和文档创建/编辑/格式化。我正在使用Office 2007 w / VS 2008,我正在编写针对Microsoft.Office.Interop.Word库的代码,该库似乎适用于2003或2008.

我使用Document.Shapes.AddTextbox方法在Document中创建一个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,但是当我打开文档时,我看不到该字符,因为它不适合框。

所以我这里的想法已经不多了,我问其他人是否已经完成过这个问题,如果他们有处理不准确的混乱的建议,那就是互操作这个词?

1 个答案:

答案 0 :(得分:1)

我想出了一个解决方案。

当我想出一个Word疯狂的方法时就开始了。当我得到一个字符的X / Y坐标,并且该字符存在于文本框区域之外时,Word实际上返回正确的X值,但Y值是文本框上最后一个可见行的Y值。

所以我从头开始扫描所有字符,如果我找到重复的坐标,那么我知道有溢出。我还必须检查Y值+字体大小是否大于文本框的下限。但这似乎非常可靠(如果缓慢)用于检测文本框是否溢出。一旦我确定它是否溢出,那么我一直在减小字体大小,直到它没有。

相关问题