Alinea-grenzen ophalen uit presentaties in C++

Overzicht

Dit artikel legt uit hoe u de grenzen, grootte en coördinaten van alinea’s en tekstgedeelten in Aspose.Slides kunt verkrijgen. Het toont hoe u het rechthoekige gebied van een alinea in een TextFrame kunt ophalen met GetRect(), hoe u de coördinaten van alinea‑ en gedeelte‑elementen binnen een tabelcel‑tekstframe kunt krijgen, en belicht belangrijke details zoals meeteenheden, de invloed van tekstomslag op de grenzen, pixelconversie en effectieve alinea‑opmaakwaarden.

Coördinaten van alinea en gedeelte ophalen in een TextFrame

Met Aspose.Slides for C++ kunnen ontwikkelaars nu de rechthoekige coördinaten van een alinea binnen de alinea‑collectie van een TextFrame verkrijgen. Het maakt ook mogelijk om de coördinaten van een gedeelte binnen de gedeelte‑collectie van een alinea op te halen. In dit onderwerp demonstreren we met een voorbeeld hoe u de rechthoekige coördinaten van een alinea samen met de positie van een gedeelte binnen die alinea kunt verkrijgen.

Rechthoekige coördinaten van een alinea ophalen

De nieuwe methode GetRect() is toegevoegd. Hiermee kunt u het rechthoekige gebied van een alinea ophalen.

// Instantieer een Presentation-object dat een presentatie-bestand vertegenwoordigt
auto presentation = System::MakeObject<Presentation>(u"Shapes.pptx");
auto shape = System::ExplicitCast<IAutoShape>(presentation->get_Slides()->idx_get(0)->get_Shapes()->idx_get(0));
auto textFrame = shape->get_TextFrame();
auto rect = textFrame->get_Paragraphs()->idx_get(0)->GetRect();

De grootte van een alinea en gedeelte binnen een tabelcel‑TextFrame ophalen

Om de grootte en coördinaten van een Gedeelte of Alinea in een tabelcel‑tekstframe te verkrijgen, kunt u de methoden IPortion::GetRect en IParagraph::GetRect gebruiken.

Deze voorbeeldcode demonstreert de beschreven bewerking:

auto pres = System::MakeObject<Presentation>(u"source.pptx");
auto tbl = System::AsCast<Table>(pres->get_Slides()->idx_get(0)->get_Shapes()->idx_get(0));

auto cell = tbl->get_Rows()->idx_get(1)->idx_get(1);

double x = tbl->get_X() + tbl->get_Rows()->idx_get(1)->idx_get(1)->get_OffsetX();
double y = tbl->get_Y() + tbl->get_Rows()->idx_get(1)->idx_get(1)->get_OffsetY();

for (const auto& para : cell->get_TextFrame()->get_Paragraphs())
{
    if (para->get_Text() == u"")
    {
        continue;
    }

    auto rect = para->GetRect();
    auto shape = pres->get_Slides()->idx_get(0)->get_Shapes()->AddAutoShape(ShapeType::Rectangle, rect.get_X() + x, rect.get_Y() + y, rect.get_Width(), rect.get_Height());

    shape->get_FillFormat()->set_FillType(FillType::NoFill);
    shape->get_LineFormat()->get_FillFormat()->get_SolidFillColor()->set_Color(Color::get_Yellow());
    shape->get_LineFormat()->get_FillFormat()->set_FillType(FillType::Solid);

    for (const auto& portion : para->get_Portions())
    {
        if (portion->get_Text().Contains(u"0"))
        {
            rect = portion->GetRect();
            shape = pres->get_Slides()->idx_get(0)->get_Shapes()->AddAutoShape(ShapeType::Rectangle, rect.get_X() + x, rect.get_Y() + y, rect.get_Width(), rect.get_Height());

            shape->get_FillFormat()->set_FillType(FillType::NoFill);
        }
    }
}

FAQ

In welke eenheden worden de coördinaten voor een alinea en tekstgedeelten geretourneerd?

In punten, waarbij 1 inch = 72 punten. Dit geldt voor alle coördinaten en afmetingen op de dia.

Heeft woordomslag invloed op de grenzen van een alinea?

Ja. Als wrapping is ingeschakeld in de TextFrame, breekt de tekst om binnen de breedte van het gebied, waardoor de werkelijke grenzen van de alinea veranderen.

Kunnen alinea‑coördinaten betrouwbaar worden omgezet naar pixels in de geëxporteerde afbeelding?

Ja. Converteer punten naar pixels met: pixels = punten × (DPI / 72). Het resultaat hangt af van de DPI‑waarde die voor het renderen/exporteren is gekozen.

Hoe krijg ik de “effectieve” alinea‑opmaakparameters, rekening houdend met erfelijke stijlen?

Gebruik de effectieve alinea‑opmaak‑databasestructuur; deze geeft de uiteindelijke geconsolideerde waarden voor inspringingen, spatiëring, omslag, RTL en meer.