PHPでPowerPointテキスト段落を管理する

Aspose.Slides は、PowerPoint のテキスト、段落、そしてポーションを操作するために必要なすべてのクラスを提供します。

  • Aspose.Slides は、段落を表すオブジェクトを追加できるようにする TextFrame クラスを提供します。TextFame オブジェクトは 1 つまたは複数の段落を持つことができ(各段落は改行で作成されます)。
  • Aspose.Slides は、ポーションを表すオブジェクトを追加できるようにする Paragraph クラスを提供します。Paragraph オブジェクトは 1 つまたは複数のポーション(ポーション オブジェクトのコレクション)を持つことができます。
  • Aspose.Slides は、テキストとその書式設定プロパティを表すオブジェクトを追加できるようにする Portion クラスを提供します。

Paragraph オブジェクトは、基礎となる Portion オブジェクトを通じて、異なる書式設定プロパティを持つテキストを扱うことができます。

複数のポーションを含む複数の段落の追加

これらの手順は、3 つの段落を持ち、各段落に 3 つのポーションを含むテキスト フレームを追加する方法を示します。

  1. Presentation クラスのインスタンスを作成します。
  2. インデックスを使用して該当スライドの参照にアクセスします。
  3. スライドに矩形 AutoShape を追加します。
  4. AutoShape に関連付けられた ITextFrame を取得します。
  5. 2 つの Paragraph オブジェクトを作成し、TextFrame の段落コレクションに追加します。
  6. 各新しい Paragraph 用に 3 つの Portion オブジェクト(デフォルト段落の場合は 2 つの Portion オブジェクト)を作成し、各 Paragraph のポーションコレクションに追加します。
  7. 各ポーションにテキストを設定します。
  8. Portion オブジェクトが提供する書式設定プロパティを使用して、各ポーションに好みの書式設定を適用します。
  9. 変更されたプレゼンテーションを保存します。

この PHP コードは、ポーションを含む段落を追加する手順の実装例です:

# PPTX ファイルを表す Presentation クラスのインスタンスを作成
$pres = new Presentation();
try {
    # 最初のスライドにアクセス
    $slide = $pres->getSlides()->get_Item(0);
    # 矩形タイプの AutoShape を追加
    $ashp = $slide->getShapes()->addAutoShape(ShapeType::Rectangle, 50, 150, 300, 150);
    # AutoShape の TextFrame にアクセス
    $tf = $ashp->getTextFrame();
    # 異なるテキスト形式の段落とポーションを作成
    $para0 = $tf->getParagraphs()->get_Item(0);
    $port01 = new Portion();
    $port02 = new Portion();
    $para0->getPortions()->add($port01);
    $para0->getPortions()->add($port02);
    $para1 = new Paragraph();
    $tf->getParagraphs()->add($para1);
    $port10 = new Portion();
    $port11 = new Portion();
    $port12 = new Portion();
    $para1->getPortions()->add($port10);
    $para1->getPortions()->add($port11);
    $para1->getPortions()->add($port12);
    $para2 = new Paragraph();
    $tf->getParagraphs()->add($para2);
    $port20 = new Portion();
    $port21 = new Portion();
    $port22 = new Portion();
    $para2->getPortions()->add($port20);
    $para2->getPortions()->add($port21);
    $para2->getPortions()->add($port22);
    for($i = 0; $i < 3; $i++) {
        for($j = 0; $j < 3; $j++) {
            $portion = $tf->getParagraphs()->get_Item($i)->getPortions()->get_Item($j);
            $portion->setText("Portion0" . $j);
            if ($j == 0) {
                $portion->getPortionFormat()->getFillFormat()->setFillType(FillType::Solid);
                $portion->getPortionFormat()->getFillFormat()->getSolidFillColor()->setColor(java("java.awt.Color")->RED);
                $portion->getPortionFormat()->setFontBold(NullableBool::True);
                $portion->getPortionFormat()->setFontHeight(15);
            } else if ($j == 1) {
                $portion->getPortionFormat()->getFillFormat()->setFillType(FillType::Solid);
                $portion->getPortionFormat()->getFillFormat()->getSolidFillColor()->setColor(java("java.awt.Color")->BLUE);
                $portion->getPortionFormat()->setFontItalic(NullableBool::True);
                $portion->getPortionFormat()->setFontHeight(18);
            }
        }
    }
    # PPTX をディスクに保存
    $pres->save("multiParaPort_out.pptx", SaveFormat::Pptx);
} finally {
    if (!java_is_null($pres)) {
        $pres->dispose();
    }
}

