Cari dan Ganti Teks dalam Presentasi PowerPoint di Python

Gambaran Umum

Aspose.Slides for Python via .NET dapat mencari, menyorot, dan mengganti teks dalam satu frame teks atau di seluruh presentasi. Kemampuan ini berguna untuk peninjauan, penyensoran, pemeriksaan terminologi, pembersihan templat, dan alur kerja pemrosesan dokumen otomatis lainnya.

Pada contoh pertama di bawah ini, kami menggunakan file bernama “sample.pptx”, yang berisi satu kotak teks pada slide pertama dengan teks berikut:

Teks contoh

Pilih Lingkup Pencarian

Gunakan metode pada TextFrame untuk membatasi operasi pada satu frame teks. Gunakan metode pada Presentation untuk memproses semua teks yang relevan dalam presentasi.

Operasi Satu frame teks Seluruh presentasi
Sorot teks literal TextFrame.highlight_text Presentation.highlight_text
Sorot kecocokan ekspresi reguler TextFrame.highlight_regex Presentation.highlight_regex
Ganti teks literal TextFrame.replace_text Presentation.replace_text
Ganti kecocokan ekspresi reguler TextFrame.replace_regex Presentation.replace_regex

Konfigurasi Pencocokan Teks

Untuk operasi teks literal, gunakan TextSearchOptions untuk mengontrol pencocokan:

Operasi ekspresi reguler menggunakan string pola, sehingga aturan pencocokan seperti sensitivitas huruf dan batas kata didefinisikan oleh ekspresi tersebut.

Identifikasi Pemilik Frame Teks

Alur kerja pemrosesan teks umum sering menerima sebuah TextFrame saat mencari, mengganti, memvalidasi, atau mengekspor teks. Gunakan TextFrame.parent_shape dan TextFrame.parent_cell untuk menentukan objek presentasi mana yang memiliki frame teks tersebut.

Nilai yang diharapkan tergantung pada pemilik:

Pemilik frame teks parent_shape parent_cell
Sebuah AutoShape atau bentuk lain yang berisi teks pemilik Shape None
Sebuah sel tabel None pemilik Cell

Kedua properti tersebut adalah properti navigasi baca-saja. Membacanya tidak memindahkan frame teks atau mengubah pemiliknya. Kode umum harus memeriksa kedua nilai untuk None dan menangani kemungkinan bahwa tidak ada pemilik yang tersedia.

Contoh berikut menggunakan SlideUtil.get_all_text_frames untuk mengiterasi frame teks dalam sebuah presentasi. Untuk shape, contoh ini melaporkan nama shape, tipe runtime Python, dan slide yang memuatnya. Untuk sel tabel, contoh ini melaporkan koordinat kolom dan baris berbasis nol serta slide yang memuatnya.

import aspose.slides as slides


def get_slide_label(base_slide):
    if isinstance(base_slide, slides.Slide):
        return f"slide {base_slide.slide_number}"

    if isinstance(base_slide, slides.NotesSlide):
        return f"notes for slide {base_slide.parent_slide.slide_number}"

    return type(base_slide).__name__


with slides.Presentation("presentation.pptx") as presentation:
    text_frames = slides.util.SlideUtil.get_all_text_frames(presentation, False)

    for text_frame in text_frames:
        owner_shape = text_frame.parent_shape
        if owner_shape is not None:
            shape_name = owner_shape.name or "(unnamed)"
            shape_type = type(owner_shape).__name__
            slide_label = get_slide_label(owner_shape.slide)
            print(f"Shape: {shape_name}; type: {shape_type}; {slide_label}")
            continue

        owner_cell = text_frame.parent_cell
        if owner_cell is not None:
            slide_label = get_slide_label(owner_cell.slide)
            print(f"Table cell: column {owner_cell.first_column_index}, row {owner_cell.first_row_index}; {slide_label}")
            continue

        print("The text frame owner is not available as a shape or table cell.")

Untuk konten SmartArt, iterasi shape dalam SmartArtNode.shapes dan akses tiap ISmartArtShape.text_frame. Frame teks dapat ditelusuri ke shape terkait melalui TextFrame.parent_shape, sementara TextFrame.parent_cell bernilai None. Oleh karena itu, cabang shape dalam contoh juga menangani teks dari node SmartArt.

Sorot Teks

Gunakan metode TextFrame.highlight_text untuk menyorot kecocokan teks literal dalam sebuah frame teks. Berikan TextSearchOptions untuk mengontrol pencarian.

Contoh kode di bawah ini menyorot semua kemunculan karakter “try” dan kemudian menyorot hanya kata lengkap “to”.

import aspose.pydrawing as draw
import aspose.slides as slides

with slides.Presentation("sample.pptx") as presentation:
    slide = presentation.slides[0]
    shape = slide.shapes[0]

    substring_search_options = slides.TextSearchOptions()
    substring_search_options.case_sensitive = False

    # Sorot setiap kemunculan "try" dalam frame teks.
    shape.text_frame.highlight_text(
        "try", draw.Color.light_blue, substring_search_options, None
    )

    whole_word_search_options = slides.TextSearchOptions()
    whole_word_search_options.whole_words_only = True
    whole_word_search_options.case_sensitive = False

    # Sorot hanya kata lengkap "to".
    shape.text_frame.highlight_text(
        "to", draw.Color.violet, whole_word_search_options, None
    )

    presentation.save("highlighted_text.pptx", slides.export.SaveFormat.PPTX)

