Pobierz granice akapitu z prezentacji w C++
Przegląd
Ten artykuł wyjaśnia, jak uzyskać granice, rozmiar i współrzędne akapitów w Aspose.Slides. Pokazuje, jak pobrać prostokąt akapitu z ITextFrame przy użyciu IParagraph::GetRect, jak uzyskać współrzędne akapitu wewnątrz ramki tekstowej komórki tabeli oraz podkreśla ważne szczegóły, takie jak jednostki miary, wpływ zawijania tekstu na granice, konwersję pikseli oraz wartości efektywnego formatowania akapitu.
Uzyskaj prostokątne współrzędne akapitu
Użyj IParagraph::GetRect aby uzyskać prostokąt ograniczający akapit.
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();
Uzyskaj rozmiar akapitu wewnątrz ramki tekstowej komórki tabeli
Aby uzyskać rozmiar i współrzędne IParagraph w ramce tekstowej komórki tabeli, użyj IParagraph::GetRect. Zwrócony prostokąt jest względem ramki tekstowej komórki tabeli, więc dodaj pozycję tabeli i offset komórki, gdy potrzebujesz współrzędnych na poziomie slajdu.
Poniższy przykład pobiera granice akapitu wewnątrz komórki tabeli i rysuje prostokąty na slajdzie, aby zwizualizować te granice:
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
W jakich jednostkach mierzone są współrzędne akapitu?
Są mierzone w punktach, gdzie 1 cal to 72 punkty. Dotyczy to wszystkich współrzędnych i wymiarów na slajdzie.
Czy zawijanie tekstu wpływa na granice akapitu?
Tak. Jeśli ITextFrameFormat::set_WrapText jest włączone dla ITextFrame, tekst jest łamany, aby dopasować się do szerokości obszaru, co zmienia rzeczywiste granice akapitu.
Czy współrzędne akapitu można wiarygodnie przemapować na piksele w wyeksportowanym obrazie?
Tak. Konwertuj punkty na piksele za pomocą następującego wzoru: piksele = punkty × (DPI / 72). Wynik zależy od wybranego DPI podczas renderowania lub eksportu.
Jak uzyskać „efektywne” parametry formatowania akapitu, uwzględniając dziedziczenie stylu?
Użyj effective paragraph formatting data structure; zwraca ona ostateczne, skonsolidowane wartości wcięć, odstępów, zawijania, RTL i innych.