段落の箇条書きの管理

箇条書きリストは、情報を迅速かつ効率的に整理・提示するのに役立ちます。箇条書きされた段落は常に読みやすく、理解しやすくなります。

  1. Presentation クラスのインスタンスを作成します。
  2. インデックスを使用して該当スライドの参照にアクセスします。
  3. 選択したスライドに AutoShape を追加します。
  4. オートシェイプの TextFrame にアクセスします。
  5. TextFrame のデフォルト段落を削除します。
  6. Paragraph クラスを使用して最初の段落インスタンスを作成します。
  7. 段落の箇条書き TypeSymbol に設定し、箇条書き文字を指定します。
  8. 段落の Text を設定します。
  9. 箇条書きのインデントとして段落の Indent を設定します。
  10. 箇条書きの色を設定します。
  11. 箇条書きの高さを設定します。
  12. 新しい段落を TextFrame の段落コレクションに追加します。
  13. 2 番目の段落を追加し、手順 7 から 13 を繰り返します。
  14. プレゼンテーションを保存します。

この PHP コードは、段落の箇条書きを追加する方法を示します:

# PPTX ファイルを表す Presentation クラスのインスタンスを作成
$pres = new Presentation();
try {
    # 最初のスライドにアクセス
    $slide = $pres->getSlides()->get_Item(0);
    # AutoShape を追加してアクセス
    $aShp = $slide->getShapes()->addAutoShape(ShapeType::Rectangle, 200, 200, 400, 200);
    # AutoShape のテキストフレームにアクセス
    $txtFrm = $aShp->getTextFrame();
    # デフォルトの段落を削除
    $txtFrm->getParagraphs()->removeAt(0);
    # 段落を作成
    $para = new Paragraph();
    # 段落の箇条書きスタイルとシンボルを設定
    $para->getParagraphFormat()->getBullet()->setType(BulletType::Symbol);
    $para->getParagraphFormat()->getBullet()->setChar(8226);
    # 段落テキストを設定
    $para->setText("Welcome to Aspose.Slides");
    # 箇条書きインデントを設定
    $para->getParagraphFormat()->setIndent(25);
    # 箇条書きの色を設定
    $para->getParagraphFormat()->getBullet()->getColor()->setColorType(ColorType::RGB);
    $para->getParagraphFormat()->getBullet()->getColor()->setColor(java("java.awt.Color")->BLACK);
    $para->getParagraphFormat()->getBullet()->setBulletHardColor(NullableBool::True);// IsBulletHardColor を true に設定して独自の箇条書きカラーを使用

    # 箇条書きの高さを設定
    $para->getParagraphFormat()->getBullet()->setHeight(100);
    # 段落をテキストフレームに追加
    $txtFrm->getParagraphs()->add($para);
    # 2 番目の段落を作成
    $para2 = new Paragraph();
    # 段落の箇条書きタイプとスタイルを設定
    $para2->getParagraphFormat()->getBullet()->setType(BulletType::Numbered);
    $para2->getParagraphFormat()->getBullet()->setNumberedBulletStyle(NumberedBulletStyle->BulletCircleNumWDBlackPlain);
    # 段落テキストを追加
    $para2->setText("This is numbered bullet");
    # 箇条書きインデントを設定
    $para2->getParagraphFormat()->setIndent(25);
    $para2->getParagraphFormat()->getBullet()->getColor()->setColorType(ColorType::RGB);
    $para2->getParagraphFormat()->getBullet()->getColor()->setColor(java("java.awt.Color")->BLACK);
    $para2->getParagraphFormat()->getBullet()->setBulletHardColor(NullableBool::True);// IsBulletHardColor を true に設定して独自の箇条書きカラーを使用

    # 箇条書きの高さを設定
    $para2->getParagraphFormat()->getBullet()->setHeight(100);
    # 段落をテキストフレームに追加
    $txtFrm->getParagraphs()->add($para2);
    # 変更されたプレゼンテーションを保存
    $pres->save("Bullet_out.pptx", SaveFormat::Pptx);
} finally {
    if (!java_is_null($pres)) {
        $pres->dispose();
    }
}

画像箇条書きの管理

