Kelola Kotak Teks dalam Presentasi di .NET
Pendahuluan
Di Aspose.Slides untuk .NET, teks slide disimpan dalam bingkai teks yang menjadi milik bentuk. Antarmuka IAutoShape mewakili bentuk yang paling umum memuat teks dan mengekspos teksnya melalui properti IAutoShape.TextFrame.
Note
Setiap auto shape mengimplementasikan IShape, tetapi tidak semua shape adalah auto shape atau mendukung bingkai teks. Saat memproses presentasi yang ada, periksa bahwa sebuah shape mengimplementasikanIAutoShape sebelum mengakses teksnya.
Buat Kotak Teks pada Slide
Untuk membuat kotak teks, tambahkan sebuah auto shape ke slide, tambahkan teks ke bingkai teksnya, dan simpan presentasi. Contoh berikut membuat kotak teks berbentuk persegi panjang:
using Aspose.Slides;
using Aspose.Slides.Export;
using var presentation = new Presentation();
var slide = presentation.Slides[0];
var textBox = slide.Shapes.AddAutoShape(ShapeType.Rectangle, 150, 75, 300, 50);
textBox.AddTextFrame("Aspose TextBox");
presentation.Save("TextBox.pptx", SaveFormat.Pptx);
Koordinat dan dimensi yang diberikan ke IShapeCollection.AddAutoShape diukur dalam poin. IAutoShape.AddTextFrame menginisialisasi bingkai teks dengan teks yang diberikan.
Periksa Bentuk Kotak Teks
Gunakan properti AutoShape.IsTextBox untuk menentukan apakah sebuah auto shape diperlakukan sebagai kotak teks. Ini berguna ketika sebuah presentasi berisi baik auto shape yang memuat teks maupun yang hanya grafis.

