Kelola Kotak Teks dalam Presentasi Menggunakan Java
Pendahuluan
Di Aspose.Slides for Java, teks slide disimpan dalam bingkai teks yang menjadi bagian dari shape. Antarmuka IAutoShape mewakili shape yang paling umum berisi teks dan mengekspose teksnya melalui metode IAutoShape.getTextFrame .
Note
Setiap auto shape mengimplementasikan IShape, tetapi tidak setiap shape adalah auto shape atau mendukung bingkai teks. Saat memproses presentasi yang ada, periksa bahwa sebuah shape mengimplementasikan IAutoShape sebelum mengakses teksnya.Buat Kotak Teks pada Slide
Untuk membuat kotak teks, tambahkan auto shape ke slide, tambahkan teks ke bingkai teksnya, dan simpan presentasi. Contoh berikut membuat kotak teks persegi panjang:
import com.aspose.slides.*;
Presentation presentation = new Presentation();
try {
ISlide slide = presentation.getSlides().get_Item(0);
IAutoShape textBox = slide.getShapes().addAutoShape(ShapeType.Rectangle, 150, 75, 300, 50);
textBox.addTextFrame("Aspose TextBox");
presentation.save("TextBox.pptx", SaveFormat.Pptx);
} finally {
presentation.dispose();
}
Koordinat dan dimensi yang diberikan ke IShapeCollection.addAutoShape diukur dalam poin. IAutoShape.addTextFrame menginisialisasi bingkai teks dengan teks yang diberikan.
Periksa Shape Kotak Teks
Gunakan metode IAutoShape.isTextBox untuk menentukan apakah sebuah auto shape diperlakukan sebagai kotak teks. Ini berguna ketika presentasi berisi baik shape yang membawa teks maupun shape grafis murni.