箇条書きリストは、情報を迅速かつ効率的に整理・提示するのに役立ちます。画像段落は読みやすく、理解しやすくなります。

  1. Presentation クラスのインスタンスを作成します。
  2. インデックスを使用して該当スライドの参照にアクセスします。
  3. スライドに AutoShape を追加します。
  4. オートシェイプの TextFrame にアクセスします。
  5. TextFrame のデフォルト段落を削除します。
  6. Paragraph クラスを使用して最初の段落インスタンスを作成します。
  7. PPImage で画像を読み込みます。
  8. 箇条書きタイプを Picture に設定し、画像を指定します。
  9. 段落の Text を設定します。
  10. 箇条書きのインデントとして段落の Indent を設定します。
  11. 箇条書きの色を設定します。
  12. 箇条書きの高さを設定します。
  13. 新しい段落を TextFrame の段落コレクションに追加します。
  14. 2 番目の段落を追加し、前述の手順を繰り返します。
  15. 変更されたプレゼンテーションを保存します。

この PHP コードは、画像箇条書きを追加および管理する方法を示します:

# PPTX ファイルを表す Presentation クラスのインスタンスを作成
$presentation = new Presentation();
try {
    # 最初のスライドにアクセス
    $slide = $presentation->getSlides()->get_Item(0);
    # 箇条書き用画像をインスタンス化
    $picture;
    $image = Images->fromFile("bullets.png");
    try {
        $picture = $presentation->getImages()->addImage($image);
    } finally {
        if (!java_is_null($image)) {
            $image->dispose();
        }
    }
    # AutoShape を追加してアクセス
    $autoShape = $slide->getShapes()->addAutoShape(ShapeType::Rectangle, 200, 200, 400, 200);
    # AutoShape のテキストフレームにアクセス
    $textFrame = $autoShape->getTextFrame();
    # デフォルトの段落を削除
    $textFrame->getParagraphs()->removeAt(0);
    # 新しい段落を作成
    $paragraph = new Paragraph();
    $paragraph->setText("Welcome to Aspose.Slides");
    # 段落の箇条書きスタイルと画像を設定
    $paragraph->getParagraphFormat()->getBullet()->setType(BulletType::Picture);
    $paragraph->getParagraphFormat()->getBullet()->getPicture()->setImage($picture);
    # 箇条書きの高さを設定
    $paragraph->getParagraphFormat()->getBullet()->setHeight(100);
    # 段落をテキストフレームに追加
    $textFrame->getParagraphs()->add($paragraph);
    # プレゼンテーションを PPTX ファイルとして保存
    $presentation->save("ParagraphPictureBulletsPPTX_out.pptx", SaveFormat::Pptx);
    # プレゼンテーションを PPT ファイルとして保存
    $presentation->save("ParagraphPictureBulletsPPT_out.ppt", SaveFormat::Ppt);
} catch (JavaException $e) {
} finally {
    if (!java_is_null($presentation)) {
        $presentation->dispose();
    }
}

階層化箇条書きの管理

箇条書きリストは、情報を迅速かつ効率的に整理・提示するのに役立ちます。階層化箇条書きは読みやすく、理解しやすくなります。

  1. Presentation クラスのインスタンスを作成します。
  2. インデックスを使用して該当スライドの参照にアクセスします。
  3. 新しいスライドに AutoShape を追加します。
  4. オートシェイプの TextFrame にアクセスします。
  5. TextFrame のデフォルト段落を削除します。
  6. Paragraph クラスを使用して最初の段落インスタンスを作成し、深さを 0 に設定します。
  7. Paragraph クラスを使用して 2 番目の段落インスタンスを作成し、深さを 1 に設定します。
  8. Paragraph クラスを使用して 3 番目の段落インスタンスを作成し、深さを 2 に設定します。
  9. Paragraph クラスを使用して 4 番目の段落インスタンスを作成し、深さを 3 に設定します。
  10. 新しい段落を TextFrame の段落コレクションに追加します。
  11. 変更されたプレゼンテーションを保存します。

この PHP コードは、階層化箇条書きを追加および管理する方法を示します:

