Werken met Styles en Thema's

De StyleCollection klasse wordt gebruikt om ingebouwde instellingen te beheren en toe te passen op stijlen.

Hoe inhoud te extraheren op basis van stijlen

Op een eenvoudig niveau, het ophalen van de inhoud op basis van stijlen uit een Word-document kan nuttig zijn om te identificeren, lijst en tellen van de paragrafen en het uitvoeren van tekst geformatteerd met een specifieke stijl. Zo moet u bijvoorbeeld bepaalde soorten inhoud in het document identificeren, zoals voorbeelden, titels, referenties, trefwoorden, figurennamen en case studies.

Om dit nog een paar stappen verder te zetten, kan dit ook gebruikt worden om de structuur van het document, gedefinieerd door de stijlen die het gebruikt, te benutten om het document te hergebruiken voor een andere uitvoer, zoals HTML. Dit is in feite hoe de Aspose documentatie wordt gebouwd, Aspose.Words op de test. Een gereedschap gebouwd met behulp van Aspose.Words neemt de bron Word-documenten en splitst ze in onderwerpen op bepaalde hoofdniveaus. Een XML-bestand wordt aangemaakt met behulp van Aspose.Words die gebruikt wordt om de navigatieboom te bouwen die je links kunt zien. En toen Aspose.Words zet elk onderwerp om in HTML. De oplossing voor het ophalen van tekst geformatteerd met specifieke stijlen in een Word-document is typisch economisch en eenvoudig met behulp van Aspose.Words.

Om te illustreren hoe gemakkelijk Aspose.Words behandelt het ophalen van inhoud op basis van stijlen, laten we kijken naar een voorbeeld. In dit voorbeeld gaan we tekst ophalen die is geformatteerd met een specifieke paragraafstijl en een karakterstijl uit een voorbeeld Word-document.

Op hoog niveau gaat het hierbij om:

  1. Een Word-document openen met behulp van de Document Klasse.
  2. Verzamelen van alle paragrafen en alle draait in het document.
  3. Alleen de vereiste alinea’s en runs selecteren.

In het bijzonder, zullen we ophalen tekst geformatteerd met de

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

In dit sample document, de tekst geformatteerd met de

De implementatie van een op stijl gebaseerde query is vrij eenvoudig in de Aspose.Words document object model, omdat het gewoon gebruik maakt van tools die al op zijn plaats. Voor deze oplossing worden twee klassemethoden geïmplementeerd:

  1. ParagraphsByStyleName Wat? Deze methode haalt een reeks van die paragrafen in het document op die een specifieke stijlnaam hebben.
  2. RunsByStyleName Wat? Deze methode haalt een reeks van die runs op in het document met een specifieke stijlnaam.

Beide methoden zijn zeer vergelijkbaar, de enige verschillen zijn de knooppunt types en de weergave van de stijl informatie binnen de paragraaf en run nodes. Hier is een implementatie van alinea’sByStyleName weergegeven in de code voorbeeld hieronder om alle alinea’s geformatteerd met de opgegeven stijl te vinden.

// 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;
}

Deze uitvoering maakt ook gebruik van de Document.getChildNodes() methode van de Document klasse, die een verzameling van alle directe kindknooppunten retourneert.

Het is ook de moeite waard erop te wijzen dat de alinea’s collectie niet een onmiddellijke overhead omdat de alinea’s worden geladen in deze collectie alleen wanneer u toegang tot items in hen. Vervolgens hoeft u alleen maar door de collectie te gaan met behulp van de standaard voor elke operator en alinea’s toe te voegen die de gespecificeerde stijl hebben aan de alinea’s. Met Style array. De Paragraph stijl naam kan worden gevonden in de Style.getName() eigendom van de Paragraph.getParagraphFormat() object.

De implementatie van RunsByStyleName is bijna hetzelfde, hoewel we duidelijk gebruik maken van NodeType.Run om run nodes op te halen. De Font.getStyle() eigendom van een Run object wordt gebruikt voor toegang tot stijl informatie in de Run knooppunten

Het volgende voorbeeld van code vindt alle geformatteerde programma’s met de opgegeven stijl.

// 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;
}

De volgende code voorbeeld run queries en weergave resultaten.

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

Wanneer alles klaar is, zal het uitvoeren van de sample de volgende uitvoer weergeven:

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

Zoals u kunt zien, is dit een zeer eenvoudig voorbeeld, met het nummer en de tekst van de verzamelde paragrafen en loopt in het voorbeeld Word document.

Stijlscheiding invoegen om verschillende alineastijlen in te voegen

De stijlscheiding kan worden toegevoegd aan het einde van een alinea met behulp van de Ctrl + Alt + Enter Keyboard Sneltoets in MS Word. Deze functie maakt het mogelijk om twee verschillende alineastijlen gebruikt in een logische afgedrukte paragraaf. Als u wilt dat een tekst vanaf het begin van een bepaalde rubriek in een Inhoudsopgave verschijnt, maar niet wilt dat de hele rubriek in de Inhoudsopgave staat, kunt u deze functie gebruiken

Het volgende voorbeeld van code laat zien hoe je een scheidingsteken invoegt om verschillende alineastijlen in te voegen

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

Alle stijlen van sjabloon kopiëren

Er zijn gevallen waarin u alle stijlen van het ene document naar het andere wilt kopiëren. U kunt de Document.CopyStylesFromTemplate methode om stijlen van het opgegeven sjabloon naar een document te kopiëren. Wanneer stijlen worden gekopieerd van een sjabloon naar een document, worden gelijknamige stijlen in het document geherdefinieerd om de stijlbeschrijvingen in het sjabloon aan te passen. Unieke stijlen van het sjabloon worden gekopieerd naar het document. Unieke stijlen in het document blijven intact

Het volgende voorbeeld van code laat zien hoe je stijlen van het ene document naar het andere kopieert.

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

Hoe te Manipuleren Themaeigenschappen

Wij hebben de basis API in Aspose.Words toegang tot de eigenschappen van documentthema’s. Voor nu, dit API omvat de volgende openbare objecten:

  • Thema
  • ThemeFonts
  • Themakleuren

Hier is hoe u kunt krijgen thema eigenschappen:

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

En hier is hoe u thema eigenschappen kunt instellen:

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