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

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

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

//PPTXファイルを表すプレゼンテーションクラスをインスタンス化
Presentation pres = new Presentation("demo.pptx");
try {
    for (ISlide slide : pres.getSlides()) 
    {
        //PPTX内のすべてのスライドからITextFrameオブジェクトの配列を取得
        ITextFrame[] textFramesPPTX = SlideUtil.getAllTextBoxes(slide);

        //TextFramesの配列をループ
        for (int i = 0; i < textFramesPPTX.length; i++) {
            //現在のITextFrame内の段落をループ
            for (IParagraph para : textFramesPPTX[i].getParagraphs()) {
                //現在のIParagraph内の部分をループ
                for (IPortion port : para.getPortions()) {
                    //現在の部分のテキストを表示
                    System.out.println(port.getText());

                    //テキストのフォント高さを表示
                    System.out.println(port.getPortionFormat().getFontHeight());

                    //テキストのフォント名を表示
                    if (port.getPortionFormat().getLatinFont() != null)
                        System.out.println(port.getPortionFormat().getLatinFont().getFontName());
                }
            }
        }
    }
} finally {
    pres.dispose();
}

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

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

  1. 最初に、テキストが抽出されるプレゼンテーションを表すPresentationオブジェクト。
  2. 次に、プレゼンテーションからテキストをスキャンする際にマスター スライドを含めるかどうかを決定するブール値。 このメソッドは、テキストフォーマット情報を含むTextFrameオブジェクトの配列を返します。以下のコードは、マスター スライドを含むプレゼンテーションからのテキストとフォーマット情報をスキャンします。
//PPTXファイルを表すプレゼンテーションクラスをインスタンス化
Presentation pres = new Presentation("demo.pptx");
try {
    //PPTX内のすべてのスライドからITextFrameオブジェクトの配列を取得
    ITextFrame[] textFramesPPTX = SlideUtil.getAllTextFrames(pres, true);

    //TextFramesの配列をループ
    for (int i = 0; i < textFramesPPTX.length; i++) 
    {
        //現在のITextFrame内の段落をループ
        for (IParagraph para : textFramesPPTX[i].getParagraphs())
        {
            //現在のIParagraph内の部分をループ
            for (IPortion port : para.getPortions())
            {
                //現在の部分のテキストを表示
                System.out.println(port.getText());

                //テキストのフォント高さを表示
                System.out.println(port.getPortionFormat().getFontHeight());

                //テキストのフォント名を表示
                if (port.getPortionFormat().getLatinFont() != null)
                    System.out.println(port.getPortionFormat().getLatinFont().getFontName());
            }
        }
    }
} finally {
    pres.dispose();
}

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

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

public IPresentationText getPresentationText(String file, int mode);
public IPresentationText getPresentationText(InputStream stream, int mode);
public IPresentationText getPresentationText(InputStream stream, int mode, ILoadOptions options);

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

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

Unarrangedモードは、速度が重要な場合に使用できます。これはArrangedモードよりも速くなります。

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

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

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

IPresentationText text1 = PresentationFactory.getInstance().getPresentationText("presentation.pptx", TextExtractionArrangingMode.Unarranged);
System.out.println(text1.getSlidesText()[0].getText());
System.out.println(text1.getSlidesText()[0].getLayoutText());
System.out.println(text1.getSlidesText()[0].getMasterText());
System.out.println(text1.getSlidesText()[0].getNotesText());