Práce se styly a motivy
The StyleCollection třída se používá pro správu vestavěných a použití uživatelsky definovaných nastavení na styly.
Jak extrahovat obsah na základě stylů
Na jednoduché úrovni, získávání obsahu na základě stylů z dokumentu Word může být užitečné pro identifikaci, seznam a počítání odstavců a běží textu formátovaný s konkrétním stylem. Můžete například potřebovat určit konkrétní druhy obsahu v dokumentu, jako jsou příklady, tituly, reference, klíčová slova, jména postav a případové studie.
K tomu, aby to bylo ještě o několik kroků dále, lze toto použít také k využití struktury dokumentu definované styly, které používá, k opětovnému použití dokumentu pro jiný výstup, jako je HTML. Takhle se vlastně vytváří dokumentace Aspose, Aspose.Words do testu. Nástroj postavený pomocí Aspose.Words bere zdroj Word dokumenty a rozděluje je na témata na určité úrovni okruhu. XML soubor se vyrábí pomocí Aspose.Words který se používá ke stavbě navigačního stromu, který můžete vidět vlevo. A pak Aspose.Words převádí každé téma do HTML. Řešení pro získávání textu formátovaného určitými styly v dokumentu Word je typicky ekonomické a jednoduché použití Aspose.Words.
Znázornit, jak snadno Aspose.Words zvládá získávání obsahu na základě stylů, nechť se podívá na příklad. V tomto příkladu se chystáme získat text formátovaný podle konkrétního odstavce stylu a znakového stylu ze vzorku Word dokumentu.
Na vysoké úrovni to bude zahrnovat:
- Otevření dokumentu Word pomocí Document třída.
- Získávám sbírky všech odstavců a všechny běží v dokumentu.
- Výběr pouze požadovaných odstavců a běží.
Konkrétně získáme text formátovaný s paragrafem “Heading” a stylem “Intenzivní důraz” z tohoto dokumentu
V tomto vzorkovacím dokumentu je text formátovaný s odst. 1 písm. a) a text ve formátu “Intenzivní důraz” v textu “Insert Tab,” “Quick Styles” (Quick Styles) a “Theme” (Theme) a text ve formátu s “Intenzivním důrazem” stylem znaku je několik případů modrého, italikizovaného, tučného textu, jako jsou galerie a celkový vzhled.
Implementace stylového dotazu je poměrně jednoduché v Aspose.Words dokument objekt model, protože prostě používá nástroje, které jsou již na místě. Pro toto řešení jsou zavedeny dvě třídní metody:
- ParagraphsByStyleName? Tato metoda získává pole těchto odstavců v dokumentu, které mají specifický název stylu.
- RunsByStyleName? Tato metoda získává řadu těch, které běží v dokumentu, který má specifický název stylu.
Obě tyto metody jsou velmi podobné, jedinými rozdíly jsou typy uzlů a reprezentace stylových informací v odstavci a spustit uzly. Zde je implementace OdstavceByStyleJméno zobrazené v příkladu kódu uvedeném níže najít všechny odstavce formátované s uvedeným stylem.
// 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; | |
} |
Toto provádění také využívá Document.getChildNodes() způsob Document
třída, která vrací sbírku všech okamžitých dětských uzlů.
Stojí také za zmínku, že sbírka odstavců nevytváří bezprostřední režijní náklady, protože odstavce jsou do této sbírky vloženy pouze tehdy, když se k nim dostanete. Pak vše, co musíte udělat, je projít sbírku pomocí normy pro každého operátora a přidat odstavce, které mají uvedený styl k odstavcům Se stylovým polem. The Paragraph
název stylu naleznete v Style.getName() majetek Paragraph.getParagraphFormat() objekt.
Implementace RunsByStyleName je téměř stejná, i když samozřejmě používáme NodeType.Run
pro získání spuštěných uzlů. The Font.getStyle() vlastnictví a Run objekt se používá pro přístup ke stylovým informacím v Run uzly
Následující příklad kódu najde všechny běží formátované se zadaným stylem.
// 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; | |
} |
Následující příklad kódu spustí dotazy a výsledky zobrazení.
// 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()); |
Když je vše hotovo, spouštění vzorku zobrazí následující výstup:
Jak vidíte, je to velmi jednoduchý příklad, zobrazující číslo a text vybraných odstavců a běží ve výběrovém dokumentu Word.
Vložit stylový oddělovač pro různé odstíny
Oddělovač stylu lze přidat na konec odstavce pomocí klávesové zkratky Ctrl + Alt + Enter do MS Word. Tato funkce umožňuje dva různé odstíny používané v jednom logickém tištěném odstavci. Pokud chcete nějaký text od začátku určitého čísla, který se objeví v Obsahové tabulce, ale nechcete celý nadpis v Obsahové tabulce, můžete tuto funkci použít
Následující příklad kódu ukazuje, jak vložit oddělovač stylu, aby dal různé odstíny stylů
// 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); |
Kopírovat všechny styly ze šablony
Existují případy, kdy chcete zkopírovat všechny styly z jednoho dokumentu do druhého. Můžete použít Document.CopyStylesFromTemplate
způsob kopírování stylů z zadané šablony do dokumentu. Pokud jsou styly zkopírovány ze šablony do dokumentu, stejně jako-jmenované styly v dokumentu jsou definovány, aby odpovídaly stylu popisů v šabloně. Jedinečné styly ze šablony jsou kopírovány do dokumentu. Jedinečné styly v dokumentu zůstávají neporušené
Následující příklad kódu ukazuje, jak kopírovat styly z jednoho dokumentu do druhého.
// 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); |
Jak manipulovat Vlastnosti motivu
Přidali jsme základní API v Aspose.Words přístup k tématickým vlastnostem dokumentu. Prozatím, tohle API zahrnuje tyto veřejné předměty:
- Motiv
- ThemeFonts
- ThemeColors
Zde je způsob, jak můžete získat vlastnosti motivu:
// 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()); |
A tady je, jak si můžete nastavit vlastnosti motivu:
// 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"); |