スタイルとテーマの操作
StyleCollection クラスは、組み込みの設定を管理し、スタイルにユーザー定義の設定を適用するために使用されます。
スタイルへのアクセス
Document.Styles プロパティを使用して、ドキュメント内で定義されたスタイルのコレクションを取得できます。このコレクションは、ドキュメント内の組み込みスタイルとユーザー定義スタイルの両方を保持します。特定のスタイルは、その名前/エイリアス、スタイル識別子、またはインデックスによって取得できます。次のコード例は、ドキュメントで定義されているスタイルのコレクションにアクセスする方法を示しています。
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET | |
// The path to the documents directory. | |
string dataDir = RunExamples.GetDataDir_WorkingWithDocument(); | |
// Load the template document. | |
Document doc = new Document(dataDir + "TestFile.doc"); | |
// Get styles collection from document. | |
StyleCollection styles = doc.Styles; | |
string styleName = ""; | |
// Iterate through all the styles. | |
foreach (Style style in styles) | |
{ | |
if (styleName == "") | |
{ | |
styleName = style.Name; | |
} | |
else | |
{ | |
styleName = styleName + ", " + style.Name; | |
} | |
} |
スタイルに基づいてコンテンツを抽出する方法
単純なレベルでは、Word 文書からスタイルに基づいてコンテンツを取得すると、特定のスタイルで書式設定された段落やテキストの続きを識別、一覧表示、カウントするのに役立ちます。たとえば、例、タイトル、参考文献、キーワード、図の名前、ケーススタディなど、ドキュメント内の特定の種類のコンテンツを識別する必要がある場合があります。
これをさらにいくつか進めて、使用するスタイルによって定義されたドキュメントの構造を利用して、ドキュメントを HTML などの別の出力に再利用することもできます。実際、これが Aspose ドキュメントの構築方法であり、Aspose.Words をテストします。 Aspose.Words を使用して構築されたツールは、ソース Word 文書を取得し、特定の見出しレベルでトピックに分割します。 XML ファイルは、左側に表示されているナビゲーション ツリーの構築に使用される Aspose.Words を使用して生成されます。そして、Aspose.Words は各トピックを HTML に変換します。
Word 文書内の特定のスタイルで書式設定されたテキストを取得するソリューションは、通常、Aspose.Words を使用すると経済的で簡単です。
ソリューション
Aspose.Words がスタイルに基づいてコンテンツの取得をどのように簡単に処理するかを説明するために、例を見てみましょう。この例では、特定の段落スタイルと文字スタイルで書式設定されたテキストをサンプル Word 文書から取得します。大まかに言うと、これには次のことが含まれます。 # Document クラスを使用して Word 文書を開きます。 # コレクションを取得します。ドキュメント内のすべての段落とすべての段落。# 必要な段落と段落のみを選択します。具体的には、このサンプル Word 文書から、「見出し 1」段落スタイルと「強い強調」文字スタイルで書式設定されたテキストを取得します。
このサンプル文書では、「見出し 1」段落スタイルで書式設定されたテキストは「タブの挿入」、「クイック スタイル」、および「テーマ」であり、「強調」文字スタイルで書式設定されたテキストは青のいくつかのインスタンスです。 「ギャラリー」や「全体的な外観」などの斜体の太字のテキスト。
コード
スタイルベースのクエリの実装は、Aspose.Words ドキュメント オブジェクト モデルでは、すでに存在するツールを使用するだけなので非常に簡単です。このソリューションには 2 つのクラス メソッドが実装されています。 ParagraphsByStyleName – このメソッドは、次の段落の配列を取得します。特定のスタイル名を持つドキュメント。RunsByStyleName – このメソッドは、特定のスタイル名を持つドキュメント内の実行の配列を取得します。これらのメソッドはどちらも非常に似ており、唯一の違いはノード タイプとスタイルの表現です。段落内の情報を取得してノードを実行します。これは、ParagraphsByStyleName の実装です。以下の例では、指定されたスタイルで書式設定されたすべての段落を検索します。
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET | |
public static ArrayList ParagraphsByStyleName(Document doc, string styleName) | |
{ | |
// Create an array to collect paragraphs of the specified style. | |
ArrayList 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. | |
foreach (Paragraph paragraph in paragraphs) | |
{ | |
if (paragraph.ParagraphFormat.Style.Name == styleName) | |
paragraphsWithStyle.Add(paragraph); | |
} | |
return paragraphsWithStyle; | |
} |
この実装では、Document
クラスの Document.GetChildNodes
メソッドも使用されます。このメソッドは、指定されたタイプを持つすべてのノード (この場合はすべての段落) のコレクションを返します。
Document.GetChildNodes メソッドの 2 番目のパラメーターが true に設定されていることに注意してください。これにより、Document.GetChildNodes メソッドは直接の子ノードのみを選択するのではなく、すべての子ノードから再帰的に選択するようになります。
段落コレクション内の項目にアクセスした場合にのみ段落がこのコレクションに読み込まれるため、段落コレクションによって直ちにオーバーヘッドが発生するわけではないことも指摘しておく価値があります。次に、標準の foreach 演算子を使用してコレクションを調べ、指定されたスタイルを持つ段落を段落WithStyle 配列に追加するだけです。 Paragraph
スタイル名は、Paragraph.ParagraphFormat オブジェクトの Style.Name プロパティで確認できます。 RunsByStyleName の実装はほぼ同じですが、実行ノードの取得には明らかに NodeType.Run を使用しています。 Run オブジェクトの Font.Style プロパティは、Run ノード内のスタイル情報にアクセスするために使用されます。以下の例では、指定されたスタイルでフォーマットされたすべての実行を検索します。
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET | |
public static ArrayList RunsByStyleName(Document doc, string styleName) | |
{ | |
// Create an array to collect runs of the specified style. | |
ArrayList 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. | |
foreach (Run run in runs) | |
{ | |
if (run.Font.Style.Name == styleName) | |
runsWithStyle.Add(run); | |
} | |
return runsWithStyle; | |
} |
両方のクエリが実装されている場合、必要なのは、ドキュメント オブジェクトを渡し、取得するコンテンツのスタイル名を指定することだけです。以下の例では、クエリを実行して結果を表示します。この例のテンプレート ファイルは ここ からダウンロードできます。
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET | |
// The path to the documents directory. | |
string dataDir = RunExamples.GetDataDir_WorkingWithStyles(); | |
string fileName = "TestFile.doc"; | |
// Open the document. | |
Document doc = new Document(dataDir + fileName); | |
// Define style names as they are specified in the Word document. | |
const string paraStyle = "Heading 1"; | |
const string runStyle = "Intense Emphasis"; | |
// Collect paragraphs with defined styles. | |
// Show the number of collected paragraphs and display the text of this paragraphs. | |
ArrayList paragraphs = ParagraphsByStyleName(doc, paraStyle); | |
Console.WriteLine(string.Format("Paragraphs with \"{0}\" styles ({1}):", paraStyle, paragraphs.Count)); | |
foreach (Paragraph paragraph in paragraphs) | |
Console.Write(paragraph.ToString(SaveFormat.Text)); | |
// Collect runs with defined styles. | |
// Show the number of collected runs and display the text of this runs. | |
ArrayList runs = RunsByStyleName(doc, runStyle); | |
Console.WriteLine(string.Format("\nRuns with \"{0}\" styles ({1}):", runStyle, runs.Count)); | |
foreach (Run run in runs) | |
Console.WriteLine(run.Range.Text); |
最終結果
すべてが完了したら、サンプルを実行すると次の出力が表示されます。
ご覧のとおり、これは非常に単純な例であり、サンプル Word 文書内で収集された段落と実行の数とテキストを示しています。
テンプレートからすべてのスタイルをコピー
すべてのスタイルをあるドキュメントから別のドキュメントにコピーしたい場合があります。 Document.CopyStylesFromTemplate
メソッドを使用して、指定したテンプレートからドキュメントにスタイルをコピーできます。スタイルがテンプレートからドキュメントにコピーされると、ドキュメント内の同じ名前のスタイルが、テンプレート内のスタイルの説明と一致するように再定義されます。テンプレートの固有のスタイルがドキュメントにコピーされます。ドキュメント内の固有のスタイルはそのまま残ります。 Below code の例は、あるドキュメントから別のドキュメントにスタイルをコピーする方法を示しています。
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET | |
string fileName = dataDir + "template.docx"; | |
Document doc = new Document(fileName); | |
// Open the document. | |
Document target = new Document(dataDir + "TestFile.doc"); | |
target.CopyStylesFromTemplate(doc); | |
dataDir = dataDir + RunExamples.GetOutputFilePath(fileName); | |
doc.Save(dataDir); |
テーマのプロパティを操作する方法
ドキュメントのテーマのプロパティにアクセスするための基本的な API を Aspose.Words に追加しました。現時点では、この API には次のパブリック オブジェクトが含まれています。
- テーマ
- テーマフォント
- テーマカラー
テーマのプロパティを取得する方法は次のとおりです。
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET | |
Document doc = new Document(dataDir); | |
Theme theme = doc.Theme; | |
// Major (Headings) font for Latin characters. | |
Console.WriteLine(theme.MajorFonts.Latin); | |
// Minor (Body) font for EastAsian characters. | |
Console.WriteLine(theme.MinorFonts.EastAsian); | |
// Color for theme color Accent 1. | |
Console.WriteLine(theme.Colors.Accent1); |
テーマのプロパティを設定する方法は次のとおりです。
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET | |
Document doc = new Document(dataDir); | |
Theme theme = doc.Theme; | |
// Set Times New Roman font as Body theme font for Latin Character. | |
theme.MinorFonts.Latin = "Times New Roman"; | |
// Set Color.Gold for theme color Hyperlink. | |
theme.Colors.Hyperlink = Color.Gold; |