Hantera textrutor i presentationer i .NET
Introduktion
Texter på bilder finns vanligtvis i textrutor eller former. Därför måste du först lägga till en textruta för att kunna lägga till text på en bild och sedan placera text i textrutan.
För att låta dig lägga till en form som kan innehålla text tillhandahåller Aspose.Slides för .NET gränssnittet IAutoShape.
Note
Aspose.Slides tillhandahåller också gränssnittet IShape för att låta dig lägga till former på bilder. Dock kan inte alla former som läggs till via IShape-gränssnittet innehålla text. Former som läggs till via gränssnittet IAutoShape innehåller vanligtvis text.
Därför, när du hanterar en befintlig form som du vill lägga till text i, kan du vilja kontrollera och bekräfta att den kastades via IAutoShape-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
- Skapa en instans av klassen Presentation.
- Hämta referensen till den första bilden via dess index.
- Lägg till ett IAutoShape-objekt med ShapeType satt till
Rectanglepå en angiven position på bilden och erhåll referensen till det nyss tillagdaIAutoShape-objektet. - Lägg till egenskapen
TextFrametillIAutoShape-objektet som kommer att innehålla text. I exempel nedan lade vi till följande text: Aspose TextBox - Skriv slutligen PPTX-filen via
Presentation-objektet.
Den här C#-koden - en implementation av stegen ovan - visar hur du lägger till text på en bild:
// Instansierar PresentationEx
using (Presentation pres = new Presentation())
{
// Hämtar den första bilden i presentationen
ISlide sld = pres.Slides[0];
// Lägger till en AutoShape med typ satt till Rectangle
IAutoShape ashp = sld.Shapes.AddAutoShape(ShapeType.Rectangle, 150, 75, 150, 50);
// Lägger till TextFrame till rektangeln
ashp.AddTextFrame(" ");
// Åtkommer textramen
ITextFrame txtFrame = ashp.TextFrame;
// Skapar Paragraph-objektet för textramen
IParagraph para = txtFrame.Paragraphs[0];
// Skapar ett Portion-objekt för paragrafen
IPortion portion = para.Portions[0];
// Sätter texten
portion.Text = "Aspose TextBox";
// Sparar presentationen till disk
pres.Save("TextBox_out.pptx", Aspose.Slides.Export.SaveFormat.Pptx);
}
Kontrollera om en form är en textruta
Aspose.Slides tillhandahåller egenskapen IsTextBox från gränssnittet IAutoShape som låter dig undersöka former och identifiera textrutor.

