プレゼンテーションからテキストを抽出する
スライドからテキストを抽出する
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つのパラメーターを取ります:
- 最初は、テキストを抽出するプレゼンテーションを表すPresentationオブジェクトです。
- 次は、プレゼンテーションからテキストをスキャンするときにマスター スライドを含めるかどうかを決定するブール値です。 このメソッドは、テキストフォーマット情報を含む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オブジェクトには以下のメソッドがあります:
- ISlideText.getText - スライドのシェイプ上のテキスト
- ISlideText.getMasterText - このスライドのマスターページのシェイプ上のテキスト
- ISlideText.getLayoutText - このスライドのレイアウトページのシェイプ上のテキスト
- ISlideText.getNotesText - このスライドのノートページのシェイプ上のテキスト
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());