JavaScript'te PowerPoint Sunumlarında Metin Arama ve Değiştirme
Genel Bakış
Aspose.Slides for Node.js via Java, bireysel bir metin çerçevesinde veya tüm bir sunumda metin arayabilir, vurgulayabilir ve değiştirebilir. Her işlem, bir sonuç geri çağırması aracılığıyla her eşleşme hakkında uygulamayı bilgilendirebilir. Bu sayede bir sunumu güncellerken eşleşen metin, bağlamı, konumu, metin çerçevesi ve slayt numarasını içeren bir denetim izi aynı anda oluşturulabilir.
Bu yetenekler, inceleme, kırpma, terminoloji kontrolleri, şablon temizliği ve otomatik raporlama iş akışları için yararlıdır.
Aşağıdaki ilk örneklerde, ilk slaytta aşağıdaki metni içeren tek bir metin kutusu bulunan “sample.pptx” adlı bir dosya kullanıyoruz:

Arama Kapsamını Seçin
Bir işlemi tek bir metin çerçevesiyle sınırlamak için TextFrame yöntemlerini, sunumdaki tüm uygulanabilir metni işlemek için ise Presentation yöntemlerini kullanın.
| İşlem | Tek metin çerçevesi | Tüm sunum |
|---|---|---|
| Düz metni vurgula | TextFrame.highlightText | Presentation.highlightText |
| Düzenli ifade eşleşmelerini vurgula | TextFrame.highlightRegex | Presentation.highlightRegex |
| Düz metni değiştir | TextFrame.replaceText | Presentation.replaceText |
| Düzenli ifade eşleşmelerini değiştir | TextFrame.replaceRegex | Presentation.replaceRegex |
Metin Eşleştirmeyi Yapılandırma
Düz metin işlemleri için eşleşmeyi kontrol etmek üzere TextSearchOptions kullanın:
- TextSearchOptions.setWholeWordsOnly eşleşmeleri yalnızca tam kelimelerle sınırlar.
- TextSearchOptions.setCaseSensitive karakter büyük/küçük harf eşleşmesini kontrol eder.
- TextSearchOptions.setIncludeNotes sunum‑seviyesindeki arama, değiştirme ve vurgulama işlemlerine slayt notlarını da dahil eder.
Düzenli ifade işlemleri bir Java Pattern kullandığından, büyük/küçük harf duyarlılığı ve kelime sınırları gibi kurallar ifadeye ve bayraklara göre tanımlanır.
Bir Metin Çerçevesinin Sahibini Belirleme
Genel metin işleme iş akışları genellikle bir TextFrame alır; metni ararken, değiştirirken, doğrularken veya dışa aktarırken bu çerçevenin hangi sunum nesnesine ait olduğunu belirlemek için TextFrame.getParentShape ve TextFrame.getParentCell kullanılabilir.
Beklenen değerler sahibine göre değişir:
| Metin çerçevesi sahibi | getParentShape |
getParentCell |
|---|---|---|
| Bir AutoShape veya başka bir metin içeren şekil | Sahip olan Shape | null |
| Bir tablo hücresi | null |
Sahip olan Cell |
Her iki yöntem sadece salt‑okunur gezinme sağlar. Çağrıldıklarında metin çerçevesi hareket etmez veya sahibi değişmez. Genel kod, her iki değeri de null için kontrol etmeli ve hiçbir sahibin bulunmadığı durumları ele almalıdır.
Aşağıdaki örnek, bir sunumdaki metin çerçevelerini yinelemek için SlideUtil.getAllTextFrames kullanır. Şekiller için şekil adını, Java çalışma zamanı türünü ve içinde bulunduğu slaytı rapor eder; tablo hücreleri için sıfır‑tabanlı sütun ve satır koordinatlarını ve içinde bulunduğu slaytı rapor eder.
const aspose = { slides: require("aspose.slides.via.java") };
const java = require("java");
function getSlideLabel(baseSlide) {
if (java.instanceOf(baseSlide, "com.aspose.slides.Slide")) {
return "slide " + baseSlide.getSlideNumber();
}
if (java.instanceOf(baseSlide, "com.aspose.slides.NotesSlide")) {
return "notes for slide " + baseSlide.getParentSlide().getSlideNumber();
}
return baseSlide.getClass().getSimpleName();
}
const presentation = new aspose.slides.Presentation("presentation.pptx");
try {
const textFrames = aspose.slides.SlideUtil.getAllTextFrames(presentation, false);
for (let index = 0; index < textFrames.length; index++) {
const textFrame = textFrames[index];
const ownerShape = textFrame.getParentShape();
if (ownerShape !== null) {
const shapeName = ownerShape.getName() === "" ? "(unnamed)" : ownerShape.getName();
const shapeType = ownerShape.getClass().getSimpleName();
const slideLabel = getSlideLabel(ownerShape.getSlide());
console.log("Shape: " + shapeName + "; type: " + shapeType + "; " + slideLabel);
continue;
}
const ownerCell = textFrame.getParentCell();
if (ownerCell !== null) {
const slideLabel = getSlideLabel(ownerCell.getSlide());
console.log("Table cell: column " + ownerCell.getFirstColumnIndex() + ", row " + ownerCell.getFirstRowIndex() + "; " + slideLabel);
continue;
}
console.log("The text frame owner is not available as a shape or table cell.");
}
} finally {
presentation.dispose();
}
SmartArt içeriği için, SmartArtNode.getShapes içinde gezinip her SmartArtShape.getTextFrame öğesine erişin. Metin çerçevesi, TextFrame.getParentShape aracılığıyla ilişkili şekline izlenebilir; TextFrame.getParentCell ise null döner. Bu nedenle örnekteki şekil dalı, SmartArt düğümlerindeki metni de işler.
Eşleşme Bilgilerini Geri Çağırma ile Toplama
Her eşleşme için bir sonuç geri çağırma proxy’si oluşturarak bir bildirim alın. Proxy işlevi ilgili metin çerçevesi, kaynak metin, eşleşen metin ve eşleşme konumunu alır.
Geri çağırma doğrudan bir slayt numarası almaz. Aşağıdaki uygulama, metin çerçevesinin sahip olduğu şekil veya tablo hücresi üzerinden, yoksa TextFrame.getSlide yöntemiyle slayt numarasını türetir. Ayrıca slayt notlarında bulunan metni de işler.
const aspose = { slides: require("aspose.slides.via.java") };
const java = require("java");
function getSlideNumber(textFrame) {
const parentShape = textFrame.getParentShape();
const parentCell = textFrame.getParentCell();
let parentSlide = textFrame.getSlide();
if (parentShape !== null) {
parentSlide = parentShape.getSlide();
} else if (parentCell !== null) {
parentSlide = parentCell.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)
});
}
});
}
Değiştirme işlemleri için foundText orijinal eşleşen metni içerir; böylece geri çağırma hangi terimlerin değiştirildiğini tam olarak kaydedebilir.
Metni Vurgulama
Metin çerçevesindeki düz metin eşleşmelerini vurgulamak için TextFrame.highlightText yöntemini kullanın. Aramayı denetlemek için TextSearchOptions ile birlikte geçirin.
Aşağıdaki kod örneği “try” karakterlerinin tüm oluşumlarını ve ardından yalnızca tam “to” kelimesini vurgular.
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");
// Metin çerçevesindeki "try" ifadesinin her oluşumunu vurgula.
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");
// "to" tam kelimesini yalnızca vurgula.
shape.getTextFrame().highlightText(
"to", wholeWordHighlightColor, wholeWordSearchOptions, null);
presentation.save("highlighted_text.pptx", aspose.slides.SaveFormat.Pptx);
} finally {
presentation.dispose();
}
Sonuç:

