次の方法で共有


テキスト セクションのフォントを設定する

このトピックでは、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);
    }
}

関連項目