Współpraca ze Styles i Themes
W StyleCollection klasa jest używana do zarządzania built- in i stosowania ustawień zdefiniowanych przez użytkownika do stylów.
Jak ekstrahować zawartość na stylach
Na prostym poziomie, pobieranie zawartości opartej na stylach z dokumentu Word może być przydatne do identyfikacji, listy i liczenia akapitów i rund tekstu sformatowanego w określonym stylu. Na przykład, może być konieczne zidentyfikowanie poszczególnych rodzajów treści w dokumencie, takich jak przykłady, tytuły, referencje, słowa kluczowe, nazwy postaci i studia przypadku.
Aby zrobić to kilka kroków dalej, może to być również wykorzystane do wykorzystania struktury dokumentu, określonego przez jego style, do ponownego przeznaczenia dokumentu dla innego wyjścia, takich jak HTML. W ten sposób buduje się dokumentację pozycjonowania Aspose.Words do testu. Narzędzie zbudowane przy użyciu Aspose.Words bierze dokumenty źródłowe Word i dzieli je na tematy na określonych poziomach nagłówków. Plik XML jest wytwarzany przy użyciu Aspose.Words który jest używany do budowy drzewa nawigacyjnego można zobaczyć po lewej stronie. I wtedy Aspose.Words konwertuje każdy temat na HTML. Rozwiązanie do pobierania tekstu sformatowanego z konkretnych stylów w dokumencie Word jest zazwyczaj ekonomiczne i proste przy użyciu Aspose.Words.
Aby zilustrować jak łatwo Aspose.Words obsługuje pobieranie treści w oparciu o style, spójrzmy na przykład. W tym przykładzie, mamy zamiar pobrać tekst sformatowany z określonego stylu paragrafu i stylu postaci z przykładowego dokumentu Word.
Na wysokim szczeblu będzie to obejmować:
- Otwieranie dokumentu Word za pomocą Document Klasa.
- Pobieranie zbiorów wszystkich akapitów i wszystkich punktów znajduje się w dokumencie.
- Wybiera tylko wymagane akapity i biegnie.
W szczególności, odzyskamy tekst sformatowany w stylu paragrafu ‘Nagłówek 1’ i stylu znaków ‘Intensywne podkreślenie’ z tego przykładowego dokumentu Word
W tym przykładowym dokumencie tekst sformatowany w stylu “Nagłówek 1” to “Wstaw Tab”, “Szybkie Style” i “Temat”, a tekst sformatowany w stylu “Intensywny nacisk” to kilka instancji niebieskiego, italicyzowanego, pogrubionego tekstu, takiego jak “galerie” i “ogólny wygląd”.
Wdrożenie zapytań opartych na stylach jest dość proste w Aspose.Words dokumentuj model obiektu, ponieważ po prostu używa narzędzi, które są już dostępne. Dla tego rozwiązania stosowane są dwie metody klasy:
- ParagraphsByStyleName - Metoda ta pobiera tablicę tych akapitów w dokumencie o określonej nazwie stylu.
- RunsByStyleName - Metoda ta pobiera tablicę tych uruchomień w dokumencie, które mają określoną nazwę stylu.
Obie te metody są bardzo podobne, jedynymi różnicami są typy węzłów i reprezentacja informacji stylów w ramach akapitu i uruchomić węzły. Oto implementacja ParagraphsByStyleName pokazana w przykładzie kodu podanym poniżej, aby znaleźć wszystkie akapity sformatowane w określonym stylu.
// 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; | |
} |
Wdrożenie Document.getChildNodes() Metoda Document
klasa, która zwraca kolekcję wszystkich bezpośrednich węzłów dziecięcych.
Warto również zaznaczyć, że kolekcja akapitów nie tworzy natychmiastowej nagłośnienia, ponieważ akapity są ładowane do tej kolekcji tylko wtedy, gdy dostęp do elementów w nich. Następnie wystarczy przejść przez kolekcję, używając standardowego operatora foreach i dodać akapity, które mają określony styl do akapitów System WithStyle. W Paragraph
nazwa stylu można znaleźć w Style.getName() Własność Paragraph.getParagraphFormat() obiekt.
Wdrożenie RunsByStyleName jest prawie takie samo, chociaż oczywiście używamy NodeType.Run
Odzyskać węzły. W Font.getStyle() własność Run obiekt jest używany do dostępu do informacji stylu w Run węzły
Poniższy przykład kodu znajduje wszystkie działa sformatowane w określonym stylu.
// 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; | |
} |
Poniższy przykład kodu uruchamia zapytania i wyświetla wyniki.
// 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()); |
Gdy wszystko jest zrobione, uruchomiona próbka wyświetli następujące wyjście:
Jak widzicie, jest to bardzo prosty przykład, pokazujący liczbę i tekst zebranych akapitów i działa w przykładowym dokumencie Word.
Wstaw separator stylu, aby umieścić różne style paragrafów
Separator stylu można dodać do końca paragrafu używając Ctrl + Alt + Enter Skrót klawiatury do MS Word. Funkcja ta pozwala na dwa różne style paragrafów stosowane w jednym logicznym drukowanym akapicie. Jeśli chcesz, aby tekst od początku danego nagłówka pojawił się w tabeli treści, ale nie chcesz całej pozycji w tabeli treści, możesz użyć tej funkcji
Poniższy przykład kodu pokazuje, jak umieścić separator stylów, aby umieścić różne style paragrafów
// 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); |
Kopiuj wszystkie style z szablonu
Istnieją przypadki, gdy chcesz skopiować wszystkie style z jednego dokumentu do drugiego. Można użyć Document.CopyStylesFromTemplate
metoda kopiowania stylów z określonego szablonu na dokument. Kiedy style są kopiowane z szablonu do dokumentu, jak - nazwane style w dokumencie są ponownie zdefiniowane, aby dopasować opisy stylu w szablonie. Unikalne style szablonu są kopiowane do dokumentu. Unikalne style w dokumencie pozostają nienaruszone
Poniższy przykład kodu pokazuje jak kopiować style z jednego dokumentu do drugiego.
// 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 manipulować Właściwości motywu
Dodaliśmy podstawowe API w Aspose.Words dostęp do właściwości motywu dokumentu. Na razie to API obejmuje następujące obiekty publiczne:
- Motyw
- ThemeFonts
- ThemeColors
Oto jak można uzyskać właściwości motywu:
// 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 oto jak można ustawić właściwości motywu:
// 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"); |