Hantera textrutor i presentationer på Android
Introduktion
Texter på bilder finns vanligtvis i textrutor eller former. Därför måste du, för att lägga till text på en bild, lägga till en textruta och sedan placera lite text i textrutan. Aspose.Slides för Android via Java tillhandahåller gränssnittet IAutoShape som låter dig lägga till en form som innehåller text.
Info
Aspose.Slides tillhandahåller också gränssnittet IShape som låter dig lägga till former på bilder. Dock kan inte alla former som läggs till viaIShape‑gränssnittet innehålla text. Men former som läggs till via IAutoShape‑gränssnittet kan innehålla text.
Obs
Därför, när du arbetar med en form som du vill lägga till text i, kan du vilja kontrollera och bekräfta att den har kastats viaIAutoShape‑gränssnittet. Endast då kan du arbeta med TextFrame, som är en egenskap under IAutoShape. Se avsnittet Update Text på den här sidan.
Skapa en textruta på en bild
För att skapa en textruta på en bild, gå igenom dessa steg:
- Skapa en instans av klassen Presentation.
- Hämta en referens till den första bilden i den nyskapade presentationen.
- Lägg till ett IAutoShape‑objekt med ShapeType satt till
Rectanglepå en specificerad position på bilden och hämta referensen till det nyskapadeIAutoShape‑objektet. - Lägg till en
TextFrame‑egenskap tillIAutoShape‑objektet som kommer att innehålla text. I exemplet nedan lade vi till följande text: Aspose TextBox - Skriv slutligen PPTX‑filen genom
Presentation‑objektet.
Denna Java‑kod – en implementering av stegen ovan – visar hur du lägger till text på en bild:
// Instansierar Presentation
Presentation pres = new Presentation();
try {
// Hämtar den första bilden i presentationen
ISlide sld = pres.getSlides().get_Item(0);
// Lägger till en AutoShape med typ satt till Rectangle
IAutoShape ashp = sld.getShapes().addAutoShape(ShapeType.Rectangle, 150, 75, 150, 50);
// Lägger till TextFrame till rektangeln
ashp.addTextFrame(" ");
// Åtkommer textramen
ITextFrame txtFrame = ashp.getTextFrame();
// Skapar Paragraph-objektet för textramen
IParagraph para = txtFrame.getParagraphs().get_Item(0);
// Skapar ett Portion-objekt för paragrafen
IPortion portion = para.getPortions().get_Item(0);
// Sätter text
portion.setText("Aspose TextBox");
// Sparar presentationen till disk
pres.save("TextBox_out.pptx", SaveFormat.Pptx);
} finally {
if (pres != null) pres.dispose();
}
Kontrollera en textrutaform
Aspose.Slides tillhandahåller metoden isTextBox från IAutoShape‑gränssnittet, vilket låter dig undersöka former och identifiera textrutor.

