Hämta styckegränser från presentationer i .NET

Översikt

Den här artikeln förklarar hur man hämtar gränser, storlek och koordinater för stycken och textdelar i Aspose.Slides. Den visar hur man hämtar ett styckes rektangel i ett TextFrame med GetRect(), hur man får stycke- och delkoordinater i ett tabellcells‑TextFrame, och lyfter fram viktiga detaljer såsom mätenheter, effekten av textradbrytning på gränser, pixelförvandling och effektiva formateringsvärden för stycket.

Hämta stycke- och delkoordinater i ett TextFrame

Med Aspose.Slides för .NET kan utvecklare nu hämta de rektangulära koordinaterna för ett Paragraph i Paragraph‑samlingen i ett TextFrame. Det gör det också möjligt att hämta koordinaterna för en Portion i Portion‑samlingen för ett Paragraph. I det här avsnittet kommer vi att demonstrera med ett exempel hur man får de rektangulära koordinaterna för ett Paragraph tillsammans med positionen för Portion i ett Paragraph.

Hämta rektangulära koordinater för ett Paragraph

Den nya metoden GetRect() har lagts till. Den gör det möjligt att hämta ett Paragraph:s bounds‑rektangel.

// Instansiera ett Presentation-objekt som representerar en presentationsfil
using (Presentation presentation = new Presentation("Shapes.pptx"))
{
    IAutoShape shape = (IAutoShape)presentation.Slides[0].Shapes[0];
        var textFrame = (ITextFrame)shape.TextFrame;
        RectangleF rect = ((Paragraph)textFrame.Paragraphs[0]).GetRect();
}

Hämta storleken för ett Paragraph och en Portion i ett tabellcell‑TextFrame

För att få storleken och koordinaterna för en Portion eller ett Paragraph i ett tabellcell‑TextFrame, kan du använda metoderna IPortion.GetRect och IParagraph.GetRect.

Det här exempelprogrammet demonstrerar den beskrivna operationen:

using (Presentation pres = new Presentation("source.pptx"))
{
    Table tbl = pres.Slides[0].Shapes[0] as Table;

    ICell cell = tbl.Rows[1][1];


    double x = tbl.X + tbl.Rows[1][1].OffsetX;
    double y = tbl.Y + tbl.Rows[1][1].OffsetY;

    foreach (IParagraph para in cell.TextFrame.Paragraphs)
    {
        if (para.Text == "")
            continue;

        RectangleF rect = para.GetRect();
        IAutoShape shape =
            pres.Slides[0].Shapes.AddAutoShape(ShapeType.Rectangle,
                rect.X + (float)x, rect.Y + (float)y, rect.Width, rect.Height);

        shape.FillFormat.FillType = FillType.NoFill;
        shape.LineFormat.FillFormat.SolidFillColor.Color = Color.Yellow;
        shape.LineFormat.FillFormat.FillType = FillType.Solid;


        foreach (IPortion portion in para.Portions)
        {
            if (portion.Text.Contains("0"))
            {
                rect = portion.GetRect();
                shape =
                    pres.Slides[0].Shapes.AddAutoShape(ShapeType.Rectangle,
                        rect.X + (float)x, rect.Y + (float)y, rect.Width, rect.Height);

                shape.FillFormat.FillType = FillType.NoFill;
            }
        }
    }
}

Vanliga frågor

I vilka enheter anges koordinaterna för ett Paragraph och textdelar?

I punkter, där 1 tum = 72 punkter. Detta gäller för alla koordinater och dimensioner på bilden.

Påverkar radbrytning ett Paragraph:s gränser?

Ja. Om wrapping är aktiverad i TextFrame, bryts texten för att passa områdets bredd, vilket ändrar det faktiska gränsvärdet för Paragraph.

Kan Paragraph‑koordinater på ett pålitligt sätt omvandlas till pixlar i den exporterade bilden?

Ja. Konvertera punkter till pixlar med: pixels = points × (DPI / 72). Resultatet beror på den DPI som valts för rendering/export.

Hur får jag de “effektiva” formateringsparametrarna för ett Paragraph, med beaktande av stilarv?

Använd effective paragraph formatting data structure; den returnerar de slutgiltiga sammanslagna värdena för indrag, avstånd, radbrytning, RTL och mer.