Python でプレゼンテーションテキストをフォーマットする

概要

この記事では、Aspose.Slides for Python via .NET を使用して PowerPoint と OpenDocument のプレゼンテーション内のテキストの書式設定方法を示します。背景色、透明度、文字間隔、フォントプロパティ、回転、段落間隔、オートフィットの動作、テキストのアンカリング、タブストップ、言語設定について説明します。

特に記載がない限り、例では sample.pptx を使用します。最初のスライドの最初のシェイプはテキストボックスで、最初の段落には以下に示すテキストが含まれています。スライドとシェイプのインデックスはゼロベースです。太字部分を選択する例は、継承された太字書式を含む有効な書式設定を使用します。

サンプルテキスト

テキストの検索と置換を行うには、テキストの検索と置換 を参照してください。

テキストの背景色を設定

段落のデフォルトのハイライト色を設定するには ParagraphFormat.default_portion_format を使用し、個々のテキスト部分のハイライト色を設定するには BasePortionFormat.highlight_color を使用します。

次の例では、最初の段落のデフォルトとして薄い灰色のハイライトを設定します。個々の部分に明示的に設定されたハイライト色はこのデフォルトよりも優先されます。

import aspose.pydrawing as draw
import aspose.slides as slides

with slides.Presentation("sample.pptx") as presentation:
    slide = presentation.slides[0]

    auto_shape = slide.shapes[0]
    paragraph = auto_shape.text_frame.paragraphs[0]

    # 段落全体のハイライト色を設定します。
    paragraph.paragraph_format.default_portion_format.highlight_color.color = draw.Color.light_gray

    presentation.save("gray_paragraph.pptx", slides.export.SaveFormat.PPTX)

結果:

灰色の段落

以下のコード例は、太字フォントのテキスト部分の背景色を設定する方法を示しています。

import aspose.pydrawing as draw
import aspose.slides as slides

with slides.Presentation("sample.pptx") as presentation:
    slide = presentation.slides[0]

    auto_shape = slide.shapes[0]
    paragraph = auto_shape.text_frame.paragraphs[0]

    for portion in paragraph.portions:
        if portion.portion_format.get_effective().font_bold:
            # テキスト部分のハイライト色を設定します。
            portion.portion_format.highlight_color.color = draw.Color.light_gray

    presentation.save("gray_text_portions.pptx", slides.export.SaveFormat.PPTX)

結果:

灰色のテキスト部分

テキスト段落の配置

テキストフレーム内の段落配置を設定するには ParagraphFormat.alignment を使用します。値は中央揃え、左揃え、右揃え、両端揃えなどが設定可能です。

次のコード例は、段落を 中央 に配置する方法を示します。

import aspose.slides as slides

with slides.Presentation("sample.pptx") as presentation:
    slide = presentation.slides[0]

    auto_shape = slide.shapes[0]
    paragraph = auto_shape.text_frame.paragraphs[0]

    # 段落の配置を中央に設定します。
    paragraph.paragraph_format.alignment = slides.TextAlignment.CENTER

    presentation.save("aligned_paragraph.pptx", slides.export.SaveFormat.PPTX)

結果:

整列された段落

行内のフォントを揃える

ParagraphFormat.font_alignment を使用して、行内の異なるフォントサイズのテキスト部分を垂直方向に揃えます。この設定は段落全体に適用され、各行内の揃え方を制御します。

次の自己完結型の例は、1枚のスライド上にラベル付きテキストボックスを4つ作成します。各段落は 18、36、54 ポイントの同じテキストを含み、フォント揃えが異なります。Arial を使用し、オートフィットと折り返しを無効にし、テキストフレームは1行分の幅を確保します。

import aspose.pydrawing as draw
import aspose.slides as slides