Contoh berikut memeriksa setiap auto shape dalam sebuah presentasi:
using System;
using Aspose.Slides;
using var presentation = new Presentation();
var slide = presentation.Slides[0];
var textBox = slide.Shapes.AddAutoShape(ShapeType.Rectangle, 10, 10, 120, 40);
textBox.AddTextFrame("Text box");
slide.Shapes.AddAutoShape(ShapeType.Ellipse, 150, 10, 40, 40);
foreach (var currentSlide in presentation.Slides)
{
foreach (var shape in currentSlide.Shapes)
{
if (shape is IAutoShape autoShape)
{
Console.WriteLine(autoShape.IsTextBox ? "The shape is a text box." : "The shape is not a text box.");
}
}
}
Sebuah auto shape yang baru ditambahkan tidak dianggap sebagai kotak teks sampai ia berisi teks yang tidak kosong. Anda dapat memberikan teks tersebut melalui IAutoShape.AddTextFrame atau ITextFrame.Text. Menambahkan atau menetapkan string kosong membuat IsTextBox tetap false:
using System;
using Aspose.Slides;
using var presentation = new Presentation();
var slide = presentation.Slides[0];
var shape1 = slide.Shapes.AddAutoShape(ShapeType.Rectangle, 10, 10, 100, 40);
shape1.AddTextFrame("Shape 1");
Console.WriteLine(shape1.IsTextBox);
var shape2 = slide.Shapes.AddAutoShape(ShapeType.Rectangle, 10, 70, 100, 40);
shape2.TextFrame.Text = "Shape 2";
Console.WriteLine(shape2.IsTextBox);
var shape3 = slide.Shapes.AddAutoShape(ShapeType.Rectangle, 10, 130, 100, 40);
shape3.AddTextFrame("");
Console.WriteLine(shape3.IsTextBox);
var shape4 = slide.Shapes.AddAutoShape(ShapeType.Rectangle, 10, 190, 100, 40);
shape4.TextFrame.Text = "";
Console.WriteLine(shape4.IsTextBox);
Dua pemanggilan pertama mencetak True; dua pemanggilan terakhir mencetak False.
Temukan Bentuk yang Memiliki Bingkai Teks
Kode pemrosesan teks generik mungkin menerima sebuah ITextFrame tanpa mengetahui objek presentasi mana yang memilikinya. Gunakan properti read-only ITextFrame.ParentShape untuk menavigasi kembali ke IShape pemiliknya.
Untuk bingkai teks yang dimiliki oleh auto shape atau bentuk lain yang memuat teks, ParentShape berisi pemiliknya dan ITextFrame.ParentCell bernilai null. Periksa nilai yang dikembalikan sebelum mengaksesnya. Untuk mengidentifikasi pemilik shape dan sel tabel, termasuk shape yang terkait dengan node SmartArt, lihat Search and Replace Text.
Tambahkan Kolom ke Kotak Teks
Properti ITextFrameFormat.ColumnCount membagi bingkai teks menjadi kolom, sementara ITextFrameFormat.ColumnSpacing mengatur jarak antar kolom dalam poin. Kedua pengaturan tersebut merupakan bagian dari ITextFrameFormat dan dapat diubah melalui bingkai teks pada kotak teks yang ada. Teks mengalir kembali di antara kolom dalam shape yang sama; tidak berlanjut ke shape lain.
Contoh berikut membuat kotak teks tiga kolom dengan 10 poin antar kolom, menyimpan presentasi, dan membaca kembali pengaturan yang disimpan dari file output:
using System;
using Aspose.Slides;
using Aspose.Slides.Export;
using var presentation = new Presentation();
var slide = presentation.Slides[0];
var textBox = slide.Shapes.AddAutoShape(ShapeType.Rectangle, 100, 100, 300, 200);
textBox.AddTextFrame("This text is distributed automatically across all columns in the text box.");
var textFrameFormat = textBox.TextFrame.TextFrameFormat;
textFrameFormat.ColumnCount = 3;
textFrameFormat.ColumnSpacing = 10;
presentation.Save("TextBoxColumns.pptx", SaveFormat.Pptx);
using var savedPresentation = new Presentation("TextBoxColumns.pptx");
var savedTextBox = (IAutoShape)savedPresentation.Slides[0].Shapes[0];
var savedFormat = savedTextBox.TextFrame.TextFrameFormat;
Console.WriteLine($"Columns: {savedFormat.ColumnCount}; spacing: {savedFormat.ColumnSpacing} points");
Ekstrak Teks dari Kolom Individu
Gunakan TextFrame.SplitTextByColumns untuk mengambil teks yang diberikan ke setiap kolom visual dalam bingkai teks yang ada. Metode ini mengembalikan satu string untuk setiap kolom, dalam urutan baca berbasis kolom. Bingkai teks satu kolom menghasilkan sebuah array dengan satu elemen, dan kolom kosong diwakili oleh string kosong. String-string tersebut hanya berisi teks polos; format tingkat bagian tidak dipertahankan.
Ini berguna ketika Anda perlu:
- Mengekstrak teks sambil mempertahankan urutan baca berbasis kolom.
- Mengindeks atau membandingkan konten slide multi-kolom.
- Mengekspor setiap kolom ke file terpisah, bidang basis data, atau tujuan lainnya.
- Memeriksa bagaimana teks didistribusikan kembali setelah mengubah ITextFrameFormat.ColumnCount, ITextFrameFormat.ColumnSpacing, font, atau ukuran bingkai teks.
Metode ini melaporkan teks yang didistribusikan dalam ITextFrame saat ini; tidak secara otomatis mengalirkan teks antara shape atau kotak teks terpisah. Distribusi kolom dapat bergantung pada font yang tersedia dan pengaturan tata letak teks lainnya, jadi pastikan font yang diperlukan tersedia ketika hasil yang konsisten penting.
Contoh berikut memuat sebuah presentasi, menemukan auto shape multi-kolom pertama dengan bingkai teks, membaca jumlah kolom yang dikonfigurasikan, dan menulis teks dari setiap kolom ke file terpisah. Shape yang tidak menyediakan bingkai teks akan dilewati.
using System;
using System.IO;
using Aspose.Slides;
using var presentation = new Presentation("MultiColumnText.pptx");
IAutoShape? textBox = null;
foreach (var shape in presentation.Slides[0].Shapes)
{
if (shape is IAutoShape autoShape && autoShape.TextFrame is not null)
{
var columnCount = autoShape.TextFrame.TextFrameFormat.ColumnCount;
if (columnCount > 1)
{
textBox = autoShape;
break;
}
}
}
if (textBox is null)
{
Console.WriteLine("No multi-column text frame was found.");
}
else
{
var textFrame = textBox.TextFrame;
var configuredColumnCount = textFrame.TextFrameFormat.ColumnCount;
var columnTexts = textFrame.SplitTextByColumns();
Console.WriteLine($"Configured columns: {configuredColumnCount}");
for (var columnIndex = 0; columnIndex < columnTexts.Length; columnIndex++)
{
var columnNumber = columnIndex + 1;
var columnText = columnTexts[columnIndex];
Console.WriteLine($"Column {columnNumber}: {columnText}");
File.WriteAllText($"Column-{columnNumber}.txt", columnText);
}
}
Perbarui Teks
Untuk memperbarui teks di seluruh presentasi, iterasi melalui slide dan shape, pilih auto shape, dan kemudian edit bagian teksnya. Bekerja pada level bagian memungkinkan Anda mengubah teks dan format karakter.
Contoh berikut mengganti setiap kemunculan years dengan months dalam teks auto-shape dan membuat setiap bagian yang terpengaruh menjadi tebal:
using Aspose.Slides;
using Aspose.Slides.Export;
using var presentation = new Presentation("Text.pptx");
foreach (var slide in presentation.Slides)
{
foreach (var shape in slide.Shapes)
{
if (shape is not IAutoShape autoShape)
{
continue;
}
foreach (var paragraph in autoShape.TextFrame.Paragraphs)
{
foreach (var portion in paragraph.Portions)
{
portion.Text = portion.Text.Replace("years", "months");
portion.PortionFormat.FontBold = NullableBool.True;
}
}
}
}
presentation.Save("TextChanged.pptx", SaveFormat.Pptx);
Traversing ini memperbarui teks hanya dalam auto shape. Teks yang disimpan dalam tabel, diagram, SmartArt, atau shape yang dikelompokkan memerlukan traversing koleksi objek tersebut.
Tambahkan Kotak Teks dengan Tautan
Sebuah tautan dapat ditetapkan ke bagian teks tertentu, sehingga hanya teks tersebut berfungsi sebagai tautan yang dapat diklik. Gunakan IHyperlinkManager.SetExternalHyperlinkClick untuk mengaitkan bagian tersebut dengan URL eksternal.
Contoh berikut membuat teks terhubung dan menyimpannya ke sebuah presentasi:
using Aspose.Slides;
using Aspose.Slides.Export;
using var presentation = new Presentation();
var slide = presentation.Slides[0];
var textBox = slide.Shapes.AddAutoShape(ShapeType.Rectangle, 150, 150, 200, 50);
textBox.AddTextFrame("Aspose.Slides");
var textPortion = textBox.TextFrame.Paragraphs[0].Portions[0];
textPortion.PortionFormat.HyperlinkManager.SetExternalHyperlinkClick("https://www.aspose.com/");
presentation.Save("Hyperlink.pptx", SaveFormat.Pptx);
FAQ
Apa perbedaan antara kotak teks dan placeholder teks pada slide master atau layout?
Sebuah placeholder dapat mewarisi posisi dan pemformatannya dari sebuah master slide atau layout slide. Kotak teks biasa adalah shape independen pada slide tempat ia dibuat dan tidak memperoleh perilaku placeholder ketika tata letak berubah.
Bagaimana saya dapat mengganti teks tanpa mengubah teks dalam diagram, tabel, atau SmartArt?
Batasi traversal hanya pada shape yang mengimplementasikan IAutoShape, seperti yang ditunjukkan dalam contoh Perbarui Teks. Diagram, tabel, dan SmartArt menyimpan teks dalam model objek mereka masing-masing, jadi tidak akan diubah oleh loop tersebut.