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

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

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

//PPTXファイルを表すPresentationクラスをインスタンス化
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. 次に、プレゼンテーションからテキストをスキャンするときにマスタースライドを含めるかどうかを決定するboolean値です。 このメソッドは、テキスト形式情報を含むTextFrameオブジェクトの配列を返します。以下のコードは、マスター スライドを含むプレゼンテーションからテキストとフォーマット情報をスキャンします。
//PPTXファイルを表すPresentationクラスをインスタンス化
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();
}

分類された迅速なテキスト抽出

新しい静的メソッドgetPresentationTextがPresentationクラスに追加されました。このメソッドには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());