Одно из моих приложений связано с созданием/редактированием/форматированием 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, которые почти всегда находятся внутри поля, хотя, когда я открываю документ, я не вижу символ, потому что он не помещается в поле.
Итак, у меня заканчиваются идеи, и я спрашиваю, прошел ли кто-нибудь еще через это раньше, и есть ли у них предложения по устранению неточного беспорядка, которым является слово «взаимодействие»?