Работа со стилями

Класс StyleCollection используется для управления встроенными и применения пользовательских настроек к стилям.

Как извлечь контент на основе стилей

На простом уровне извлечение содержимого на основе стилей из документа Word может быть полезно для идентификации, составления списка и подсчета абзацев и фрагментов текста, отформатированных в определенном стиле. Например, вам может потребоваться определить определенные виды содержимого в документе, такие как примеры, заголовки, ссылки, ключевые слова, названия рисунков и тематические исследования.

Если сделать еще несколько шагов вперед, то это также можно использовать для улучшения структуры документа, определяемой используемыми стилями, чтобы переназначить документ для другого вывода, например HTML. Фактически, именно так создается документация Aspose, что позволяет протестировать Aspose.Words. Инструмент, созданный с использованием Aspose.Words, использует исходные документы Word и разбивает их на темы с определенными уровнями заголовков. С помощью Aspose.Words создается XML-файл, который используется для построения дерева навигации, которое вы можете видеть слева. А затем Aspose.Words преобразует каждую тему в HTML.

Решение для извлечения текста, отформатированного с использованием определенных стилей, из документа Word, как правило, экономично и просто с помощью Aspose.Words.

Решение

Чтобы проиллюстрировать, как легко Aspose.Words обрабатывает поиск содержимого на основе стилей, давайте рассмотрим пример. В этом примере мы собираемся извлечь текст, отформатированный с использованием определенного стиля абзаца и стиля символов, из образца документа Word. На высоком уровне это потребует:

  • Открываем документ Word с помощью класса Document.
  • Получение коллекций всех абзацев и всех прогонов в документе.
  • Выбираем только нужные абзацы и запускаем. В частности, мы извлекаем текст, отформатированный в стиле абзаца “Заголовок 1” и в стиле символов “Интенсивный акцент”, из этого примера документа Word.

working-with-styles-aspose-words-cpp-1

В этом примере документа текст, отформатированный в стиле абзаца “Заголовок 1”, содержит “Вставка вкладки”, “Быстрые стили” и “Тема”, а текст, отформатированный в стиле символов “Интенсивный акцент”, - это несколько вариантов текста, выделенного синим, курсивом, жирным шрифтом, например “галереи’ и ‘общий вид’.

Код

Реализация запроса, основанного на стиле, в объектной модели документа Aspose.Words довольно проста, поскольку она просто использует уже имеющиеся инструменты. Для этого решения реализованы два метода класса: ParagraphsByStyleName – Этот метод извлекает массив тех абзацев в документе, которые имеют определенное название стиля. RunsByStyleName – Этот метод извлекает массив тех фрагментов в документе, которые имеют определенное название стиля. Оба эти метода очень похожи, единственными различиями являются типы узлов и представление информации о стиле в узлах абзаца и запуска. Вот реализация ParagraphsByStyleName. В приведенном ниже примере найдите все абзацы, отформатированные в указанном стиле.

Также стоит отметить, что коллекция paragraphs не создает немедленных накладных расходов, поскольку абзацы загружаются в эту коллекцию только тогда, когда вы получаете доступ к элементам в них. Затем все, что вам нужно сделать, это просмотреть коллекцию, используя стандарт для каждого оператора, и добавить абзацы, имеющие указанный стиль, в массив paragraphsWithStyle. Название стиля Paragraph можно найти в свойстве Style. Name объекта Paragraph.ParagraphFormat. Реализация RunsByStyleName почти такая же, хотя мы, очевидно, используем NodeType.Run для извлечения узлов запуска. Свойство Font.Style объекта Run используется для доступа к информации о стиле в узлах Run. В примере below code найдены все прогоны, отформатированные в соответствии с указанным стилем.

Когда оба запроса будут реализованы, все, что вам нужно сделать, это передать объект document и указать названия стилей содержимого, которое вы хотите получить: в приведенном ниже примере выполняйте запросы и отображайте результаты. Вы можете скачать файл шаблона для этого примера здесь.

Конечный результат

Когда все будет сделано, при запуске примера отобразится следующий результат:

working-with-styles-aspose-words-cpp-2

Как вы можете видеть, это очень простой пример, показывающий количество и текст собранных абзацев и прогонов в образце документа Word.

Инструкция по вставке поля оглавления и работе с ним

Часто вам приходится работать с документами, содержащими оглавление (TOC). Используя Aspose.Words, вы можете вставить свое собственное оглавление или полностью перестроить существующее оглавление в документе, используя всего несколько строк кода. В этой статье описывается, как работать с полем оглавления, и демонстрируется:

  • Как вставить совершенно новый TOC
  • Обновите новые или существующие TOCs в документе.
  • Укажите параметры для управления форматированием и общей структурой оглавления.
  • Как изменить стили и внешний вид оглавления.
  • Как удалить все поле TOC вместе со всеми записями из документа целиком.

