Obtener propiedades efectivas de formas de presentaciones en Android

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

  1. En propiedades de porción en la diapositiva de la porción;
  2. En el estilo de texto de forma de 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 verse la porción, utiliza los valores effective. Puede obtener valores effective usando el método getEffective() del formato local.

Este código de ejemplo le muestra cómo obtener 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 for Android via Java permite a los desarrolladores obtener propiedades effective de la cámara. Para 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 la interfaz ICameraEffectiveData se utiliza como parte de la interfaz IThreeDFormatEffectiveData, que es un par de effective values para la clase ThreeDFormat.

Este ejemplo de código muestra cómo obtener propiedades effective para la cámara:

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 for Android via Java permite a los desarrolladores obtener propiedades effective de Light Rig. Para este fin, se añadió la interfaz ILightRigEffectiveData a Aspose.Slides. La interfaz ILightRigEffectiveData representa un objeto inmutable que contiene propiedades effective de Light Rig. Una instancia de la interfaz ILightRigEffectiveData se utiliza como parte de la interfaz IThreeDFormatEffectiveData, que es un par de effective values para la clase ThreeDFormat.

Este ejemplo de código muestra cómo obtener propiedades effective de Light Rig:

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 for Android via Java permite a los desarrolladores obtener propiedades effective de Shape Bevel. Para 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 forma. Una instancia de la interfaz IShapeBevelEffectiveData se utiliza como parte de la interfaz IThreeDFormatEffectiveData, que es un par de effective values para la clase ThreeDFormat.

Este ejemplo de código muestra cómo obtener propiedades effective para la forma biselada:

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

Usando Aspose.Slides for Android via Java, puede obtener propiedades effective de un Text Frame. Para este fin, se añadió la interfaz ITextFrameFormatEffectiveData a Aspose.Slides. Contiene propiedades effective de formato del marco de texto.

Este ejemplo de código muestra cómo obtener propiedades effective de formato 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

Usando Aspose.Slides for Android via Java, puede obtener propiedades effective de Text Style. Para este fin, se añadió la interfaz ITextStyleEffectiveData a Aspose.Slides. Contiene propiedades effective del estilo de texto.

Este ejemplo de código muestra cómo obtener 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 la fuente

Usando Aspose.Slides for Android via Java, puede obtener propiedades effective de Font Height. 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

Usando Aspose.Slides for Android via Java, puede obtener el formato de relleno effective para distintas partes lógicas de una tabla. Para este fin, se añadió la interfaz ICellFormatEffectiveData a Aspose.Slides. Contiene propiedades effective de formato de relleno. 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 de nuevo 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á definida 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 predeterminados de PowerPoint/Aspose.Slides). Ese valor resuelto pasa a formar parte de la instantánea EffectiveData.

Desde 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 el origen, 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é a veces los valores EffectiveData parecen idénticos a los locales?

Porque el valor local resultó ser 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 solo trabajar con las locales?

Use EffectiveData cuando necesite el resultado “tal como se renderiza” después de aplicar toda la herencia (por ejemplo, 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.