Zarządzanie polami tekstowymi w prezentacjach w .NET
Wprowadzenie
Teksty na slajdach zazwyczaj znajdują się w polach tekstowych lub kształtach. Dlatego, aby dodać tekst do slajdu, najpierw musisz dodać pole tekstowe, a następnie umieścić w nim tekst.
Aby umożliwić dodawanie kształtu, który może zawierać tekst, Aspose.Slides dla .NET udostępnia interfejs IAutoShape.
Uwaga
Aspose.Slides udostępnia także interfejs IShape, który pozwala na dodawanie kształtów do slajdów. Jednak nie wszystkie kształty dodane za pomocą interfejsu IShape mogą zawierać tekst. Kształty dodane za pośrednictwem interfejsu IAutoShape zazwyczaj zawierają tekst.
Dlatego, gdy pracujesz z istniejącym kształtem, do którego chcesz dodać tekst, warto sprawdzić i potwierdzić, że został on rzutowany na interfejs IAutoShape. Dopiero wtedy będziesz mógł pracować z TextFrame, który jest właściwością interfejsu IAutoShape. Zobacz sekcję Update Text na tej stronie.
Utworzenie pola tekstowego na slajdzie
- Utwórz instancję klasy Presentation.
- Uzyskaj odniesienie do pierwszego slajdu za pomocą jego indeksu.
- Dodaj obiekt IAutoShape z właściwością ShapeType ustawioną na
Rectanglew określonej pozycji na slajdzie i uzyskaj odwołanie do nowo dodanego obiektuIAutoShape. - Dodaj właściwość
TextFramedo obiektuIAutoShape, która będzie zawierać tekst. W poniższym przykładzie dodaliśmy ten tekst: Aspose TextBox - Na koniec zapisz plik PPTX przy użyciu obiektu
Presentation.
Ten kod w C# — implementacja powyższych kroków — pokazuje, jak dodać tekst do slajdu:
// Tworzy instancję PresentationEx
using (Presentation pres = new Presentation())
{
// Pobiera pierwszy slajd w prezentacji
ISlide sld = pres.Slides[0];
// Dodaje AutoShape z typem ustawionym na Rectangle
IAutoShape ashp = sld.Shapes.AddAutoShape(ShapeType.Rectangle, 150, 75, 150, 50);
// Dodaje TextFrame do prostokąta
ashp.AddTextFrame(" ");
// Uzyskuje dostęp do ramki tekstowej
ITextFrame txtFrame = ashp.TextFrame;
// Tworzy obiekt Paragraph dla ramki tekstowej
IParagraph para = txtFrame.Paragraphs[0];
// Tworzy obiekt Portion dla akapitu
IPortion portion = para.Portions[0];
// Ustawia tekst
portion.Text = "Aspose TextBox";
// Zapisuje prezentację na dysk
pres.Save("TextBox_out.pptx", Aspose.Slides.Export.SaveFormat.Pptx);
}
Sprawdzenie, czy kształt jest polem tekstowym
Aspose.Slides udostępnia właściwość IsTextBox z interfejsu IAutoShape , pozwalając na przeglądanie kształtów i identyfikowanie pól tekstowych.