Denna Java‑kod visar hur du kontrollerar om en form skapades som en textruta:
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();
}
Observera att om du helt enkelt lägger till en autoshape med metoden addAutoShape från IShapeCollection‑gränssnittet, så kommer isTextBox‑metoden för autoshapen att returnera false. Men efter att du har lagt till text i autoshapen med metoden addTextFrame eller setText, så returnerar isTextBox‑egenskapen true.
Presentation presentation = new Presentation();
ISlide slide = presentation.getSlides().get_Item(0);
IAutoShape shape1 = slide.getShapes().addAutoShape(ShapeType.Rectangle, 10, 10, 100, 40);
// shape1.isTextBox() returnerar false
shape1.addTextFrame("shape 1");
// shape1.isTextBox() returnerar true
IAutoShape shape2 = slide.getShapes().addAutoShape(ShapeType.Rectangle, 10, 110, 100, 40);
// shape2.isTextBox() returnerar false
shape2.getTextFrame().setText("shape 2");
// shape2.isTextBox() returnerar true
IAutoShape shape3 = slide.getShapes().addAutoShape(ShapeType.Rectangle, 10, 210, 100, 40);
// shape3.isTextBox() returnerar false
shape3.addTextFrame("");
// shape3.isTextBox() returnerar false
IAutoShape shape4 = slide.getShapes().addAutoShape(ShapeType.Rectangle, 10, 310, 100, 40);
// shape4.isTextBox() returnerar false
shape4.getTextFrame().setText("");
// shape4.isTextBox() returnerar false
Lägg till kolumner i en textruta
Aspose.Slides tillhandahåller egenskaperna ColumnCount och ColumnSpacing (från ITextFrameFormat-gränssnittet och klassen TextFrameFormat) som låter dig lägga till kolumner i textrutor. Du kan ange antalet kolumner i en textruta och ställa in avståndet i punkter mellan kolumnerna.
Denna kod i Java demonstrerar den beskrivna operationen:
Presentation pres = new Presentation();
try {
// Hämtar den första bilden i presentationen
ISlide slide = pres.getSlides().get_Item(0);
// Lägger till en AutoShape med typ satt till Rectangle
IAutoShape aShape = slide.getShapes().addAutoShape(ShapeType.Rectangle, 100, 100, 300, 300);
// Lägger till TextFrame till rektangeln
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!");
// Hämtar textformatet för TextFrame
ITextFrameFormat format = aShape.getTextFrame().getTextFrameFormat();
// Anger antalet kolumner i TextFrame
format.setColumnCount(3);
// Anger avståndet mellan kolumnerna
format.setColumnSpacing(10);
// Sparar presentationen
pres.save("ColumnCount.pptx", SaveFormat.Pptx);
} finally {
if (pres != null) pres.dispose();
}
Lägg till kolumner i ett textfält
Aspose.Slides för Android via Java tillhandahåller egenskapen ColumnCount (från ITextFrameFormat-gränssnittet) som låter dig lägga till kolumner i textfält. Med denna egenskap kan du ange önskat antal kolumner i ett textfält.
Denna Java‑kod visar hur du lägger till en kolumn i ett textfält:
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();
}
Uppdatera text
Aspose.Slides låter dig ändra eller uppdatera texten som finns i en textruta eller alla texter i en presentation.
Denna Java‑kod demonstrerar en operation där all text i en presentation uppdateras eller ändras:
Presentation pres = new Presentation("text.pptx");
try {
for (ISlide slide : pres.getSlides())
{
for (IShape shape : slide.getShapes())
{
if (shape instanceof IAutoShape) //Kontrollerar om formen stödjer textram (IAutoShape).
{
IAutoShape autoShape = (IAutoShape)shape;
for (IParagraph paragraph : autoShape.getTextFrame().getParagraphs()) //Itererar genom paragrafer i textramen
{
for (IPortion portion : paragraph.getPortions()) //Itererar genom varje del i paragrafen
{
portion.setText(portion.getText().replace("years", "months")); //Ändrar text
portion.getPortionFormat().setFontBold(NullableBool.True); //Ändrar formatering
}
}
}
}
}
//Sparar modifierad presentation
pres.save("text-changed.pptx", SaveFormat.Pptx);
} finally {
if (pres != null) pres.dispose();
}
Lägg till en textruta med hyperlänk
Du kan infoga en länk i en textruta. När textrutan klickas på, dirigeras användarna till att öppna länken.
För att lägga till en textruta som innehåller en länk, gå igenom dessa steg:
- Skapa en instans av klassen
Presentation. - Hämta en referens till den första bilden i den nyskapade presentationen.
- Lägg till ett
AutoShape‑objekt medShapeTypesatt tillRectanglepå en specificerad position på bilden och hämta en referens till det nyskapade AutoShape‑objektet. - Lägg till ett
TextFrametillAutoShape‑objektet som innehåller Aspose TextBox som standardtext. - Skapa en instans av klassen
IHyperlinkManager. - Tilldela
IHyperlinkManager‑objektet till egenskapen HyperlinkClick som är kopplad till den önskade delen avTextFrame. - Skriv slutligen PPTX‑filen genom
Presentation‑objektet.
Denna Java‑kod – en implementering av stegen ovan – visar hur du lägger till en textruta med en hyperlänk på en bild:
// Instansierar en Presentation-klass som representerar en PPTX
Presentation pres = new Presentation();
try {
// Hämtar den första bilden i presentationen
ISlide slide = pres.getSlides().get_Item(0);
// Lägger till ett AutoShape-objekt med typ satt till Rectangle
IShape shape = slide.getShapes().addAutoShape(ShapeType.Rectangle, 150, 150, 150, 50);
// Kastar formen till AutoShape
IAutoShape pptxAutoShape = (IAutoShape)shape;
// Åtkommer ITextFrame‑egenskapen som är associerad med AutoShape
pptxAutoShape.addTextFrame("");
ITextFrame textFrame = pptxAutoShape.getTextFrame();
// Lägger till lite text i ramen
textFrame.getParagraphs().get_Item(0).getPortions().get_Item(0).setText("Aspose.Slides");
// Ställer in hyperlänken för textdelen
IHyperlinkManager hyperlinkManager = textFrame.getParagraphs().get_Item(0).getPortions().get_Item(0).
getPortionFormat().getHyperlinkManager();
hyperlinkManager.setExternalHyperlinkClick("http://www.aspose.com");
// Sparar PPTX-presentationen
pres.save("hLink_out.pptx", SaveFormat.Pptx);
} finally {
if (pres != null) pres.dispose();
}
FAQ
Vad är skillnaden mellan en textruta och en platshållare för text när du arbetar med masterslides?
En platshållare ärver stil/position från mastern och kan åsidosättas på layouter, medan en vanlig textruta är ett självständigt objekt på en specifik bild och ändras inte när du byter layout.
Hur kan jag göra en massutbyte av text i hela presentationen utan att påverka text i diagram, tabeller och SmartArt?
Begränsa din iteration till autosformer som har textramar och exkludera inbäddade objekt (diagram, tabeller, SmartArt) genom att traversera deras samlingar separat eller hoppa över dessa objekttyper.