Hantera textrutor i presentationer med Java
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 först lägga till en textruta och sedan placera lite text i textrutan. Aspose.Slides for Java tillhandahåller gränssnittet IAutoShape som låter dig lägga till en form som innehåller text.
Info
Aspose.Slides erbjuder även gränssnittet IShape som låter dig lägga till former på bilder. Alla former som läggs till viaIShape‑gränssnittet kan dock inte innehålla text. Former som läggs till via IAutoShape kan innehålla text.
Note
Därför, när du arbetar med en form som du vill lägga till text i, bör du 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 följande steg:
- Skapa en instans av klassen Presentation.
- Hämta en referens till den första bilden i den nyss skapade presentationen.
- Lägg till ett IAutoShape‑objekt med ShapeType satt till
Rectanglepå en specificerad position på bilden och hämta referensen till det nyss tillagdaIAutoShape‑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 - Slutligen skriv PPTX‑filen via
Presentation‑objektet.
Den här Java‑koden—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 ett TextFrame i 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 om en form är en textruta
Aspose.Slides tillhandahåller metoden isTextBox från gränssnittet IAutoShape som 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 addAutoShape‑metoden från gränssnittet IShapeCollection så returnerar isTextBox‑metoden false. Efter att du har lagt till text i autoshapen med addTextFrame‑metoden eller setText‑metoden returneras 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 erbjuder egenskaperna ColumnCount och ColumnSpacing (från gränssnittet ITextFrameFormat och klassen TextFrameFormat) som låter dig lägga till kolumner i textrutor. Du kan ange antalet kolumner i en textruta och ange avståndet i punkter mellan kolumnerna.
Denna Java‑kod 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ägg till en AutoShape med typ satt till Rectangle
IAutoShape aShape = slide.getShapes().addAutoShape(ShapeType.Rectangle, 100, 100, 300, 300);
// Lägg till TextFrame i 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 en textram
Aspose.Slides for Java tillhandahåller egenskapen ColumnCount (från gränssnittet ITextFrameFormat) som låter dig lägga till kolumner i textramar. Med denna egenskap kan du specificera önskat antal kolumner i en textram.
Denna Java‑kod visar hur du lägger till en kolumn i en textram:
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 i en textruta eller all text 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 stycken i textramen
{
for (IPortion portion : paragraph.getPortions()) //Itererar genom varje del i stycket
{
portion.setText(portion.getText().replace("years", "months")); //Ändrar text
portion.getPortionFormat().setFontBold(NullableBool.True); //Ändrar formatering
}
}
}
}
}
//Sparar ändrad 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å öppnas länken för användaren.
För att lägga till en textruta som innehåller en länk, gå igenom följande steg:
- Skapa en instans av klassen
Presentation. - Hämta en referens till den första bilden i den nyss skapade presentationen.
- Lägg till ett
AutoShape‑objekt medShapeTypesatt tillRectanglepå en specificerad position på bilden och hämta referensen till det nyss tillagda AutoShape‑objektet. - Lägg till en
TextFrametillAutoShape‑objektet som innehåller Aspose TextBox som standardtext. - Instansiera klassen
IHyperlinkManager. - Tilldela
IHyperlinkManager‑objektet till egenskapen HyperlinkClick som är kopplad till den del avTextFramedu vill länka. - Slutligen skriv PPTX‑filen via
Presentation‑objektet.
Denna Java‑kod—en implementering av stegen ovan—visar hur du lägger till en textruta med 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 typen 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 kopplad till 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 portionstexten
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 textplatshållare när du arbetar med huvudsidor?
En placeholder ärver stil/position från master och kan åsidosättas på layouts, 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 utföra en massutbyte av text i hela presentationen utan att påverka text i diagram, tabeller och SmartArt?
Begränsa iterationen till autoshapes som har textramar och exkludera inbäddade objekt (charts, tables, SmartArt) genom att traversera deras samlingar separat eller hoppa över dessa objekttyper.