Работа със стилове и теми
На 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 и ги разделя на теми на определени нива на заглавие. Name Aspose.Words която се използва за изграждане на навигационното дърво, което можете да видите вляво. И тогава… Aspose.Words превръща всяка тема в HTML.
Решението за извличане на текст, форматиран със специфични стилове в документ на Word, обикновено е икономично и лесно използване Aspose.Words.
Решението
За да илюстрирам колко лесно Aspose.Words дръжки Retrieving съдържание въз основа на стилове, нека да разгледаме един пример. В този пример ние ще изтеглим текст, обозначен с определен стил на параграфа и стил на характера от примерен документ на Word. На високо ниво това ще включва:# Отваряне на Word документ с помощта на Document Клас. Получаване на колекции от всички параграфи и всички работи в документа.# Избор само на необходимите точки и работи. По-точно, ние ще набавим текст, на който се нареждат с настоящето 1. .. ..
В този примерен документ, текстът, на който се нарежда стилът на нареждане на 1 и т.н., е в стила на “Инсерт” (Insert) и “Quick Styles” (Quick Styles) и “Theme” (Theme) и текстът, обозначен с “Интензивен акцент” стилът на характера е няколко случая на синьо, италицизирано, смел текст, като например галерии (galleries) и “overall person.”
Код
Изпълнението на един стил-базиран заявка е доста проста в 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 метод да изберете от всички детски възли рекурсивно, вместо да избирате само непосредствените деца.
Също така си струва да се отбележи, че събирането на точки не създава непосредствени режийни разходи, тъй като параграфи са натоварени в тази колекция само когато имате достъп до елементи в тях. След това, всичко, което трябва да направите, е да преминете през колекцията, използвайки стандарта за всеки оператор и да добавите точки, които имат посочения стил към параграфите Със Стийл Рейд. На Paragraph
име на стила можете да намерите в Style.Name собственост на Paragraph.ParagraphFormat Възразявам. Изпълнението на RunsByStyleName е почти същото, въпреки че очевидно използваме NodeType.Run за да си върнем възлите. На Font.Style собственост на a 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 включва следните обществени обекти:
- Тема
- ThemeFonts
- ТемаЦвят
Ето как можете да получите тематични свойства:
// 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; |