# PPTX ファイルを表す Presentation クラスのインスタンスを作成
$pres = new Presentation();
try {
    # 最初のスライドにアクセス
    $slide = $pres->getSlides()->get_Item(0);
    # AutoShape を追加してアクセス
    $aShp = $slide->getShapes()->addAutoShape(ShapeType::Rectangle, 200, 200, 400, 200);
    # 作成した AutoShape のテキストフレームにアクセス
    $text = $aShp->addTextFrame("");
    # デフォルトの段落をクリア
    $text->getParagraphs()->clear();
    # 最初の段落を追加
    $para1 = new Paragraph();
    $para1->setText("Content");
    $para1->getParagraphFormat()->getBullet()->setType(BulletType::Symbol);
    $para1->getParagraphFormat()->getBullet()->setChar(8226);
    $para1->getParagraphFormat()->getDefaultPortionFormat()->getFillFormat()->setFillType(FillType::Solid);
    $para1->getParagraphFormat()->getDefaultPortionFormat()->getFillFormat()->getSolidFillColor()->setColor(java("java.awt.Color")->BLACK);
    # 箇条書きのレベルを設定
    $para1->getParagraphFormat()->setDepth(0);
    # 2 番目の段落を追加
    $para2 = new Paragraph();
    $para2->setText("Second Level");
    $para2->getParagraphFormat()->getBullet()->setType(BulletType::Symbol);
    $para2->getParagraphFormat()->getBullet()->setChar('-');
    $para2->getParagraphFormat()->getDefaultPortionFormat()->getFillFormat()->setFillType(FillType::Solid);
    $para2->getParagraphFormat()->getDefaultPortionFormat()->getFillFormat()->getSolidFillColor()->setColor(java("java.awt.Color")->BLACK);
    # 箇条書きのレベルを設定
    $para2->getParagraphFormat()->setDepth(1);
    # 3 番目の段落を追加
    $para3 = new Paragraph();
    $para3->setText("Third Level");
    $para3->getParagraphFormat()->getBullet()->setType(BulletType::Symbol);
    $para3->getParagraphFormat()->getBullet()->setChar(8226);
    $para3->getParagraphFormat()->getDefaultPortionFormat()->getFillFormat()->setFillType(FillType::Solid);
    $para3->getParagraphFormat()->getDefaultPortionFormat()->getFillFormat()->getSolidFillColor()->setColor(java("java.awt.Color")->BLACK);
    # 箇条書きのレベルを設定
    $para3->getParagraphFormat()->setDepth(2);
    # 4 番目の段落を追加
    $para4 = new Paragraph();
    $para4->setText("Fourth Level");
    $para4->getParagraphFormat()->getBullet()->setType(BulletType::Symbol);
    $para4->getParagraphFormat()->getBullet()->setChar('-');
    $para4->getParagraphFormat()->getDefaultPortionFormat()->getFillFormat()->setFillType(FillType::Solid);
    $para4->getParagraphFormat()->getDefaultPortionFormat()->getFillFormat()->getSolidFillColor()->setColor(java("java.awt.Color")->BLACK);
    # 箇条書きのレベルを設定
    $para4->getParagraphFormat()->setDepth(3);
    # 段落をコレクションに追加
    $text->getParagraphs()->add($para1);
    $text->getParagraphs()->add($para2);
    $text->getParagraphs()->add($para3);
    $text->getParagraphs()->add($para4);
    # プレゼンテーションを PPTX ファイルとして保存
    $pres->save("MultilevelBullet.pptx", SaveFormat::Pptx);
} finally {
    if (!java_is_null($pres)) {
        $pres->dispose();
    }
}

カスタム番号付きリストを持つ段落の管理

BulletFormat クラスは、setNumberedBulletStartWith メソッドなどを提供し、カスタム番号付けや書式設定を持つ段落を管理できます。

  1. Presentation クラスのインスタンスを作成します。
  2. 対象段落が含まれるスライドにアクセスします。
  3. スライドに AutoShape を追加します。
  4. オートシェイプの TextFrame にアクセスします。
  5. TextFrame のデフォルト段落を削除します。
  6. Paragraph クラスを使用して最初の段落インスタンスを作成し、NumberedBulletStartWith を 2 に設定します。
  7. Paragraph クラスを使用して 2 番目の段落インスタンスを作成し、NumberedBulletStartWith を 3 に設定します。
  8. Paragraph クラスを使用して 3 番目の段落インスタンスを作成し、NumberedBulletStartWith を 7 に設定します。
  9. 新しい段落を TextFrame の段落コレクションに追加します。
  10. 変更されたプレゼンテーションを保存します。

この PHP コードは、カスタム番号付けや書式設定を持つ段落を追加および管理する方法を示します:

