Obtener propiedades efectivas de formas de presentaciones en Android

En este tema, analizaremos las propiedades effective y local. Cuando establecemos valores directamente en estos niveles

  1. En las propiedades de la porción en la diapositiva de la porción;
  2. En el estilo de texto de la forma prototipo en la diapositiva de diseño o maestra (si la forma del marco de texto de la porción tiene uno);
  3. En la configuración global de texto de la presentación;

esos valores se denominan valores local. En cualquier nivel, los valores local pueden definirse u omitirse. Pero cuando una aplicación necesita saber cómo debe mostrarse la porción, utiliza los valores effective. Puede obtener los valores effective mediante el método getEffective() del formato local.

Este código de ejemplo le muestra cómo obtener los valores effective:

Presentation pres = new Presentation("Presentation1.pptx");
try {
    IAutoShape shape = (IAutoShape)pres.getSlides().get_Item(0).getShapes().get_Item(0);

    ITextFrameFormat localTextFrameFormat = shape.getTextFrame().getTextFrameFormat();
    ITextFrameFormatEffectiveData effectiveTextFrameFormat = localTextFrameFormat.getEffective();

    IPortionFormat localPortionFormat = shape.getTextFrame().getParagraphs().get_Item(0).getPortions().get_Item(0).getPortionFormat();
    IPortionFormatEffectiveData effectivePortionFormat = localPortionFormat.getEffective();
} finally {
    if (pres != null) pres.dispose();
}

Obtener propiedades effective de una cámara

Aspose.Slides para Android mediante Java permite a los desarrolladores obtener propiedades effective de la cámara. Con este fin, se añadió la interfaz ICameraEffectiveData a Aspose.Slides. La interfaz ICameraEffectiveData representa un objeto inmutable que contiene propiedades effective de la cámara. Una instancia de ICameraEffectiveData se utiliza como parte de la interfaz IThreeDFormatEffectiveData, que es un par de effective values para la clase ThreeDFormat.

Presentation pres = new Presentation("Presentation1.pptx");
try {
    IThreeDFormatEffectiveData threeDEffectiveData = pres.getSlides().get_Item(0).getShapes().get_Item(0).getThreeDFormat().getEffective();

    System.out.println("= Effective camera properties =");
    System.out.println("Type: " + threeDEffectiveData.getCamera().getCameraType());
    System.out.println("Field of view: " + threeDEffectiveData.getCamera().getFieldOfViewAngle());
    System.out.println("Zoom: " + threeDEffectiveData.getCamera().getZoom());
} finally {
    if (pres != null) pres.dispose();
}

Obtener propiedades effective de un Light Rig

Aspose.Slides para Android mediante Java permite a los desarrolladores obtener propiedades effective de Light Rig. Con este fin, se añadió la interfaz ILightRigEffectiveData a Aspose.Slides. La interfaz ILightRigEffectiveData representa un objeto inmutable que contiene propiedades effective del Light Rig. Una instancia de la ILightRigEffectiveData se utiliza como parte de la interfaz IThreeDFormatEffectiveData, que es un par de effective values para la clase ThreeDFormat.

Presentation pres = new Presentation("Presentation1.pptx");
try {
    IThreeDFormatEffectiveData threeDEffectiveData = pres.getSlides().get_Item(0).getShapes().get_Item(0).getThreeDFormat().getEffective();

    System.out.println("= Effective light rig properties =");
    System.out.println("Type: " + threeDEffectiveData.getLightRig().getLightType());
    System.out.println("Direction: " + threeDEffectiveData.getLightRig().getDirection());
} finally {
    if (pres != null) pres.dispose();
}

Obtener propiedades effective de una forma biselada

Aspose.Slides para Android mediante Java permite a los desarrolladores obtener propiedades effective de Bevel Shape. Con este fin, se añadió la interfaz IShapeBevelEffectiveData a Aspose.Slides. La interfaz IShapeBevelEffectiveData representa un objeto inmutable que contiene propiedades effective del relieve de la cara de la forma. Una instancia de la IShapeBevelEffectiveData se utiliza como parte de la interfaz IThreeDFormatEffectiveData, que es un par de effective values para la clase ThreeDFormat.

Presentation pres = new Presentation("Presentation1.pptx");
try {
    IThreeDFormatEffectiveData threeDEffectiveData = pres.getSlides().get_Item(0).getShapes().get_Item(0).getThreeDFormat().getEffective();

    System.out.println("= Effective shape's top face relief properties =");
    System.out.println("Type: " + threeDEffectiveData.getBevelTop().getBevelType());
    System.out.println("Width: " + threeDEffectiveData.getBevelTop().getWidth());
    System.out.println("Height: " + threeDEffectiveData.getBevelTop().getHeight());
} finally {
    if (pres != null) pres.dispose();
}

