1

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

我使用 Document.Shapes.AddTextbox 方法在文档中创建一个文本框,然后用文本填充它。我希望能够以编程方式确定文本是否适合文本框,如果不适合,则减小字体大小直到适合。

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

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,尽管当我打开文档时我看不到该字符,因为它不适合框。

所以我的想法已经用完了,我想问其他人以前是否经历过这个问题,以及他们是否对处理互操作这个词的不准确混乱有任何建议?

4

1 回答 1

1

我想出了一个解决方案。

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

所以我从末尾开始扫描所有字符,如果我发现重复的坐标,那么我知道有溢出。我还必须检查 Y 值 + 字体大小是否大于文本框的底部边界。但这对于检测文本框是否溢出似乎非常可靠(如果速度很慢)。一旦我确定它是否溢出,我就会不断减小字体大小,直到没有。

于 2009-01-08T21:50:47.517 回答