Работа със стилове и теми
На StyleCollection класът се използва за управление на вградени и прилагане на потребителски настройки в стилове.
Как да извлечете съдържание въз основа на стилове
На просто ниво, извличането на съдържанието въз основа на стилове от документ на Word може да бъде полезно за идентифициране, изброяване и преброяване на абзаци и редове от текст, форматирани със специфичен стил. Например, може да се наложи да идентифицирате определени видове съдържание в документа, като например примери, заглавия, препратки, ключови думи, имена на фигури и казуси.
За да направите това няколко стъпки по-нататък, това може да се използва и за използване на структурата на документа, дефиниран от стиловете, които използва, за да пренасочи документа към друг изход, като HTML. Това е всъщност начина, по който се изгражда документацията Aspose, поставяйки Aspose.Words на теста. Инструмент, построен с помощта на Aspose.Words взема документите на източника Word и ги разделя на теми на определени нива. Name Aspose.Words която се използва за изграждане на навигационното дърво, което можете да видите отляво. И тогава… Aspose.Words превръща всяка тема в HTML. Решението за извличане на текст, форматиран със специфични стилове в документ на Word, обикновено е икономично и лесно използване Aspose.Words.
За да илюстрирам колко лесно Aspose.Words дръжки извличане на съдържание въз основа на стилове, нека да разгледаме един пример. В този пример ние ще изтеглим текст, обозначен с определен стил на параграфа и стил на характера от примерен документ на Word.
На високо ниво това ще включва:
- Отваряне на Word документ с помощта на Document Клас.
- Получаване на колекции от всички параграфи и всички работи в документа.
- Избор само на необходимите точки и работи.
По-точно, ще набавим текст под формата на надпис с настоящето 1 по-горе стил и стила на характер от тази извадка Word документ
В този примерен документ, текстът, на който се нарежда стилът на нареждане на 1 и т. н., е по-голям от този на “Интензивен” стил.
Изпълнението на стилова заявка е доста проста в Aspose.Words документ обект модел, тъй като тя просто използва инструменти, които вече са в сила. За това решение се прилагат два метода от клас:
- ParagraphsByStyleName - Да. Този метод извлича масив от тези параграфи в документа, който има специфично име на стила.
- RunsByStyleName - Да. Този метод извлича масив от тези работи в документа, който има специфично име стил.
И двата метода са много сходни, единствените разлики са типовете възли и представянето на информацията за стила в рамките на параграфа и се движат възли. Това е прилагането на §sByStyleName, показано в примера с кода, даден по-долу, за да намерите всички параграфи, форматирани с посочения стил.
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java | |
public static ArrayList<Paragraph> paragraphsByStyleName(Document doc, String styleName) throws Exception { | |
// Create an array to collect paragraphs of the specified style. | |
ArrayList<Paragraph> 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. | |
for (Paragraph paragraph : (Iterable<Paragraph>) paragraphs) { | |
if (paragraph.getParagraphFormat().getStyle().getName().equals(styleName)) | |
paragraphsWithStyle.add(paragraph); | |
} | |
return paragraphsWithStyle; | |
} |
Това изпълнение също използва Document.getChildNodes() метод на Document
Клас, който връща колекция от всички незабавни детски възли.
Също така си струва да се отбележи, че събирането на точки не създава незабавни режийни разходи, защото параграфи са натоварени в тази колекция само когато имате достъп до елементи в тях. След това, всичко, което трябва да направите, е да преминете през колекцията, използвайки стандарта за всеки оператор и да добавите точки, които имат посочения стил към параграфите Със Стайл Ред. На Paragraph
име на стила можете да намерите в Style.getName() собственост на Paragraph.getParagraphFormat() Възразявам.
Изпълнението на RunsByStyleName е почти същото, въпреки че очевидно използваме NodeType.Run
за да си върнем възлите. На Font.getStyle() собственост на a Run обект се използва за достъп до информация стил в Run Възли
Следният пример за код намира всички работи, форматирани с посочения стил.
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java | |
public static ArrayList<Run> runsByStyleName(Document doc, String styleName) throws Exception { | |
// Create an array to collect runs of the specified style. | |
ArrayList<Run> 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. | |
for (Run run : (Iterable<Run>) runs) { | |
if (run.getFont().getStyle().getName().equals(styleName)) | |
runsWithStyle.add(run); | |
} | |
return runsWithStyle; | |
} |
Следният пример за код стартира заявки и показва резултатите.
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java | |
// Open the document. | |
Document doc = new Document(dataDir + "TestFile.doc"); | |
// Define style names as they are specified in the Word document. | |
final String PARA_STYLE = "Heading 1"; | |
final String RUN_STYLE = "Intense Emphasis"; | |
// Collect paragraphs with defined styles. | |
// Show the number of collected paragraphs and display the text of this paragraphs. | |
ArrayList<Paragraph> paragraphs = paragraphsByStyleName(doc, PARA_STYLE); | |
System.out.println(java.text.MessageFormat.format("Paragraphs with \"{0}\" styles ({1}):", PARA_STYLE, paragraphs.size())); | |
for (Paragraph paragraph : paragraphs) | |
System.out.print(paragraph.toString(SaveFormat.TEXT)); | |
// Collect runs with defined styles. | |
// Show the number of collected runs and display the text of this runs. | |
ArrayList<Run> runs = runsByStyleName(doc, RUN_STYLE); | |
System.out.println(java.text.MessageFormat.format("\nRuns with \"{0}\" styles ({1}):", RUN_STYLE, runs.size())); | |
for (Run run : runs) | |
System.out.println(run.getRange().getText()); |
Когато всичко е готово, стартирането на пробата ще покаже следния изход:
Както можете да видите, това е много прост пример, който показва номера и текста на събраните точки и работи в образеца Word документ.
Вмъкване на разделител на стила за поставяне на различни стилове
Разделителят на стила може да бъде добавен в края на параграф, като се използва Ctrl + Alt + Enter Keyboard Shortcut в MS Word. Тази функция позволява два различни стила на параграфа, използвани в един логически отпечатан абзац. Ако искате някой текст от началото на определена функция да се появи в Съдържание, но не искате цялата функция в Съдържание, можете да използвате тази функция
Следният пример за код показва как да се въведе разделител на стила, за да се поставят различни стилове на параграф
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java | |
Document doc = new Document(); | |
DocumentBuilder builder = new DocumentBuilder(doc); | |
Style paraStyle = builder.getDocument().getStyles().add(StyleType.PARAGRAPH, "MyParaStyle"); | |
paraStyle.getFont().setBold(false); | |
paraStyle.getFont().setSize(8); | |
paraStyle.getFont().setName("Arial"); | |
// Append text with "Heading 1" style. | |
builder.getParagraphFormat().setStyleIdentifier(StyleIdentifier.HEADING_1); | |
builder.write("Heading 1"); | |
builder.insertStyleSeparator(); | |
// Append text with another style. | |
builder.getParagraphFormat().setStyleName(paraStyle.getName()); | |
builder.write("This is text with some other formatting "); | |
dataDir = dataDir + "InsertStyleSeparator_out.doc"; | |
doc.save(dataDir); |
Копиране на всички стилове от шаблона
Има случаи, когато искате да копирате всички стилове от един документ в друг. Можеш да използваш Document.CopyStylesFromTemplate
метод за копиране на стилове от посочения шаблон в документ. Когато стиловете се копират от шаблон в документ, подобни стилове в документа се променят, за да съответстват на описанието на стила в шаблона. Уникалните стилове от шаблона се копират в документа. Уникалните стилове в документа остават непокътнати
Следният пример за код показва как да копирате стилове от един документ в друг.
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java | |
Document doc = new Document(dataDir + "template.docx"); | |
Document target = new Document(dataDir + "TestFile.doc"); | |
target.copyStylesFromTemplate(doc); | |
dataDir = dataDir + "CopyStyles_out.docx"; | |
doc.save(dataDir); |
Как да манипулирате Настройки на темата
Ние добавихме основни API в Aspose.Words за достъп до тематичните свойства на документа. За сега, това API включва следните обществени обекти:
- Тема
- ThemeFonts
- ThemeColors
Ето как можете да получите тематични свойства:
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java | |
// The path to the documents directory. | |
String dataDir = Utils.getDataDir(GetThemeProperties.class); | |
Document doc = new Document(dataDir + "Document.doc"); | |
Theme theme = doc.getTheme(); | |
// Major (Headings) font for Latin characters. | |
System.out.println(theme.getMajorFonts().getLatin()); | |
// Minor (Body) font for EastAsian characters. | |
System.out.println(theme.getMinorFonts().getEastAsian()); | |
// Color for theme color Accent 1. | |
System.out.println(theme.getColors().getAccent1()); |
И ето как можете да зададете тема:
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java | |
// The path to the documents directory. | |
String dataDir = Utils.getDataDir(SetThemeProperties.class); | |
Document doc = new Document(dataDir + "Document.doc"); | |
Theme theme = doc.getTheme(); | |
// Set Times New Roman font as Body theme font for Latin Character. | |
theme.getMinorFonts().setLatin("Algerian"); | |
// Set Color.Gold for theme color Hyperlink. | |
theme.getColors().setHyperlink(java.awt.Color.DARK_GRAY); | |
doc.save(dataDir + "output.doc"); |