在 PHP 中的簡報高階文字擷取

概觀

從簡報中擷取文字是一項常見且重要的工作,適用於處理投影片內容的開發人員。無論您在處理 Microsoft PowerPoint 的 PPT 或 PPTX 檔案,或是 OpenDocument 簡報 (ODP),存取和取得文字資料對於分析、自動化、索引或內容遷移等目的都可能是關鍵。

本文提供了使用 Aspose.Slides for PHP via Java 從各種簡報格式(包括 PPT、PPTX 與 ODP)有效擷取文字的完整指南。您將學習如何系統性地遍歷簡報元素,以準確取得所需的文字內容。

從投影片擷取文字

Aspose.Slides for PHP via Java 提供了 SlideUtil 類別。此類別暴露了多個重載的靜態方法,用於從簡報或投影片擷取所有文字。若要從簡報中的投影片擷取文字,請使用 getAllTextBoxes 方法。此方法接受一個 BaseSlide 型別的物件作為參數。執行時,該方法會掃描整個投影片的文字,並回傳一個 TextFrame 型別物件的陣列,保留任何文字格式。

以下程式碼片段會從簡報的第一張投影片擷取所有文字:

$slideIndex = 0;

$presentation = new Presentation("demo.pptx");
$arrayClass = new java_class("java.lang.reflect.Array");

try {
    $slide = $presentation->getSlides()->get_Item($slideIndex);

    $textFrames = SlideUtil::getAllTextBoxes($slide);
    $textFrameCount = java_values($arrayClass->getLength($textFrames));

    for ($textFrameIndex = 0; $textFrameIndex < $textFrameCount; $textFrameIndex++) {
        foreach ($textFrames[$textFrameIndex]->getParagraphs() as $paragraph) {
            foreach ($paragraph->getPortions() as $portion) {
                $portionText = $portion->getText();
                echo($portionText);

                $portionFormat = $portion->getPortionFormat();
                $fontHeight = $portionFormat->getFontHeight();
                echo($fontHeight);

                $latinFont = $portionFormat->getLatinFont();
                if (!java_is_null($latinFont)) {
                    $fontName = $latinFont->getFontName();
                    echo($fontName);
                }
            }
        }
    }
} finally {
    $presentation->dispose();
}

從簡報擷取文字

若要掃描整個簡報的文字,請使用由 SlideUtil 類別所提供的 getAllTextFrames 靜態方法。它接受兩個參數:

  1. 第一個參數為 Presentation 物件,代表要從中擷取文字的 PowerPoint 或 OpenDocument 簡報。
  2. 第二個參數為 boolean 值,指示在掃描簡報文字時是否應包含母版投影片。

此方法回傳一個 TextFrame 型別物件的陣列,包含文字格式資訊。以下程式碼會掃描簡報的文字與格式細節,並包括母版投影片。

$presentation = new Presentation("demo.pptx");
$arrayClass = new java_class("java.lang.reflect.Array");

try {
    $includeMasterSlides = true;
    $textFrames = SlideUtil::getAllTextFrames($presentation, $includeMasterSlides);
    $textFrameCount = java_values($arrayClass->getLength($textFrames));

    for ($textFrameIndex = 0; $textFrameIndex < $textFrameCount; $textFrameIndex++) {
        foreach ($textFrames[$textFrameIndex]->getParagraphs() as $paragraph) {
            foreach ($paragraph->getPortions() as $portion) {
                $portionText = $portion->getText();
                echo($portionText);

                $portionFormat = $portion->getPortionFormat();
                $fontHeight = $portionFormat->getFontHeight();
                echo($fontHeight);

                $latinFont = $portionFormat->getLatinFont();
                if (!java_is_null($latinFont)) {
                    $fontName = $latinFont->getFontName();
                    echo($fontName);
                }
            }
        }
    }
} finally {
    $presentation->dispose();
}

分類與快速文字擷取

PresentationFactory 類別同樣提供從簡報擷取所有文字的方法:

PresentationText getPresentationText(String, int);
PresentationText getPresentationText(InputStream, int);
PresentationText getPresentationText(InputStream, int, LoadOptions);

TextExtractionArrangingMode 列舉參數表示文字擷取結果的組織模式,可設定為以下值:

  • Unarranged - 未考慮投影片位置的原始文字。
  • Arranged - 文字依投影片上的順序排列。

當速度至關重要時,可使用未排列模式;其速度快於已排列模式。

PresentationText 代表從簡報擷取的原始文字。其 getSlidesText 方法回傳一個物件陣列,陣列中的每個物件代表對應投影片的文字。每個回傳的物件具有以下方法:

  • getText - 投影片形狀內的文字。
  • getMasterText - 與此投影片相關的母版投影片形狀內的文字。
  • getLayoutText - 與此投影片相關的版面配置投影片形狀內的文字。
  • getNotesText - 與此投影片相關的備註投影片形狀內的文字。
  • getCommentsText - 與此投影片相關的批註內的文字。
$presentationPath = "presentation.ppt";
$arrangingMode = TextExtractionArrangingMode::Unarranged;
$presentationText = PresentationFactory::getInstance()->getPresentationText($presentationPath, $arrangingMode);
$slidesText = $presentationText->getSlidesText();
$firstSlideText = $slidesText[0];

echo($firstSlideText->getText());
echo($firstSlideText->getLayoutText());
echo($firstSlideText->getMasterText());
echo($firstSlideText->getNotesText());
echo($firstSlideText->getCommentsText());

常見問題

Aspose.Slides 在文字擷取過程中處理大型簡報的速度如何?

Aspose.Slides 已針對高效能進行最佳化,甚至能處理大型簡報,使其適用於即時或批次處理情境。

Aspose.Slides 能否從簡報中的表格和圖表擷取文字?

可以。Aspose.Slides 能從多種投影片元素擷取文字,包括表格和圖表相關物件,讓您能存取與分析常見簡報結構中的文字內容。

是否需要特殊的 Aspose.Slides 授權才能從簡報擷取文字?

您可以使用 Aspose.Slides 的免費試用版進行文字擷取,儘管它會有某些限制,例如只能處理有限數量的投影片。若需無限制使用且處理更大型的簡報,建議購買完整授權。