Применения стиля к тексту в AText

В данной статье будет рассмотрено, как получить список стилей и применить их в документе с помощью AlterOffice API. 

XStyleFamiliesSupplier

Интерфейс XStyleFamiliesSupplier предоставляет доступ к списку стилей и позволяет управлять ими в документе.

Получение интерфейса XStyleFamiliesSupplier:
Reference<XStyleFamiliesSupplier> xStyleFamiliesSupplier(xTextDocument, UNO_QUERY_THROW);
-xTextDocument - объект реализующий интерфейс XTextDocument, позволяющий получить объект документа
UNO_QUERY_TYPE -  тип запроса интерфейса (). Описание всех типов запроса:  https://support.almi-partner.ru/#knowledge_base/1/locale/ru/answer/105

Пример использования:

// Получаем объект XTextDocument из объекта xComponent
Reference<XTextDocument> xDoc(xComponent, UNO_QUERY_THROW);
// Получаем объект XStyleFamiliesSupplier из объекта xTextDocument
Reference<XStyleFamiliesSupplier> xStyleFamiliesSupplier(xDoc, UNO_QUERY_THROW);
// Получаем объект XNameAccess, который содержит список семейств стилей
Reference<XNameAccess> xStyleFamilies = xStyleFamiliesSupplier->getStyleFamilies();
// Получаем список имен семейств стилей
Sequence<OUString> styleFamilyNames = xStyleFamilies->getElementNames();
// Выводим количество семейств стилей
std::cout << "Number of Style Family Names: " << styleFamilyNames.getLength() << std::endl;
// Итерируем по списку имен семейств стилей и выводим имена стилей каждого семейства
for (sal_Int32 i = 0; i < styleFamilyNames.getLength(); i++)
{
    OUString styleFamilyName = styleFamilyNames[i];
     std::cout << "Style Family: " << styleFamilyName << std::endl;

     // Получаем объект XNameAccess, который содержит список стилей текущего семейства
     Reference<XNameAccess> xStyles = Reference<XNameAccess>(xStyleFamilies->getByName(styleFamilyName), UNO_QUERY_THROW);
     // Получаем список имен стилей текущего семейства
      Sequence<OUString> styleNames = xStyles->getElementNames();
     // Итерируем по списку имен стилей текущего семейства и выводим их в консоль
      for (sal_Int32 j = 0; j < styleNames.getLength(); j++)
      {
      OUString styleName = styleNames[j];
      std::cout << "    Style: " << styleName << std::endl;
      }
}

В данном коде происходит получение доступа к списку стилей документа в AlterOffice, используя объект XTextDocument и интерфейсы XStyleFamiliesSupplier и XNameAccess. Затем выводятся имена стилей  в консоль.

Методы интерфейса XStyleFamiliesSupplier:


  • getStyleFamilies() - возвращает коллекцию семейств стилей, доступных в  документе.
Параметры:
-
Возвращаемое значение: com::sun::star::container::XNameAccess


Применение стиля к тексту


Для применения стиля к тексту используется свойство ParaStyleName. Необходимо получить объект XPropertySet для выбранного текста и установить свойство ParaStyleName этого объекта на имя стиля, который нужно применить. 
Другие свойства текста описаны в статье:  https://support.almi-partner.ru/#knowledge_base/1/locale/ru/answer/115

Пример применения стиля:

// Получаем объект документа
Reference<XTextDocument>  xTextDocument  (xComponent, UNO_QUERY);
//Получаем объект текста
Reference<XText> xText =  xTextDocument  ->getText();
// Создаем курсор для работы с текстом
Reference<XTextCursor> xCursor = xText->createTextCursor();
// Выделяем весь текст в документе
xCursor->gotoStart(true);
xCursor->gotoEnd(true);
//Получем объект XPropertySet для применения стиля текста
Reference<XPropertySet> xCursorProps(xCursor, UNO_QUERY);
//Применяем метод setPropertyValue() для установки стиля 
xCursorProps->setPropertyValue("ParaStyleName", Any(OUString("Standard")));
Прикреплённые файлы
get_list_and_ set_style.cpp
404kb
get_list_and_ set_style.cs
404kb