with slides.Presentation() as presentation:
    slide = presentation.slides[0]

    alignments = [slides.FontAlignment.BASELINE, slides.FontAlignment.TOP, slides.FontAlignment.CENTER, slides.FontAlignment.BOTTOM]
    font_sizes = [18, 36, 54]

    for i, alignment in enumerate(alignments):
        shape = slide.shapes.add_auto_shape(slides.ShapeType.RECTANGLE, 30, 20 + i * 130, 660, 120)
        shape.fill_format.fill_type = slides.FillType.NO_FILL
        shape.line_format.fill_format.fill_type = slides.FillType.NO_FILL

        text_frame = shape.text_frame
        text_frame.text_frame_format.anchoring_type = slides.TextAnchorType.TOP
        text_frame.text_frame_format.autofit_type = slides.TextAutofitType.NONE
        text_frame.text_frame_format.wrap_text = slides.NullableBool.FALSE

        label = text_frame.paragraphs[0]
        label.text = alignment.name.title()
        label.paragraph_format.alignment = slides.TextAlignment.LEFT
        label.paragraph_format.default_portion_format.font_height = 14
        label.paragraph_format.default_portion_format.latin_font = slides.FontData("Arial")
        label.paragraph_format.default_portion_format.fill_format.fill_type = slides.FillType.SOLID
        label.paragraph_format.default_portion_format.fill_format.solid_fill_color.color = draw.Color.gray

        paragraph = slides.Paragraph()
        paragraph.paragraph_format.font_alignment = alignment
        paragraph.paragraph_format.alignment = slides.TextAlignment.LEFT
        paragraph.paragraph_format.default_portion_format.latin_font = slides.FontData("Arial")
        paragraph.paragraph_format.default_portion_format.fill_format.fill_type = slides.FillType.SOLID
        paragraph.paragraph_format.default_portion_format.fill_format.solid_fill_color.color = draw.Color.black

        for font_size in font_sizes:
            portion = slides.Portion("Ag ")
            portion.portion_format.font_height = font_size
            paragraph.portions.add(portion)

        text_frame.paragraphs.add(paragraph)

    presentation.save("font_alignment.pptx", slides.export.SaveFormat.PPTX)

結果:

ベースライン、上部、中央、下部のフォント揃え(混在フォントサイズ)の比較

フォント揃えはフォントメトリクスに基づくため、個々の文字の可視エッジが必ずしも正確に一致するわけではありません。例では大文字とディセンダーを含め、ベースラインと下部揃えの違いを示しています。フォントの利用可否や置換、使用文字、フォントサイズの違いが結果に影響します。フレームのサイズ、余白、行間、折り返し、オートフィットもレイアウトに影響するため、モード比較時は同じフォントとレイアウト設定を使用してください。

この設定は、水平段落配置を制御する ParagraphFormat.alignment や、シェイプ内でテキストブロックを垂直に配置する TextFrameFormat.anchoring_type とは異なります。上付き・下付きの書式設定は BasePortionFormat.escapement により個々の部分をベースラインに対してシフトさせ、段落の行のフォント揃えを設定するものではありません。

テキストの透明度を設定

テキストの透明度は BasePortionFormat.fill_format に割り当てられる色のアルファ成分で制御します。以下の例では alpha = 50 は 0〜255 のスケールの ARGB アルファチャンネル値であり、透明度パーセンテージではありません。

以下のコード例は、全段落 に透明度を適用する方法を示しています。

import aspose.pydrawing as draw
import aspose.slides as slides

alpha = 50

with slides.Presentation("sample.pptx") as presentation:
    slide = presentation.slides[0]

    auto_shape = slide.shapes[0]
    paragraph = auto_shape.text_frame.paragraphs[0]

    # テキストに対して半透明の黒塗りつぶしを設定します。
    paragraph.paragraph_format.default_portion_format.fill_format.fill_type = slides.FillType.SOLID
    paragraph.paragraph_format.default_portion_format.fill_format.solid_fill_color.color = draw.Color.from_argb(alpha, draw.Color.black)

    presentation.save("transparent_paragraph.pptx", slides.export.SaveFormat.PPTX)

結果:

透明な段落

以下のコード例は、太字フォントのテキスト部分 に透明度を適用する方法を示しています。

import aspose.pydrawing as draw
import aspose.slides as slides

alpha = 50

with slides.Presentation("sample.pptx") as presentation:
    slide = presentation.slides[0]

    auto_shape = slide.shapes[0]
    paragraph = auto_shape.text_frame.paragraphs[0]

    for portion in paragraph.portions:
        if portion.portion_format.get_effective().font_bold:
            # テキスト部分の透明度を設定します。
            portion.portion_format.fill_format.fill_type = slides.FillType.SOLID
            portion.portion_format.fill_format.solid_fill_color.color = draw.Color.from_argb(alpha, draw.Color.black)

    presentation.save("transparent_text_portions.pptx", slides.export.SaveFormat.PPTX)

結果:

透明なテキスト部分

テキストの文字間隔を設定

BasePortionFormat.spacing を使用してテキストボックス内の文字間隔を拡大または縮小します。例では 3 ポイントの間隔を追加しています。負の値は文字を縮めます。

次の Python コードは、全段落 の文字間隔を拡大する方法を示します。

