Szöveg keresése és cseréje PowerPoint prezentációkban JavaScript-ben
Áttekintés
Az Aspose.Slides for Node.js via Java képes keresni, kiemelni és cserélni a szöveget egy adott szövegdobozban vagy egy egész bemutatóban. Minden művelet result callback‑en keresztül értesítheti az alkalmazást minden egyezésről. Ez lehetővé teszi a bemutató frissítését, miközben audit‑nyomot épít, amely tartalmazza a megtalált szöveget, a környezetét, a pozíciót, a szövegdobozt és a dia számát.
Ezek a lehetőségek hasznosak felülvizsgálat, szenzitív információk eltávolítása, terminológiai ellenőrzés, sablon‑tisztítás és automatizált jelentéskészítés során.
Az alábbi első példákban egy „sample.pptx” nevű fájlt használunk, amely az első dián egyetlen szövegdobozt tartalmaz a következő szöveggel:

A keresés hatókörének kiválasztása
Használja a TextFrame metódusait egy művelet korlátozásához egy szövegdobozra. Használja a Presentation metódusait a bemutató összes alkalmazható szövegének feldolgozásához.
| Művelet | Egy szövegdoboz | Teljes bemutató |
|---|---|---|
| Literális szöveg kiemelése | TextFrame.highlightText | Presentation.highlightText |
| Reguláris‑kifejezés egyezések kiemelése | TextFrame.highlightRegex | Presentation.highlightRegex |
| Literális szöveg cseréje | TextFrame.replaceText | Presentation.replaceText |
| Reguláris‑kifejezés egyezések cseréje | TextFrame.replaceRegex | Presentation.replaceRegex |
A szöveg egyezésének beállítása
Literális‑szöveg műveleteknél használja a TextSearchOptions‑t a keresés szabályozásához:
- TextSearchOptions.setWholeWordsOnly csak teljes szavakra korlátozza a találatot.
- TextSearchOptions.setCaseSensitive meghatározza, hogy a kis‑ és nagybetű egyezés kötelező‑e.
- TextSearchOptions.setIncludeNotes a diáknaplókat is beleveszi a bemutató‑szintű keresés, csere és kiemelés műveletekbe.
Reguláris‑kifejezés műveleteknél a Java Pattern határozza meg az egyezési szabályokat, például a kis‑/nagybetű érzékenységet és a szóhatárokat a kifejezés és zászlói szerint.
Egyezés információinak gyűjtése visszahívással
Hozzon létre egy Java proxy‑t a result callback‑hez, hogy minden egyezésről értesítést kapjon. A proxy függvény megkapja a kapcsolódó szövegdobozt, a forrás‑szöveget, a megtalált szöveget és a pozíciót.
A callback nem kap közvetlenül diaszámot. Az alábbi megvalósítás a diaszámot a TextFrame.getSlide , a Slide.getSlideNumber és a NotesSlide.getParentSlide segítségével határozza meg. A diánaplókban található szöveget is kezeli.
const aspose = { slides: require("aspose.slides.via.java") };
const java = require("java");
function getSlideNumber(textFrame) {
const parentSlide = textFrame.getSlide();
if (java.instanceOf(parentSlide, "com.aspose.slides.Slide")) {
return parentSlide.getSlideNumber();
}
if (java.instanceOf(parentSlide, "com.aspose.slides.NotesSlide")) {
return parentSlide.getParentSlide().getSlideNumber();
}
return null;
}
function createTextSearchCallback(results) {
return java.newProxy("com.aspose.slides.IFindResultCallback", {
foundResult: function(textFrame, sourceText, foundText, textPosition) {
results.push({
textFrame: textFrame,
sourceText: sourceText,
foundText: foundText,
textPosition: textPosition,
slideNumber: getSlideNumber(textFrame)
});
}
});
}
Csere műveleteknél a foundText az eredeti megtalált szöveget tartalmazza, így a callback pontosan rögzítheti, mely kifejezéseket cserélték.
Szöveg kiemelése
Használja a TextFrame.highlightText metódust a literális‑szöveg egyezések kiemelésére egy szövegdobozban. Adja át a keresés szabályozásához a TextSearchOptions‑t.
Az alábbi kódrészlet először minden „try” karakterláncot, majd csak a teljes „to” szót emeli ki.
const aspose = { slides: require("aspose.slides.via.java") };
const java = require("java");
const presentation = new aspose.slides.Presentation("sample.pptx");
try {
const slide = presentation.getSlides().get_Item(0);
const shape = slide.getShapes().get_Item(0);
const substringSearchOptions = new aspose.slides.TextSearchOptions();
substringSearchOptions.setCaseSensitive(false);
const substringHighlightColor = java.getStaticFieldValue("java.awt.Color", "LIGHT_GRAY");
// Emelje ki a "try" minden előfordulását a szövegdobozban.
shape.getTextFrame().highlightText(
"try", substringHighlightColor, substringSearchOptions, null);
const wholeWordSearchOptions = new aspose.slides.TextSearchOptions();
wholeWordSearchOptions.setWholeWordsOnly(true);
wholeWordSearchOptions.setCaseSensitive(false);
const wholeWordHighlightColor = java.getStaticFieldValue("java.awt.Color", "MAGENTA");
// Emelje ki csak a teljes "to" szót.
shape.getTextFrame().highlightText(
"to", wholeWordHighlightColor, wholeWordSearchOptions, null);
presentation.save("highlighted_text.pptx", aspose.slides.SaveFormat.Pptx);
} finally {
presentation.dispose();
}
Az eredmény:

