進階 Android 簡報文字提取
概觀
從簡報中提取文字是一項常見且重要的工作,適用於處理投影片內容的開發人員。無論您是使用 Microsoft PowerPoint 的 PPT 或 PPTX 檔案,還是 OpenDocument 簡報 (ODP),存取與擷取文字資料對於分析、自動化、索引或內容遷移等目的都可能相當關鍵。
本文提供了一份完整指南,說明如何使用 Aspose.Slides for Android via Java,有效地從各種簡報格式(包括 PPT、PPTX 與 ODP)中提取文字。您將學會系統性地遍歷簡報元素,以精確取得所需的文字內容。
從投影片提取文字
Aspose.Slides for Android via Java 提供了 SlideUtil 類別。此類別公開了多個重載的靜態方法,用於從簡報或投影片中提取全部文字。若要從簡報中的投影片提取文字,請使用 getAllTextBoxes 方法。此方法接受一個 IBaseSlide 型別的物件作為參數。執行時,該方法會掃描整個投影片以取得文字,並回傳一個 ITextFrame 型別物件的陣列,保留任何文字格式。
以下程式碼片段會從簡報的第一張投影片中提取所有文字:
int slideIndex = 0;
Presentation presentation = new Presentation("demo.pptx");
try {
ISlide slide = presentation.getSlides().get_Item(slideIndex);
ITextFrame[] textFrames = SlideUtil.getAllTextBoxes(slide);
for (ITextFrame textFrame : textFrames) {
for (IParagraph paragraph : textFrame.getParagraphs()) {
for (IPortion portion : paragraph.getPortions()) {
String portionText = portion.getText();
System.out.println(portionText);
IPortionFormat portionFormat = portion.getPortionFormat();
float fontHeight = portionFormat.getFontHeight();
System.out.println(fontHeight);
IFontData latinFont = portionFormat.getLatinFont();
if (latinFont != null) {
String fontName = latinFont.getFontName();
System.out.println(fontName);
}
}
}
}
} finally {
presentation.dispose();
}
從簡報提取文字
若要掃描整個簡報的文字,請使用由 SlideUtil 類別提供的靜態方法 getAllTextFrames。它接受兩個參數:
- 第一個參數為一個 IPresentation 物件,代表要從中提取文字的 PowerPoint 或 OpenDocument 簡報。
- 第二個參數為
boolean值,指示在掃描簡報文字時是否應包含母版投影片。
該方法回傳一個 ITextFrame 型別物件的陣列,內含文字格式資訊。下方程式碼會掃描簡報(包括母版投影片)的文字與格式細節。
Presentation presentation = new Presentation("demo.pptx");
try {
boolean includeMasterSlides = true;
ITextFrame[] textFrames = SlideUtil.getAllTextFrames(presentation, includeMasterSlides);
for (ITextFrame textFrame : textFrames) {
for (IParagraph paragraph : textFrame.getParagraphs()) {
for (IPortion portion : paragraph.getPortions()) {
String portionText = portion.getText();
System.out.println(portionText);
IPortionFormat portionFormat = portion.getPortionFormat();
float fontHeight = portionFormat.getFontHeight();
System.out.println(fontHeight);
IFontData latinFont = portionFormat.getLatinFont();
if (latinFont != null) {
String fontName = latinFont.getFontName();
System.out.println(fontName);
}
}
}
}
} finally {
presentation.dispose();
}
分類與快速文字提取
PresentationFactory 類別亦提供了從簡報中提取全部文字的方法:
IPresentationText getPresentationText(String file, int mode);
IPresentationText getPresentationText(InputStream stream, int mode);
IPresentationText getPresentationText(InputStream stream, int mode, ILoadOptions options);
TextExtractionArrangingMode 列舉參數指示文字提取結果的組織模式,可設定為以下值:
Unarranged- 未依投影片位置排列的原始文字。Arranged- 文字依投影片上的順序排列。
當速度為關鍵時,可使用未排列模式;其速度快於排列模式。
IPresentationText 代表從簡報中提取的原始文字。其 getSlidesText 方法會回傳一個 ISlideText 型別物件的陣列。每個物件代表對應投影片上的文字。型別為 ISlideText 的物件具備以下方法:
getText- 投影片形狀內的文字。getMasterText- 與此投影片相關聯的母版投影片形狀內的文字。getLayoutText- 與此投影片相關聯的版面配置投影片形狀內的文字。getNotesText- 與此投影片相關聯的備註投影片形狀內的文字。getCommentsText- 與此投影片相關聯的批註文字。
String presentationPath = "presentation.pptx";
int arrangingMode = TextExtractionArrangingMode.Unarranged;
IPresentationText presentationText = PresentationFactory.getInstance().getPresentationText(presentationPath, arrangingMode);
ISlideText firstSlideText = presentationText.getSlidesText()[0];
System.out.println(firstSlideText.getText());
System.out.println(firstSlideText.getLayoutText());
System.out.println(firstSlideText.getMasterText());
System.out.println(firstSlideText.getNotesText());
System.out.println(firstSlideText.getCommentsText());
常見問題
Aspose.Slides 在文字提取時處理大型簡報的速度如何?
Aspose.Slides 已針對高效能進行最佳化,甚至可處理大型簡報,因此適用於即時或大量處理的情境。
Aspose.Slides 能從簡報中的表格和圖表提取文字嗎?
可以。Aspose.Slides 能夠從多種投影片元素提取文字,包括表格與圖表相關的物件,讓您能存取與分析常見簡報結構中的文字內容。
提取簡報文字是否需要特殊的 Aspose.Slides 授權?
您可以使用 Aspose.Slides 的免費試用版進行文字提取,然而它會有某些限制,例如只能處理有限張數的投影片。若需無限制使用並處理更大的簡報,建議購買完整授權。