import aspose.slides as slides

with slides.Presentation("sample.pptx") as presentation:
    slide = presentation.slides[0]

    auto_shape = slide.shapes[0]
    paragraph = auto_shape.text_frame.paragraphs[0]

    # 注: 文字間隔を縮めるには負の値を使用します。
    paragraph.paragraph_format.default_portion_format.spacing = 3  # 文字間隔を拡大します。

    presentation.save("character_spacing_in_paragraph.pptx", slides.export.SaveFormat.PPTX)

結果:

段落内の文字間隔

以下のコード例は、太字フォントのテキスト部分 の文字間隔を拡大する方法を示します。

import aspose.slides as slides

with slides.Presentation("sample.pptx") as presentation:
    slide = presentation.slides[0]

    auto_shape = slide.shapes[0]
    paragraph = auto_shape.text_frame.paragraphs[0]

    for portion in paragraph.portions:
        if portion.portion_format.get_effective().font_bold:
            # 注: 文字間隔を縮めるには負の値を使用します。
            portion.portion_format.spacing = 3  # 文字間隔を拡大します。

    presentation.save("character_spacing_in_text_portions.pptx", slides.export.SaveFormat.PPTX)

結果:

テキスト部分の文字間隔

特定フォントのカーニングを無効化

場合によっては、Aspose.Slides が描画したテキストが PowerPoint で表示される同じテキストよりやや詰まって見えることがあります。これは、PowerPoint が特定フォントのカーニングデータを無視するためで、フォントに有効なカーニング情報があり、PowerPoint の設定でカーニングが有効になっていても発生します。

このような場合にレンダリング結果を PowerPoint に近づけるには、影響を受けたフォントを使用するテキスト部分のカーニングを無効にできます。BasePortionFormat.kerning_minimal_size を実際のフォントサイズより大きな値に設定します。この例は、最初のスライドの最初のシェイプがテキストボックスである “presentation.pptx” が必要です。継承フォントを含む有効なフォント名をチェックし、Roboto を使用する部分に対して 100 ポイントの閾値を設定します。これにより、フォントサイズが 100 ポイント未満の該当部分のカーニングが無効になります。

import aspose.slides as slides

with slides.Presentation("presentation.pptx") as presentation:
    slide = presentation.slides[0]

    auto_shape = slide.shapes[0]
    target_font = "Roboto"

    for paragraph in auto_shape.text_frame.paragraphs:
        for portion in paragraph.portions:
            text_format = portion.portion_format.get_effective()
            fonts = (text_format.latin_font, text_format.east_asian_font, text_format.complex_script_font)
            uses_target_font = any(font is not None and font.font_name == target_font for font in fonts)

            if uses_target_font:
                portion.portion_format.kerning_minimal_size = 100

    presentation.save("output.pptx", slides.export.SaveFormat.PPTX)

閾値未満の該当テキストでは、この設定によりカーニングが抑制され、PowerPoint 固有の動作の影響を受けるフォントの見た目を Aspose.Slides のレンダリングと合わせやすくなります。

テキストフォントプロパティの管理

フォントプロパティは ParagraphFormat.default_portion_format を介して段落レベルで、または PortionFormat を介して個々の部分で設定できます。

次の例は、最初の段落のデフォルトフォントを 12 ポイントの Times New Roman に設定し、太字、斜体、点線下線を適用します。個々の部分に対する明示的な書式設定はこれらのデフォルトよりも優先されます。

import aspose.slides as slides

with slides.Presentation("sample.pptx") as presentation:
    slide = presentation.slides[0]

    auto_shape = slide.shapes[0]
    paragraph = auto_shape.text_frame.paragraphs[0]

    # 段落のフォントプロパティを設定します。
    portion_format = paragraph.paragraph_format.default_portion_format
    portion_format.font_height = 12
    portion_format.font_bold = slides.NullableBool.TRUE
    portion_format.font_italic = slides.NullableBool.TRUE
    portion_format.font_underline = slides.TextUnderlineType.DOTTED
    portion_format.latin_font = slides.FontData("Times New Roman")

    presentation.save("font_properties_for_paragraph.pptx", slides.export.SaveFormat.PPTX)

結果:

段落のフォントプロパティ

次の例は、太字の有効書式を持つ部分に対して 13 ポイントの Times New Roman、斜体、点線下線を適用します。

import aspose.slides as slides

