Работа со стилями и темами
The StyleCollection Класс используется для управления встроенными и применения пользовательских настроек к стилям.
Доступ к стилям
Вы можете получить набор стилей, определенных в документе, используя Document.Styles собственность. Эта коллекция содержит как встроенные, так и пользовательские стили в документе. Определенный стиль может быть получен по его имени / алии, идентификатору стиля или индексу. Следующий пример кода показывает, как получить доступ к набору стилей, определенных в документе.
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET | |
// The path to the documents directory. | |
string dataDir = RunExamples.GetDataDir_WorkingWithDocument(); | |
// Load the template document. | |
Document doc = new Document(dataDir + "TestFile.doc"); | |
// Get styles collection from document. | |
StyleCollection styles = doc.Styles; | |
string styleName = ""; | |
// Iterate through all the styles. | |
foreach (Style style in styles) | |
{ | |
if (styleName == "") | |
{ | |
styleName = style.Name; | |
} | |
else | |
{ | |
styleName = styleName + ", " + style.Name; | |
} | |
} |
Как извлечь контент на основе стилей
На простом уровне извлечение контента на основе стилей из документа Word может быть полезным для идентификации, перечисления и подсчета абзацев и прогонов текста, отформатированного в определенном стиле. Например, вам может потребоваться определить конкретные виды контента в документе, такие как примеры, заголовки, ссылки, ключевые слова, имена фигур и тематические исследования.
Чтобы сделать это еще на несколько шагов, можно также использовать структуру документа, определяемую используемыми стилями, для переназначения документа для другого вывода, такого как HTML. Именно так строится документация Aspose, ставя Aspose.Words На тест. Инструмент, построенный с использованием Aspose.Words берет исходные документы Word и разделяет их на темы на определенных уровнях заголовков. XML-файл создается с использованием Aspose.Words Используется для построения дерева навигации, которое можно увидеть слева. А потом Aspose.Words Преобразует каждую тему в HTML.
Решение для извлечения текста, отформатированного с определенными стилями в документе Word, обычно экономично и просто. Aspose.Words.
Решение
Чтобы показать, как легко Aspose.Words обрабатывает извлечение контента на основе стилей, давайте рассмотрим пример. В этом примере мы собираемся извлечь текст, отформатированный с определенным стилем абзаца и стилем символа из образца документа Word. На высоком уровне это будет включать: # Открытие документа Word с помощью Document Класс.# Получение коллекций всех параграфов и всех запускается в документе. Выберите только необходимые пункты и запустите. В частности, мы получим текст, отформатированный в стиле абзаца “Глава 1” и стиле персонажа “Интенсивный акцент” из этого образца документа Word.
В этом примере документа текст, отформатированный в стиле абзаца заголовка 1, представляет собой “Insert Tab”, “Quick Styles” и “Theme”, а текст, отформатированный в стиле символов “Intense emphasis”, представляет собой несколько экземпляров синего, курсивного, смелого текста, такого как “галереи” и “общий вид”.
Кодекс
Реализация стилистического запроса довольно проста в Aspose.Words Модель объекта документа, так как она просто использует инструменты, которые уже существуют. Для этого решения используются два метода классов: ParagraphsByStyleName - Этот метод извлекает массив из тех пунктов в документе, которые имеют определенное название стиля. RunsByStyleName - Этот метод извлекает множество тех заданий в документе, которые имеют определенное название стиля. Оба эти метода очень похожи, единственными отличиями являются типы узлов и представление информации о стиле в абзаце и узлах запуска. Вот пример реализации пунктов ByStyleName: Ниже приведены примеры всех абзацев, отформатированных в указанном стиле.
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET | |
public static ArrayList ParagraphsByStyleName(Document doc, string styleName) | |
{ | |
// Create an array to collect paragraphs of the specified style. | |
ArrayList paragraphsWithStyle = new ArrayList(); | |
// Get all paragraphs from the document. | |
NodeCollection paragraphs = doc.GetChildNodes(NodeType.Paragraph, true); | |
// Look through all paragraphs to find those with the specified style. | |
foreach (Paragraph paragraph in paragraphs) | |
{ | |
if (paragraph.ParagraphFormat.Style.Name == styleName) | |
paragraphsWithStyle.Add(paragraph); | |
} | |
return paragraphsWithStyle; | |
} |
Эта реализация также использует Document.GetChildNodes
Методика Document
класс, который возвращает совокупность всех узлов с указанным типом, которая в данном случае во всех пунктах.
Отметим, что второй параметр Document.GetChildNodes метод устанавливается true. Это заставляет Document.GetChildNodes метод рекурсивного выбора из всех узлов ребенка, а не выбора только ближайших детей.
Также стоит отметить, что сбор абзацев не создает непосредственных накладных расходов, потому что абзацы загружаются в эту коллекцию только при доступе к элементам в них. Затем все, что вам нужно сделать, это пройтись по коллекции, используя стандартный для каждого оператора и добавить абзацы, которые имеют указанный стиль к абзацам. С набором стилей. The Paragraph
Название стиля можно найти в Style.Name имуществом, Paragraph.ParagraphFormat объект. Реализация RunsByStyleName почти такая же, хотя мы, очевидно, используем NodeType.Run для извлечения запущенных узлов. The Font.Style свойство а Run объект используется для доступа к информации о стиле в Run Узлы. Ниже приведен пример всех прогонов, отформатированных с указанным стилем.
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET | |
public static ArrayList RunsByStyleName(Document doc, string styleName) | |
{ | |
// Create an array to collect runs of the specified style. | |
ArrayList runsWithStyle = new ArrayList(); | |
// Get all runs from the document. | |
NodeCollection runs = doc.GetChildNodes(NodeType.Run, true); | |
// Look through all runs to find those with the specified style. | |
foreach (Run run in runs) | |
{ | |
if (run.Font.Style.Name == styleName) | |
runsWithStyle.Add(run); | |
} | |
return runsWithStyle; | |
} |
Когда оба запроса реализованы, все, что вам нужно сделать, это передать объект документа и указать названия стилей контента, который вы хотите получить: Ниже приведен пример выполнения запросов и отображения результатов. Вы можете скачать файл шаблона этого примера из здесь.
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET | |
// The path to the documents directory. | |
string dataDir = RunExamples.GetDataDir_WorkingWithStyles(); | |
string fileName = "TestFile.doc"; | |
// Open the document. | |
Document doc = new Document(dataDir + fileName); | |
// Define style names as they are specified in the Word document. | |
const string paraStyle = "Heading 1"; | |
const string runStyle = "Intense Emphasis"; | |
// Collect paragraphs with defined styles. | |
// Show the number of collected paragraphs and display the text of this paragraphs. | |
ArrayList paragraphs = ParagraphsByStyleName(doc, paraStyle); | |
Console.WriteLine(string.Format("Paragraphs with \"{0}\" styles ({1}):", paraStyle, paragraphs.Count)); | |
foreach (Paragraph paragraph in paragraphs) | |
Console.Write(paragraph.ToString(SaveFormat.Text)); | |
// Collect runs with defined styles. | |
// Show the number of collected runs and display the text of this runs. | |
ArrayList runs = RunsByStyleName(doc, runStyle); | |
Console.WriteLine(string.Format("\nRuns with \"{0}\" styles ({1}):", runStyle, runs.Count)); | |
foreach (Run run in runs) | |
Console.WriteLine(run.Range.Text); |
Конечный результат
Когда все будет сделано, запуск образца будет отображать следующий вывод:
Как видите, это очень простой пример, показывающий количество и текст собранных абзацев и запускается в образце документа Word.
Все стили из шаблона
Бывают случаи, когда хочется скопировать все стили из одного документа в другой. Вы можете использовать Document.CopyStylesFromTemplate
метод копирования стилей из указанного шаблона в документ. Когда стили копируются из шаблона в документ, аналогичные стили в документе переопределяются, чтобы соответствовать описаниям стилей в шаблоне. Уникальные стили из шаблона копируются в документ. Уникальные стили в документе остаются нетронутыми. бытьlow code Пример показывает, как копировать стили из одного документа в другой.
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET | |
string fileName = dataDir + "template.docx"; | |
Document doc = new Document(fileName); | |
// Open the document. | |
Document target = new Document(dataDir + "TestFile.doc"); | |
target.CopyStylesFromTemplate(doc); | |
dataDir = dataDir + RunExamples.GetOutputFilePath(fileName); | |
doc.Save(dataDir); |
Как манипулировать Тематические свойства
Мы добавили основные API в Aspose.Words Доступ к свойствам темы документа. На данный момент это API Включает следующие общественные объекты:
- Тема
- Тематические фонтаны
- Тематические цвета
Вот как вы можете получить свойства темы:
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET | |
Document doc = new Document(dataDir); | |
Theme theme = doc.Theme; | |
// Major (Headings) font for Latin characters. | |
Console.WriteLine(theme.MajorFonts.Latin); | |
// Minor (Body) font for EastAsian characters. | |
Console.WriteLine(theme.MinorFonts.EastAsian); | |
// Color for theme color Accent 1. | |
Console.WriteLine(theme.Colors.Accent1); |
И вот как вы можете установить свойства темы:
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET | |
Document doc = new Document(dataDir); | |
Theme theme = doc.Theme; | |
// Set Times New Roman font as Body theme font for Latin Character. | |
theme.MinorFonts.Latin = "Times New Roman"; | |
// Set Color.Gold for theme color Hyperlink. | |
theme.Colors.Hyperlink = Color.Gold; |