Подравняем?
Мы научились выводить текст на страницу. Это неплохо, но для полного счастья не хватает, чтобы этот текст был форматированным. Этим мы сейчас и займемся.
Определим константы, необходимые для задания типов выравнивания, и вставки разрыва (соответственно, разрыва страницы и секции)
typedef enum {
wdAlignParagraphLeft = 0,
wdAlignParagraphCenter = 1,
wdAlignParagraphRight = 2,
wdAlignParagraphJustify = 3,
wdAlignParagraphDistribute = 4,
wdAlignParagraphJustifyMed = 5,
wdAlignParagraphJustifyHi = 7,
wdAlignParagraphJustifyLow = 8
} WdParagraphAlignment;
Для изменения выравнивания текста у текущего выделения есть метод void SetAlignment(long nNewValue), в качестве параметра которому передается требуемое выравнивание.
Обратите внимание, что при задании строчек вывода мы по-прежнему можем пользоваться символами табуляции и перевода строки.
В продолжение предыдущего шага пишем:
oPar.SetAlignment(wdAlignParagraphCenter);
oSel.TypeText("Этот текст будет выровнен по центру\n");
oPar.SetAlignment(wdAlignParagraphRight );
oSel.TypeText("Этот текст будет выровнен по правому краю\n");
oPar.SetAlignment(wdAlignParagraphLeft );
oSel.TypeText("Этот текст будет выровнен по левому краю\n");
oPar.SetAlignment(wdAlignParagraphJustify );
oSel.TypeText("Этот текст будет выровнен по обоим краям\n");
Теперь поменяем начертание шрифта. Для этого можно использовать методы BoldRun() и ItalicRun(), принадлежащие Selection :
oSel.BoldRun();
oSel.TypeText("Этот текст будет жирным\n");
oSel.ItalicRun();
oSel.TypeText("Этот текст будет наклонным\n");
Для того, чтобы отключить изменение начертания, достаточно просто вызвать соответствующий метод еще раз (совсем как когда мы нажимаем/отжимаем кнопки и ).
Вставим в документ разрыв страницы. Это будет немного сложнее, поскольку метод InsertBreak требует в качестве параметра переменную типа COleVariant. Но мы можем воспользоваться простым конструктором с параметром для преобразования наших констант в требуемый тип:
typedef enum {
wdSectionBreakNextPage = 2,
wdSectionBreakContinuous = 3,
wdSectionBreakEvenPage = 4,
wdSectionBreakOddPage = 5,
wdLineBreak = 6,
wdPageBreak = 7,
wdColumnBreak = 8,
wdLineBreakClearLeft = 9,
wdLineBreakClearRight = 10,
wdTextWrappingBreak = 11
} WdBreakType;
COleVariant сovBreakType((long)wdPageBreak);
// вставить разрыв страницы
oSel.InsertBreak(covBreakType);
На самом деле, более предпочтительным методом изменения начертания текста является непосредственное обращение к шрифту текущего выделения. К тому же, в этом случае кроме начертания мы можем менять и прочие параметры шрифта, такие, как семейство, размер и проч.
_Font fnt;
// получить параметры шрифта выделения
fnt=oSel.GetFont();
// сделать шрифт полужирным
fnt.SetBold(1);
// изменить имя шрифта
fnt.SetName("Arial");
// изменить размер шрифта
fnt.SetSize(24);
oSel.TypeText("Этот текст будет полужирным семейства Arial, размером 24.");
Отмечу, что для снятия атрибутов шрифта достаточно вызвать соответствующий метод с параметром 0, например:
// снять атрибут полужирности
fnt.SetBold(0);
Добавляем красоты
В настоящее время редкий документ обходится без картинок. Не будем и мы лишать себя удовольствия немного разнообразить скучный текст.
Для начала добавим две переменных типа COleVariant с начальными значениями TRUE и FALSE.
COleVariant
covTrue((short)TRUE),
covFalse((short)FALSE);
Теперь точно также, как раньше, добавляем 2 класса, которые отвечают за "внедренные фигуры". Первый класс, как обычно, коллекция, второй - одиночная фигура.
InlineShapes oShps;
InlineShape oShp;
Получаем текущюю коллекцию, и добавляем в нее новую фигуру. Для этого используем метод LPDISPATCH AddPicture(LPCTSTR FileName, VARIANT* LinkToFile, VARIANT* SaveWithDocument, VARIANT* Range);. Обратите внимание на параметры. Первый - это местоположение вставляемой картинки на диске, второй - вставлять картинку в текст как она есть на момент вставки или установить связь с картинкой таким образом, чтобы при изменении изображения оно обновлялось и в документе. Третий параметр - сохранять ли картинку внутри документа. Последний параметр мы игнорируем. Эти параметры похожи на те, которые мы настраиваем в Word-e:
//добавим параграф
oSel.TypeParagraph();
oShps = oSel.GetInlineShapes();
oShp = oShps.AddPicture("d:\\winnt\\Rhododendron.bmp",covFalse,covTrue,covOptional);
Естественно, на Вашей машине путь к картинке будет другим :)
Мы можем изменять параметры нашей картинки, например, ее ширину и высоту. Например, увеличим размер вставленной картинки в 1.5 раза.
float width = oShp.GetWidth();
float height = oShp.GetHeight();
oShp.SetWidth(width*1.5);
oShp.SetHeight(height*1.5);
Сохранение
Если попытаться закрыть наш красивый документ, то выяснится, что имя-то мы ему не задали, и автоматически не сохранили. Пользователю приходится самому придумывать, куда записывать и какое имя давать отчету. Давайте избавим пользователя от лишних вопросов. Для этого у нас есть функция... правильно, void SaveAs(VARIANT* FileName, VARIANT* FileFormat, VARIANT* LockComments, VARIANT* Password, VARIANT* AddToRecentFiles, VARIANT* WritePassword, VARIANT* ReadOnlyRecommended, VARIANT* EmbedTrueTypeFonts, VARIANT* SaveNativePictureFormat, VARIANT* SaveFormsData, VARIANT* SaveAsAOCELetter);, опять-таки со множеством параметров. Можно настроить все, что угодно, включая пароль.
_Document oActiveDoc;
oActiveDoc = app.GetActiveDocument();
oActiveDoc.SaveAs(COleVariant("c:\\doc1.doc"),
COleVariant((short)0),
covFalse, COleVariant(""), covTrue, COleVariant(""),
covFalse, covFalse, covFalse, covFalse, covFalse);
Предыдущая часть| Следующая часть | Оглавление
Последние изменения от 09.08.2013