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

问题描述:

我的一个应用程序处理MS Word和文档创建/编辑/格式设置。我正在使用Office 2007 w/VS 2008,并且我正在编写Microsoft.Office.Interop.Word库,它似乎与2003或2008一起工作。编程调整字体大小以适应Word中文本框内的文本

我使用文档在文档中创建文本框.Shapes.AddTextbox方法,然后用文本填充它。我希望能够以编程方式确定文本是否适合在文本框中,如果不适用,请在字体大小减小之前将其缩小。

我已经尝试了几种不同的方法:

1)使用布尔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几乎始终里面盒子,但是当我打开文档时,我看不到该字符,因为它不适合盒子。

所以我在这里没有想法了,我想问问之前是否有其他人经历过这个问题,如果他们有处理不正确的混淆问题的建议,那就是interop?

我想出了一个解决方案。

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

因此,我扫描从最后开始的所有字符,如果我找到重复的坐标,然后我知道有溢出。我还必须检查Y值+字体大小是否大于文本框的底部边界。但是,这似乎工作相当可靠(如果缓慢)检测文本框是否溢出。一旦我确定它是否溢出,那么我会一直减小字体大小,直到它不是。