テキストボックスの管理

スライド上のテキストは通常、テキストボックスまたはシェイプに存在します。したがって、スライドにテキストを追加するには、テキストボックスを追加し、その中にいくつかのテキストを入れる必要があります。Aspose.Slides for C++ は、テキストを含むシェイプを追加することを可能にする IAutoShape インターフェースを提供します。

スライドにテキストボックスを作成する

スライドにテキストボックスを作成するには、次の手順を実行します:

  1. Presentation クラスのインスタンスを作成します。
  2. 新しく作成したプレゼンテーションの最初のスライドへの参照を取得します。
  3. スライド上の指定された位置に Rectangle として ShapeType を設定した IAutoShape オブジェクトを追加し、新しく追加された IAutoShape オブジェクトへの参照を取得します。
  4. テキストを含む TextFrame プロパティを IAutoShape オブジェクトに追加します。以下の例では、次のテキストを追加しました:Aspose TextBox
  5. 最後に、Presentation オブジェクトを通じてPPTXファイルを書き込みます。

次のC++コードは、上記の手順の実装であり、スライドにテキストを追加する方法を示しています:

// Presentationをインスタンス化
auto pres = System::MakeObject<Presentation>();

// プレゼンテーションの最初のスライドを取得
auto sld = pres->get_Slides()->idx_get(0);

// RectangleタイプのAutoShapeを追加
auto ashp = sld->get_Shapes()->AddAutoShape(ShapeType::Rectangle, 150.0f, 75.0f, 150.0f, 50.0f);

// RectangleにTextFrameを追加
ashp->AddTextFrame(u" ");

// テキストフレームにアクセス
auto txtFrame = ashp->get_TextFrame();

// テキストフレームのための段落オブジェクトを作成
auto para = txtFrame->get_Paragraphs()->idx_get(0);

// 段落のためのポーションオブジェクトを作成
auto portion = para->get_Portions()->idx_get(0);

// テキストを設定
portion->set_Text(u"Aspose TextBox");

// プレゼンテーションをディスクに保存
pres->Save(u"TextBox_out.pptx", SaveFormat::Pptx);

テキストボックスシェイプを確認する

Aspose.Slides は、シェイプを調査し、テキストボックスを見つけるための get_IsTextBox() メソッドを提供します(AutoShape クラスから)。

テキストボックスとシェイプ

次のC++コードは、シェイプがテキストボックスとして作成されたかどうかを確認する方法を示しています:

auto pres = System::MakeObject<Presentation>(u"pres.pptx");
for (auto&& slide : pres->get_Slides())
{
    for (auto&& shape : slide->get_Shapes())
    {
        auto autoShape = System::DynamicCast_noexcept<Aspose::Slides::AutoShape>(shape);
        if (autoShape != nullptr)
        {
            System::Console::WriteLine(autoShape->get_IsTextBox() ? System::String(u"シェイプはテキストボックスです") : System::String(u"シェイプはテキストボックスではありません"));
        }
    }
}

テキストボックスに列を追加する

Aspose.Slides は、テキストボックスに列を追加することを可能にする set_ColumnCount および set_ColumnSpacing メソッド(ITextFrameFormat インターフェースおよび TextFrameFormat クラスから)を提供します。このメソッドを使用して、テキストボックス内の列の数を指定し、列間の間隔をポイントで設定できます。

次のC++コードは、説明した操作を示します:

auto presentation = System::MakeObject<Presentation>();
// プレゼンテーションの最初のスライドを取得
auto slide = presentation->get_Slides()->idx_get(0);

// RectangleタイプのAutoShapeを追加
auto aShape = slide->get_Shapes()->AddAutoShape(ShapeType::Rectangle, 100.0f, 100.0f, 300.0f, 300.0f);

// RectangleにTextFrameを追加
aShape->AddTextFrame(String(u"これらのすべての列は、単一のテキストコンテナ内に制限されています -- ") 
    + u"テキストを追加または削除でき、新しいまたは残りのテキストが自動的に調整され " 
    + u"コンテナ内に流れ込みます。一つのコンテナから別のコンテナにテキストを流すことはできませんが -- PowerPointのテキストの列オプションは制限されています!");

// TextFrameのテキストフォーマットを取得
auto format = aShape->get_TextFrame()->get_TextFrameFormat();

// TextFrame内の列の数を指定
format->set_ColumnCount(3);

// 列間のスペーシングを指定
format->set_ColumnSpacing(10);

// プレゼンテーションを保存
presentation->Save(u"ColumnCount.pptx", SaveFormat::Pptx);

テキストフレームに列を追加する

Aspose.Slides for C++ は、テキストフレーム内に列を追加することを可能にする set_ColumnCount メソッド(ITextFrameFormat インターフェースから)を提供します。このメソッドを介して、テキストフレーム内の列の好ましい数を指定できます。

次のC++コードは、テキストフレーム内に列を追加する方法を示しています:

String outPptxFileName = u"ColumnsTest.pptx";
    
auto pres = System::MakeObject<Presentation>();
auto shape = pres->get_Slides()->idx_get(0)->get_Shapes()->AddAutoShape(ShapeType::Rectangle, 100.0f, 100.0f, 300.0f, 300.0f);
auto format = System::ExplicitCast<TextFrameFormat>(shape->get_TextFrame()->get_TextFrameFormat());

format->set_ColumnCount(2);
shape->get_TextFrame()->set_Text(String(u"これらのすべての列は単一のテキストコンテナ内にとどまるよう強制されます -- ") 
    + u"テキストを追加または削除でき、新しいまたは残りのテキストが自動的に調整され " 
    + u"コンテナ内に留まるようになります。一つのコンテナから別のコンテナにテキストがこぼれることはできませんが -- PowerPointのテキストの列オプションは制限されています!");