with slides.Presentation("sample.pptx") as presentation:
    slide = presentation.slides[0]

    auto_shape = slide.shapes[0]
    paragraph = auto_shape.text_frame.paragraphs[0]

    for portion in paragraph.portions:
        if portion.portion_format.get_effective().font_bold:
            # テキスト部分のフォントプロパティを設定します。
            portion.portion_format.font_height = 13
            portion.portion_format.font_italic = slides.NullableBool.TRUE
            portion.portion_format.font_underline = slides.TextUnderlineType.DOTTED
            portion.portion_format.latin_font = slides.FontData("Times New Roman")

    presentation.save("font_properties_for_text_portions.pptx", slides.export.SaveFormat.PPTX)

結果:

テキスト部分のフォントプロパティ

テキスト高さの正規化を制御

テンプレートのタイポグラフィを再現したり文字高さの違いを調査したりする際に、BasePortionFormat.normalise_height を使用します。PowerPoint では正規化を有効にすると、テキスト部分内の個々の文字が垂直方向に伸縮され、視覚的に均一な高さが与えられます。ただし、フォントが異なる場合にテキスト高さが同一になることは保証されません。

プロパティを NullableBool.TRUE or FALSE に設定して正規化を明示的に有効化または無効化します。NullableBool.NOT_DEFINED はローカル設定を未設定のままにし、たとえば段落の default_portion_format から継承させます。これは False を意味するものではありません。PortionFormat.get_effective と IBasePortionFormatEffectiveData.normalise_height を使用して解決された Boolean 値を取得します。

次の自己完結型の例は、Arial がインストールされていることが前提です。54 ポイントで同じ大文字・小文字・ディセンダー・アクセント文字を含む 2 つのテキストブロックを作成します。両段落はデフォルトで正規化を有効にしています。上部の部分は明示的に無効、下部の部分は継承します。フレームサイズ、余白、段落間隔は同一で、折り返しとオートフィットは無効にして比較を一貫させています。例は FALSE: False と NOT_DEFINED: True を出力し、“text_height_normalization.pptx” として保存します。

import aspose.slides as slides

with slides.Presentation() as presentation:
    slide = presentation.slides[0]

    settings = [slides.NullableBool.FALSE, slides.NullableBool.NOT_DEFINED]

    for i, setting in enumerate(settings):
        shape = slide.shapes.add_auto_shape(slides.ShapeType.RECTANGLE, 30, 60 + i * 200, 660, 150)
        shape.fill_format.fill_type = slides.FillType.NO_FILL
        shape.line_format.fill_format.fill_type = slides.FillType.NO_FILL

        text_frame = shape.text_frame
        text_frame.text = "Hxgjpq ÅÉ 0123"
        text_frame.text_frame_format.autofit_type = slides.TextAutofitType.NONE
        text_frame.text_frame_format.wrap_text = slides.NullableBool.FALSE
        text_frame.text_frame_format.anchoring_type = slides.TextAnchorType.TOP
        text_frame.text_frame_format.margin_top = 0
        text_frame.text_frame_format.margin_left = 0

        paragraph = text_frame.paragraphs[0]
        paragraph.paragraph_format.alignment = slides.TextAlignment.LEFT
        paragraph.paragraph_format.space_before = 0
        paragraph.paragraph_format.space_after = 0
        paragraph.paragraph_format.space_within = 100
        paragraph.paragraph_format.default_portion_format.normalise_height = slides.NullableBool.TRUE

        portion = paragraph.portions[0]
        portion.portion_format.latin_font = slides.FontData("Arial")
        portion.portion_format.font_height = 54
        portion.portion_format.fill_format.fill_type = slides.FillType.SOLID
        portion.portion_format.fill_format.solid_fill_color.color = "black"
        portion.portion_format.normalise_height = setting

        print(f"{setting.name}: {portion.portion_format.get_effective().normalise_height}")

    presentation.save("text_height_normalization.pptx", slides.export.SaveFormat.PPTX)

以下の比較は保存したプレゼンテーションからエクスポートしたものです。上段は正規化が無効 (FALSE) で、下段は有効設定を継承しています (NOT_DEFINED → True)。再現するには Arial をインストールした状態で実行してください。

Arial 54ポイントのテキスト(上は正規化無効、下は継承された正規化有効)

正規化はフォントサイズをポイントで指定する font_height の値を変更せずに文字の高さを変えます。段落の space_within は行間を制御し、テキストフレームの autofit_type はテキストまたはコンテナがフィットする方法を制御します。これらの設定は目的が異なり、レイアウトに独立して影響します。段落書式と継承に関する詳細は、Manage Paragraph を参照してください。