Szöveg kiemelése reguláris kifejezésekkel
A TextFrame.highlightRegex metódus kiemeli a reguláris kifejezés által megtalált szöveg‑egyezéseket egy szövegdobozban.
Az alábbi kód minden hét vagy több karakterből álló szót kiemel:
const aspose = { slides: require("aspose.slides.via.java") };
const java = require("java");
const Pattern = java.import("java.util.regex.Pattern");
const presentation = new aspose.slides.Presentation("sample.pptx");
try {
const slide = presentation.getSlides().get_Item(0);
const shape = slide.getShapes().get_Item(0);
const regex = Pattern.compile("\\b[^\\s]{7,}\\b");
const highlightColor = java.getStaticFieldValue("java.awt.Color", "YELLOW");
shape.getTextFrame().highlightRegex(regex, highlightColor, null);
presentation.save(
"highlighted_text_using_regex.pptx", aspose.slides.SaveFormat.Pptx);
} finally {
presentation.dispose();
}
Az eredmény:

Szöveg kiemelése a teljes bemutatóban
Használja a Presentation.highlightText és a Presentation.highlightRegex metódusokat a bemutató összes alkalmazható szövegdobozának kereséséhez. Az alábbi példa egy literális kifejezést és minden e‑mail címet emel ki:
const aspose = { slides: require("aspose.slides.via.java") };
const java = require("java");
const Pattern = java.import("java.util.regex.Pattern");
const presentation = new aspose.slides.Presentation("presentation.pptx");
try {
const searchOptions = new aspose.slides.TextSearchOptions();
searchOptions.setWholeWordsOnly(true);
searchOptions.setCaseSensitive(false);
const termHighlightColor = java.getStaticFieldValue("java.awt.Color", "ORANGE");
presentation.highlightText(
"confidential", termHighlightColor, searchOptions, null);
const emailRegex = Pattern.compile(
"\\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,}\\b",
Pattern.CASE_INSENSITIVE);
const emailHighlightColor = java.getStaticFieldValue("java.awt.Color", "YELLOW");
presentation.highlightRegex(emailRegex, emailHighlightColor, null);
presentation.save("highlighted_presentation.pptx", aspose.slides.SaveFormat.Pptx);
} finally {
presentation.dispose();
}
Szöveg cseréje egy szövegdobozban
Használja a TextFrame.replaceText‑t literális szöveghez és a TextFrame.replaceRegex‑t mintára alapozott cseréhez. Ezek a metódusok a megtalált szöveget a meglévő szövegdobozon belül módosítják, megtartva a környező szegmens formázását, ahelyett, hogy egy egyszerű karakterláncból újra felépítenék a dobozt.
Az alábbi példa egységesíti egy helyesírási változatot, majd lecseréli a verziócímkéket:
const aspose = { slides: require("aspose.slides.via.java") };
const java = require("java");
const Pattern = java.import("java.util.regex.Pattern");
const presentation = new aspose.slides.Presentation("presentation.pptx");
try {
const slide = presentation.getSlides().get_Item(0);
const shape = slide.getShapes().get_Item(0);
const searchOptions = new aspose.slides.TextSearchOptions();
searchOptions.setWholeWordsOnly(true);
searchOptions.setCaseSensitive(false);
shape.getTextFrame().replaceText(
"colour", "color", searchOptions, null);
const versionRegex = Pattern.compile(
"\\bv\\d+(?:\\.\\d+)*\\b", Pattern.CASE_INSENSITIVE);
shape.getTextFrame().replaceRegex(versionRegex, "current version", null);
presentation.save("updated_text_frame.pptx", aspose.slides.SaveFormat.Pptx);
} finally {
presentation.dispose();
}
Ha egy egyezés olyan részeket fed le, amelyek formázása eltérő, ellenőrizze a kimenetet, hogy mely formázás legyen alkalmazva a helyettesítő szövegre.
Szöveg cseréje a teljes bemutatóban
Használja a Presentation.replaceText és a Presentation.replaceRegex metódusokat a műveletek teljes bemutatóra való alkalmazásához. Ez hasznos sablon‑tisztításhoz, terminológiai frissítésekhez és szenzitív információk eltávolításához.
const aspose = { slides: require("aspose.slides.via.java") };
const java = require("java");
const Pattern = java.import("java.util.regex.Pattern");
const presentation = new aspose.slides.Presentation("presentation.pptx");
try {
const searchOptions = new aspose.slides.TextSearchOptions();
searchOptions.setWholeWordsOnly(true);
searchOptions.setCaseSensitive(true);
presentation.replaceText(
"Contoso", "Example Corp", searchOptions, null);
const accountNumberRegex = Pattern.compile("\\bACCT-\\d{6}\\b");
presentation.replaceRegex(accountNumberRegex, "ACCT-REDACTED", null);
presentation.save("updated_presentation.pptx", aspose.slides.SaveFormat.Pptx);
} finally {
presentation.dispose();
}
Egyezések csoportosítása jelentéshez
Mivel minden gyűjtött eredmény tárolja a dia számát és a szövegdobozt, az alkalmazások csoportosíthatják az egyezéseket audit, jelentés vagy felülvizsgálat céljából. Az alábbi példa először diánként, majd szövegdobozonként csoportosítja az eredményeket:
const aspose = { slides: require("aspose.slides.via.java") };
const java = require("java");
function getSlideNumber(textFrame) {
const parentSlide = textFrame.getSlide();
if (java.instanceOf(parentSlide, "com.aspose.slides.Slide")) {
return parentSlide.getSlideNumber();
}
if (java.instanceOf(parentSlide, "com.aspose.slides.NotesSlide")) {
return parentSlide.getParentSlide().getSlideNumber();
}
return null;
}
const results = [];
const callback = java.newProxy("com.aspose.slides.IFindResultCallback", {
foundResult: function(textFrame, sourceText, foundText, textPosition) {
results.push({
textFrame: textFrame,
sourceText: sourceText,
foundText: foundText,
textPosition: textPosition,
slideNumber: getSlideNumber(textFrame)
});
}
});
const presentation = new aspose.slides.Presentation("presentation.pptx");
try {
const searchOptions = new aspose.slides.TextSearchOptions();
searchOptions.setCaseSensitive(false);
const highlightColor = java.getStaticFieldValue("java.awt.Color", "YELLOW");
presentation.highlightText(
"confidential", highlightColor, searchOptions, callback);
const matchesBySlide = new Map();
for (const result of results) {
const slideLabel = result.slideNumber === null ? "Other" : result.slideNumber;
if (!matchesBySlide.has(slideLabel)) {
matchesBySlide.set(slideLabel, new Map());
}
const matchesByTextFrame = matchesBySlide.get(slideLabel);
if (!matchesByTextFrame.has(result.textFrame)) {
matchesByTextFrame.set(result.textFrame, []);
}
matchesByTextFrame.get(result.textFrame).push(result);
}
for (const [slideLabel, matchesByTextFrame] of matchesBySlide) {
console.log("Slide: " + slideLabel);
for (const [textFrame, textFrameMatches] of matchesByTextFrame) {
console.log(" Text frame: " + textFrame.getText());
for (const result of textFrameMatches) {
console.log(
" '" + result.foundText + "' at position " +
result.textPosition + "; context: '" + result.sourceText + "'");
}
}
}
} finally {
presentation.dispose();
}
GYIK
Hogyan kereshetek csak egy szövegdobozt a teljes bemutató helyett?
Szerezze meg az alakzat szövegdobozát, és hívja meg a TextFrame.highlightText, TextFrame.highlightRegex, TextFrame.replaceText, vagy TextFrame.replaceRegex metódusokon azon a szövegdobozon. A bemutató‑szintű módszerek az összes alkalmazható szövegdobozt feldolgozzák.
Hogyan egyeztessek teljes szavakat a helyes nagybetűhasználattal?
Állítsa be a TextSearchOptions.setWholeWordsOnly és a TextSearchOptions.setCaseSensitive értékét true‑ra, és adja át a beállításokat a literális‑szöveg kiemeléshez vagy cseréhez. Reguláris kifejezéseknél határozza meg a szóhatárokat és a kis‑/nagybetű érzékenységet magában a Java Pattern‑ben.
A keresés és a csere magában foglalhatja a diáknaplók szövegét is?
Igen. Állítsa a TextSearchOptions.setIncludeNotes értékét true‑ra, amikor bemutató‑szintű literális‑szöveg műveletet használ. A fent bemutatott callback megvalósítás a notes‑dián belüli egyezést visszakapcsolja a szülődia számához.
Hogyan készítsek jelentést anélkül, hogy a bemutatót másodszor átnézném?
Adjunk át egy Java result‑callback proxyt a kiemelés vagy csere műveletnek. A callback minden egyezést megkap a művelet futása közben, így az alkalmazás elmentheti a forrás‑szöveget, a megtalált szöveget, a pozíciót, a szövegdobozt és a származtatott diaszámot későbbi csoportosításhoz vagy exporthoz.
A szöveg cseréje megőrzi-e a formázását?
A TextFrame.replaceText és a TextFrame.replaceRegex a megtalált szöveget a meglévő szövegdobozon belül módosítja, és megtartja a környező formázást. Ha egy egyezés különböző formázású részeket fed le, ellenőrizze az eredményt, hogy a csere a kívánt stílust alkalmazza.