Beheer tekstvakken in presentaties met Java
Introductie
Teksten op dia’s staan doorgaans in tekstvakken of vormen. Daarom moet je, om tekst aan een dia toe te voegen, eerst een tekstvak toevoegen en daarna tekst in dat tekstvak plaatsen. Aspose.Slides for Java biedt de IAutoShape interface waarmee je een vorm met tekst kunt toevoegen.
Info
Aspose.Slides biedt ook de IShape interface waarmee je vormen aan dia’s kunt toevoegen. Niet alle vormen die via deIShape interface worden toegevoegd, kunnen echter tekst bevatten. Vormen die via de IAutoShape interface worden toegevoegd, kunnen wel tekst bevatten.
Opmerking
Wanneer je met een vorm werkt waaraan je tekst wilt toevoegen, moet je controleren of deze via deIAutoShape interface is gecast. Alleen dan kun je werken met TextFrame, een eigenschap van IAutoShape. Zie de sectie Update Text op deze pagina.
Maak een tekstvak op een dia
Om een tekstvak op een dia te maken, volg je deze stappen:
- Maak een instantie van de Presentation klasse.
- Verkrijg een referentie naar de eerste dia in de nieuw aangemaakte presentatie.
- Voeg een IAutoShape object toe met
ShapeTypeingesteld opRectangleop een opgegeven positie op de dia en verkrijg de referentie naar het nieuw toegevoegdeIAutoShapeobject. - Voeg de eigenschap
TextFrametoe aan hetIAutoShapeobject zodat het tekst bevat. In het voorbeeld hieronder voegen we deze tekst toe: Aspose TextBox - Schrijf ten slotte het PPTX‑bestand via het
Presentationobject.
Deze Java‑code—een implementatie van de bovenstaande stappen—laat zien hoe je tekst aan een dia toevoegt:
// Instantieert Presentation
Presentation pres = new Presentation();
try {
// Haalt de eerste dia in de presentatie op
ISlide sld = pres.getSlides().get_Item(0);
// Voegt een AutoShape toe met type ingesteld op Rectangle
IAutoShape ashp = sld.getShapes().addAutoShape(ShapeType.Rectangle, 150, 75, 150, 50);
// Voegt een TextFrame toe aan de Rectangle
ashp.addTextFrame(" ");
// Benadert het tekstframe
ITextFrame txtFrame = ashp.getTextFrame();
// Creëert het Paragraph-object voor het tekstframe
IParagraph para = txtFrame.getParagraphs().get_Item(0);
// Creëert een Portion-object voor de alinea
IPortion portion = para.getPortions().get_Item(0);
// Stelt tekst in
portion.setText("Aspose TextBox");
// Slaat de presentatie op naar schijf
pres.save("TextBox_out.pptx", SaveFormat.Pptx);
} finally {
if (pres != null) pres.dispose();
}
Controleren op een tekstvakvorm
Aspose.Slides biedt de isTextBox methode van de IAutoShape interface, waarmee je vormen kunt onderzoeken en tekstvakken kunt identificeren.

