Obtener límites de párrafo de presentaciones en Java

Obtener coordenadas de párrafo y porción en un TextFrame

Con Aspose.Slides for Java, los desarrolladores ahora pueden obtener las coordenadas rectangulares de un Paragraph dentro de la colección de párrafos de un TextFrame. También permite obtener las coordenadas de la porción dentro de la colección de porciones de un párrafo. En este tema, vamos a demostrar con la ayuda de un ejemplo cómo obtener las coordenadas rectangulares de un párrafo junto con la posición de la porción dentro de un párrafo.

AutoShape shape = (AutoShape)pres.getSlides().get_Item(0).getShapes().get_Item(0);
TextFrame textFrame = (TextFrame)shape.getTextFrame();
for (IParagraph paragraph : textFrame.getParagraphs()){
  for (IPortion portion : paragraph.getPortions()){
    Point2D.Float point = portion.getCoordinates();
  }
}

Obtener coordenadas rectangulares de un párrafo

Con el método getRect() los desarrolladores pueden obtener el rectángulo de los límites del párrafo.

Presentation pres = new Presentation("HelloWorld.pptx");
try {
    IAutoShape shape = (IAutoShape) pres.getSlides().get_Item(0).getShapes().get_Item(0);
    ITextFrame textFrame = shape.getTextFrame();
    Rectangle2D.Float rect = textFrame.getParagraphs().get_Item(0).getRect();
    System.out.println("X: " + rect.x + " Y: " + rect.y + " Width: " + rect.width + " Height: " + rect.height);
} finally {
    if (pres != null) pres.dispose();
}

Obtener el tamaño de un párrafo y porción dentro de un TextFrame de celda de tabla

Para obtener el tamaño y las coordenadas de la Portion o del Paragraph en un TextFrame de celda de tabla, puede usar los métodos IPortion.getRect y IParagraph.getRect. Este código de ejemplo muestra la operación descrita:

Presentation pres = new Presentation("source.pptx");
try {
    Table tbl = (Table)pres.getSlides().get_Item(0).getShapes().get_Item(0);
    ICell cell = tbl.getRows().get_Item(1).get_Item(1);

    double x = tbl.getX() + tbl.getRows().get_Item(1).get_Item(1).getOffsetX();
    double y = tbl.getY() + tbl.getRows().get_Item(1).get_Item(1).getOffsetY();

    for (IParagraph para : cell.getTextFrame().getParagraphs())
    {
        if (para.getText().equals(""))
            continue;

        Rectangle2D.Float rect = para.getRect();
        IAutoShape shape =
                pres.getSlides().get_Item(0).getShapes().addAutoShape(ShapeType.Rectangle,
                        (float)rect.getX() + (float)x, (float)rect.getY() + (float)y, (float)rect.getWidth(), (float)rect.getHeight());

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

        for (IPortion portion : para.getPortions())
        {
            if (portion.getText().contains("0"))
            {
                rect = portion.getRect();
                shape =
                        pres.getSlides().get_Item(0).getShapes().addAutoShape(ShapeType.Rectangle,
                                (float)rect.getX() + (float)x, (float)rect.getY() + (float)y, (float)rect.getWidth(), (float)rect.getHeight());

                shape.getFillFormat().setFillType(FillType.NoFill);
            }
        }
    }
} finally {
    if (pres != null) pres.dispose();
}

Preguntas frecuentes

¿En qué unidades se devuelven las coordenadas de un párrafo y de las porciones de texto?
En puntos, donde 1 pulgada = 72 puntos. Esto se aplica a todas las coordenadas y dimensiones en la diapositiva.

¿Afecta el ajuste de texto a los límites de un párrafo?
Sí. Si el wrapping está habilitado en el TextFrame, el texto se parte para ajustarse al ancho del área, lo que cambia los límites reales del párrafo.

¿Se pueden mapear de forma fiable las coordenadas del párrafo a píxeles en la imagen exportada?
Sí. Convierta puntos a píxeles usando: pixels = points × (DPI / 72). El resultado depende del DPI seleccionado para el renderizado/exportación.

¿Cómo obtener los parámetros de formato de párrafo “efectivo”, teniendo en cuenta la herencia de estilos?
Utilice la estructura de datos de formato de párrafo efectivo; devuelve los valores consolidados finales para sangrías, espaciado, ajuste, RTL y más.