Obtener propiedades effective de un marco de texto

Con Aspose.Slides para Android mediante Java, puede obtener propiedades effective de un marco de texto. Con este fin, se añadió la interfaz ITextFrameFormatEffectiveData a Aspose.Slides. Contiene propiedades de formato effective del marco de texto.

Presentation pres = new Presentation("Presentation1.pptx");
try {
    IAutoShape shape = (IAutoShape)pres.getSlides().get_Item(0).getShapes().get_Item(0);
    ITextFrameFormatEffectiveData effectiveTextFrameFormat = shape.getTextFrame().getTextFrameFormat().getEffective();

    System.out.println("Anchoring type: " + effectiveTextFrameFormat.getAnchoringType());
    System.out.println("Autofit type: " + effectiveTextFrameFormat.getAutofitType());
    System.out.println("Text vertical type: " + effectiveTextFrameFormat.getTextVerticalType());
    System.out.println("Margins");
    System.out.println("   Left: " + effectiveTextFrameFormat.getMarginLeft());
    System.out.println("   Top: " + effectiveTextFrameFormat.getMarginTop());
    System.out.println("   Right: " + effectiveTextFrameFormat.getMarginRight());
    System.out.println("   Bottom: " + effectiveTextFrameFormat.getMarginBottom());
} finally {
    if (pres != null) pres.dispose();
}

Obtener propiedades effective de un estilo de texto

Con Aspose.Slides para Android mediante Java, puede obtener propiedades effective de un estilo de texto. Con este fin, se añadió la interfaz ITextStyleEffectiveData a Aspose.Slides. Contiene propiedades effective del estilo de texto.

Presentation pres = new Presentation("Presentation1.pptx");
try {
    IAutoShape shape = (IAutoShape)pres.getSlides().get_Item(0).getShapes().get_Item(0);
    ITextStyleEffectiveData effectiveTextStyle = shape.getTextFrame().getTextFrameFormat().getTextStyle().getEffective();

    for (int i = 0; i <= 8; i++)
    {
        IParagraphFormatEffectiveData effectiveStyleLevel = effectiveTextStyle.getLevel(i);
        System.out.println("= Effective paragraph formatting for style level #" + i + " =");

        System.out.println("Depth: " + effectiveStyleLevel.getDepth());
        System.out.println("Indent: " + effectiveStyleLevel.getIndent());
        System.out.println("Alignment: " + effectiveStyleLevel.getAlignment());
        System.out.println("Font alignment: " + effectiveStyleLevel.getFontAlignment());
    }
} finally {
    if (pres != null) pres.dispose();
}

Obtener el valor effective de la altura de fuente

Con Aspose.Slides para Android mediante Java, puede obtener propiedades effective de la altura de fuente. Aquí proporcionamos un código que muestra cómo el valor effective de la altura de fuente de la porción cambia después de establecer valores locales de altura de fuente en diferentes niveles de la estructura de la presentación:

Presentation pres = new Presentation();
try {
    IAutoShape newShape = pres.getSlides().get_Item(0).getShapes().addAutoShape(ShapeType.Rectangle, 100, 100, 400, 75, false);
    newShape.addTextFrame("");
    newShape.getTextFrame().getParagraphs().get_Item(0).getPortions().clear();

    IPortion portion0 = new Portion("Sample text with first portion");
    IPortion portion1 = new Portion(" and second portion.");

    newShape.getTextFrame().getParagraphs().get_Item(0).getPortions().add(portion0);
    newShape.getTextFrame().getParagraphs().get_Item(0).getPortions().add(portion1);

    System.out.println("Effective font height just after creation:");
    System.out.println("Portion #0: " + portion0.getPortionFormat().getEffective().getFontHeight());
    System.out.println("Portion #1: " + portion1.getPortionFormat().getEffective().getFontHeight());

    pres.getDefaultTextStyle().getLevel(0).getDefaultPortionFormat().setFontHeight(24);
    System.out.println("Effective font height after setting entire presentation default font height:");
    System.out.println("Portion #0: " + portion0.getPortionFormat().getEffective().getFontHeight());
    System.out.println("Portion #1: " + portion1.getPortionFormat().getEffective().getFontHeight());

    newShape.getTextFrame().getParagraphs().get_Item(0).getParagraphFormat().getDefaultPortionFormat().setFontHeight(40);
    System.out.println("Effective font height after setting paragraph default font height:");
    System.out.println("Portion #0: " + portion0.getPortionFormat().getEffective().getFontHeight());
    System.out.println("Portion #1: " + portion1.getPortionFormat().getEffective().getFontHeight());

    newShape.getTextFrame().getParagraphs().get_Item(0).getPortions().get_Item(0).getPortionFormat().setFontHeight(55);
    System.out.println("Effective font height after setting portion #0 font height:");
    System.out.println("Portion #0: " + portion0.getPortionFormat().getEffective().getFontHeight());
    System.out.println("Portion #1: " + portion1.getPortionFormat().getEffective().getFontHeight());

    newShape.getTextFrame().getParagraphs().get_Item(0).getPortions().get_Item(1).getPortionFormat().setFontHeight(18);
    System.out.println("Effective font height after setting portion #1 font height:");
    System.out.println("Portion #0: " + portion0.getPortionFormat().getEffective().getFontHeight());
    System.out.println("Portion #1: " + portion1.getPortionFormat().getEffective().getFontHeight());

    pres.save("SetLocalFontHeightValues.pptx",SaveFormat.Pptx);
} finally {
    if (pres != null) pres.dispose();
}