$presentation = new Presentation();
try {
    $shape = $presentation->getSlides()->get_Item(0)->getShapes()->addAutoShape(ShapeType::Rectangle, 200, 200, 400, 200);
    # 作成した AutoShape のテキストフレームにアクセスします
    $textFrame = $shape->getTextFrame();
    # 既存のデフォルト段落を削除します
    $textFrame->getParagraphs()->removeAt(0);
    # 最初のリスト
    $paragraph1 = new Paragraph();
    $paragraph1->setText("bullet 2");
    $paragraph1->getParagraphFormat()->setDepth(4);
    $paragraph1->getParagraphFormat()->getBullet()->setNumberedBulletStartWith(2);
    $paragraph1->getParagraphFormat()->getBullet()->setType(BulletType::Numbered);
    $textFrame->getParagraphs()->add($paragraph1);
    $paragraph2 = new Paragraph();
    $paragraph2->setText("bullet 3");
    $paragraph2->getParagraphFormat()->setDepth(4);
    $paragraph2->getParagraphFormat()->getBullet()->setNumberedBulletStartWith(3);
    $paragraph2->getParagraphFormat()->getBullet()->setType(BulletType::Numbered);
    $textFrame->getParagraphs()->add($paragraph2);
    $paragraph5 = new Paragraph();
    $paragraph5->setText("bullet 7");
    $paragraph5->getParagraphFormat()->setDepth(4);
    $paragraph5->getParagraphFormat()->getBullet()->setNumberedBulletStartWith(7);
    $paragraph5->getParagraphFormat()->getBullet()->setType(BulletType::Numbered);
    $textFrame->getParagraphs()->add($paragraph5);
    $presentation->save("SetCustomBulletsNumber-slides.pptx", SaveFormat::Pptx);
} finally {
    if (!java_is_null($presentation)) {
        $presentation->dispose();
    }
}

段落インデントの設定

  1. Presentation クラスのインスタンスを作成します。
  2. インデックスを使用して該当スライドの参照にアクセスします。
  3. スライドに矩形 AutoShape を追加します。
  4. 矩形オートシェイプに 3 段落を持つ TextFrame を追加します。
  5. 矩形の線を非表示にします。
  6. Paragraph の BulletOffset プロパティを使用してインデントを設定します。
  7. 変更されたプレゼンテーションを PPT ファイルとして書き出します。

この PHP コードは、段落インデントを設定する方法を示します:

# Presentation クラスのインスタンスを作成
$pres = new Presentation();
try {
    # 最初のスライドを取得
    $sld = $pres->getSlides()->get_Item(0);
    # 四角形シェイプを追加
    $rect = $sld->getShapes()->addAutoShape(ShapeType::Rectangle, 100, 100, 500, 150);
    # 四角形に TextFrame を追加
    $tf = $rect->addTextFrame("This is first line \rThis is second line \rThis is third line");
    # テキストがシェイプにフィットするように設定
    $tf->getTextFrameFormat()->setAutofitType(TextAutofitType::Shape);
    # 四角形の線を非表示にする
    $rect->getLineFormat()->getFillFormat()->setFillType(FillType::Solid);
    # TextFrame の最初の段落を取得し、インデントを設定
    $para1 = $tf->getParagraphs()->get_Item(0);
    # 段落の箇条書きスタイルとシンボルを設定
    $para1->getParagraphFormat()->getBullet()->setType(BulletType::Symbol);
    $para1->getParagraphFormat()->getBullet()->setChar(8226);
    $para1->getParagraphFormat()->setAlignment(TextAlignment->Left);
    $para1->getParagraphFormat()->setDepth(2);
    $para1->getParagraphFormat()->setIndent(30);
    # TextFrame の2番目の段落を取得し、インデントを設定
    $para2 = $tf->getParagraphs()->get_Item(1);
    $para2->getParagraphFormat()->getBullet()->setType(BulletType::Symbol);
    $para2->getParagraphFormat()->getBullet()->setChar(8226);
    $para2->getParagraphFormat()->setAlignment(TextAlignment->Left);
    $para2->getParagraphFormat()->setDepth(2);
    $para2->getParagraphFormat()->setIndent(40);
    # TextFrame の3番目の段落を取得し、インデントを設定
    $para3 = $tf->getParagraphs()->get_Item(2);
    $para3->getParagraphFormat()->getBullet()->setType(BulletType::Symbol);
    $para3->getParagraphFormat()->getBullet()->setChar(8226);
    $para3->getParagraphFormat()->setAlignment(TextAlignment->Left);
    $para3->getParagraphFormat()->setDepth(2);
    $para3->getParagraphFormat()->setIndent(50);
    # プレゼンテーションをディスクに保存
    $pres->save("InOutDent_out.pptx", SaveFormat::Pptx);
} finally {
    if (!java_is_null($pres)) {
        $pres->dispose();
    }
}