pres->Save(outPptxFileName, SaveFormat::Pptx);

{
    auto test = System::MakeObject<Presentation>(outPptxFileName);
    auto format1 = System::ExplicitCast<AutoShape>(test->get_Slides()->idx_get(0)->get_Shapes()->idx_get(0))->get_TextFrame()->get_TextFrameFormat();
    CODEPORTING_DEBUG_ASSERT1(2 == format1->get_ColumnCount());
    CODEPORTING_DEBUG_ASSERT1(std::numeric_limits<double>::quiet_NaN() == format1->get_ColumnSpacing());
}

format->set_ColumnSpacing(20);
pres->Save(outPptxFileName, SaveFormat::Pptx);

{
    auto test = System::MakeObject<Presentation>(outPptxFileName);
    auto format2 = System::ExplicitCast<AutoShape>(test->get_Slides()->idx_get(0)->get_Shapes()->idx_get(0))->get_TextFrame()->get_TextFrameFormat();
    CODEPORTING_DEBUG_ASSERT1(2 == format2->get_ColumnCount());
    CODEPORTING_DEBUG_ASSERT1(20 == format2->get_ColumnSpacing());
}

format->set_ColumnCount(3);
format->set_ColumnSpacing(15);
pres->Save(outPptxFileName, SaveFormat::Pptx);

{
    auto test = System::MakeObject<Presentation>(outPptxFileName);
    auto format3 = System::ExplicitCast<AutoShape>(test->get_Slides()->idx_get(0)->get_Shapes()->idx_get(0))->get_TextFrame()->get_TextFrameFormat();
    CODEPORTING_DEBUG_ASSERT1(3 == format3->get_ColumnCount());
    CODEPORTING_DEBUG_ASSERT1(15 == format3->get_ColumnSpacing());
}

テキストを更新する

Aspose.Slides は、テキストボックス内のテキスト、またはプレゼンテーション内のすべてのテキストを変更または更新することを可能にします。

次のC++コードは、プレゼンテーション内のすべてのテキストが更新される操作を示しています:

auto pres = System::MakeObject<Presentation>(u"text.pptx");
for (const auto& slide : pres->get_Slides())
{
    for (const auto& shape : slide->get_Shapes())
    {
        if (ObjectExt::Is<IAutoShape>(shape))
        {
            auto autoShape = System::AsCast<IAutoShape>(shape);
            for (const auto& paragraph : autoShape->get_TextFrame()->get_Paragraphs())
            {
                for (const auto& portion : paragraph->get_Portions())
                {
                    // テキストを変更
                    portion->set_Text(portion->get_Text().Replace(u"years", u"months"));
                    // 書式を変更
                    portion->get_PortionFormat()->set_FontBold(NullableBool::True);
                }
            }
        }
    }
}

// 修正されたプレゼンテーションを保存
pres->Save(u"text-changed.pptx", SaveFormat::Pptx);

ハイパーリンク付きテキストボックスを追加する

テキストボックス内にリンクを挿入することができます。テキストボックスがクリックされると、ユーザーはリンクを開くように誘導されます。

リンクを含むテキストボックスを追加するには、次の手順を実行します:

  1. Presentation クラスのインスタンスを作成します。
  2. 新しく作成されたプレゼンテーションの最初のスライドへの参照を取得します。
  3. スライド上の指定された位置に Rectangle として AutoShape オブジェクトを追加し、新しく追加されたAutoShapeオブジェクトへの参照を取得します。
  4. Aspose TextBox をデフォルトテキストとして含む AutoShape オブジェクトに TextFrame を追加します。
  5. IHyperlinkManager クラスをインスタンス化します。
  6. IHyperlinkManager オブジェクトを、TextFrame の好ましいポーションに関連付けられた set_HyperlinkClick メソッドに割り当てます。
  7. 最後に、Presentation オブジェクトを通じてPPTXファイルを書き込みます。

次のC++コードは、上記の手順の実装であり、スライドにハイパーリンク付きテキストボックスを追加する方法を示しています:

// PPTXを表すPresentationクラスをインスタンス化
auto presentation = System::MakeObject<Presentation>();

// プレゼンテーションの最初のスライドを取得
auto slide = presentation->get_Slides()->idx_get(0);

// Rectangleとしてタイプ設定されたAutoShapeオブジェクトを追加
auto shape = slide->get_Shapes()->AddAutoShape(ShapeType::Rectangle, 150.0f, 150.0f, 150.0f, 50.0f);

// シェイプをAutoShapeにキャスト
auto autoShape = System::ExplicitCast<IAutoShape>(shape);

// AutoShapeに関連付けられたITextFrameプロパティにアクセス
autoShape->AddTextFrame(u"");

auto textFrame = autoShape->get_TextFrame();

// フレームにテキストを追加
textFrame->get_Paragraphs()->idx_get(0)->get_Portions()->idx_get(0)->set_Text(u"Aspose.Slides");

// ポーションテキストのハイパーリンクを設定
auto linkManager = textFrame->get_Paragraphs()->idx_get(0)->get_Portions()->idx_get(0)->get_PortionFormat()->get_HyperlinkManager();
linkManager->SetExternalHyperlinkClick(u"http://www.aspose.com");

// PPTXプレゼンテーションを保存
presentation->Save(u"hLinkPPTX_out.pptx", SaveFormat::Pptx);