Obtener el formato de relleno effective para una tabla

Con Aspose.Slides para Android mediante Java, puede obtener el formato de relleno effective para diferentes partes lógicas de una tabla. Con este fin, se añadió la interfaz ICellFormatEffectiveData en Aspose.Slides. Contiene propiedades de formato de relleno effective. Tenga en cuenta lo siguiente: el formato de celda siempre tiene prioridad sobre el formato de fila; la fila tiene prioridad sobre la columna; y la columna tiene prioridad sobre toda la tabla.

Presentation pres = new Presentation("Presentation1.pptx");
try {
    ITable tbl = (ITable)pres.getSlides().get_Item(0).getShapes().get_Item(0);
    ITableFormatEffectiveData tableFormatEffective = tbl.getTableFormat().getEffective();
    IRowFormatEffectiveData rowFormatEffective = tbl.getRows().get_Item(0).getRowFormat().getEffective();
    IColumnFormatEffectiveData columnFormatEffective = tbl.getColumns().get_Item(0).getColumnFormat().getEffective();
    ICellFormatEffectiveData cellFormatEffective = tbl.get_Item(0, 0).getCellFormat().getEffective();

    IFillFormatEffectiveData tableFillFormatEffective = tableFormatEffective.getFillFormat();
    IFillFormatEffectiveData rowFillFormatEffective = rowFormatEffective.getFillFormat();
    IFillFormatEffectiveData columnFillFormatEffective = columnFormatEffective.getFillFormat();
    IFillFormatEffectiveData cellFillFormatEffective = cellFormatEffective.getFillFormat();
} finally {
    if (pres != null) pres.dispose();
}

FAQ

¿Cómo puedo saber si obtuve una “instantánea” en lugar de un “objeto en vivo”, y cuándo debo volver a leer las propiedades effective?
Los objetos EffectiveData son instantáneas inmutables de los valores calculados en el momento de la llamada. Si cambia la configuración local o heredada de la forma, recupere los datos effective nuevamente para obtener los valores actualizados.

¿Cambiar la diapositiva de diseño/maestra afecta a las propiedades effective que ya se han recuperado?
Sí, pero solo después de volver a leerlas. Un objeto EffectiveData ya obtenido no se actualiza por sí mismo; solicítelo nuevamente después de cambiar el diseño o la maestra.

¿Puedo modificar valores a través de EffectiveData?
No. EffectiveData es de solo lectura. Realice cambios en los objetos de formato local (forma/texto/3D, etc.) y luego obtenga nuevamente los valores effective.

¿Qué ocurre si una propiedad no está establecida a nivel de forma, ni en el diseño/maestra, ni en la configuración global?
El valor effective se determina mediante el mecanismo predeterminado (valores por defecto de PowerPoint/Aspose.Slides). Ese valor resuelto pasa a formar parte de la instantánea EffectiveData.

¿A partir de un valor effective de fuente, puedo saber qué nivel proporcionó el tamaño o la tipografía?
No directamente. EffectiveData devuelve el valor final. Para encontrar la fuente, revise los valores locales en la porción/párrafo/marco de texto y los estilos de texto en el diseño/maestra/presentación para ver dónde aparece la primera definición explícita.

¿Por qué los valores de EffectiveData a veces se ven idénticos a los locales?
Porque el valor local terminó siendo el final (no se necesitó herencia de niveles superiores). En esos casos, el valor effective coincide con el local.

¿Cuándo debo usar propiedades effective y cuándo debo trabajar solo con las locales?
Utilice EffectiveData cuando necesite el resultado “tal como se renderiza” después de aplicar toda la herencia (p. ej., para alinear colores, sangrías o tamaños). Si necesita cambiar el formato en un nivel específico, modifique las propiedades locales y, si es necesario, vuelva a leer EffectiveData para verificar el resultado.