Робота з стильами та темами

Про нас StyleCollection Клас використовується для керування вбудованими та застосувати користувацькі налаштування до стилів.

Як витягувати контент на основі стилів

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

Для того, щоб зробити це кілька кроків далі, це також може бути використаний для важелювання структури документа, визначених стилях він використовує, для повторного використання документа для іншого виходу, наприклад HTML. Це насправді, як будується документація Aspose, що надходить Aspose.Words до тесту. Інструмент вбудований за допомогою Aspose.Words введіть документи Word і розбиває їх на теми на певних рівнях заголовка. Файл XML виробляється за допомогою Aspose.Words що використовується для побудови навігаційної деревини, ви можете побачити на лівому. А потім Aspose.Words перетворює кожну тему в HTML. Розчин для перерозподілу тексту, відформатований певними стилями в документі Word, як правило, економічним і прямим Aspose.Wordsй

Ілюструвати, як легко Aspose.Words ручка ретривування контенту на основі стилів, розглянемо приклад. У цьому прикладі ми будемо отримувати текстові форматування з певним стилем абзацу та стилем персонажа з зразка документа Word.

На високому рівні це буде залучено:

1,1 км Відкриття документа Word за допомогою Document клас. 1,1 км Отримання зібрань всіх абзаців і всіх проходжень у документі. 1,1 км Вибравши тільки потрібні абзаци і проходи.

Зокрема, ми отримаємо текст, відформатований за допомогою пункту “Налаштування 1” та стилю “Intense Emphasis” з цього зразка документа Word

working-with-styles-aspose-words-java-1

У цьому документі про зразок текст відформатований за допомогою пункту “Налаштування 1” є “Вставити вкладку”, “Швидкі стилі” та “Theme”, а текст відформатований за стилем “Intense акцент” – це кілька екземплярів синього, italicized, сміливого тексту, таких як “галереї” та “загальний погляд”.

Реалізація стильного запиту досить проста в Aspose.Words Модель об’єкта документа, як це просто використовує інструменти, які вже знаходяться в місці. Для цього рішення реалізуються два методи класу:

1,1 км ParagraphsByStyleName до Цей метод отримує масив тих абзаців у документі, який має певну назву стилю. 1,1 км RunsByStyleName до Цей метод отримує масив тих, хто працює в документі, який має певну назву стилю.

Обидва ці методи дуже схожі, єдиними відмінностями є типи вузлів і представлення інформації стилю в абзаци і запускати вузли. Тут є імплементація ParagraphsByStyleName, що відображається в прикладі коду, наведеному нижче, щоб знайти всі абзаци, відформатовані за допомогою вказаного стилю.

// 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() майно нерухомості 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());

Коли все зроблено, запустити зразок буде відображати наступний вихід:

working-with-styles-aspose-words-java-2

Як ви можете побачити, це дуже простий приклад, показує кількість і текст зібраних абзаців і ведеться в зразка документа 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 включає такі публічні об’єкти:

  • до Головна
  • ТемиФонтс
  • Теми

Ось як можна отримати тематичні властивості:

// 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");