取り消し線の適用と削除

テキスト部分に対して BasePortionFormat.strikethrough_type を使用すると、元のテキストを削除せずに修正や取り消し、以前の価格などを表示できます。テキストに 1 本または 2 本の線を引くには、TextStrikethroughType.SINGLE or DOUBLE を設定します。

取り消し線を削除するには TextStrikethroughType.NONE を割り当てます。これは周囲の書式が取り消し線を指定していても効果を明示的に無効化します。対照的に TextStrikethroughType.NOT_DEFINED はローカル設定を未定義のままにし、段落から継承させることができます。これが取り消し線が必ず削除されることを保証するわけではありません。結果の書式(継承値を含む)を取得するには PortionFormat.get_effective を使用します。

以下の自己完結型の例は、3 つの価格比較を作成します。各段落はラベル、以前の価格、現在の価格の部分に分かれているため、影響を受けるのは以前の価格だけです。1 行目は取り消し線を適用してから削除し、他の行は単一と二重の取り消し線を保持します。このプロパティを変更してもテキストやその他の書式(太字の以前の価格など)は保持されます。

import aspose.pydrawing as draw
import aspose.slides as slides

with slides.Presentation() as presentation:
    slide = presentation.slides[0]

    shape = slide.shapes.add_auto_shape(slides.ShapeType.RECTANGLE, 50, 50, 620, 220)
    shape.fill_format.fill_type = slides.FillType.NO_FILL
    shape.line_format.fill_format.fill_type = slides.FillType.NO_FILL
    shape.text_frame.paragraphs.clear()

    labels = ["None: ", "Single: ", "Double: "]

    for label in labels:
        paragraph = slides.Paragraph()
        paragraph.paragraph_format.alignment = slides.TextAlignment.LEFT
        paragraph.paragraph_format.space_after = 20

        portion_format = paragraph.paragraph_format.default_portion_format
        portion_format.font_height = 28
        portion_format.latin_font = slides.FontData("Arial")
        portion_format.fill_format.fill_type = slides.FillType.SOLID
        portion_format.fill_format.solid_fill_color.color = draw.Color.black

        paragraph.portions.add(slides.Portion(label))

        previous_price = slides.Portion("$100")
        previous_price.portion_format.font_bold = slides.NullableBool.TRUE
        paragraph.portions.add(previous_price)
        paragraph.portions.add(slides.Portion(" → $80"))

        shape.text_frame.paragraphs.add(paragraph)

    paragraphs = shape.text_frame.paragraphs

    # 取り消し線を適用し、その後最初の以前の価格から明示的に取り消し線を削除します。
    paragraphs[0].portions[1].portion_format.strikethrough_type = slides.TextStrikethroughType.SINGLE
    paragraphs[0].portions[1].portion_format.strikethrough_type = slides.TextStrikethroughType.NONE

    paragraphs[1].portions[1].portion_format.strikethrough_type = slides.TextStrikethroughType.SINGLE
    paragraphs[2].portions[1].portion_format.strikethrough_type = slides.TextStrikethroughType.DOUBLE

    presentation.save("strikethrough.pptx", slides.export.SaveFormat.PPTX)

結果(上から下へ):取り消し線なし、単一取り消し線、二重取り消し線。

取り消し線なし、単一取り消し線、二重取り消し線の過去価格

テキスト回転の設定

テキストフレーム内のテキストの向きを事前定義されたものに設定するには TextFrameFormat.text_vertical_type を使用します。

次のコード例は、シェイプ内のテキスト向きを TextVerticalType.VERTICAL270 に設定し、テキストを 90 度左回転 させます。

import aspose.slides as slides

with slides.Presentation("sample.pptx") as presentation:
    slide = presentation.slides[0]

    auto_shape = slide.shapes[0]

    auto_shape.text_frame.text_frame_format.text_vertical_type = slides.TextVerticalType.VERTICAL270

    presentation.save("text_rotation.pptx", slides.export.SaveFormat.PPTX)

結果:

テキストの回転

テキストフレームのカスタム回転を設定

TextFrameFormat.rotation_angle を使用して、TextFrame のカスタム回転角度を設定できます。

以下のコード例は、シェイプ内のテキストフレームを時計回りに 3 度回転させます。

import aspose.slides as slides

with slides.Presentation("sample.pptx") as presentation:
    slide = presentation.slides[0]

    auto_shape = slide.shapes[0]

    auto_shape.text_frame.text_frame_format.rotation_angle = 3

    presentation.save("custom_text_rotation.pptx", slides.export.SaveFormat.PPTX)

