Textfelder in Präsentationen mit Java verwalten
Texte auf Folien befinden sich typischerweise in Textfeldern oder Formen. Daher müssen Sie, um Text zu einer Folie hinzuzufügen, ein Textfeld hinzufügen und dann Text in das Textfeld einfügen. Aspose.Slides for Java stellt die IAutoShape Schnittstelle bereit, die es ermöglicht, eine Form mit Text hinzuzufügen.
Info
Aspose.Slides stellt zudem die IShape Schnittstelle bereit, die das Hinzufügen von Formen zu Folien ermöglicht. Allerdings können nicht alle über dieIShape Schnittstelle hinzugefügten Formen Text enthalten. Formen, die über die IAutoShape Schnittstelle hinzugefügt werden, können jedoch Text enthalten.
Note
Daher sollten Sie, wenn Sie mit einer Form arbeiten, zu der Sie Text hinzufügen möchten, prüfen und bestätigen, dass sie über dieIAutoShape 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
Um ein Textfeld auf einer Folie zu erstellen, gehen Sie wie folgt vor:
- Erstellen Sie eine Instanz der Klasse Presentation.
- Holen Sie sich eine Referenz zur ersten Folie der neu erstellten Präsentation.
- Fügen Sie ein IAutoShape Objekt mit ShapeType auf
Rectanglean einer angegebenen Position auf der Folie hinzu und erhalten Sie die Referenz für das neu hinzugefügteIAutoShapeObjekt. - Fügen Sie dem
IAutoShapeObjekt die EigenschaftTextFramehinzu, die einen Text enthält. Im folgenden Beispiel haben wir diesen Text hinzugefügt: Aspose TextBox - Schreiben Sie schließlich die PPTX-Datei über das
PresentationObjekt.
Dieser Java-Code—eine Umsetzung der oben genannten Schritte—zeigt, wie man Text zu einer Folie hinzufügt:
// Instanziert die Präsentation
Presentation pres = new Presentation();
try {
// Holt die erste Folie der Präsentation
ISlide sld = pres.getSlides().get_Item(0);
// Fügt eine AutoShape mit dem Typ Rechteck hinzu
IAutoShape ashp = sld.getShapes().addAutoShape(ShapeType.Rectangle, 150, 75, 150, 50);
// Fügt dem Rechteck ein TextFrame hinzu
ashp.addTextFrame(" ");
// Greift auf das TextFrame zu
ITextFrame txtFrame = ashp.getTextFrame();
// Erstellt das Paragraph‑Objekt für das TextFrame
IParagraph para = txtFrame.getParagraphs().get_Item(0);
// Erstellt ein Portion‑Objekt für den Paragraphen
IPortion portion = para.getPortions().get_Item(0);
// Setzt den Text
portion.setText("Aspose TextBox");
// Speichert die Präsentation auf die Festplatte
pres.save("TextBox_out.pptx", SaveFormat.Pptx);
} finally {
if (pres != null) pres.dispose();
}
Prüfen, ob eine Form ein Textfeld ist
Aspose.Slides stellt die Methode isTextBox der IAutoShape Schnittstelle bereit, mit der Sie Formen untersuchen und Textfelder identifizieren können.