段落のハンギングインデントの設定

この PHP コードは、段落のハンギングインデントを設定する方法を示します:

$pres = new Presentation();
try {
    $autoShape = $pres->getSlides()->get_Item(0)->getShapes()->addAutoShape(ShapeType::Rectangle, 50, 250, 550, 150);
    $para1 = new Paragraph();
    $para1->setText("Example");
    $para2 = new Paragraph();
    $para2->setText("Set Hanging Indent for Paragraph");
    $para3 = new Paragraph();
    $para3->setText("This code shows you how to set the hanging indent for a paragraph: ");
    $para2->getParagraphFormat()->setMarginLeft(10.0);
    $para3->getParagraphFormat()->setMarginLeft(20.0);
    $autoShape->getTextFrame()->getParagraphs()->add($para1);
    $autoShape->getTextFrame()->getParagraphs()->add($para2);
    $autoShape->getTextFrame()->getParagraphs()->add($para3);
    $pres->save("pres.pptx", SaveFormat::Pptx);
} finally {
    if (!java_is_null($pres)) {
        $pres->dispose();
    }
}

段落の End プロパティの管理

  1. Presentation クラスのインスタンスを作成します。
  2. 位置を使用して段落を含むスライドの参照を取得します。
  3. スライドに矩形 AutoShape を追加します。
  4. 矩形に 2 段落を持つ TextFrame を追加します。
  5. 段落のフォントの高さとフォントタイプを設定します。
  6. 段落の End プロパティを設定します。
  7. 変更されたプレゼンテーションを PPTX ファイルとして書き出します。

この PHP コードは、PowerPoint の段落に End プロパティを設定する方法を示します:

$pres = new Presentation();
try {
    $shape = $pres->getSlides()->get_Item(0)->getShapes()->addAutoShape(ShapeType::Rectangle, 10, 10, 200, 250);
    $para1 = new Paragraph();
    $para1->getPortions()->add(new Portion("Sample text"));
    $para2 = new Paragraph();
    $para2->getPortions()->add(new Portion("Sample text 2"));
    $portionFormat = new PortionFormat();
    $portionFormat::setFontHeight(48);
    $portionFormat::setLatinFont(new FontData("Times New Roman"));
    $para2->setEndParagraphPortionFormat($portionFormat);
    $shape->getTextFrame()->getParagraphs()->add($para1);
    $shape->getTextFrame()->getParagraphs()->add($para2);
    $pres->save($resourcesOutputPath . "pres.pptx", SaveFormat::Pptx);
} finally {
    if (!java_is_null($pres)) {
        $pres->dispose();
    }
}

HTML テキストを段落にインポートする

Aspose.Slides は、HTML テキストを段落にインポートするための高度なサポートを提供します。

  1. Presentation クラスのインスタンスを作成します。
  2. インデックスを使用して該当スライドの参照にアクセスします。
  3. スライドに AutoShape を追加します。
  4. AutoShapeTextFrame を追加してアクセスします。
  5. TextFrame のデフォルト段落を削除します。
  6. TextReader でソース HTML ファイルを読み取ります。
  7. Paragraph クラスを使用して最初の段落インスタンスを作成します。
  8. 読み取った TextReader の HTML コンテンツを TextFrame の ParagraphCollection に追加します。
  9. 変更されたプレゼンテーションを保存します。

この PHP コードは、段落への HTML テキストのインポート手順の実装例です:

# 空のプレゼンテーションインスタンスを作成
$pres = new Presentation();
try {
    # プレゼンテーションのデフォルトの最初のスライドにアクセス
    $slide = $pres->getSlides()->get_Item(0);
    # HTML コンテンツを収めるために AutoShape を追加
    $ashape = $slide->getShapes()->addAutoShape(ShapeType::Rectangle, 10, 10, $pres->getSlideSize()->getSize()->getWidth() - 20, $pres->getSlideSize()->getSize()->getHeight() - 10);
    $ashape->getFillFormat()->setFillType(FillType::NoFill);
    # シェイプにテキストフレームを追加
    $ashape->addTextFrame("");
    # 追加したテキストフレームのすべての段落をクリア
    $ashape->getTextFrame()->getParagraphs()->clear();
    # ストリームリーダーで HTML ファイルを読み込む
    $tr = new StreamReader("file.html");
    # テキストフレームに HTML ストリームリーダーからテキストを追加
    $ashape->getTextFrame()->getParagraphs()->addFromHtml($tr->readToEnd());
    # プレゼンテーションを保存
    $pres->save("output_out.pptx", SaveFormat::Pptx);
} finally {
    if (!java_is_null($pres)) {
        $pres->dispose();
    }
}

段落テキストを HTML にエクスポートする

Aspose.Slides は、段落に含まれるテキストを HTML にエクスポートするための高度なサポートを提供します。

  1. Presentation クラスのインスタンスを作成し、目的のプレゼンテーションを読み込みます。
  2. インデックスを使用して該当スライドの参照にアクセスします。
  3. HTML にエクスポートするテキストを含むシェイプにアクセスします。
  4. シェイプの TextFrame にアクセスします。
  5. StreamWriter のインスタンスを作成し、新しい HTML ファイルを追加します。
  6. StreamWriter に開始インデックスを指定し、目的の段落をエクスポートします。

この PHP コードは、PowerPoint の段落テキストを HTML にエクスポートする方法を示します:

# プレゼンテーションファイルを読み込む
$pres = new Presentation("ExportingHTMLText.pptx");
try {
    # プレゼンテーションのデフォルトの最初のスライドにアクセス
    $slide = $pres->getSlides()->get_Item(0);
    # 目的のインデックス
    $index = 0;
    # 追加されたシェイプにアクセス
    $ashape = $slide->getShapes()->get_Item($index);
    # 出力 HTML ファイルを作成
    $os = new Java("java.io.FileOutputStream", "output.html");
    $writer = new OutputStreamWriter($os, "UTF-8");
    # 最初の段落を HTML として抽出
    # 段落の開始インデックスとコピーする総段落数を指定して段落データを書き出す
    $writer->write($ashape->getTextFrame()->getParagraphs()->exportToHtml(0, $ashape->getTextFrame()->getParagraphs()->getCount(), null));
    $writer->close();
} catch (JavaException $e) {
} finally {
    if (!java_is_null($pres)) {
        $pres->dispose();
    }
}

段落を画像として保存する

このセクションでは、Paragraph クラスで表されるテキスト段落を画像として保存する 2 つの例を紹介します。両例とも、Shape クラスの getImage メソッドで段落を含むシェイプの画像を取得し、シェイプ内の段落の境界を計算してビットマップ画像としてエクスポートします。これにより、PowerPoint プレゼンテーションからテキストの特定部分を抽出し、別個の画像として保存でき、さまざまなシナリオでの再利用が可能になります。

例として、sample.pptx というプレゼンテーション ファイルに 1 スライドがあり、最初のシェイプが 3 段落を含むテキスト ボックスであるとします。

The text box with three paragraphs

例 1

この例では、2 番目の段落を画像として取得します。まずプレゼンテーションの最初のスライドからシェイプの画像を取得し、続いてシェイプのテキスト フレーム内の 2 番目の段落の境界を計算します。その後、段落を新しいビットマップ画像に再描画し、PNG 形式で保存します。この方法は、特定の段落を別画像として保存しつつ、テキストの正確なサイズや書式設定を保持したい場合に便利です。

$imageIO = new Java("javax.imageio.ImageIO");