結果:

カスタムテキスト回転

段落の行間を設定

Aspose.Slides は段落間隔を制御するために ParagraphFormat.space_after、ParagraphFormat.space_before、および ParagraphFormat.space_within を提供します。使用方法は次のとおりです。

  • 正の値を使用すると、行間を行高さの割合(パーセンテージ)で指定します。
  • 負の値を使用すると、行間をポイントで指定します。

次の例は、最初の段落の内部間隔を行高さの 200%(二重行間)に設定します。

import aspose.slides as slides

with slides.Presentation("sample.pptx") as presentation:
    slide = presentation.slides[0]

    auto_shape = slide.shapes[0]
    paragraph = auto_shape.text_frame.paragraphs[0]

    paragraph.paragraph_format.space_within = 200

    presentation.save("line_spacing.pptx", slides.export.SaveFormat.PPTX)

結果:

段落内の行間

改行の制御

段落の改行規則は、狭いテキストブロックやラテン文字と東アジア文字が混在するプレゼンテーションで有用です。以下のプロパティは ParagraphFormat に属し、段落全体に適用されます。

  • latin_line_break はラテン文字の改行規則を制御します。混在テキストでは、これを変更すると隣接する東アジア文字や句読点の折り返し位置も変わることがあります。
  • east_asian_line_break は東アジア文字の改行規則を制御し、行頭や行末で使用できない文字の制限を含みます。

これらの規則はテキストフレーム内で自動折り返しを有効にする TextFrameFormat.wrap_text を置き換えるものではありません。折り返しが発生したときのレイアウトに影響しますが、改行文字を挿入するわけではありません。明示的な改行は、利用可能な幅に関係なく段落内で新しい行を強制します。

次の自己完結型の例は、中文とラテン文字を含む狭いテキストブロックを作成し、両方の改行プロパティを明示的に設定して “line_breaking.pptx” として保存します。どちらかの規則を試すには、もう一方の設定を固定したまま該当プロパティの値を変更します。例では 24 ポイントの Arial と SimSun を使用し、フレーム幅 160 ポイント、水平余白ゼロで作成しています。TextFrameFormat.autofit_type は TextAutofitType.NONE に設定し、テキストサイズとフレーム寸法が固定されるようにしています。

import aspose.pydrawing as draw
import aspose.slides as slides

with slides.Presentation() as presentation:
    slide = presentation.slides[0]

    shape = slide.shapes.add_auto_shape(slides.ShapeType.RECTANGLE, 50, 50, 160, 300)
    shape.fill_format.fill_type = slides.FillType.NO_FILL

    text_frame = shape.text_frame
    text_frame.text_frame_format.wrap_text = slides.NullableBool.TRUE
    text_frame.text_frame_format.autofit_type = slides.TextAutofitType.NONE
    text_frame.text_frame_format.margin_left = 0
    text_frame.text_frame_format.margin_right = 0

    paragraph = text_frame.paragraphs[0]
    paragraph.text = "中文排版测试,PowerPoint 中文演示。"

    paragraph_format = paragraph.paragraph_format
    paragraph_format.alignment = slides.TextAlignment.LEFT
    paragraph_format.default_portion_format.font_height = 24
    paragraph_format.default_portion_format.latin_font = slides.FontData("Arial")
    paragraph_format.default_portion_format.east_asian_font = slides.FontData("SimSun")
    paragraph_format.default_portion_format.fill_format.fill_type = slides.FillType.SOLID
    paragraph_format.default_portion_format.fill_format.solid_fill_color.color = draw.Color.black
    paragraph_format.latin_line_break = slides.NullableBool.FALSE
    paragraph_format.east_asian_line_break = slides.NullableBool.TRUE

    presentation.save("line_breaking.pptx", slides.export.SaveFormat.PPTX)

ハンギング句読点の制御

ParagraphFormat.hanging_punctuation は、対象となる句読点が次の行を占める代わりにテキスト行の右端を超えて表示できるようにします。段落全体に適用され、ハンギングインデントとは異なります。

次の自己完結型の例は、幅 100 ポイントのテキストフレームでハンギング句読点を有効にし、“hanging_punctuation.pptx” として保存します。24 ポイントの Arial と水平余白ゼロの条件では、最後の句点が “sentence” の後に残り、右端を超えて表示されます。比較のためにプロパティを NullableBool.FALSE に設定すると、句点は別行に配置されます。折り返しは有効、オートフィットは無効にして利用可能な幅を固定しています。

