Hämta styckesgränser från presentationer i Python via Java

Översikt

Den här artikeln förklarar hur man får gränserna, storleken och koordinaterna för stycken i Aspose.Slides. Den visar hur man hämtar en styckesrektangel från en TextFrame genom att använda Paragraph.getRect, hur man får styckeskoordinater inom ett tabellcells‑textfält och lyfter fram viktiga detaljer såsom mätenheter, hur textbrytning påverkar gränserna, pixelkonvertering och effektiva styckeformateringsvärden.

Hämta rektangulära koordinater för ett stycke

Använd Paragraph.getRect för att hämta det omgivande rektangeln för ett stycke.

import jpype
import asposeslides

if not jpype.isJVMStarted():
    jpype.startJVM()

from asposeslides.api import Presentation

presentation = 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()

Hämta storleken på ett stycke i ett tabellcells‑textfält

För att få storleken och koordinaterna för ett Paragraph i ett tabellcells‑textfält, använd Paragraph.getRect. Den returnerade rektangeln är relativ till tabellcells‑textfältet, så lägg till tabellens position och cellens offset när du behöver koordinater på bildnivå.

Följande exempel hämtar styckesgränserna i en tabellcell och ritar rektanglar på bilden för att visualisera dessa gränser:

import jpype
import asposeslides

if not jpype.isJVMStarted():
    jpype.startJVM()

from asposeslides.api import FillType, Presentation, SaveFormat, ShapeType
from java.awt import Color

presentation = 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)

    cell_x = table.getX() + cell.getOffsetX()
    cell_y = table.getY() + cell.getOffsetY()

    for paragraph in cell.getTextFrame().getParagraphs():
        if not paragraph.getText():
            continue

        paragraph_rectangle = paragraph.getRect()
        paragraph_rectangle_x = paragraph_rectangle.x + cell_x
        paragraph_rectangle_y = paragraph_rectangle.y + cell_y

        paragraph_bounds_shape = slide.getShapes().addAutoShape(ShapeType.Rectangle, paragraph_rectangle_x, paragraph_rectangle_y, paragraph_rectangle.width, paragraph_rectangle.height)

        paragraph_bounds_shape.getFillFormat().setFillType(FillType.NoFill)
        paragraph_bounds_shape.getLineFormat().getFillFormat().getSolidFillColor().setColor(Color.YELLOW)
        paragraph_bounds_shape.getLineFormat().getFillFormat().setFillType(FillType.Solid)

    presentation.save("output.pptx", SaveFormat.Pptx)
finally:
    presentation.dispose()

FAQ

I vilka enheter mäts styckeskoordinater?

De mäts i punkter, där 1 tum motsvarar 72 punkter. Detta gäller för alla koordinater och dimensioner på bilden.

Påverkar radbrytning ett styckes gränser?

Ja. Om TextFrameFormat.setWrapText är aktiverat för TextFrame, bryts texten för att passa områdets bredd, vilket ändrar styckets faktiska gränser.

Kan styckeskoordinater på ett pålitligt sätt mappas till pixlar i den exporterade bilden?

Ja. Konvertera punkter till pixlar med formeln: pixlar = punkter x (DPI / 72). Resultatet beror på den DPI som valts för rendering eller export.

Hur får jag de “effektiva” styckeformateringsparametrarna, med hänsyn till stilärvning?

Använd effective paragraph formatting data structure; den returnerar de slutgiltiga sammanslagna värdena för indrag, avstånd, radbrytning, RTL och mer.