Ten kod w C# pokazuje, jak sprawdzić, czy kształt został utworzony jako pole tekstowe:
using (Presentation presentation = new Presentation("sample.pptx"))
{
Aspose.Slides.LowCode.ForEach.Shape(presentation, (shape, slide, index) =>
{
if (shape is IAutoShape autoShape)
{
Console.WriteLine(autoShape.IsTextBox ? "shape is a text box" : "shape is not a text box");
}
});
}
Zauważ, że jeśli po prostu dodasz autokształt za pomocą metody AddAutoShape z interfejsu IShapeCollection, właściwość IsTextBox tego autokształtu zwróci false. Jednak po dodaniu tekstu do autokształtu metodą AddTextFrame lub właściwością Text, właściwość IsTextBox zwróci true.
using (Presentation presentation = new Presentation())
{
ISlide slide = presentation.Slides[0];
IAutoShape shape1 = slide.Shapes.AddAutoShape(ShapeType.Rectangle, 10, 10, 100, 40);
// shape1.IsTextBox ma wartość false
shape1.AddTextFrame("shape 1");
// shape1.IsTextBox ma wartość true
IAutoShape shape2 = slide.Shapes.AddAutoShape(ShapeType.Rectangle, 10, 110, 100, 40);
// shape2.IsTextBox ma wartość false
shape2.TextFrame.Text = "shape 2";
// shape2.IsTextBox ma wartość true
IAutoShape shape3 = slide.Shapes.AddAutoShape(ShapeType.Rectangle, 10, 210, 100, 40);
// shape3.IsTextBox ma wartość false
shape3.AddTextFrame("");
// shape3.IsTextBox ma wartość false
IAutoShape shape4 = slide.Shapes.AddAutoShape(ShapeType.Rectangle, 10, 310, 100, 40);
// shape4.IsTextBox ma wartość false
shape4.TextFrame.Text = "";
// shape4.IsTextBox ma wartość false
}
Dodanie kolumn do pola tekstowego
Aspose.Slides udostępnia właściwości ColumnCount i ColumnSpacing (z interfejsu ITextFrameFormat oraz klasy TextFrameFormat), umożliwiające dodanie kolumn do pól tekstowych. Możesz określić liczbę kolumn w polu tekstowym, a następnie odstęp w punktach pomiędzy kolumnami.
Ten kod w C# demonstruje opisaną operację:
using (Presentation presentation = new Presentation())
{
// Pobiera pierwszy slajd w prezentacji
ISlide slide = presentation.Slides[0];
// Dodaje AutoShape z typem ustawionym na Rectangle
IAutoShape aShape = slide.Shapes.AddAutoShape(ShapeType.Rectangle, 100, 100, 300, 300);
// Dodaje TextFrame do prostokąta
aShape.AddTextFrame("All these columns are limited to be within a single text container -- " +
"you can add or delete text and the new or remaining text automatically adjusts " +
"itself to flow within the container. You cannot have text flow from one container " +
"to other though -- we told you PowerPoint's column options for text are limited!");
// Pobiera format tekstu ramki TextFrame
ITextFrameFormat format = aShape.TextFrame.TextFrameFormat;
// Określa liczbę kolumn w TextFrame
format.ColumnCount = 3;
// Określa odstęp między kolumnami
format.ColumnSpacing = 10;
// Zapisuje prezentację
presentation.Save("ColumnCount.pptx", SaveFormat.Pptx);
}
Dodanie kolumn do ramki tekstowej
Aspose.Slides dla .NET udostępnia właściwość ColumnCount (z interfejsu ITextFrameFormat), która pozwala dodać kolumny w ramkach tekstowych. Dzięki tej właściwości możesz określić preferowaną liczbę kolumn w ramce tekstowej.
Ten kod w C# pokazuje, jak dodać kolumnę wewnątrz ramki tekstowej:
string outPptxFileName = "ColumnsTest.pptx";
using (Presentation pres = new Presentation())
{
IAutoShape shape1 = pres.Slides[0].Shapes.AddAutoShape(ShapeType.Rectangle, 100, 100, 300, 300);
TextFrameFormat format = (TextFrameFormat)shape1.TextFrame.TextFrameFormat;
format.ColumnCount = 2;
shape1.TextFrame.Text = "All these columns are forced to stay within a single text container -- " +
"you can add or delete text - and the new or remaining text automatically adjusts " +
"itself to stay within the container. You cannot have text spill over from one container " +
"to other, though -- because PowerPoint's column options for text are limited!";
pres.Save(outPptxFileName, SaveFormat.Pptx);
using (Presentation test = new Presentation(outPptxFileName))
{
Debug.Assert(2 == ((AutoShape)test.Slides[0].Shapes[0]).TextFrame.TextFrameFormat.ColumnCount);
Debug.Assert(double.NaN == ((AutoShape)test.Slides[0].Shapes[0]).TextFrame.TextFrameFormat.ColumnSpacing);
}
format.ColumnSpacing = 20;
pres.Save(outPptxFileName, SaveFormat.Pptx);
using (Presentation test = new Presentation(outPptxFileName))
{
Debug.Assert(2 == ((AutoShape)test.Slides[0].Shapes[0]).TextFrame.TextFrameFormat.ColumnCount);
Debug.Assert(20 == ((AutoShape)test.Slides[0].Shapes[0]).TextFrame.TextFrameFormat.ColumnSpacing);
}
format.ColumnCount = 3;
format.ColumnSpacing = 15;
pres.Save(outPptxFileName, SaveFormat.Pptx);
using (Presentation test = new Presentation(outPptxFileName))
{
Debug.Assert(3 == ((AutoShape)test.Slides[0].Shapes[0]).TextFrame.TextFrameFormat.ColumnCount);
Debug.Assert(15 == ((AutoShape)test.Slides[0].Shapes[0]).TextFrame.TextFrameFormat.ColumnSpacing);
}
}
Aktualizacja tekstu
Aspose.Slides umożliwia zmianę lub aktualizację tekstu zawartego w polu tekstowym lub wszystkich tekstów w prezentacji.
Ten kod w C# demonstruje operację, w której wszystkie teksty w prezentacji są aktualizowane lub zmieniane:
using(Presentation pres = new Presentation("text.pptx"))
{
foreach (ISlide slide in pres.Slides)
{
foreach (IShape shape in slide.Shapes)
{
if (shape is IAutoShape autoShape) //Sprawdza, czy kształt obsługuje ramkę tekstową (IAutoShape).
{
foreach (IParagraph paragraph in autoShape.TextFrame.Paragraphs) //Iteruje przez akapity w ramce tekstowej
{
foreach (IPortion portion in paragraph.Portions) //Iteruje przez każdy fragment w akapicie
{
portion.Text = portion.Text.Replace("years", "months"); //Zmienia tekst
portion.PortionFormat.FontBold = NullableBool.True; //Zmienia formatowanie
}
}
}
}
}
//Zapisuje zmodyfikowaną prezentację
pres.Save("text-changed.pptx", SaveFormat.Pptx);
}
Dodanie pola tekstowego z hiperłączem
Możesz wstawić link wewnątrz pola tekstowego. Gdy pole tekstowe zostanie kliknięte, użytkownicy są przekierowywani do otwarcia linku.
- Utwórz instancję klasy
Presentation. - Uzyskaj odniesienie do pierwszego slajdu za pomocą jego indeksu.
- Dodaj obiekt
AutoShapezShapeTypeustawionym naRectanglew określonej pozycji na slajdzie i uzyskaj odwołanie do nowo dodanego obiektu AutoShape. - Dodaj
TextFramedo obiektuAutoShape, który zawiera Aspose TextBox jako domyślny tekst. - Utwórz instancję klasy
IHyperlinkManager. - Przypisz obiekt
IHyperlinkManagerdo właściwości HyperlinkClick powiązanej z wybraną częściąTextFrame. - Na koniec zapisz plik PPTX przy użyciu obiektu
Presentation.
Ten kod w C# — implementacja powyższych kroków — pokazuje, jak dodać pole tekstowe z hiperłączem do slajdu:
// Instancjonuje klasę Presentation, która reprezentuje plik PPTX
Presentation pptxPresentation = new Presentation();
// Uzyskuje pierwszy slajd w prezentacji
ISlide slide = pptxPresentation.Slides[0];
// Dodaje obiekt AutoShape z typem ustawionym na Rectangle
IShape pptxShape = slide.Shapes.AddAutoShape(ShapeType.Rectangle, 150, 150, 150, 50);
// Rzutuje kształt na AutoShape
IAutoShape pptxAutoShape = (IAutoShape)pptxShape;
// Dostaje dostęp do własności ITextFrame powiązanej z AutoShape
pptxAutoShape.AddTextFrame("");
ITextFrame ITextFrame = pptxAutoShape.TextFrame;
// Dodaje tekst do ramki
ITextFrame.Paragraphs[0].Portions[0].Text = "Aspose.Slides";
// Ustawia hiperłącze dla tekstu fragmentu
IHyperlinkManager HypMan = ITextFrame.Paragraphs[0].Portions[0].PortionFormat.HyperlinkManager;
HypMan.SetExternalHyperlinkClick("http://www.aspose.com");
// Zapisuje prezentację PPTX
pptxPresentation.Save("hLinkPPTX_out.pptx", Aspose.Slides.Export.SaveFormat.Pptx);
FAQ
Jaka jest różnica między polem tekstowym a symbolem tekstowym podczas pracy z slajdami nadrzędnymi?
Symbol placeholder dziedziczy styl/położenie z mastera i może być nadpisany na układach, podczas gdy zwykłe pole tekstowe jest niezależnym obiektem na konkretnym slajdzie i nie zmienia się po przełączeniu układów.
Jak wykonać masową zamianę tekstu w całej prezentacji, nie zmieniając tekstu w wykresach, tabelach i SmartArt?
Ogranicz iterację do auto‑kształtów posiadających ramki tekstowe i wyklucz osadzone obiekty (charts, tables, SmartArt), przeglądając ich kolekcje osobno lub pomijając te typy obiektów.