Ottieni i limiti dei paragrafi dalle presentazioni in C++
Panoramica
Questo articolo spiega come ottenere i limiti, la dimensione e le coordinate dei paragrafi in Aspose.Slides. Mostra come recuperare un rettangolo di un paragrafo da un ITextFrame usando IParagraph::GetRect, come ottenere le coordinate del paragrafo all’interno del frame di testo di una cella di tabella e mette in evidenza dettagli importanti come le unità di misura, l’effetto dell’andare a capo del testo sui limiti, la conversione in pixel e i valori di formattazione del paragrafo effettivi.
Ottenere le coordinate rettangolari di un paragrafo
Usa IParagraph::GetRect per ottenere il rettangolo di delimitazione di un paragrafo.
auto presentation = System::MakeObject<Presentation>(u"Shapes.pptx");
auto slide = presentation->get_Slide(0);
auto shape = System::ExplicitCast<IAutoShape>(slide->get_Shape(0));
auto paragraph = shape->get_TextFrame()->get_Paragraph(0);
auto rectangle = paragraph->GetRect();
presentation->Dispose();
Ottenere la dimensione di un paragrafo all’interno di un TextFrame di cella di tabella
Per ottenere la dimensione e le coordinate di un IParagraph in un TextFrame di cella di tabella, usa IParagraph::GetRect. Il rettangolo restituito è relativo al TextFrame della cella di tabella, quindi aggiungi la posizione della tabella e l’offset della cella quando ti servono coordinate a livello di diapositiva.
L’esempio seguente ottiene i limiti del paragrafo all’interno di una cella di tabella e disegna rettangoli sulla diapositiva per visualizzare tali limiti:
auto presentation = System::MakeObject<Presentation>(u"source.pptx");
auto slide = presentation->get_Slide(0);
auto table = System::ExplicitCast<ITable>(slide->get_Shape(0));
auto cell = table->get_Row(1)->idx_get(1);
auto cellX = table->get_X() + cell->get_OffsetX();
auto cellY = table->get_Y() + cell->get_OffsetY();
auto paragraphs = cell->get_TextFrame()->get_Paragraphs();
for (const auto& paragraph : paragraphs)
{
if (paragraph->get_Text().IsEmpty())
{
continue;
}
auto paragraphRectangle = paragraph->GetRect();
auto paragraphRectangleX = paragraphRectangle.get_X() + cellX;
auto paragraphRectangleY = paragraphRectangle.get_Y() + cellY;
auto paragraphBoundsShape = slide->get_Shapes()->AddAutoShape(
ShapeType::Rectangle,
paragraphRectangleX,
paragraphRectangleY,
paragraphRectangle.get_Width(),
paragraphRectangle.get_Height());
paragraphBoundsShape->get_FillFormat()->set_FillType(FillType::NoFill);
paragraphBoundsShape->get_LineFormat()->get_FillFormat()->get_SolidFillColor()->set_Color(System::Drawing::Color::get_Yellow());
paragraphBoundsShape->get_LineFormat()->get_FillFormat()->set_FillType(FillType::Solid);
}
presentation->Save(u"output.pptx", SaveFormat::Pptx);
presentation->Dispose();
FAQ
In quali unità vengono misurate le coordinate dei paragrafi?
Sono misurate in punti, dove 1 pollice equivale a 72 punti. Questo vale per tutte le coordinate e le dimensioni nella diapositiva.
L’andare a capo del testo influisce sui limiti di un paragrafo?
Sì. Se ITextFrameFormat::set_WrapText è abilitato per il ITextFrame, il testo si interrompe per adattarsi alla larghezza dell’area, modificando i limiti effettivi del paragrafo.
Le coordinate del paragrafo possono essere mappate in modo affidabile ai pixel nell’immagine esportata?
Sì. Converti i punti in pixel usando questa formula: pixel = punti x (DPI / 72). Il risultato dipende dal DPI scelto per il rendering o l’esportazione.
Come ottenere i parametri di formattazione “effettivi” del paragrafo, tenendo conto dell’ereditarietà degli stili?
Usa la effective paragraph formatting data structure; restituisce i valori finali consolidati per rientri, spaziatura, avvolgimento, RTL e altro.