Beheer tekstvakken in presentaties op Android
Inleiding
Teksten op dia’s staan doorgaans in tekstvakken of vormen. Daarom moet je, om tekst aan een dia toe te voegen, een tekstvak toevoegen en vervolgens tekst in dat tekstvak plaatsen. Aspose.Slides for Android via Java biedt de IAutoShape interface die je in staat stelt een vorm toe te voegen die tekst bevat.
Info
Aspose.Slides biedt ook de IShape interface die je in staat stelt vormen aan dia’s toe te voegen. Niet alle vormen die via deIShape interface worden toegevoegd, kunnen tekst bevatten. Echter, vormen die via de IAutoShape interface worden toegevoegd, kunnen wel tekst bevatten.
Opmerking
Daarom, wanneer je met een vorm werkt waaraan je tekst wilt toevoegen, wil je controleren en bevestigen dat deze is gecast naar deIAutoShape interface. Alleen dan kun je werken met TextFrame, een eigenschap onder IAutoShape. Zie de sectie Update Text op deze pagina.
Maak een tekstvak op een dia
Om een tekstvak op een dia te maken, doorloop 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 ShapeType ingesteld op
Rectangleop een opgegeven positie op de dia en verkrijg de referentie voor het nieuw toegevoegdeIAutoShapeobject. - Voeg een
TextFrameeigenschap toe aan hetIAutoShapeobject die tekst zal bevatten. In het onderstaande voorbeeld hebben we deze tekst toegevoegd: Aspose TextBox - Schrijf tenslotte het PPTX‑bestand weg via het
Presentationobject.
Deze Java‑code – een implementatie van de bovenstaande stappen – toont hoe je tekst aan een dia kunt toevoegen:
// 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 TextFrame toe aan de Rectangle
ashp.addTextFrame(" ");
// Benadert het TextFrame
ITextFrame txtFrame = ashp.getTextFrame();
// Maakt het Paragraph-object voor het TextFrame
IParagraph para = txtFrame.getParagraphs().get_Item(0);
// Maakt een Portion-object voor het Paragraph
IPortion portion = para.getPortions().get_Item(0);
// Stelt tekst in
portion.setText("Aspose TextBox");
// Slaat de presentatie op op de schijf
pres.save("TextBox_out.pptx", SaveFormat.Pptx);
} finally {
if (pres != null) pres.dispose();
}
Controleer op een tekstvakvorm
Aspose.Slides levert de isTextBox methode van de IAutoShape interface, waarmee je vormen kunt onderzoeken en tekstvakken kunt identificeren.

Deze Java‑code laat zien hoe je kunt controleren 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();
}
Let op dat als je eenvoudig een autoshape toevoegt met de addAutoShape methode van de IShapeCollection interface, de isTextBox methode van de autoshape false zal teruggeven. Nadat je echter tekst aan de autoshape toevoegt 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() retourneert false
shape1.addTextFrame("shape 1");
// shape1.isTextBox() retourneert true
IAutoShape shape2 = slide.getShapes().addAutoShape(ShapeType.Rectangle, 10, 110, 100, 40);
// shape2.isTextBox() retourneert false
shape2.getTextFrame().setText("shape 2");
// shape2.isTextBox() retourneert true
IAutoShape shape3 = slide.getShapes().addAutoShape(ShapeType.Rectangle, 10, 210, 100, 40);
// shape3.isTextBox() retourneert false
shape3.addTextFrame("");
// shape3.isTextBox() retourneert false
IAutoShape shape4 = slide.getShapes().addAutoShape(ShapeType.Rectangle, 10, 310, 100, 40);
// shape4.isTextBox() retourneert false
shape4.getTextFrame().setText("");
// shape4.isTextBox() retourneert false
Kolommen toevoegen aan een tekstvak
Aspose.Slides biedt de eigenschappen ColumnCount en ColumnSpacing (van de ITextFrameFormat interface en de TextFrameFormat klasse) die je in staat stellen kolommen toe te voegen aan tekstvakken. Je kunt het aantal kolommen in een tekstvak specificeren en de afstand in punten tussen de kolommen instellen.
Deze Java‑code demonstreert de beschreven bewerking:
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 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 TextFrame op
ITextFrameFormat format = aShape.getTextFrame().getTextFrameFormat();
// Specificeert het aantal kolommen in TextFrame
format.setColumnCount(3);
// Specificeert de afstand 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 Android via Java biedt de eigenschap ColumnCount (van de ITextFrameFormat interface) die je in staat stelt kolommen toe te voegen in tekstframes. Met deze eigenschap kun je het gewenste aantal kolommen in een tekstframe opgeven.
Deze Java‑code laat zien hoe je een kolom toevoegt binnen een tekstframe:
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 elk deel in de alinea
{
portion.setText(portion.getText().replace("years", "months")); //Wijzigt de tekst
portion.getPortionFormat().setFontBold(NullableBool.True); //Wijzigt opmaak
}
}
}
}
}
//Slaat de gewijzigde presentatie op
pres.save("text-changed.pptx", SaveFormat.Pptx);
} finally {
if (pres != null) pres.dispose();
}
Tekstvak met hyperlink toevoegen
Je kunt een koppeling in een tekstvak invoegen. Wanneer op het tekstvak wordt geklikt, wordt de gebruiker naar de link geleid.
Om een tekstvak met een koppeling toe te voegen, doorloop je de volgende 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. - Wijs het
IHyperlinkManagerobject toe aan de HyperlinkClick eigenschap die gekoppeld is aan het gewenste gedeelte van hetTextFrame. - Schrijf tenslotte het PPTX‑bestand weg via het
Presentationobject.
Deze Java‑code – een implementatie van de bovenstaande stappen – toont hoe je een tekstvak met een hyperlink aan een dia kunt toevoegen:
// 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();
// Voeg 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 zelfstandig object op een specifieke dia is en niet verandert wanneer je van layout wisselt.
Hoe kan ik een bulk‑tekstvervanging uitvoeren over de hele presentatie zonder tekst in grafieken, tabellen en SmartArt aan te passen?
Beperk je iteratie tot auto‑shapes die tekstframes hebben en sluit ingesloten objecten (charts, tables, SmartArt) uit door hun collecties afzonderlijk te doorlopen of die objecttypen over te slaan.