テキスト セクションのフォントを設定する
このトピックでは、Open XML SDK for Office のクラスを使用して、プログラムによってワープロ ドキュメント内のテキストの一部のフォントを設定する方法について説明します。
パッケージとドキュメント パーツ
Open XML ドキュメントはパッケージとして格納され、その形式は ISO/IEC 29500 によって定義されます。 パッケージには、それらの間のリレーションシップを持つ複数のパーツを含めることができます。 パーツ間の関係によって、ドキュメントのカテゴリが制御されます。 ドキュメントは、パッケージリレーションシップアイテムにメインドキュメントパーツとの関係が含まれている場合、ワープロドキュメントとして定義できます。 パッケージリレーションシップ項目にプレゼンテーション パーツとのリレーションシップが含まれている場合は、プレゼンテーション ドキュメントとして定義できます。 パッケージリレーションシップアイテムにブックパーツとのリレーションシップが含まれている場合は、スプレッドシートドキュメントとして定義されます。 このハウツー トピックでは、ワープロ ドキュメント パッケージを使用します。
セクションのフォント要素の構造
ISO/IEC 29500 仕様の次のテキストは、rFonts
要素を操作するときに役立ちます。
この要素は、このセクションのテキスト コンテンツの表示に使用するフォントを指定します。 単一セクション内では、それぞれに以下の固有のフォントを使用して、最大 4 種類のコンテンツを表示できます。
ASCII
High ANSI
コンプレックス スクリプト
日本語用
cs 要素の使用によって手動で上書きされない限り、これらの各フォントの使用は、セクション コンテンツの Unicode 文字の値によって決定されます。
この要素が存在しない場合、既定値はスタイル階層の前のレベルで適用された書式設定のままになります。 この要素がスタイル階層に一度も適用されていない場合、テキストは各種類のコンテンツをサポートするいずれかの既定のフォントで表示されます。
次のように、アラビア語と英語のテキストがある単一テキスト セクションを考えてみましょう。
English العربية
このコンテンツは、単一の WordprocessingML セクションで表現できます。
<w:r>
<w:t>English العربية</w:t>
</w:r>
同じセクション内にあっても、セクション内の ASCII 文字と CS 文字に異なるフォントを指定することによって、コンテンツは異なるフォント フェイスで表示されます。
<w:r>
<w:rPr>
<w:rFonts w:ascii="Courier New" w:cs="Times New Roman" />
</w:rPr>
<w:t>English العربية</w:t>
</w:r>
そのため、このテキスト セクションでは、ASCII 範囲にあるすべての文字に Courier New フォントが使用され、コンプレックス スクリプト範囲にあるすべての文字に Times New Roman フォントが使用されます。
© ISO/IEC 29500: 2016
サンプル コードの動作のしくみ
読み取り/書き込み用のパッケージ ファイルを開いた後、Ascii
プロパティが "Arial" に設定されているRunFonts
オブジェクトを含むRunProperties
オブジェクトが作成されます。
RunProperties
および RunFonts
オブジェクトは、Open XML Wordprocessing スキーマで、それぞれ要素 rPr
実行プロパティを表し、 rFont
フォント要素を実行します。
RunProperties
オブジェクトを使用して、指定されたテキスト実行のプロパティを指定します。 この場合、実行のフォントを Arial に設定するために、コードは RunFonts
オブジェクトを作成し、 Ascii
値を "Arial" に設定します。
// Set the font to Arial to the first Run.
// Use an object initializer for RunProperties and rPr.
RunProperties rPr = new RunProperties(
new RunFonts()
{
Ascii = "Arial"
});
次に、コードによって、ドキュメントの最初のテキスト実行を表す Run オブジェクトが作成されます。 コードは、 Run
をインスタンス化し、ドキュメントの最初のテキスト実行に設定します。 次に、PrependChild メソッドを使用して、RunProperties
オブジェクトを Run
オブジェクトに追加します。
PrependChild
メソッドは、メモリ内 XML 構造体の指定した要素に、最初の子要素として 要素を追加します。
この場合、コード サンプルを実行すると、 RunProperties
要素が Run
要素の最初の子要素として追加されるメモリ内 XML 構造体が生成されます。 using ステートメント内にあるため、 Save
を直接呼び出す必要はありません。
if (package.MainDocumentPart is null)
{
throw new ArgumentNullException("MainDocumentPart is null.");
}
Run r = package.MainDocumentPart.Document.Descendants<Run>().First();
r.PrependChild<RunProperties>(rPr);
注:
このコード例では、fileName パスのテスト ワープロ ドキュメントに少なくとも 1 つのテキスト実行が含まれていることを前提としています。
以下に、C# と Visual Basic による完全なサンプル コードを示します。
static void SetRunFont(string fileName)
{
// Open a Wordprocessing document for editing.
using (WordprocessingDocument package = WordprocessingDocument.Open(fileName, true))
{
// Set the font to Arial to the first Run.
// Use an object initializer for RunProperties and rPr.
RunProperties rPr = new RunProperties(
new RunFonts()
{
Ascii = "Arial"
});
if (package.MainDocumentPart is null)
{
throw new ArgumentNullException("MainDocumentPart is null.");
}
Run r = package.MainDocumentPart.Document.Descendants<Run>().First();
r.PrependChild<RunProperties>(rPr);
}
}