import aspose.pydrawing as draw
import aspose.slides as slides

with slides.Presentation() as presentation:
    slide = presentation.slides[0]

    shape = slide.shapes.add_auto_shape(slides.ShapeType.RECTANGLE, 50, 50, 100, 200)
    shape.fill_format.fill_type = slides.FillType.NO_FILL

    text_frame = shape.text_frame
    text_frame.text_frame_format.wrap_text = slides.NullableBool.TRUE
    text_frame.text_frame_format.autofit_type = slides.TextAutofitType.NONE
    text_frame.text_frame_format.margin_left = 0
    text_frame.text_frame_format.margin_right = 0

    paragraph = text_frame.paragraphs[0]
    paragraph.text = "Simple text, next sentence."

    paragraph_format = paragraph.paragraph_format
    paragraph_format.alignment = slides.TextAlignment.LEFT
    paragraph_format.default_portion_format.font_height = 24
    paragraph_format.default_portion_format.latin_font = slides.FontData("Arial")
    paragraph_format.default_portion_format.fill_format.fill_type = slides.FillType.SOLID
    paragraph_format.default_portion_format.fill_format.solid_fill_color.color = draw.Color.black
    paragraph_format.hanging_punctuation = slides.NullableBool.TRUE

    presentation.save("hanging_punctuation.pptx", slides.export.SaveFormat.PPTX)

すべての句読点がハンギングできるわけではありません。可視結果は フォントとレイアウトの条件 に依存し、フォント、利用可能幅、余白、オートフィット設定を変更すると違いが消えることがあります。

テキストフレームのオートフィットタイプを設定

TextFrameFormat.autofit_type は、テキストがコンテナの境界を超えたときの挙動を決定します。テキストを縮小、はみ出し、またはシェイプを自動的にリサイズしてフィットさせるかを制御できます。次の例はシェイプをテキストに合わせてリサイズするように構成し、結果を “autofit_type.pptx” として保存します。

import aspose.slides as slides

with slides.Presentation("sample.pptx") as presentation:
    slide = presentation.slides[0]

    auto_shape = slide.shapes[0]

    auto_shape.text_frame.text_frame_format.autofit_type = slides.TextAutofitType.SHAPE

    presentation.save("autofit_type.pptx", slides.export.SaveFormat.PPTX)

自動折り返し後の行数を数えてテキストまたはシェイプ幅の変化を確認するには、Count Rendered Lines を参照してください。行数だけではテキストがコンテナをはみ出しているかは判断できません。

テキストフレームのアンカーを設定

TextFrameFormat.anchoring_type は、シェイプ内でテキストを垂直方向に配置する方法(上部、中央、下部など)を定義します。次の例はテキストを最初のシェイプの下部にアンカーし、結果を “text_anchor.pptx” として保存します。

import aspose.slides as slides

with slides.Presentation("sample.pptx") as presentation:
    slide = presentation.slides[0]

    auto_shape = slide.shapes[0]

    auto_shape.text_frame.text_frame_format.anchoring_type = slides.TextAnchorType.BOTTOM

    presentation.save("text_anchor.pptx", slides.export.SaveFormat.PPTX)

テキストのタブ設定

ParagraphFormat.default_tab_size と ParagraphFormat.tabs を使用して段落内のタブストップを構成します。次の例はデフォルトタブ間隔を 100 ポイントに設定し、30 ポイント位置に左揃えタブストップを追加します。これらの設定はタブ文字を含むテキストに影響します。

import aspose.slides as slides

with slides.Presentation("sample.pptx") as presentation:
    slide = presentation.slides[0]

    auto_shape = slide.shapes[0]
    paragraph = auto_shape.text_frame.paragraphs[0]

    paragraph.paragraph_format.default_tab_size = 100
    paragraph.paragraph_format.tabs.add(30, slides.TabAlignment.LEFT)

    presentation.save("paragraph_tabs.pptx", slides.export.SaveFormat.PPTX)

結果:

段落のタブ

校正言語の設定

Aspose.Slides は BasePortionFormat.language_id を提供し、テキスト部分の校正言語を設定できます。校正言語は PowerPoint のスペルチェックと文法チェックに使用される言語を決定します。

次の例は、最初のスライドの最初のシェイプがテキストボックスであり、少なくとも 1 つの段落がある “presentation.pptx” が必要です。最初の段落の内容を “1。” に置き換え、フォントを SimSun に設定し、簡体字中国語の校正言語 (zh-CN) を割り当てます。結果は “proofing_language.pptx” として保存されます。