Deze Java‑code toont hoe je controleert of een vorm als tekstvak is aangemaakt:
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();
}
Merk op dat als je simpelweg een autoshape toevoegt met de addAutoShape methode van de IShapeCollection interface, de isTextBox methode van de autoshape false retourneert. Nadat je echter tekst aan de autoshape hebt toegevoegd met de addTextFrame methode of de setText methode, geeft de isTextBox eigenschap true terug.
Presentation presentation = new Presentation();
ISlide slide = presentation.getSlides().get_Item(0);
IAutoShape shape1 = slide.getShapes().addAutoShape(ShapeType.Rectangle, 10, 10, 100, 40);
// shape1.isTextBox() geeft false terug
shape1.addTextFrame("shape 1");
// shape1.isTextBox() geeft true terug
IAutoShape shape2 = slide.getShapes().addAutoShape(ShapeType.Rectangle, 10, 110, 100, 40);
// shape2.isTextBox() geeft false terug
shape2.getTextFrame().setText("shape 2");
// shape2.isTextBox() geeft true terug
IAutoShape shape3 = slide.getShapes().addAutoShape(ShapeType.Rectangle, 10, 210, 100, 40);
// shape3.isTextBox() geeft false terug
shape3.addTextFrame("");
// shape3.isTextBox() geeft false terug
IAutoShape shape4 = slide.getShapes().addAutoShape(ShapeType.Rectangle, 10, 310, 100, 40);
// shape4.isTextBox() geeft false terug
shape4.getTextFrame().setText("");
// shape4.isTextBox() geeft false terug
Kolommen toevoegen aan een tekstvak
Aspose.Slides biedt de ColumnCount en ColumnSpacing eigenschappen (van de ITextFrameFormat interface en de TextFrameFormat klasse) waarmee je kolommen aan tekstvakken kunt toevoegen. Je kunt het aantal kolommen in een tekstvak opgeven en de tussenruimte in punten tussen de kolommen instellen.
Deze Java‑code demonstreert de beschreven handeling:
Presentation pres = new Presentation();
try {
// Haalt de eerste dia in de presentatie op
ISlide slide = pres.getSlides().get_Item(0);
// Voeg een AutoShape toe met type ingesteld op Rectangle
IAutoShape aShape = slide.getShapes().addAutoShape(ShapeType.Rectangle, 100, 100, 300, 300);
// Voeg een TextFrame toe aan de Rectangle
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!");
// Haalt het tekstformaat van het TextFrame op
ITextFrameFormat format = aShape.getTextFrame().getTextFrameFormat();
// Bepaalt het aantal kolommen in het TextFrame
format.setColumnCount(3);
// Bepaalt de tussenruimte tussen kolommen
format.setColumnSpacing(10);
// Slaat de presentatie op
pres.save("ColumnCount.pptx", SaveFormat.Pptx);
} finally {
if (pres != null) pres.dispose();
}
Kolommen toevoegen aan een tekstframe
Aspose.Slides for Java biedt de ColumnCount eigenschap (van de ITextFrameFormat interface) waarmee je kolommen in tekstframes kunt toevoegen. Via deze eigenschap kun je het gewenste aantal kolommen in een tekstframe opgeven.
Deze Java‑code laat zien hoe je een kolom aan een tekstframe toevoegt:
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();
}
Tekst bijwerken
Aspose.Slides stelt je in staat de tekst in een tekstvak of alle teksten in een presentatie te wijzigen of bij te werken.
Deze Java‑code demonstreert een bewerking waarbij alle teksten in een presentatie worden bijgewerkt of gewijzigd:
Presentation pres = new Presentation("text.pptx");
try {
for (ISlide slide : pres.getSlides())
{
for (IShape shape : slide.getShapes())
{
if (shape instanceof IAutoShape) //Controleert of de vorm een tekstframe ondersteunt (IAutoShape).
{
IAutoShape autoShape = (IAutoShape)shape;
for (IParagraph paragraph : autoShape.getTextFrame().getParagraphs()) //Itereert door alinea's in het tekstframe
{
for (IPortion portion : paragraph.getPortions()) //Itereert door elke portion in de alinea
{
portion.setText(portion.getText().replace("years", "months")); //Wijzigt de tekst
portion.getPortionFormat().setFontBold(NullableBool.True); //Wijzigt de opmaak
}
}
}
}
}
//Slaat de aangepaste presentatie op
pres.save("text-changed.pptx", SaveFormat.Pptx);
} finally {
if (pres != null) pres.dispose();
}
Een tekstvak met een hyperlink toevoegen
Je kunt een koppeling in een tekstvak invoegen. Wanneer het tekstvak wordt aangeklikt, wordt de gebruiker naar de koppeling geleid.
Om een tekstvak met een koppeling toe te voegen, volg je deze stappen:
- Maak een instantie van de
Presentationklasse. - Verkrijg een referentie naar de eerste dia in de nieuw aangemaakte presentatie.
- Voeg een
AutoShapeobject toe metShapeTypeingesteld opRectangleop een opgegeven positie op de dia en verkrijg een referentie naar het nieuw toegevoegde AutoShape object. - Voeg een
TextFrametoe aan hetAutoShapeobject dat Aspose TextBox als standaardtekst bevat. - Instantieer de
IHyperlinkManagerklasse. - Koppel het
IHyperlinkManagerobject aan de HyperlinkClick eigenschap die bij het gewenste gedeelte van hetTextFramehoort. - Schrijf ten slotte het PPTX‑bestand via het
Presentationobject.
Deze Java‑code—een implementatie van de bovenstaande stappen—laat zien hoe je een tekstvak met een hyperlink aan een dia toevoegt:
// Instantieert een Presentation-klasse die een PPTX vertegenwoordigt
Presentation pres = new Presentation();
try {
// Haalt de eerste dia in de presentatie op
ISlide slide = pres.getSlides().get_Item(0);
// Voegt een AutoShape-object toe met type ingesteld op Rectangle
IShape shape = slide.getShapes().addAutoShape(ShapeType.Rectangle, 150, 150, 150, 50);
// Cast de vorm naar AutoShape
IAutoShape pptxAutoShape = (IAutoShape)shape;
// Benadert de ITextFrame-eigenschap die bij de AutoShape hoort
pptxAutoShape.addTextFrame("");
ITextFrame textFrame = pptxAutoShape.getTextFrame();
// Voegt wat tekst toe aan het frame
textFrame.getParagraphs().get_Item(0).getPortions().get_Item(0).setText("Aspose.Slides");
// Stelt de hyperlink in voor de portion-tekst
IHyperlinkManager hyperlinkManager = textFrame.getParagraphs().get_Item(0).getPortions().get_Item(0).
getPortionFormat().getHyperlinkManager();
hyperlinkManager.setExternalHyperlinkClick("http://www.aspose.com");
// Slaat de PPTX-presentatie op
pres.save("hLink_out.pptx", SaveFormat.Pptx);
} finally {
if (pres != null) pres.dispose();
}
FAQ
Wat is het verschil tussen een tekstvak en een tekst‑placeholder bij het werken met masterslides?
Een placeholder erft stijl/positie van de master en kan worden overschreven op layouts, terwijl een regulier tekstvak een onafhankelijk object is op een specifieke dia en niet verandert wanneer je van layout wisselt.
Hoe kan ik een bulk‑tekstvervanging uitvoeren in de hele presentatie zonder tekst in grafieken, tabellen en SmartArt aan te raken?
Beperk je iteratie tot auto‑shapes die tekstframes hebben en sluit ingebedde objecten (charts, tables, SmartArt) uit door hun collecties afzonderlijk te doorlopen of die objecttypen over te slaan.