Hasilnya:

Teks yang disorot

Sorot Teks Menggunakan Ekspresi Reguler

Metode TextFrame.highlight_regex menyorot kecocokan teks yang ditemukan oleh ekspresi reguler dalam sebuah frame teks.

Kode berikut menyorot semua kata yang mengandung tujuh karakter atau lebih:

import aspose.pydrawing as draw
import aspose.slides as slides

with slides.Presentation("sample.pptx") as presentation:
    slide = presentation.slides[0]
    shape = slide.shapes[0]
    word_pattern = r"\b[^\s]{7,}\b"

    shape.text_frame.highlight_regex(word_pattern, draw.Color.yellow, None)

    presentation.save(
        "highlighted_text_using_regex.pptx", slides.export.SaveFormat.PPTX
    )

Hasilnya:

Teks yang disorot menggunakan ekspresi reguler

Sorot Teks di Seluruh Presentasi

Gunakan Presentation.highlight_text dan Presentation.highlight_regex untuk mencari semua frame teks yang relevan dalam sebuah presentasi. Contoh berikut menyorot istilah literal dan semua alamat email:

import aspose.pydrawing as draw
import aspose.slides as slides

with slides.Presentation("presentation.pptx") as presentation:
    search_options = slides.TextSearchOptions()
    search_options.whole_words_only = True
    search_options.case_sensitive = False

    presentation.highlight_text(
        "confidential", draw.Color.orange, search_options, None
    )

    email_pattern = r"(?i)\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,}\b"
    presentation.highlight_regex(email_pattern, draw.Color.yellow)

    presentation.save(
        "highlighted_presentation.pptx", slides.export.SaveFormat.PPTX
    )

Ganti Teks dalam Frame Teks

Gunakan TextFrame.replace_text untuk teks literal dan TextFrame.replace_regex untuk penggantian berbasis pola. Metode ini memperbarui teks yang cocok dalam frame teks yang ada, yang mempertahankan format bagian sekitarnya alih-alih membangun kembali frame teks dari string biasa.

Contoh berikut menstandarisasi varian ejaan dan kemudian mengganti label versi:

import aspose.slides as slides

with slides.Presentation("presentation.pptx") as presentation:
    slide = presentation.slides[0]
    shape = slide.shapes[0]

    search_options = slides.TextSearchOptions()
    search_options.whole_words_only = True
    search_options.case_sensitive = False

    shape.text_frame.replace_text(
        "colour", "color", search_options, None
    )

    version_pattern = r"(?i)\bv\d+(?:\.\d+)*\b"
    shape.text_frame.replace_regex(version_pattern, "current version")

    presentation.save(
        "updated_text_frame.pptx", slides.export.SaveFormat.PPTX
    )

Jika satu kecocokan melintasi bagian dengan format berbeda, tinjau output untuk mengonfirmasi format mana yang harus diterapkan pada teks pengganti.

Ganti Teks di Seluruh Presentasi

Gunakan Presentation.replace_text dan Presentation.replace_regex untuk menerapkan operasi yang sama di seluruh presentasi. Ini berguna untuk pembersihan templat, pembaruan terminologi, dan penyensoran.

import aspose.slides as slides

with slides.Presentation("presentation.pptx") as presentation:
    search_options = slides.TextSearchOptions()
    search_options.whole_words_only = True
    search_options.case_sensitive = True

    presentation.replace_text(
        "Contoso", "Example Corp", search_options, None
    )

    account_number_pattern = r"\bACCT-\d{6}\b"
    presentation.replace_regex(account_number_pattern, "ACCT-REDACTED")

    presentation.save(
        "updated_presentation.pptx", slides.export.SaveFormat.PPTX
    )

FAQ

Bagaimana saya dapat mencari hanya satu kotak teks alih-alih seluruh presentasi?

Dapatkan frame teks shape dan panggil TextFrame.highlight_text, TextFrame.highlight_regex, TextFrame.replace_text, atau TextFrame.replace_regex pada frame teks tersebut. Metode tingkat presentasi memproses semua frame teks yang relevan sebagai gantinya.

Bagaimana saya dapat mencocokkan kata lengkap dengan kapitalisasi yang tepat?

Setel TextSearchOptions.whole_words_only dan TextSearchOptions.case_sensitive ke True, dan berikan opsi tersebut ke metode penyorotan atau penggantian teks literal. Untuk ekspresi reguler, definisikan batas kata dan sensitivitas huruf dalam pola itu sendiri.

Apakah pencarian dan penggantian dapat mencakup teks dalam catatan slide?

Ya. Setel TextSearchOptions.include_notes ke True saat menggunakan operasi teks literal tingkat presentasi.

Apakah mengganti teks mempertahankan formatnya?

TextFrame.replace_text dan TextFrame.replace_regex memodifikasi teks yang cocok dalam frame teks yang ada dan mempertahankan format bagian sekitarnya. Jika satu kecocokan melintasi bagian dengan format berbeda, periksa hasilnya untuk memastikan pengganti menggunakan gaya yang diinginkan.