Dieser Java-Code zeigt, wie Sie prüfen können, ob eine Form als Textfeld erstellt wurde:
Presentation presentation = new Presentation("sample.pptx");
try {
ForEach.shape(presentation, (shape, slide, index) -> {
if (shape instanceof IAutoShape) {
IAutoShape autoShape = (IAutoShape) shape;
System.out.println(autoShape.isTextBox() ? "shape is a text box" : "shape is not a text box");
}
});
} finally {
presentation.dispose();
}
Beachten Sie, dass wenn Sie einfach eine AutoShape über die Methode addAutoShape der IShapeCollection Schnittstelle hinzufügen, die isTextBox Methode der AutoShape false zurückgibt. Nachdem Sie jedoch Text zur AutoShape mittels der Methode addTextFrame oder setText hinzugefügt haben, gibt die Eigenschaft isTextBox true zurück.
Presentation presentation = new Presentation();
ISlide slide = presentation.getSlides().get_Item(0);
IAutoShape shape1 = slide.getShapes().addAutoShape(ShapeType.Rectangle, 10, 10, 100, 40);
// shape1.isTextBox() gibt false zurück
shape1.addTextFrame("shape 1");
// shape1.isTextBox() gibt true zurück
IAutoShape shape2 = slide.getShapes().addAutoShape(ShapeType.Rectangle, 10, 110, 100, 40);
// shape2.isTextBox() gibt false zurück
shape2.getTextFrame().setText("shape 2");
// shape2.isTextBox() gibt true zurück
IAutoShape shape3 = slide.getShapes().addAutoShape(ShapeType.Rectangle, 10, 210, 100, 40);
// shape3.isTextBox() gibt false zurück
shape3.addTextFrame("");
// shape3.isTextBox() gibt false zurück
IAutoShape shape4 = slide.getShapes().addAutoShape(ShapeType.Rectangle, 10, 310, 100, 40);
// shape4.isTextBox() gibt false zurück
shape4.getTextFrame().setText("");
// shape4.isTextBox() gibt false zurück
Spalten zu einem Textfeld hinzufügen
Aspose.Slides stellt die Eigenschaften ColumnCount und ColumnSpacing (aus der ITextFrameFormat Schnittstelle und der Klasse TextFrameFormat) zur Verfügung, die es ermöglichen, Spalten zu Textfeldern hinzuzufügen. Sie können die Anzahl der Spalten in einem Textfeld festlegen und den Abstand in Punkten zwischen den Spalten einstellen.
Dieser Java-Code demonstriert die beschriebene Vorgehensweise:
Presentation pres = new Presentation();
try {
// Holt die erste Folie der Präsentation
ISlide slide = pres.getSlides().get_Item(0);
// Fügt eine AutoShape mit dem Typ Rechteck hinzu
IAutoShape aShape = slide.getShapes().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.getTextFrame().getTextFrameFormat();
// Legt die Anzahl der Spalten im TextFrame fest
format.setColumnCount(3);
// Legt den Abstand zwischen den Spalten fest
format.setColumnSpacing(10);
// Speichert die Präsentation
pres.save("ColumnCount.pptx", SaveFormat.Pptx);
} finally {
if (pres != null) pres.dispose();
}
Spalten zu einem Textrahmen hinzufügen
Aspose.Slides for Java stellt die Eigenschaft ColumnCount (aus der ITextFrameFormat Schnittstelle) bereit, mit der Sie Spalten in Textrahmen hinzufügen können. Über diese Eigenschaft können Sie die gewünschte Anzahl von Spalten in einem Textrahmen festlegen.
Dieser Java-Code zeigt, wie man eine Spalte innerhalb eines Textrahmens hinzufügt:
String outPptxFileName = "ColumnsTest.pptx";
Presentation pres = new Presentation();
try {
IAutoShape shape1 = pres.getSlides().get_Item(0).getShapes().addAutoShape(ShapeType.Rectangle, 100, 100, 300, 300);
TextFrameFormat format = (TextFrameFormat)shape1.getTextFrame().getTextFrameFormat();
format.setColumnCount(2);
shape1.getTextFrame().setText("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);
Presentation test = new Presentation(outPptxFileName);
try {
IAutoShape autoShape = ((AutoShape)test.getSlides().get_Item(0).getShapes().get_Item(0));
Assert.assertTrue(2 == autoShape.getTextFrame().getTextFrameFormat().getColumnCount());
Assert.assertTrue(Double.NaN == autoShape.getTextFrame().getTextFrameFormat().getColumnSpacing());
} finally {
if (test != null) test.dispose();
}
format.setColumnSpacing(20);
pres.save(outPptxFileName, SaveFormat.Pptx);
Presentation test1 = new Presentation(outPptxFileName);
try {
IAutoShape autoShape = ((AutoShape)test1.getSlides().get_Item(0).getShapes().get_Item(0));
Assert.assertTrue(2 == autoShape.getTextFrame().getTextFrameFormat().getColumnCount());
Assert.assertTrue(20 == autoShape.getTextFrame().getTextFrameFormat().getColumnSpacing());
} finally {
if (test1 != null) test1.dispose();
}
format.setColumnCount(3);
format.setColumnSpacing(15);
pres.save(outPptxFileName, SaveFormat.Pptx);
Presentation test2 = new Presentation(outPptxFileName);
try {
IAutoShape autoShape = ((AutoShape)test2.getSlides().get_Item(0).getShapes().get_Item(0));
Assert.assertTrue(3 == autoShape.getTextFrame().getTextFrameFormat().getColumnCount());
Assert.assertTrue(15 == autoShape.getTextFrame().getTextFrameFormat().getColumnSpacing());
} finally {
if (test2 != null) test2.dispose();
}
} finally {
if (pres != null) pres.dispose();
}
Text aktualisieren
Aspose.Slides ermöglicht es Ihnen, den Text in einem Textfeld oder alle Texte in einer Präsentation zu ändern oder zu aktualisieren.
Dieser Java-Code demonstriert eine Operation, bei der alle Texte in einer Präsentation aktualisiert oder geändert werden:
Presentation pres = new Presentation("text.pptx");
try {
for (ISlide slide : pres.getSlides())
{
for (IShape shape : slide.getShapes())
{
if (shape instanceof IAutoShape) //Prüft, ob die Form Textrahmen unterstützt (IAutoShape).
{
IAutoShape autoShape = (IAutoShape)shape;
for (IParagraph paragraph : autoShape.getTextFrame().getParagraphs()) //Durchläuft die Absätze im Textrahmen
{
for (IPortion portion : paragraph.getPortions()) //Durchläuft jeden Abschnitt im Absatz
{
portion.setText(portion.getText().replace("years", "months")); //Ändert den Text
portion.getPortionFormat().setFontBold(NullableBool.True); //Ändert die Formatierung
}
}
}
}
}
//Speichert die geänderte Präsentation
pres.save("text-changed.pptx", SaveFormat.Pptx);
} finally {
if (pres != null) pres.dispose();
}
Ein Textfeld mit Hyperlink hinzufügen
Sie können einen Link in ein Textfeld einfügen. Beim Klicken auf das Textfeld werden die Benutzer zum Öffnen des Links geleitet.
Um ein Textfeld mit einem Link hinzuzufügen, gehen Sie wie folgt vor:
- Erstellen Sie eine Instanz der Klasse
Presentation. - Holen Sie sich eine Referenz zur ersten Folie der neu erstellten Präsentation.
- Fügen Sie ein
AutoShapeObjekt mitShapeTypeaufRectanglean einer angegebenen Position auf der Folie hinzu und erhalten Sie eine Referenz des neu hinzugefügten AutoShape-Objekts. - Fügen Sie dem
AutoShapeObjekt einTextFramehinzu, das Aspose TextBox als Standardtext enthält. - Instanziieren Sie die Klasse
IHyperlinkManager. - Weisen Sie das
IHyperlinkManagerObjekt der Eigenschaft HyperlinkClick zu, die dem gewünschten Teil desTextFramezugeordnet ist. - Schreiben Sie schließlich die PPTX-Datei über das
PresentationObjekt.
Dieser Java-Code—eine Umsetzung der oben genannten Schritte—zeigt, wie man ein Textfeld mit einem Hyperlink zu einer Folie hinzufügt:
// Instanziiert eine Presentation-Klasse, die eine PPTX repräsentiert
Presentation pres = new Presentation();
try {
// Holt die erste Folie der Präsentation
ISlide slide = pres.getSlides().get_Item(0);
// Fügt ein AutoShape-Objekt mit dem Typ Rechteck hinzu
IShape shape = slide.getShapes().addAutoShape(ShapeType.Rectangle, 150, 150, 150, 50);
// Wandelt die Form in AutoShape um
IAutoShape pptxAutoShape = (IAutoShape)shape;
// Greift auf die ITextFrame-Eigenschaft der AutoShape zu
pptxAutoShape.addTextFrame("");
ITextFrame textFrame = pptxAutoShape.getTextFrame();
// Fügt dem Frame etwas Text hinzu
textFrame.getParagraphs().get_Item(0).getPortions().get_Item(0).setText("Aspose.Slides");
// Setzt den Hyperlink für den Portionstext
IHyperlinkManager hyperlinkManager = textFrame.getParagraphs().get_Item(0).getPortions().get_Item(0).
getPortionFormat().getHyperlinkManager();
hyperlinkManager.setExternalHyperlinkClick("http://www.aspose.com");
// Speichert die PPTX-Präsentation
pres.save("hLink_out.pptx", SaveFormat.Pptx);
} finally {
if (pres != null) pres.dispose();
}
FAQ
Was ist der Unterschied zwischen einem Textfeld und einem Textplatzhalter bei der Arbeit mit Masterfolien?
Ein placeholder übernimmt Stil/Position vom master und kann in layouts überschrieben werden, während ein reguläres Textfeld ein unabhängiges Objekt auf einer bestimmten Folie ist und sich beim Wechsel von Layouts nicht ändert.
Wie kann ich einen massenhaften Textaustausch in der gesamten Präsentation durchführen, ohne Text in Diagrammen, Tabellen und SmartArt zu ändern?
Begrenzen Sie Ihre Iteration auf AutoShapes, die TextFrames besitzen, und schließen Sie eingebettete Objekte (charts, tables, SmartArt) aus, indem Sie deren Sammlungen separat durchlaufen oder diese Objekttypen überspringen.