Contoh berikut memeriksa setiap auto shape dalam sebuah presentasi:
import com.aspose.slides.*;
Presentation presentation = new Presentation();
try {
ISlide slide = presentation.getSlides().get_Item(0);
IAutoShape textBox = slide.getShapes().addAutoShape(ShapeType.Rectangle, 10, 10, 120, 40);
textBox.addTextFrame("Text box");
slide.getShapes().addAutoShape(ShapeType.Ellipse, 150, 10, 40, 40);
for (ISlide currentSlide : presentation.getSlides()) {
for (IShape shape : currentSlide.getShapes()) {
if (shape instanceof IAutoShape) {
IAutoShape autoShape = (IAutoShape) shape;
System.out.println(autoShape.isTextBox() ? "The shape is a text box." : "The shape is not a text box.");
}
}
}
} finally {
presentation.dispose();
}
Sebuah auto shape yang baru ditambahkan tidak dianggap sebagai kotak teks hingga ia berisi teks tidak kosong. Anda dapat memberikan teks tersebut melalui IAutoShape.addTextFrame atau ITextFrame.setText. Menambahkan atau menetapkan string kosong menyebabkan IAutoShape.isTextBox mengembalikan false:
import com.aspose.slides.*;
Presentation presentation = new Presentation();
try {
ISlide slide = presentation.getSlides().get_Item(0);
IAutoShape shape1 = slide.getShapes().addAutoShape(ShapeType.Rectangle, 10, 10, 100, 40);
shape1.addTextFrame("Shape 1");
System.out.println(shape1.isTextBox());
IAutoShape shape2 = slide.getShapes().addAutoShape(ShapeType.Rectangle, 10, 70, 100, 40);
shape2.getTextFrame().setText("Shape 2");
System.out.println(shape2.isTextBox());
IAutoShape shape3 = slide.getShapes().addAutoShape(ShapeType.Rectangle, 10, 130, 100, 40);
shape3.addTextFrame("");
System.out.println(shape3.isTextBox());
IAutoShape shape4 = slide.getShapes().addAutoShape(ShapeType.Rectangle, 10, 190, 100, 40);
shape4.getTextFrame().setText("");
System.out.println(shape4.isTextBox());
} finally {
presentation.dispose();
}
Dua pemanggilan pertama mencetak true; dua pemanggilan terakhir mencetak false.
Temukan Shape yang Memiliki Bingkai Teks
Kode pemrosesan teks generik dapat menerima sebuah ITextFrame tanpa mengetahui objek presentasi mana yang memilikinya. Gunakan metode baca-saja ITextFrame.getParentShape untuk menavigasi kembali ke IShape pemiliknya.
Untuk bingkai teks yang dimiliki oleh auto shape atau shape lain yang membawa teks, ITextFrame.getParentShape mengembalikan pemiliknya dan ITextFrame.getParentCell mengembalikan 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
Metode ITextFrameFormat.setColumnCount membagi bingkai teks menjadi kolom, sementara ITextFrameFormat.setColumnSpacing mengatur jarak antara kolom dalam poin. Kedua pengaturan termasuk dalam ITextFrameFormat dan dapat diubah melalui bingkai teks pada kotak teks yang ada. Teks mengalir ulang di antara kolom dalam shape yang sama; tidak berlanjut ke shape lain.
Contoh berikut membuat kotak teks tiga kolom dengan jarak 10 poin antara kolom, menyimpan presentasi, dan membaca kembali pengaturan yang disimpan dari file keluaran:
import com.aspose.slides.*;
Presentation presentation = new Presentation();
try {
ISlide slide = presentation.getSlides().get_Item(0);
IAutoShape textBox = slide.getShapes().addAutoShape(ShapeType.Rectangle, 100, 100, 300, 200);
textBox.addTextFrame("This text is distributed automatically across all columns in the text box.");
ITextFrameFormat textFrameFormat = textBox.getTextFrame().getTextFrameFormat();
textFrameFormat.setColumnCount(3);
textFrameFormat.setColumnSpacing(10);
presentation.save("TextBoxColumns.pptx", SaveFormat.Pptx);
Presentation savedPresentation = new Presentation("TextBoxColumns.pptx");
try {
IAutoShape savedTextBox = (IAutoShape) savedPresentation.getSlides().get_Item(0).getShapes().get_Item(0);
ITextFrameFormat savedFormat = savedTextBox.getTextFrame().getTextFrameFormat();
System.out.println("Columns: " + savedFormat.getColumnCount() + "; spacing: " + savedFormat.getColumnSpacing() + " points");
} finally {
savedPresentation.dispose();
}
} finally {
presentation.dispose();
}
Ekstrak Teks dari Setiap Kolom
Gunakan ITextFrame.splitTextByColumns untuk mengambil teks yang ditetapkan ke setiap kolom visual dalam bingkai teks yang ada. Metode ini mengembalikan satu string untuk tiap kolom, dalam urutan baca berdasarkan kolom. Bingkai teks satu kolom menghasilkan array dengan satu elemen, dan kolom kosong diwakili oleh string kosong. String berisi teks polos saja; pemformatan 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, field basis data, atau tujuan lain.
- Memeriksa bagaimana teks didistribusikan kembali setelah mengubah jumlah kolom dengan ITextFrameFormat.setColumnCount, jaraknya dengan ITextFrameFormat.setColumnSpacing, font, atau ukuran bingkai teks.
Metode ini melaporkan teks yang tersebar dalam ITextFrame saat ini; ia tidak secara otomatis mengalirkan teks antara shape atau kotak teks yang 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 dikonfigurasi, dan menulis teks dari setiap kolom ke file terpisah. Shape yang tidak menyediakan bingkai teks dilewati.
import com.aspose.slides.*;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
Presentation presentation = new Presentation("MultiColumnText.pptx");
try {
IAutoShape textBox = null;
for (IShape shape : presentation.getSlides().get_Item(0).getShapes()) {
if (shape instanceof IAutoShape) {
IAutoShape autoShape = (IAutoShape) shape;
if (autoShape.getTextFrame() != null) {
int columnCount = autoShape.getTextFrame().getTextFrameFormat().getColumnCount();
if (columnCount > 1) {
textBox = autoShape;
break;
}
}
}
}
if (textBox == null) {
System.out.println("No multi-column text frame was found.");
} else {
ITextFrame textFrame = textBox.getTextFrame();
int configuredColumnCount = textFrame.getTextFrameFormat().getColumnCount();
String[] columnTexts = textFrame.splitTextByColumns();
System.out.println("Configured columns: " + configuredColumnCount);
for (int columnIndex = 0; columnIndex < columnTexts.length; columnIndex++) {
int columnNumber = columnIndex + 1;
String columnText = columnTexts[columnIndex];
System.out.println("Column " + columnNumber + ": " + columnText);
Path outputPath = Paths.get("Column-" + columnNumber + ".txt");
byte[] textBytes = columnText.getBytes(StandardCharsets.UTF_8);
try {
Files.write(outputPath, textBytes);
} catch (IOException exception) {
System.out.println("Could not write column " + columnNumber + ": " + exception.getMessage());
}
}
}
} finally {
presentation.dispose();
}
Perbarui Teks
Untuk memperbarui teks di seluruh presentasi, iterasi melalui slide dan shape, pilih auto shape, dan kemudian edit bagian teksnya. Bekerja pada tingkat bagian memungkinkan Anda mengubah teks dan pemformatan karakter sekaligus.
Contoh berikut mengganti setiap kemunculan years dengan months dalam teks auto shape dan membuat setiap bagian yang terkena menjadi tebal:
import com.aspose.slides.*;
Presentation presentation = new Presentation("Text.pptx");
try {
for (ISlide slide : presentation.getSlides()) {
for (IShape shape : slide.getShapes()) {
if (!(shape instanceof IAutoShape)) {
continue;
}
IAutoShape autoShape = (IAutoShape) shape;
ITextFrame textFrame = autoShape.getTextFrame();
if (textFrame == null) {
continue;
}
for (IParagraph paragraph : textFrame.getParagraphs()) {
for (IPortion portion : paragraph.getPortions()) {
String text = portion.getText();
if (text != null && text.contains("years")) {
portion.setText(text.replace("years", "months"));
portion.getPortionFormat().setFontBold(NullableBool.True);
}
}
}
}
}
presentation.save("TextChanged.pptx", SaveFormat.Pptx);
} finally {
presentation.dispose();
}
Penelusuran ini memperbarui teks hanya dalam auto shape. Teks yang disimpan dalam tabel, bagan, SmartArt, atau shape yang dikelompokkan memerlukan penelusuran koleksi objek masing‑masing.
Tambahkan Kotak Teks dengan Tautan Hiper
Sebuah tautan hiper dapat ditetapkan ke bagian teks tertentu, sehingga hanya teks tersebut yang berfungsi sebagai tautan yang dapat diklik. Gunakan IHyperlinkManager.setExternalHyperlinkClick untuk mengaitkan bagian tersebut dengan URL eksternal.
Contoh berikut membuat teks bertautan dan menyimpannya ke presentasi:
import com.aspose.slides.*;
Presentation presentation = new Presentation();
try {
ISlide slide = presentation.getSlides().get_Item(0);
IAutoShape textBox = slide.getShapes().addAutoShape(ShapeType.Rectangle, 150, 150, 200, 50);
textBox.addTextFrame("Aspose.Slides");
IPortion textPortion = textBox.getTextFrame().getParagraphs().get_Item(0).getPortions().get_Item(0);
textPortion.getPortionFormat().getHyperlinkManager().setExternalHyperlinkClick("https://www.aspose.com/");
presentation.save("Hyperlink.pptx", SaveFormat.Pptx);
} finally {
presentation.dispose();
}
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 bagan, tabel, atau SmartArt?
Batasi penelusuran hanya pada shape yang mengimplementasikan IAutoShape, seperti yang ditunjukkan dalam contoh Perbarui Teks. Bagan, tabel, dan SmartArt menyimpan teks dalam model objek masing‑masing, sehingga tidak diubah oleh loop tersebut.