Bekezdés határainak lekérése prezentációkból .NET-ben

Áttekintés

Ez a cikk elmagyarázza, hogyan lehet megkapni a bekezdések és szövegrészek határait, méretét és koordinátáit az Aspose.Slides‑ben. Bemutatja, hogyan lehet lekérni egy bekezdés téglalapját egy TextFrame‑ben a GetRect() használatával, hogyan lehet a bekezdés és a rész koordinátáit egy táblázatcella szövegkeretben megkapni, és kiemeli a fontos részleteket, például a mérési egységeket, a szöveg tördelésének hatását a határokra, a pixelkonverziót és a hatékony bekezdésformázási értékeket.

Bekezdés‑ és szövegrész‑koordináták lekérése egy TextFrame‑ben

Az Aspose.Slides for .NET segítségével a fejlesztők most már lekérhetik a téglalap koordinátákat egy TextFrame bekezdésgyűjteményén belül. Emellett lehetőség van a bekezdésen belüli rész koordinátáinak lekérésére a részgyűjteményben. Ebben a témában egy példán keresztül bemutatjuk, hogyan lehet a bekezdés téglalap koordinátáit és a rész pozícióját a bekezdésen belül megszerezni.

Bekezdés téglalap koordinátáinak lekérése

Az új GetRect() metódus lett hozzáadva. Lehetővé teszi a bekezdés határtéglalapjának lekérését.

// Hozzon létre egy Presentation objektumot, amely egy prezentációs fájlt képvisel
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();
}

Bekezdés és szövegrész méretének lekérése egy táblázatcella TextFrame‑ben

A Rész vagy a Bekezdés méretének és koordinátáinak lekéréséhez egy táblázatcella szövegkeretben használhatja az IPortion.GetRect és az IParagraph.GetRect metódusokat.

Ez a példa kód demonstrálja a leírt műveletet:

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;
            }
        }
    }
}

GYIK

Milyen egységben vannak megadva a bekezdés és a szövegrészek koordinátái?

Pontban, ahol 1 hüvelyk = 72 pont. Ez minden koordinátára és méretre vonatkozik a dián.

A szövegtördelés befolyásolja a bekezdés határait?

Igen. Ha a tördelés engedélyezve van a TextFrame-ben, a szöveg a terület szélességéhez igazítva törik, ami megváltoztatja a bekezdés tényleges határait.

A bekezdés koordinátái megbízhatóan leképezhetők pixelekre az exportált képen?

Igen. A pontokat pixelekre a következő képlettel lehet átalakítani: pixelek = pontok × (DPI / 72). Az eredmény a renderelés/export során választott DPI‑tól függ.

Hogyan kaphatom meg a „hatékony” bekezdésformázási paramétereket, figyelembe véve a stílusöröklődést?

Használja a hatékony bekezdésformázási adatstruktúrát; ez visszaadja a behúzások, távolságok, tördelés, RTL és egyéb beállítások végső konszolidált értékeit.