Získání ohraničení odstavce z prezentací v PHP

Přehled

Tento článek vysvětluje, jak získat ohraničení, velikost a souřadnice odstavců v Aspose.Slides. Ukazuje, jak pomocí Paragraph::getRect získat obdélník odstavce z TextFrame, jak získat souřadnice odstavce uvnitř textového rámce buňky tabulky a zdůrazňuje důležité podrobnosti, jako jsou jednotky měření, vliv zalamování textu na ohraničení, převod na pixely a hodnoty efektivního formátování odstavce.

Získání obdélníkových souřadnic odstavce

Použijte Paragraph::getRect k získání ohraničujícího obdélníku odstavce.

$presentation = new Presentation("Shapes.pptx");
try {
    $slide = $presentation->getSlides()->get_Item(0);
    $shape = $slide->getShapes()->get_Item(0);
    $paragraph = $shape->getTextFrame()->getParagraphs()->get_Item(0);
    $rectangle = $paragraph->getRect();
} finally {
    $presentation->dispose();
}

Získání velikosti odstavce uvnitř textového rámce buňky tabulky

Chcete-li získat velikost a souřadnice Paragraph v textovém rámci buňky tabulky, použijte Paragraph::getRect. Vrácený obdélník je relativní k textovému rámci buňky tabulky, takže přidejte pozici tabulky a offset buňky, pokud potřebujete souřadnice na úrovni snímku.

Následující příklad získá ohraničení odstavce uvnitř buňky tabulky a vykreslí obdélníky na snímku pro vizualizaci těchto ohraničení:

$presentation = new Presentation("source.pptx");
try {
    $slide = $presentation->getSlides()->get_Item(0);
    $table = $slide->getShapes()->get_Item(0);
    $cell = $table->getRows()->get_Item(1)->get_Item(1);

    $cellX = java_values($table->getX()) + java_values($cell->getOffsetX());
    $cellY = java_values($table->getY()) + java_values($cell->getOffsetY());

    foreach ($cell->getTextFrame()->getParagraphs() as $paragraph) {
        if ($paragraph->getText() == "") {
            continue;
        }

        $paragraphRectangle = $paragraph->getRect();
        $paragraphRectangleX = java_values($paragraphRectangle->getX()) + $cellX;
        $paragraphRectangleY = java_values($paragraphRectangle->getY()) + $cellY;
        $paragraphRectangleWidth = java_values($paragraphRectangle->getWidth());
        $paragraphRectangleHeight = java_values($paragraphRectangle->getHeight());

        $paragraphBoundsShape = $slide->getShapes()->addAutoShape(
            ShapeType::Rectangle,
            $paragraphRectangleX,
            $paragraphRectangleY,
            $paragraphRectangleWidth,
            $paragraphRectangleHeight
        );

        $paragraphBoundsShape->getFillFormat()->setFillType(FillType::NoFill);
        $paragraphBoundsShape->getLineFormat()->getFillFormat()->getSolidFillColor()->setColor(java("java.awt.Color")->YELLOW);
        $paragraphBoundsShape->getLineFormat()->getFillFormat()->setFillType(FillType::Solid);
    }

    $presentation->save("output.pptx", SaveFormat::Pptx);
} finally {
    $presentation->dispose();
}

Často kladené otázky

V jakých jednotkách jsou měřeny souřadnice odstavce?

Měří se v bodech, kde 1 palec odpovídá 72 bodům. Toto platí pro všechny souřadnice a rozměry na snímku.

Ovlivňuje zalamování textu ohraničení odstavce?

Ano. Pokud je pro TextFrame povoleno TextFrameFormat::setWrapText, text se zalamuje tak, aby se vešel do šířky oblasti, což mění skutečné ohraničení odstavce.

Lze souřadnice odstavce spolehlivě převést na pixely v exportovaném obrázku?

Ano. Převádějte body na pixely pomocí tohoto vzorce: pixely = body x (DPI / 72). Výsledek závisí na DPI zvoleném pro vykreslení nebo export.

Jak získám „efektivní“ parametry formátování odstavce s ohledem na dědičnost stylu?

Použijte effective paragraph formatting data structure; vrací konečné konsolidované hodnoty odsazení, mezery, zalamování, RTL a další.