Suche und Ersetze Text in PowerPoint‑Präsentationen auf Android
Übersicht
Aspose.Slides für Android über Java kann Text in einem einzelnen Textfeld oder in einer gesamten Präsentation suchen, hervorheben und ersetzen. Jede Operation kann außerdem eine Anwendung über jede Übereinstimmung mittels eines Ergebnis‑Callbacks benachrichtigen. Dadurch ist es möglich, eine Präsentation zu aktualisieren und gleichzeitig ein Audit‑Protokoll zu erstellen, das den gefundenen Text, seinen Kontext, die Position, das Textfeld und die Foliennummer enthält.
Diese Funktionen sind nützlich für Überprüfungen, Schwärzungen, Terminologie‑Prüfungen, Vorlagen‑Bereinigungen und automatisierte Bericht‑Workflows.
In den nachfolgenden ersten Beispielen verwenden wir eine Datei namens “sample.pptx”, die auf der ersten Folie ein einzelnes Textfeld mit folgendem Text enthält:

Suchbereich wählen
Verwenden Sie Methoden von ITextFrame um eine Operation auf ein Textfeld zu beschränken. Verwenden Sie Methoden von IPresentation um den gesamten anwendbaren Text in der Präsentation zu verarbeiten.
| Operation | Ein Textfeld | Gesamte Präsentation |
|---|---|---|
| Literaltext hervorheben | ITextFrame.highlightText | IPresentation.highlightText |
| Übereinstimmungen regulärer Ausdrücke hervorheben | ITextFrame.highlightRegex | IPresentation.highlightRegex |
| Literaltext ersetzen | ITextFrame.replaceText | IPresentation.replaceText |
| Übereinstimmungen regulärer Ausdrücke ersetzen | ITextFrame.replaceRegex | IPresentation.replaceRegex |
Textabgleich konfigurieren
Für Literal‑Text‑Operationen verwenden Sie TextSearchOptions, um das Matching zu steuern:
- TextSearchOptions.setWholeWordsOnly begrenzt Übereinstimmungen auf komplette Wörter.
- TextSearchOptions.setCaseSensitive steuert, ob die Groß‑ und Kleinschreibung übereinstimmen muss.
- TextSearchOptions.setIncludeNotes schließt Foliennotizen in Such‑, Ersetz‑ und Hervorhebungs‑Operationen auf Präsentationsebene ein.
Operationen mit regulären Ausdrücken verwenden ein Java‑Pattern, sodass Matching‑Regeln wie Groß‑/Kleinschreibung und Wortgrenzen durch den Ausdruck und seine Flags definiert werden.
Match‑Informationen mit einem Callback sammeln
Implementieren Sie IFindResultCallback, um für jede Übereinstimmung eine Benachrichtigung zu erhalten. Seine Methode IFindResultCallback.foundResult liefert das zugehörige Textfeld, den Quelltext, den gefundenen Text und die Trefferposition.
Der Callback erhält die Foliennummer nicht direkt. Die nachfolgende Implementierung leitet sie aus der übergeordneten Folie ab und verarbeitet zudem Text, der in Foliennotizen gefunden wird. Ein nullable Integer ermöglicht es, dass dasselbe Ergebnis‑Modell Text zu anderen Folientypen zuordnen kann.
import com.aspose.slides.*;
import java.util.ArrayList;
import java.util.List;
final class TextMatch {
private final ITextFrame textFrame;
private final String sourceText;
private final String foundText;
private final int textPosition;
private final Integer slideNumber;
TextMatch(ITextFrame textFrame, String sourceText, String foundText, int textPosition, Integer slideNumber) {
this.textFrame = textFrame;
this.sourceText = sourceText;
this.foundText = foundText;
this.textPosition = textPosition;
this.slideNumber = slideNumber;
}
ITextFrame getTextFrame() {
return textFrame;
}
String getSourceText() {
return sourceText;
}
String getFoundText() {
return foundText;
}
int getTextPosition() {
return textPosition;
}
Integer getSlideNumber() {
return slideNumber;
}
}
final class TextSearchCallback implements IFindResultCallback {
private final List<TextMatch> results = new ArrayList<TextMatch>();
List<TextMatch> getResults() {
return results;
}
@Override
public void foundResult(ITextFrame textFrame, String sourceText, String foundText, int textPosition) {
Integer slideNumber = getSlideNumber(textFrame);
TextMatch result = new TextMatch(textFrame, sourceText, foundText, textPosition, slideNumber);
results.add(result);
}
private static Integer getSlideNumber(ITextFrame textFrame) {
if (!(textFrame instanceof TextFrame)) {
return null;
}
IBaseSlide parentSlide = ((TextFrame) textFrame).getSlide();
if (parentSlide instanceof ISlide) {
return ((ISlide) parentSlide).getSlideNumber();
}
if (parentSlide instanceof INotesSlide) {
return ((INotesSlide) parentSlide).getParentSlide().getSlideNumber();
}
return null;
}
}
Bei Ersetz‑Operationen enthält foundText den ursprünglichen gefundenen Text, sodass der Callback exakt festhalten kann, welche Begriffe ersetzt wurden.
Text hervorheben
Verwenden Sie die Methode ITextFrame.highlightText, um Literal‑Text‑Übereinstimmungen in einem Textfeld hervorzuheben. Übergeben Sie TextSearchOptions , um die Suche zu steuern, sowie einen Callback, um Trefferdetails zu sammeln.
Das untenstehende Code‑Beispiel hebt alle Vorkommen der Zeichen “try” hervor und markiert anschließend nur das komplette Wort “to”. Beide Suchen melden ihre Treffer an denselben Callback.
import com.aspose.slides.*;
import android.graphics.Color;
Presentation presentation = new Presentation("sample.pptx");
try {
ISlide slide = presentation.getSlides().get_Item(0);
IAutoShape shape = (IAutoShape) slide.getShapes().get_Item(0);
TextSearchCallback callback = new TextSearchCallback();
TextSearchOptions substringSearchOptions = new TextSearchOptions();
substringSearchOptions.setCaseSensitive(false);
int substringHighlightColor = Color.rgb(173, 216, 230);
// Hervorheben jedes Vorkommens von "try" im Textfeld.
shape.getTextFrame().highlightText("try", substringHighlightColor, substringSearchOptions, callback);
TextSearchOptions wholeWordSearchOptions = new TextSearchOptions();
wholeWordSearchOptions.setWholeWordsOnly(true);
wholeWordSearchOptions.setCaseSensitive(false);
int wholeWordHighlightColor = Color.rgb(238, 130, 238);
// Nur das komplette Wort "to" hervorheben.
shape.getTextFrame().highlightText("to", wholeWordHighlightColor, wholeWordSearchOptions, callback);
for (TextMatch result : callback.getResults()) {
System.out.println("Found '" + result.getFoundText() + "' at position " +
result.getTextPosition() + " on slide " + result.getSlideNumber() + ".");
}
presentation.save("highlighted_text.pptx", SaveFormat.Pptx);
} finally {
presentation.dispose();
}
Das Ergebnis:

Text mithilfe regulärer Ausdrücke hervorheben
Die Methode ITextFrame.highlightRegex hebt Textübereinstimmungen, die durch einen regulären Ausdruck gefunden wurden, in einem Textfeld hervor.
Der folgende Code hebt alle Wörter mit sieben oder mehr Zeichen hervor und sammelt jede Übereinstimmung:
import com.aspose.slides.*;
import android.graphics.Color;
import java.util.regex.Pattern;
Presentation presentation = new Presentation("sample.pptx");
try {
ISlide slide = presentation.getSlides().get_Item(0);
IAutoShape shape = (IAutoShape) slide.getShapes().get_Item(0);
TextSearchCallback callback = new TextSearchCallback();
Pattern regex = Pattern.compile("\\b[^\\s]{7,}\\b");
shape.getTextFrame().highlightRegex(regex, Color.YELLOW, callback);
presentation.save("highlighted_text_using_regex.pptx", SaveFormat.Pptx);
} finally {
presentation.dispose();
}
Das Ergebnis:

Text in einer Präsentation hervorheben
Verwenden Sie IPresentation.highlightText und IPresentation.highlightRegex, um alle anwendbaren Textfelder in einer Präsentation zu durchsuchen. Das folgende Beispiel hebt einen Literalbegriff und alle E‑Mail‑Adressen hervor, wobei für die beiden Suchen separate Ergebnis‑Sammlungen gehalten werden.
import com.aspose.slides.*;
import android.graphics.Color;
import java.util.regex.Pattern;
Presentation presentation = new Presentation("presentation.pptx");
try {
TextSearchCallback termCallback = new TextSearchCallback();
TextSearchOptions searchOptions = new TextSearchOptions();
searchOptions.setWholeWordsOnly(true);
searchOptions.setCaseSensitive(false);
int termHighlightColor = Color.rgb(255, 165, 0);
presentation.highlightText("confidential", termHighlightColor, searchOptions, termCallback);
TextSearchCallback emailCallback = new TextSearchCallback();
Pattern emailRegex = Pattern.compile(
"\\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,}\\b",
Pattern.CASE_INSENSITIVE);
presentation.highlightRegex(emailRegex, Color.YELLOW, emailCallback);
presentation.save("highlighted_presentation.pptx", SaveFormat.Pptx);
} finally {
presentation.dispose();
}
Text in einem Textfeld ersetzen
Verwenden Sie ITextFrame.replaceText für Literal‑Text und ITextFrame.replaceRegex für ersatzbasierte Muster. Diese Methoden aktualisieren den gefundenen Text im bestehenden Textfeld, wobei die Formatierung der umgebenden Teile erhalten bleibt, anstatt das Textfeld aus einem reinen String neu zu erstellen.
Das folgende Beispiel standardisiert eine Rechtschreibvariante und ersetzt anschließend Versionsbezeichnungen. Derselbe Callback zeichnet die ursprünglichen, durch beide Operationen gefundenen Begriffe auf.
import com.aspose.slides.*;
import java.util.regex.Pattern;
Presentation presentation = new Presentation("presentation.pptx");
try {
ISlide slide = presentation.getSlides().get_Item(0);
IAutoShape shape = (IAutoShape) slide.getShapes().get_Item(0);
TextSearchCallback callback = new TextSearchCallback();
TextSearchOptions searchOptions = new TextSearchOptions();
searchOptions.setWholeWordsOnly(true);
searchOptions.setCaseSensitive(false);
shape.getTextFrame().replaceText("colour", "color", searchOptions, callback);
Pattern versionRegex = Pattern.compile("\\bv\\d+(?:\\.\\d+)*\\b", Pattern.CASE_INSENSITIVE);
shape.getTextFrame().replaceRegex(versionRegex, "current version", callback);
presentation.save("updated_text_frame.pptx", SaveFormat.Pptx);
} finally {
presentation.dispose();
}
Falls ein Treffer Teile mit unterschiedlicher Formatierung umfasst, prüfen Sie die Ausgabe, um zu bestätigen, welche Formatierung auf den ersetzten Text angewendet werden soll.
Text in einer Präsentation ersetzen
Verwenden Sie IPresentation.replaceText und IPresentation.replaceRegex, um dieselben Operationen über die gesamte Präsentation hinweg anzuwenden. Dies ist nützlich für Vorlagen‑Bereinigungen, Terminologie‑Aktualisierungen und Schwärzungen.
import com.aspose.slides.*;
import java.util.regex.Pattern;
Presentation presentation = new Presentation("presentation.pptx");
try {
TextSearchCallback callback = new TextSearchCallback();
TextSearchOptions searchOptions = new TextSearchOptions();
searchOptions.setWholeWordsOnly(true);
searchOptions.setCaseSensitive(true);
presentation.replaceText("Contoso", "Example Corp", searchOptions, callback);
Pattern accountNumberRegex = Pattern.compile("\\bACCT-\\d{6}\\b");
presentation.replaceRegex(accountNumberRegex, "ACCT-REDACTED", callback);
presentation.save("updated_presentation.pptx", SaveFormat.Pptx);
} finally {
presentation.dispose();
}
Treffer für Berichte gruppieren
Da jedes Ergebnis seine Foliennummer und sein Textfeld speichert, können Anwendungen Treffer für Audit‑, Reporting‑ oder Prüfungs‑Workflows gruppieren. Das folgende Beispiel gruppiert die gesammelten Ergebnisse zuerst nach Folie und anschließend nach Textfeld:
import com.aspose.slides.ITextFrame;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
Map<Integer, Map<ITextFrame, List<TextMatch>>> matchesBySlide =
new LinkedHashMap<Integer, Map<ITextFrame, List<TextMatch>>>();
for (TextMatch result : callback.getResults()) {
Integer slideNumber = result.getSlideNumber();
Map<ITextFrame, List<TextMatch>> matchesByTextFrame = matchesBySlide.get(slideNumber);
if (matchesByTextFrame == null) {
matchesByTextFrame = new LinkedHashMap<ITextFrame, List<TextMatch>>();
matchesBySlide.put(slideNumber, matchesByTextFrame);
}
ITextFrame textFrame = result.getTextFrame();
List<TextMatch> textFrameMatches = matchesByTextFrame.get(textFrame);
if (textFrameMatches == null) {
textFrameMatches = new java.util.ArrayList<TextMatch>();
matchesByTextFrame.put(textFrame, textFrameMatches);
}
textFrameMatches.add(result);
}
for (Map.Entry<Integer, Map<ITextFrame, List<TextMatch>>> slideEntry : matchesBySlide.entrySet()) {
String slideLabel = slideEntry.getKey() == null ? "Other" : slideEntry.getKey().toString();
System.out.println("Slide: " + slideLabel);
for (Map.Entry<ITextFrame, List<TextMatch>> textFrameEntry : slideEntry.getValue().entrySet()) {
System.out.println(" Text frame: " + textFrameEntry.getKey().getText());
for (TextMatch result : textFrameEntry.getValue()) {
System.out.println(" '" + result.getFoundText() + "' at position " +
result.getTextPosition() + "; context: '" + result.getSourceText() + "'");
}
}
}
FAQ
Wie kann ich nur ein Textfeld statt der gesamten Präsentation durchsuchen?
Rufen Sie das Textfeld der Form auf und verwenden Sie ITextFrame.highlightText, ITextFrame.highlightRegex, ITextFrame.replaceText, oder ITextFrame.replaceRegex für dieses Textfeld. Methoden auf Präsentationsebene verarbeiten stattdessen alle anwendbaren Textfelder.
Wie kann ich komplette Wörter mit korrekter Groß‑ und Kleinschreibung matchen?
Setzen Sie TextSearchOptions.setWholeWordsOnly und TextSearchOptions.setCaseSensitive auf true und übergeben Sie die Optionen an eine Literal‑Text‑Hervorhebungs‑ oder Ersetzungs‑Methode. Bei regulären Ausdrücken definieren Sie Wortgrenzen und Groß‑/Kleinschreibung im Java‑Pattern selbst.
Kann die Suche und Ersetzung Text in Foliennotizen einschließen?
Ja. Setzen Sie TextSearchOptions.setIncludeNotes auf true, wenn Sie eine Literal‑Text‑Operation auf Präsentationsebene verwenden. Die oben gezeigte Callback‑Implementierung ordnet ein Ergebnis in einer Notizfolie ihrer übergeordneten Foliennummer zu.
Wie kann ich einen Bericht erstellen, ohne die Präsentation ein zweites Mal zu scannen?
Übergeben Sie eine Implementierung von IFindResultCallback an die Hervorhebungs‑ oder Ersetzungs‑Operation. Der Callback erhält jede Übereinstimmung während der Ausführung, sodass die Anwendung den Quelltext, den gefundenen Text, die Position, das Textfeld und die abgeleitete Foliennummer für spätere Gruppierung oder den Export speichern kann.
Behält das Ersetzen von Text dessen Formatierung bei?
ITextFrame.replaceText und ITextFrame.replaceRegex ändern den gefundenen Text innerhalb des bestehenden Textfelds und behalten die Formatierung der umgebenden Teile bei. Falls ein Treffer Teile mit unterschiedlicher Formatierung umfasst, prüfen Sie das Ergebnis, um sicherzustellen, dass die Ersetzung den gewünschten Stil verwendet.