Textfelder in Präsentationen in .NET verwalten
Texte auf Folien befinden sich typischerweise in Textfeldern oder Formen. Daher müssen Sie, um Text zu einer Folie hinzuzufügen, zuerst ein Textfeld hinzufügen und dann etwas Text in das Textfeld einfügen.
Um Ihnen das Hinzufügen einer Form zu ermöglichen, die Text enthalten kann, stellt Aspose.Slides für .NET die Schnittstelle IAutoShape bereit.
Note
Aspose.Slides bietet außerdem die Schnittstelle IShape an, um Formen zu Folien hinzuzufügen. Allerdings können nicht alle über die IShape-Schnittstelle hinzugefügten Formen Text enthalten. Formen, die über die IAutoShape-Schnittstelle hinzugefügt werden, enthalten typischerweise Text.
Daher sollten Sie, wenn Sie einer vorhandenen Form Text hinzufügen möchten, prüfen und bestätigen, dass sie über die IAutoShape-Schnittstelle gecastet wurde. Nur dann können Sie mit TextFrame arbeiten, das eine Eigenschaft von IAutoShape ist. Siehe den Abschnitt Update Text auf dieser Seite.
Ein Textfeld auf einer Folie erstellen
- Erstellen Sie eine Instanz der Klasse Presentation.
- Rufen Sie die Referenz der ersten Folie über ihren Index ab.
- Fügen Sie ein IAutoShape-Objekt mit dem ShapeType
Rectanglean einer angegebenen Position auf der Folie hinzu und erhalten Sie die Referenz für das neu hinzugefügteIAutoShape-Objekt. - Fügen Sie dem
IAutoShape-Objekt die EigenschaftTextFramehinzu, die einen Text enthalten wird. Im nachstehenden Beispiel haben wir diesen Text hinzugefügt: Aspose TextBox - Schließlich schreiben Sie die PPTX-Datei über das
Presentation-Objekt.
Dieser C#‑Code – eine Umsetzung der obigen Schritte – zeigt Ihnen, wie Sie Text zu einer Folie hinzufügen:
// Instanziiert PresentationEx
using (Presentation pres = new Presentation())
{
// Holt die erste Folie in der Präsentation
ISlide sld = pres.Slides[0];
// Fügt eine AutoShape mit dem Typ Rectangle hinzu
IAutoShape ashp = sld.Shapes.AddAutoShape(ShapeType.Rectangle, 150, 75, 150, 50);
// Fügt dem Rechteck ein TextFrame hinzu
ashp.AddTextFrame(" ");
// Greift auf das TextFrame zu
ITextFrame txtFrame = ashp.TextFrame;
// Erstellt das Paragraph-Objekt für das TextFrame
IParagraph para = txtFrame.Paragraphs[0];
// Erstellt ein Portion-Objekt für den Paragraph
IPortion portion = para.Portions[0];
// Setzt den Text
portion.Text = "Aspose TextBox";
// Speichert die Präsentation auf die Festplatte
pres.Save("TextBox_out.pptx", Aspose.Slides.Export.SaveFormat.Pptx);
}
Überprüfen, ob eine Form ein Textfeld ist
Aspose.Slides stellt die Eigenschaft IsTextBox der Schnittstelle IAutoShape bereit, mit der Sie Formen prüfen und Textfelder identifizieren können.