Den här C#-koden visar hur du kontrollerar om en form skapades som en textruta:
using (Presentation presentation = new Presentation("sample.pptx"))
{
Aspose.Slides.LowCode.ForEach.Shape(presentation, (shape, slide, index) =>
{
if (shape is IAutoShape autoShape)
{
Console.WriteLine(autoShape.IsTextBox ? "shape is a text box" : "shape is not a text box");
}
});
}
Observera att om du bara lägger till en autoshape med metoden AddAutoShape från gränssnittet IShapeCollection, kommer IsTextBox-egenskapen för autoshapen att returnera false. Men efter att du har lagt till text till autoshapen med metoden AddTextFrame eller egenskapen Text returnerar IsTextBox-egenskapen true.
using (Presentation presentation = new Presentation())
{
ISlide slide = presentation.Slides[0];
IAutoShape shape1 = slide.Shapes.AddAutoShape(ShapeType.Rectangle, 10, 10, 100, 40);
// shape1.IsTextBox är falskt
shape1.AddTextFrame("shape 1");
// shape1.IsTextBox är sant
IAutoShape shape2 = slide.Shapes.AddAutoShape(ShapeType.Rectangle, 10, 110, 100, 40);
// shape2.IsTextBox är falskt
shape2.TextFrame.Text = "shape 2";
// shape2.IsTextBox är sant
IAutoShape shape3 = slide.Shapes.AddAutoShape(ShapeType.Rectangle, 10, 210, 100, 40);
// shape3.IsTextBox är falskt
shape3.AddTextFrame("");
// shape3.IsTextBox är falskt
IAutoShape shape4 = slide.Shapes.AddAutoShape(ShapeType.Rectangle, 10, 310, 100, 40);
// shape4.IsTextBox är falskt
shape4.TextFrame.Text = "";
// shape4.IsTextBox är falskt
}
Lägg till kolumner i en textruta
Aspose.Slides tillhandahåller egenskaperna ColumnCount och ColumnSpacing (från gränssnittet ITextFrameFormat och klassen TextFrameFormat) för att låta dig lägga till kolumner i textrutor. Du kan ange antalet kolumner i en textruta och sedan specificera avståndet i punkter mellan kolumnerna.
Den här C#‑koden demonstrerar den beskrivna operationen:
using (Presentation presentation = new Presentation())
{
// Hämtar den första bilden i presentationen
ISlide slide = presentation.Slides[0];
// Lägger till en AutoShape med typ satt till Rectangle
IAutoShape aShape = slide.Shapes.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.TextFrame.TextFrameFormat;
// Anger antalet kolumner i TextFrame
format.ColumnCount = 3;
// Anger avståndet mellan kolumnerna
format.ColumnSpacing = 10;
// Sparar presentationen
presentation.Save("ColumnCount.pptx", SaveFormat.Pptx);
}
Lägg till kolumner i en textram
Aspose.Slides för .NET tillhandahåller egenskapen ColumnCount (från gränssnittet ITextFrameFormat) som låter dig lägga till kolumner i textramar. Med denna egenskap kan du ange önskat antal kolumner i en textram.
Den här C#‑koden visar hur du lägger till en kolumn i en textram:
string outPptxFileName = "ColumnsTest.pptx";
using (Presentation pres = new Presentation())
{
IAutoShape shape1 = pres.Slides[0].Shapes.AddAutoShape(ShapeType.Rectangle, 100, 100, 300, 300);
TextFrameFormat format = (TextFrameFormat)shape1.TextFrame.TextFrameFormat;
format.ColumnCount = 2;
shape1.TextFrame.Text = "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);
using (Presentation test = new Presentation(outPptxFileName))
{
Debug.Assert(2 == ((AutoShape)test.Slides[0].Shapes[0]).TextFrame.TextFrameFormat.ColumnCount);
Debug.Assert(double.NaN == ((AutoShape)test.Slides[0].Shapes[0]).TextFrame.TextFrameFormat.ColumnSpacing);
}
format.ColumnSpacing = 20;
pres.Save(outPptxFileName, SaveFormat.Pptx);
using (Presentation test = new Presentation(outPptxFileName))
{
Debug.Assert(2 == ((AutoShape)test.Slides[0].Shapes[0]).TextFrame.TextFrameFormat.ColumnCount);
Debug.Assert(20 == ((AutoShape)test.Slides[0].Shapes[0]).TextFrame.TextFrameFormat.ColumnSpacing);
}
format.ColumnCount = 3;
format.ColumnSpacing = 15;
pres.Save(outPptxFileName, SaveFormat.Pptx);
using (Presentation test = new Presentation(outPptxFileName))
{
Debug.Assert(3 == ((AutoShape)test.Slides[0].Shapes[0]).TextFrame.TextFrameFormat.ColumnCount);
Debug.Assert(15 == ((AutoShape)test.Slides[0].Shapes[0]).TextFrame.TextFrameFormat.ColumnSpacing);
}
}
Uppdatera text
Aspose.Slides låter dig ändra eller uppdatera texten som finns i en textruta eller all text i en presentation.
Den här C#‑koden demonstrerar en operation där all text i en presentation uppdateras eller ändras:
using(Presentation pres = new Presentation("text.pptx"))
{
foreach (ISlide slide in pres.Slides)
{
foreach (IShape shape in slide.Shapes)
{
if (shape is IAutoShape autoShape) //Kontrollerar om formen stöder textram (IAutoShape).
{
foreach (IParagraph paragraph in autoShape.TextFrame.Paragraphs) //Itererar genom stycken i textram
{
foreach (IPortion portion in paragraph.Portions) //Itererar genom varje del i stycket
{
portion.Text = portion.Text.Replace("years", "months"); //Ändrar text
portion.PortionFormat.FontBold = NullableBool.True; //Ändrar formatering
}
}
}
}
}
//Sparar den ändrade presentationen
pres.Save("text-changed.pptx", SaveFormat.Pptx);
}
Lägg till en textruta med en hyperlänk
Du kan infoga en länk i en textruta. När textrutan klickas på, öppnas länken för användaren.
- Skapa en instans av klassen
Presentation. - Hämta referensen till den första bilden via dess index.
- Lägg till ett
AutoShape‑objekt medShapeTypesatt tillRectanglepå en angiven position på bilden och erhåll en referens till det nyss tillagda AutoShape‑objektet. - Lägg till ett
TextFrametillAutoShape‑objektet som innehåller Aspose TextBox som standardtext. - Instansiera klassen
IHyperlinkManager. - Tilldela
IHyperlinkManager‑objektet till egenskapen HyperlinkClick som är associerad med den önskade delen avTextFrame. - Skriv slutligen PPTX-filen via
Presentation‑objektet.
Den här C#‑koden - en implementation 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 pptxPresentation = new Presentation();
// Hämtar den första bilden i presentationen
ISlide slide = pptxPresentation.Slides[0];
// Lägger till ett AutoShape-objekt med typ satt till Rectangle
IShape pptxShape = slide.Shapes.AddAutoShape(ShapeType.Rectangle, 150, 150, 150, 50);
// Kastar formen till AutoShape
IAutoShape pptxAutoShape = (IAutoShape)pptxShape;
// Åtkommer ITextFrame-egenskapen som är associerad med AutoShape
pptxAutoShape.AddTextFrame("");
ITextFrame ITextFrame = pptxAutoShape.TextFrame;
// Lägger till lite text i ramen
ITextFrame.Paragraphs[0].Portions[0].Text = "Aspose.Slides";
// Ställer in hyperlänken för deltexten
IHyperlinkManager HypMan = ITextFrame.Paragraphs[0].Portions[0].PortionFormat.HyperlinkManager;
HypMan.SetExternalHyperlinkClick("http://www.aspose.com");
// Sparar PPTX-presentationen
pptxPresentation.Save("hLinkPPTX_out.pptx", Aspose.Slides.Export.SaveFormat.Pptx);
FAQ
Vad är skillnaden mellan en textruta och en textplatshållare när du arbetar med masterbilder?
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 förändras inte när du byter layout.
Hur kan jag göra en massutbyte av text i hela presentationen utan att ändra text i diagram, tabeller och SmartArt?
Begränsa din iteration till auto‑former som har textramar och exkludera inbäddade objekt (charts, tables, SmartArt) genom att traversera deras samlingar separat eller hoppa över dessa objekttyper.