Düzenli İfadeler Kullanarak Metni Vurgulama
[Düzenli ifade] metin eşleşmelerini bir metin çerçevesinde vurgulamak için TextFrame.highlightRegex yöntemini kullanın.
Aşağıdaki kod, yedi veya daha fazla harf içeren tüm kelimeleri vurgular:
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();
}
Sonuç:

Sunum Genelinde Metni Vurgulama
[Tüm uygulanabilir metin çerçevelerini] aramak için Presentation.highlightText ve Presentation.highlightRegex kullanın. Aşağıdaki örnek bir düz terim ve tüm e‑posta adreslerini vurgular:
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();
}
Bir Metin Çerçevesinde Metni Değiştirme
Düz metin için TextFrame.replaceText, desen tabanlı değiştirme için ise TextFrame.replaceRegex kullanın. Bu yöntemler, mevcut metin çerçevesindeki eşleşen metni günceller; çevresindeki kısmın biçimlendirmesini korur, yani çerçeveyi düz bir dizeden yeniden oluşturmaz.
Aşağıdaki örnek bir imla varyantını standartlaştırır ve ardından sürüm etiketlerini değiştirir:
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();
}
Bir eşleşme farklı biçimlendirmeye sahip bölümleri kapsıyorsa, çıktıyı inceleyerek hangi biçimin değiştirilmiş metne uygulanacağını doğrulayın.
Sunum Genelinde Metni Değiştirme
Presentation.replaceText ve Presentation.replaceRegex kullanarak aynı işlemleri tüm sunuma uygulayın. Bu, şablon temizliği, terminoloji güncellemeleri ve kırpma için kullanışlıdır.
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();
}
Raporlama İçin Eşleşmeleri Gruplama
Her toplanan sonucun slayt numarası ve metin çerçevesi depolandığından, uygulamalar denetim, raporlama veya inceleme iş akışları için eşleşmeleri gruplandırabilir. Aşağıdaki örnek sonuçları önce slayta, ardından metin çerçevesine göre gruplar:
const aspose = { slides: require("aspose.slides.via.java") };
const java = require("java");
function getSlideNumber(textFrame) {
const parentShape = textFrame.getParentShape();
const parentCell = textFrame.getParentCell();
let parentSlide = textFrame.getSlide();
if (parentShape !== null) {
parentSlide = parentShape.getSlide();
} else if (parentCell !== null) {
parentSlide = parentCell.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();
}
SSS
Nasıl sadece bir metin kutusunu, tüm sunumu değil, arayabilirim?
Şeklin metin çerçevesini alın ve o çerçevede TextFrame.highlightText, TextFrame.highlightRegex, TextFrame.replaceText veya TextFrame.replaceRegex metodunu çağırın. Sunum‑seviyesindeki yöntemler ise tüm uygulanabilir çerçeveleri işler.
Tam kelimeleri doğru büyük/küçük harfle eşleştirmek nasıl yapılır?
TextSearchOptions.setWholeWordsOnly ve TextSearchOptions.setCaseSensitive ayarlarını true yapın ve bu seçenekleri düz‑metin vurgulama veya değiştirme yöntemine gönderin. Düzenli ifadeler için kelime sınırları ve büyük/küçük harf duyarlılığı Java Pattern içinde tanımlanır.
Arama ve değiştirme slayt notlarındaki metni de içerebilir mi?
Evet. Sunum‑seviyesindeki düz‑metin işlemi kullanırken TextSearchOptions.setIncludeNotes ayarını true yapın. Yukarıdaki geri çağırma uygulaması, bir not slaydındaki eşleşmeyi ana slayt numarasına bağlar.
Sunumu ikinci kez taramadan bir rapor nasıl oluşturabilirim?
Vurgulama veya değiştirme işlemi sırasında bir Java sonuç‑geri çağırma proxy’si geçirin. Geri çağırma, işlem yürürken her eşleşmeyi alır; uygulama kaynak metin, eşleşen metin, konum, metin çerçevesi ve türetilen slayt numarasını daha sonra grup oluşturma veya dışa aktarma için saklayabilir.
Metni değiştirmek biçimlendirmesini korur mu?
TextFrame.replaceText ve TextFrame.replaceRegex eşleşen metni mevcut çerçeve içinde değiştirir ve çevresindeki kısmın biçimlendirmesini korur. Bir eşleşme farklı biçimlendirmeli bölümleri kapsıyorsa, sonuçları inceleyerek değiştirilen metnin istediğiniz stilde olduğundan emin olun.