Dieser C#‑Code zeigt Ihnen, wie Sie prüfen können, ob eine Form als Textfeld erstellt wurde:
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");
}
});
}
Beachten Sie, dass wenn Sie einfach eine AutoShape mit der Methode AddAutoShape der Schnittstelle IShapeCollection hinzufügen, die IsTextBox-Eigenschaft der AutoShape false zurückgibt. Nachdem Sie jedoch Text zur AutoShape mit der Methode AddTextFrame oder der Eigenschaft Text hinzugefügt haben, gibt die IsTextBox-Eigenschaft true zurück.
using (Presentation presentation = new Presentation())
{
ISlide slide = presentation.Slides[0];
IAutoShape shape1 = slide.Shapes.AddAutoShape(ShapeType.Rectangle, 10, 10, 100, 40);
// shape1.IsTextBox ist false
shape1.AddTextFrame("shape 1");
// shape1.IsTextBox ist true
IAutoShape shape2 = slide.Shapes.AddAutoShape(ShapeType.Rectangle, 10, 110, 100, 40);
// shape2.IsTextBox ist false
shape2.TextFrame.Text = "shape 2";
// shape2.IsTextBox ist true
IAutoShape shape3 = slide.Shapes.AddAutoShape(ShapeType.Rectangle, 10, 210, 100, 40);
// shape3.IsTextBox ist false
shape3.AddTextFrame("");
// shape3.IsTextBox ist false
IAutoShape shape4 = slide.Shapes.AddAutoShape(ShapeType.Rectangle, 10, 310, 100, 40);
// shape4.IsTextBox ist false
shape4.TextFrame.Text = "";
// shape4.IsTextBox ist false
}
Spalten zu einem Textfeld hinzufügen
Aspose.Slides stellt die Eigenschaften ColumnCount und ColumnSpacing (aus der Schnittstelle ITextFrameFormat bzw. der Klasse TextFrameFormat) zur Verfügung, um Spalten zu Textfeldern hinzuzufügen. Sie können die Anzahl der Spalten in einem Textfeld festlegen und anschließend den Abstand in Punkten zwischen den Spalten angeben.
Dieser C#‑Code demonstriert die beschriebene Vorgehensweise:
using (Presentation presentation = new Presentation())
{
// Holt die erste Folie in der Präsentation
ISlide slide = presentation.Slides[0];
// Fügt eine AutoShape mit dem Typ Rectangle hinzu
IAutoShape aShape = slide.Shapes.AddAutoShape(ShapeType.Rectangle, 100, 100, 300, 300);
// Fügt dem Rechteck ein TextFrame hinzu
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!");
// Holt das Textformat des TextFrames
ITextFrameFormat format = aShape.TextFrame.TextFrameFormat;
// Gibt die Anzahl der Spalten im TextFrame an
format.ColumnCount = 3;
// Gibt den Abstand zwischen den Spalten an
format.ColumnSpacing = 10;
// Speichert die Präsentation
presentation.Save("ColumnCount.pptx", SaveFormat.Pptx);
}
Spalten zu einem Textrahmen hinzufügen
Aspose.Slides für .NET bietet die Eigenschaft ColumnCount (aus der Schnittstelle ITextFrameFormat) an, die es ermöglicht, Spalten in Textframes hinzuzufügen. Mit dieser Eigenschaft können Sie die gewünschte Anzahl von Spalten in einem Textframe festlegen.
Dieser C#‑Code zeigt, wie Sie einer Textframe eine Spalte hinzufügen können:
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);
}
}
Text aktualisieren
Aspose.Slides ermöglicht es, den Text in einem Textfeld oder alle Texte in einer Präsentation zu ändern oder zu aktualisieren.
Dieser C#‑Code demonstriert eine Operation, bei der alle Texte in einer Präsentation aktualisiert oder geändert werden:
using(Presentation pres = new Presentation("text.pptx"))
{
foreach (ISlide slide in pres.Slides)
{
foreach (IShape shape in slide.Shapes)
{
if (shape is IAutoShape autoShape) //Überprüft, ob die Form einen Textrahmen unterstützt (IAutoShape).
{
foreach (IParagraph paragraph in autoShape.TextFrame.Paragraphs) //Iteriert über die Absätze im Textrahmen
{
foreach (IPortion portion in paragraph.Portions) //Iteriert über jeden Teil im Absatz
{
portion.Text = portion.Text.Replace("years", "months"); //Ändert den Text
portion.PortionFormat.FontBold = NullableBool.True; //Ändert die Formatierung
}
}
}
}
}
//Speichert die geänderte Präsentation
pres.Save("text-changed.pptx", SaveFormat.Pptx);
}
Ein Textfeld mit Hyperlink hinzufügen
Sie können einen Link in ein Textfeld einfügen. Wenn das Textfeld angeklickt wird, wird der Nutzer zum Öffnen des Links geleitet.
- Erstellen Sie eine Instanz der Klasse
Presentation. - Rufen Sie die Referenz der ersten Folie über ihren Index ab.
- Fügen Sie ein
AutoShape-Objekt mitShapeTypeRectanglean einer angegebenen Position auf der Folie hinzu und erhalten Sie eine Referenz des neu hinzugefügten AutoShape-Objekts. - Fügen Sie dem
AutoShape-Objekt einTextFramehinzu, das Aspose TextBox als Standardtext enthält. - Instanziieren Sie die Klasse
IHyperlinkManager. - Weisen Sie das
IHyperlinkManager-Objekt der Eigenschaft HyperlinkClick zu, die mit dem gewünschten Teil desTextFrameverknüpft ist. - Schließlich schreiben Sie die PPTX-Datei über das
Presentation-Objekt.
Dieser C#‑Code – eine Umsetzung der obigen Schritte – zeigt Ihnen, wie Sie ein Textfeld mit Hyperlink zu einer Folie hinzufügen:
// Instanziert eine Presentation‑Klasse, die eine PPTX darstellt
Presentation pptxPresentation = new Presentation();
// Holt die erste Folie in der Präsentation
ISlide slide = pptxPresentation.Slides[0];
// Fügt ein AutoShape‑Objekt mit dem Typ Rectangle hinzu
IShape pptxShape = slide.Shapes.AddAutoShape(ShapeType.Rectangle, 150, 150, 150, 50);
// Castet die Form zu AutoShape
IAutoShape pptxAutoShape = (IAutoShape)pptxShape;
// Greift auf die ITextFrame‑Eigenschaft der AutoShape zu
pptxAutoShape.AddTextFrame("");
ITextFrame ITextFrame = pptxAutoShape.TextFrame;
// Fügt dem Frame etwas Text hinzu
ITextFrame.Paragraphs[0].Portions[0].Text = "Aspose.Slides";
// Setzt den Hyperlink für den Portion‑Text
IHyperlinkManager HypMan = ITextFrame.Paragraphs[0].Portions[0].PortionFormat.HyperlinkManager;
HypMan.SetExternalHyperlinkClick("http://www.aspose.com");
// Speichert die PPTX‑Präsentation
pptxPresentation.Save("hLinkPPTX_out.pptx", Aspose.Slides.Export.SaveFormat.Pptx);
FAQ
Was ist der Unterschied zwischen einem Textfeld und einem Text‑Platzhalter bei der Arbeit mit Master‑Folien?
Ein Platzhalter übernimmt Stil/Position vom Master und kann auf Layouts überschrieben werden, während ein reguläres Textfeld ein eigenständiges Objekt auf einer bestimmten Folie ist und sich beim Wechseln von Layouts nicht ändert.
Wie kann ich einen massenhaften Text‑Austausch in der gesamten Präsentation durchführen, ohne Texte in Diagrammen, Tabellen und SmartArt zu verändern?
Beschränken Sie die Iteration auf AutoShapes, die Textframes besitzen, und schließen Sie eingebettete Objekte (Diagramme, Tabellen, SmartArt) aus, indem Sie deren Sammlungen getrennt durchlaufen oder diese Objekttypen überspringen.