$presentation = new Presentation("sample.pptx");
try {
    $firstShape = $presentation->getSlides()->get_Item(0)->getShapes()->get_Item(0);

    // メモリ内にシェイプをビットマップとして保存。
    $shapeImage = $firstShape->getImage();
    $shapeImageStream = new Java("java.io.ByteArrayOutputStream");
    $shapeImage->save($shapeImageStream, ImageFormat::Png);
    $shapeImage->dispose();

    // メモリからシェイプのビットマップを作成。
    $shapeImageInputStream = new Java("java.io.ByteArrayInputStream", $shapeImageStream->toByteArray());
    $shapeBitmap = $imageIO->read($shapeImageInputStream);

    // 第2段落の境界を計算。
    $secondParagraph = $firstShape->getTextFrame()->getParagraphs()->get_Item(1);
    $paragraphRectangle = $secondParagraph->getRect();

    // 出力画像の座標とサイズを計算(最小サイズ - 1x1 ピクセル)。
    $imageX = floor(java_values($paragraphRectangle->getX()));
    $imageY = floor(java_values($paragraphRectangle->getY()));
    $imageWidth = max(1, ceil(java_values($paragraphRectangle->getWidth())));
    $imageHeight = max(1, ceil(java_values($paragraphRectangle->getHeight())));

    // シェイプのビットマップを切り取り、段落のビットマップだけを取得。
    $paragraphBitmap = $shapeBitmap->getSubimage($imageX, $imageY, $imageWidth, $imageHeight);

    $imageIO->write($paragraphBitmap, "png", new Java("java.io.File", "paragraph.png"));
} finally {
    if (!java_is_null($presentation)) {
        $presentation->dispose();
    }
}

結果:

The paragraph image

例 2

この例では、前述の手法にスケーリング係数を加えて段落画像を取得します。シェイプをプレゼンテーションから抽出し、スケーリング係数 2 で画像として保存します。これにより、段落エクスポート時に高解像度の出力が得られます。段落の境界はスケールを考慮して計算されます。スケーリングは、印刷物など高品質な画像が必要な場合に特に有用です。

$imageIO = new Java("javax.imageio.ImageIO");

$imageScaleX = 2;
$imageScaleY = $imageScaleX;

$presentation = new Presentation("sample.pptx");
try {
    $firstShape = $presentation->getSlides()->get_Item(0)->getShapes()->get_Item(0);

    // スケーリング付きでシェイプをメモリ内にビットマップとして保存。
    $shapeImage = $firstShape->getImage(ShapeThumbnailBounds::Shape, $imageScaleX, $imageScaleY);
    $shapeImageStream = new Java("java.io.ByteArrayOutputStream");
    $shapeImage->save($shapeImageStream, ImageFormat::Png);
    $shapeImage->dispose();

    // メモリからシェイプのビットマップを作成。
    $shapeImageInputStream = new Java("java.io.ByteArrayInputStream", $shapeImageStream->toByteArray());
    $shapeBitmap = $imageIO->read($shapeImageInputStream);

    // 第2段落の境界を計算。
    $secondParagraph = $firstShape->getTextFrame()->getParagraphs()->get_Item(1);
    $paragraphRectangle = $secondParagraph->getRect();
    $paragraphRectangle->setRect(
            java_values($paragraphRectangle->getX()) * $imageScaleX,
            java_values($paragraphRectangle->getY()) * $imageScaleY,
            java_values($paragraphRectangle->getWidth()) * $imageScaleX,
            java_values($paragraphRectangle->getHeight()) * $imageScaleY
    );

    // 出力画像の座標とサイズを計算(最小サイズ - 1x1 ピクセル)。
    $imageX = floor(java_values($paragraphRectangle->getX()));
    $imageY = floor(java_values($paragraphRectangle->getY()));
    $imageWidth = max(1, ceil(java_values($paragraphRectangle->getWidth())));
    $imageHeight = max(1, ceil(java_values($paragraphRectangle->getHeight())));

    // シェイプのビットマップを切り取り、段落のビットマップだけを取得。
    $paragraphBitmap = $shapeBitmap->getSubimage($imageX, $imageY, $imageWidth, $imageHeight);

    $imageIO->write($paragraphBitmap, "png", new Java("java.io.File", "paragraph.png"));
} finally {
    if (!java_is_null($presentation)) {
        $presentation->dispose();
    }
}

FAQ

テキスト フレーム内で改行を完全に無効にできますか?

はい。テキスト フレームのラッピング設定(setWrapText)を使用してラッピングをオフにすると、行はフレームの端で折り返されません。

特定の段落のスライド上での正確な境界を取得するにはどうすればよいですか?

段落(あるいは単一のポーション)のバウンディング矩形を取得すれば、スライド上での正確な位置とサイズを知ることができます。

段落の配置(左揃え/右揃え/中心揃え/均等割り付け)はどこで設定しますか?

AlignmentParagraphFormat の段落レベル設定であり、個々のポーションの書式設定に関係なく、段落全体に適用されます。

段落の一部(例:単語)だけにスペルチェック言語を設定できますか?

はい。言語はポーションレベルで設定されます(PortionFormat::setLanguageId)。したがって、1 つの段落内に複数の言語を共存させることが可能です。