Вставка полей TC

Часто для TOC назначается определенная строка текста, которая помечается полем TC. Простой способ сделать это в MS Word - выделить текст и нажать ALT+SHIFT+O. При этом автоматически создается поле TC с использованием выделенного текста. Тот же метод может быть реализован с помощью кода. Приведенный ниже код найдет текст, соответствующий введенным данным, и вставит поле TC в ту же позицию, что и текст. Код основан на том же методе, который использовался в статье. В приведенном ниже примере показано, как найти и вставить поле TC в текст документа.

Изменить оглавление

Измените форматирование стилей

При форматировании записей в TOC не используются оригинальные стили отмеченных записей, вместо этого каждый уровень форматируется с использованием эквивалентного стиля TOC. Например, первый уровень в TOC отформатирован в стиле TOC1, второй уровень отформатирован в стиле TOC2 и так далее. Это означает, что для изменения внешнего вида TOC эти стили должны быть изменены. В Aspose.Words эти стили представлены параметрами, не зависящими от языка (от StyleIdentifier.TOC1 до StyleIdentifier.TOC9), и могут быть извлечены из коллекции Document.Styles с использованием этих идентификаторов. Как только соответствующий стиль документа будет получен, форматирование для этого стиля может быть изменено. Любые изменения в этих стилях будут автоматически отражены в TOCs документе. В примере below code изменяется свойство форматирования, используемое в стиле первого уровня TOC.

Также полезно отметить, что любое прямое форматирование абзаца (определенное в самом абзаце, а не в стиле), помеченное для включения как TOC, будет скопировано в запись в оглавлении. Например, если стиль заголовка 1 используется для выделения содержимого TOC, и этот стиль имеет полужирное оформление, в то время как к абзацу также непосредственно применяется курсивное оформление. Результирующая запись TOC не будет выделена жирным шрифтом, поскольку это является частью стилистического оформления, однако она будет выделена курсивом, поскольку она отформатирована непосредственно в абзаце. Вы также можете управлять форматированием разделителей, используемых между каждой записью и номером страницы. По умолчанию это пунктирная линия, которая пересекается с нумерацией страниц с помощью символа табуляции и правой точки табуляции, расположенной рядом с правым полем.

Используя класс Style, полученный для конкретного уровня TOC, который вы хотите изменить, вы также можете изменить его отображение в документе. Чтобы изменить его отображение, сначала необходимо вызвать Style.ParagraphFormat для получения форматирования абзаца для стиля. Из этого можно извлечь значения табуляции, вызвав ParagraphFormat.TabStops, и изменить соответствующую позицию табуляции. Используя этот же метод, саму табуляцию можно переместить или вообще удалить. В примере below code показано, как изменить положение правой точки табуляции в TOC соответствующих абзацах. Вы можете скачать файл шаблона для этого примера здесь.

Удаление оглавления из документа

Оглавление можно удалить из документа, удалив все узлы, находящиеся между узлами FieldStart и FieldEnd поля TOC. Приведенный ниже код демонстрирует это. Удаление поля TOC проще, чем обычного поля, поскольку мы не отслеживаем вложенные поля. Вместо этого мы проверяем, что узел FieldEnd имеет тип FieldType.FieldTOC, что означает, что мы столкнулись с окончанием текущего оглавления. В данном случае этот метод можно использовать, не беспокоясь о каких-либо вложенных полях, поскольку мы можем предположить, что в любом правильно сформированном документе не будет полностью вложенного поля TOC внутри другого поля TOC. Сначала собираются и сохраняются узлы FieldStart каждого TOC. Указанный TOC затем перечисляется, чтобы все узлы в поле были посещены и сохранены. Затем узлы удаляются из документа. В примере below code показано, как удалить указанный TOC из документа. Вы можете скачать файл шаблона для этого примера здесь.

Вставьте разделитель стилей для размещения различных стилей абзацев

Разделитель стилей можно добавить в конец абзаца, используя сочетание клавиш Ctrl + Alt + Enter в MS Word. Эта функция позволяет использовать два разных стиля абзаца в одном логичном печатном абзаце. Если вы хотите, чтобы в оглавлении отображался текст из начала определенного заголовка, но не весь заголовок целиком, вы можете использовать эту функцию. В примере below code показано, как вставить разделитель стилей, чтобы использовать разные стили абзацев.

Скопируйте все стили из шаблона

Бывают случаи, когда требуется скопировать все стили из одного документа в другой. Вы можете использовать метод Document.CopyStylesFromTemplate для копирования стилей из указанного шаблона в документ. При копировании стилей из шаблона в документ стили с одинаковыми именами в документе переопределяются в соответствии с описаниями стилей в шаблоне. Уникальные стили из шаблона копируются в документ. Уникальные стили в документе остаются неизменными. В примере below code показано, как копировать стили из одного документа в другой.