プレゼンテーションからテキストを抽出する

スライドからテキストを抽出する

Aspose.Slides for PHP via Javaは、SlideUtilクラスを提供します。このクラスは、プレゼンテーションまたはスライドから全テキストを抽出するためのオーバーロードされた静的メソッドのいくつかを公開しています。PPTXプレゼンテーションのスライドからテキストを抽出するには、 SlideUtilクラスが公開するオーバーロードされた静的メソッドgetAllTextBoxesを使用します。このメソッドは、スライドオブジェクトをパラメーターとして受け取ります。 実行すると、Slideメソッドは渡されたスライドから全テキストをスキャンし、TextFrameオブジェクトの配列を返します。これは、テキストに関連するテキストフォーマットが利用可能であることを意味します。次のコードは、プレゼンテーションの最初のスライドにあるすべてのテキストを抽出します:

  # PPTXファイルを表すPresentationクラスをインスタンス化
  $pres = new Presentation("demo.pptx");
  $Array = new java_class("java.lang.reflect.Array");
  try {
    foreach($pres->getSlides() as $slide) {
      # PPTXのすべてのスライドからITextFrameオブジェクトの配列を取得
      $textFramesPPTX = SlideUtil->getAllTextBoxes($slide);
      # TextFramesの配列をループ
      for($i = 0; $i < java_values($Array->getLength($textFramesPPTX)) ; $i++) {
        # 現在のITextFrame内の段落をループ
        foreach($textFramesPPTX[$i]->getParagraphs() as $para) {
          # 現在のIParagraph内のポーションをループ
          foreach($para->getPortions() as $port) {
            # 現在のポーションのテキストを表示
            echo($port->getText());
            # テキストのフォント高さを表示
            echo($port->getPortionFormat()->getFontHeight());
            # テキストのフォント名を表示
            if (!java_is_null($port->getPortionFormat()->getLatinFont())) {
              echo($port->getPortionFormat()->getLatinFont()->getFontName());
            }
          }
        }
      }
    }
  } finally {
    $pres->dispose();
  }

プレゼンテーションからテキストを抽出する

プレゼンテーション全体からテキストをスキャンするには、SlideUtilクラスが公開する静的メソッドgetAllTextFramesを使用します。このメソッドは2つのパラメーターを取ります:

  1. 最初は、テキストを抽出するプレゼンテーションを表すPresentationオブジェクトです。
  2. 次は、プレゼンテーションからテキストをスキャンするときにマスター スライドを含めるかどうかを決定するブール値です。 このメソッドは、テキストフォーマット情報を含むTextFrameオブジェクトの配列を返します。以下のコードは、マスター スライドを含むプレゼンテーションからテキストとフォーマット情報をスキャンします。
  # PPTXファイルを表すPresentationクラスをインスタンス化
  $pres = new Presentation("demo.pptx");
  $Array = new java_class("java.lang.reflect.Array");
  try {
    # PPTXのすべてのスライドからITextFrameオブジェクトの配列を取得
    $textFramesPPTX = SlideUtil->getAllTextFrames($pres, true);
    # TextFramesの配列をループ
    for($i = 0; $i < java_values($Array->getLength($textFramesPPTX)) ; $i++) {
      # 現在のITextFrame内の段落をループ
      foreach($textFramesPPTX[$i]->getParagraphs() as $para) {
        # 現在のIParagraph内のポーションをループ
        foreach($para->getPortions() as $port) {
          # 現在のポーションのテキストを表示
          echo($port->getText());
          # テキストのフォント高さを表示
          echo($port->getPortionFormat()->getFontHeight());
          # テキストのフォント名を表示
          if (!java_is_null($port->getPortionFormat()->getLatinFont())) {
            echo($port->getPortionFormat()->getLatinFont()->getFontName());
          }
        }
      }
    }
  } finally {
    $pres->dispose();
  }

カテゴリ別で高速なテキスト抽出

新しい静的メソッドgetPresentationTextがPresentationクラスに追加されました。このメソッドには3つのオーバーロードがあります。


TextExtractionArrangingMode列挙引数は、テキスト結果の出力を整理するモードを示し、以下の値に設定できます:

  • Unarranged - スライド上の位置を無視した生のテキスト
  • Arranged - スライド上と同じ順序で配置されたテキスト

Unarrangedモードはスピードが重要な場合に使用でき、Arrangedモードよりも高速です。

IPresentationTextは、プレゼンテーションから抽出された生のテキストを表します。それは、getSlidesTextメソッドを含み、これによりISlideTextオブジェクトの配列が返されます。各オブジェクトは対応するスライド上のテキストを表します。ISlideTextオブジェクトには以下のメソッドがあります:

SlideTextクラスもあり、ISlideTextインターフェースを実装しています。

新しいAPIは次のように使用できます:

  $text1 = PresentationFactory->getInstance()->getPresentationText("presentation.pptx", TextExtractionArrangingMode->Unarranged);
  echo($text1->getSlidesText()[0]->getText());
  echo($text1->getSlidesText()[0]->getLayoutText());
  echo($text1->getSlidesText()[0]->getMasterText());
  echo($text1->getSlidesText()[0]->getNotesText());