import aspose.slides as slides

with slides.Presentation("presentation.pptx") as presentation:
    slide = presentation.slides[0]

    auto_shape = slide.shapes[0]

    paragraph = auto_shape.text_frame.paragraphs[0]
    paragraph.portions.clear()

    font = slides.FontData("SimSun")

    text_portion = slides.Portion()
    text_portion.portion_format.complex_script_font = font
    text_portion.portion_format.east_asian_font = font
    text_portion.portion_format.latin_font = font

    # 校正言語を簡体字中国語に設定します。
    text_portion.portion_format.language_id = "zh-CN"

    text_portion.text = "1。"
    paragraph.portions.add(text_portion)

    presentation.save("proofing_language.pptx", slides.export.SaveFormat.PPTX)

デフォルト言語の設定

LoadOptions.default_text_language を使用して、プレゼンテーションの読み込みまたは作成時に作成されるテキストのデフォルト言語を定義できます。次の例はデフォルトテキスト言語を米国英語に設定したプレゼンテーションを作成し、テキストボックスを追加し、最初のテキスト部分の言語として en-US を出力します。

import aspose.slides as slides

load_options = slides.LoadOptions()
load_options.default_text_language = "en-US"

with slides.Presentation(load_options) as presentation:
    slide = presentation.slides[0]

    # 新しい矩形シェイプをテキスト付きで追加します。
    shape = slide.shapes.add_auto_shape(slides.ShapeType.RECTANGLE, 20, 20, 150, 50)
    shape.text_frame.text = "Sample text"

    # 最初の部分の言語を確認します。
    portion = shape.text_frame.paragraphs[0].portions[0]
    print(portion.portion_format.language_id)

デフォルトテキストスタイルの設定

プレゼンテーションレベルでデフォルトのテキスト書式設定を適用するには、Presentation.default_text_style を使用します。

次の例は、新しいプレゼンテーションのトップレベル段落のデフォルトとして 14 ポイントの太字フォントを設定し、“default_text_style.pptx” として保存します。テキストはこれらのデフォルトを継承できますが、より具体的な書式設定が上書きします。

import aspose.slides as slides

with slides.Presentation() as presentation:
    # トップレベルの段落書式を取得します。
    paragraph_format = presentation.default_text_style.get_level(0)

    if paragraph_format is not None:
        paragraph_format.default_portion_format.font_height = 14
        paragraph_format.default_portion_format.font_bold = slides.NullableBool.TRUE

    presentation.save("default_text_style.pptx", slides.export.SaveFormat.PPTX)

All-Caps 効果でテキストを抽出

PowerPoint で All Caps フォント効果を適用すると、スライド上では大文字で表示されますが、元の入力は小文字のままです。Aspose.Slides でそのテキスト部分を取得すると、ライブラリは入力されたままの文字列を返します。表示されたテキストと一致させるには、TextCapType をチェックし、値が ALL の場合は返された文字列を大文字に変換します。

この例は、最初のスライドの最初のシェイプがテキストボックスである “sample2.pptx” が必要です。その最初の段落の最初の部分には All Caps 効果が適用された “Hello, Aspose!” が含まれています(以下参照)。

All Caps 効果

import aspose.slides as slides

with slides.Presentation("sample2.pptx") as presentation:
    slide = presentation.slides[0]

    auto_shape = slide.shapes[0]
    text_portion = auto_shape.text_frame.paragraphs[0].portions[0]

    print("Original text:", text_portion.text)

    text_format = text_portion.portion_format.get_effective()
    if text_format.text_cap_type == slides.TextCapType.ALL:
        text = text_portion.text.upper()
        print("All-Caps effect:", text)

出力:

Original text: Hello, Aspose!
All-Caps effect: HELLO, ASPOSE!

FAQ

スライド上のテーブル内のテキストを変更するにはどうすればよいですか?

テーブル内のテキストを変更するには、Table を使用します。セルを反復処理し、各セルを Cell.text_frame で更新し、段落書式は Paragraph.paragraph_format で設定します。

PowerPoint スライドのテキストにグラデーションカラーを適用するにはどうすればよいですか?

テキストにグラデーションカラーを適用するには、BasePortionFormat.fill_format を使用します。FillFormat.fill_type を FillType.GRADIENT に設定し、グラデーションストップ、方向、透明度を構成します。

Related feature: スライド内のテキスト書式設定