Stiller ve Temalar ile Çalışmak
The StyleCollection sınıfı yerleşik ayarları yönetmek ve kullanıcı tanımlı kurallara uygulamak için kullanılır.
Nasıl İçerik Stilleri Tabanlı Çıkarılır
Basit bir düzeyde, belirli stillere dayalı içerikten Word belgesinden yararlanmak, alıntı, liste ve sayma paragrafları ve metin biçimlendirmeleri ile ilgili belirli durumları tespit etmek için yararlı olabilir. Örneğin, belgedeki belirli türdeki içeriği tanımlamanız gerekebilir, mesela örnekler, başlıklar, referanslar, anahtar kelimeler, figür adları ve vaka çalışmaları.
Bunu birkaç adım daha ileriye götürmek için, bu aynı zamanda belgenin yapısı, onun kullandığı stiller tarafından tanımlanan, başka bir çıktıya yeniden amaçlanması için kullanılabilecek şekilde de kullanılabilir. Aslında, Aspose’un belgesi budur, Aspose.Words test ediyor. Aspose.Words kullanılarak inşa edilmiş bir araç, kaynak Word belgelerini belirli başlık seviyelerinde bölümlere ayırır. Aspose.Words’dan elde edilen XML dosyası sol taraftaki gördüğünüz gezinti ağacının oluşturulması için kullanılır ve sonra Aspose.Words her konuyu HTML’ye dönüştürür. Word belgesindeki belirli stillerle biçimlendirilmiş metni almanın çözümü tipik olarak Aspose.Words kullanarak ekonomik ve doğrudan olur.
Bunun nasıl kolayca bir Aspose.Words içeriği stil temelinde alacağınızı göstermek için, örnek bir inceleyelim. Bu örnekte, belirli bir paragraf stili ve karakter stili ile biçimlendirilmiş metin almak için bir örnek Word belgesi kullanacağız.
Yüksek düzeyde, bu şunları içerecek:
- Bir Word belgesini Document sınıfını kullanarak açmak.
- Tüm paragrafların ve belgenin tüm satırlarının bir koleksiyonunu al.
- Sadece gerekli olan paragrafları ve satırları seçin.
Özellikle, bu örnek Word belgesinden metin biçimlendirilmiş ‘Heading 1’ paragraf stili ve ‘Intense Emphasis’ karakter stilini alacağız
Bu örnek belge içinde, ‘Başlık 1’ paragraf stilleriyle biçimlendirilmiş metin ‘Ekle Tablo’, ‘Hızlı Biçim’, ve ‘Tema’, ve ‘Intense Emphasis’ karakter stiliyle biçimlendirilmiş metin birkaç mavi, italik, kalın metin örnekleri gibi ‘galeriler’ ve ‘genel görünüm’.
Stil tabanlı sorguların uygulanması, Aspose.Words belge nesne modelinde oldukça basittir, çünkü basitçe zaten var olan araçlar kullanılır. Bu çözüm için iki sınıf yöntemi uygulanır:
- ParagraphsByStyleName – Bu yöntem, belgedeki belirli bir stil adı olan paragrafların dizisini elde eder.
- RunsByStyleName – Bu yöntem belge içinde belirli bir stil adı olan bu çalıştırmaları içeren bir dizi alır.
Her iki yöntem de çok benzer, tek farklılıklar düğüm türleri ve paragraf ve dizi düğümleri içindeki stil bilgilerinin temsilidir. Aşağıdaki kod örneğinde gösterilen ParagraphsByStyleName uygulamasının bir uygulaması aşağıda verilmiştir. Tüm paragrafları belirtilen biçimde biçimlendirilmiş olarak bulmak için.
// 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; | |
} |
Bu uygulama ayrıca Document.getChildNodes() yöntemini de kullanır Document
sınıfı, tüm anında alt düğümlerin bir koleksiyonunu döndürür.
Ayrıca, paragraf koleksiyonunun bir anında yükleme yükü oluşturmadığı gerektiğini belirtmek de değer; çünkü paragraflar yalnızca bunlara eriştiğinizde bu koleksiyona yüklenir. O zaman yapmanız gereken tek şey standart foreach operatörünü kullanarak koleksiyona gitmek ve Paragraph
adlı stil numarasını içeren paragrafları “paragraflarlaStil” dizisine eklemektir. Paragraph.getParagraphFormat() nesnesinin Style.getName() özelliğinde 2 numaralı stil adı bulunabilir.
RunsByStyleName uygulamasının uygulanması aynı neredeyse, fakat biz tabii ki run düğümlerini almak için NodeType.Run
‘ü kullanıyoruz. Bir Run nesnesinin Font.getStyle() özelliğini stil bilgilerine erişmek için kullanırız Run düğümlerinde
Aşağıdaki kod örneği, belirtilen stil ile biçimlendirilmiş tüm koşulları bulur.
// 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; | |
} |
Aşağıdaki kod örneği sorguları çalıştırır ve sonuçları gösterir.
// 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()); |
Her şey bittiğinde örnek çalıştırıldığında, aşağıdaki çıktıyı gösterir:
Gördüğünüz gibi, bu çok basit bir örnek, örnek Word belgesinde toplanan paragrafların ve satırların sayısını ve metnini göstermektedir.
Farklı Paragraf stilleri eklemek için bir stil ayırıcı ekleyin
Ctrl + Alt + Enter kısayolunu kullanarak MS Word’e bir paragrafın sonuna stil ayırıcı eklenebilir. Bu özellik, tek bir mantıksal basılı paragrafta kullanılan iki farklı paragraf stilini izin verir. Belirli bir başlığın başlangıcındaki bazı metnin İçindekiler tablosunda görünmesini istiyorsanız ancak İçindekiler tablosunda tüm başlık istemezseniz bu özelliği kullanabilirsiniz
Aşağıdaki kod örneği farklı paragraf stilleri eklemek için bir stil ayırıcı nasıl yerleştirileceğini gösterir
// 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); |
Şablondan Tüm Stilleri Kopyala
Bazen bir belgeye başka bir belgeden tüm stilleri kopyalamak istediğiniz durumlar vardır. Belirtilen şablondan bir belgeye stilleri kopyalamak için Document.CopyStylesFromTemplate
yöntemini kullanabilirsiniz. Stillerden bir şablona kopyalendiğinde, belgenin benzer isimlerdeki stilleri şablondaki stil açıklamalarına uymak üzere yeniden tanımlanır. Şablonda benzersiz stiller belgeye kopyalanır. Belgede benzersiz stiller değişmeden kalır
Aşağıdaki kod örneği bir belgeye diğerinden stilleri nasıl kopyaladığını göstermektedir.
// 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); |
Tema Özelliklerini Nasıl Yönetir
We have added API basic in Aspose.Words to access document theme properties. Şu anda bu API aşağıdaki kamuya açık nesneleri içerir:
- Tema
- TemaFontları
- TemaRenkleri
Tema özelliklerini nasıl alabileceğinizi işte gösteriyoruz:
// 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()); |
Ve işte nasıl tema özelliklerini ayarlayabileceğiniz:
// 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"); |