Одно из моих приложений занимается созданием / редактированием / форматированием MS Word и документов. Я использую Office 2007 с VS 2008, и я пишу для библиотеки 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, которые почти всегда находятся внутри поля, хотя, когда я открываю документ, я не вижу символ, потому что он не помещается в поле.
Так что у меня заканчиваются идеи здесь, и я спрашиваю, прошел ли кто-нибудь еще через это раньше и есть ли у них предложения по борьбе с неточным беспорядком, который является словом interop?