Получить эффективные свойства фигур из презентаций на Android
В этой теме мы обсудим effective и local свойства. Когда мы задаём значения непосредственно на этих уровнях
- В свойствах части на слайде части;
- В стиле текста прототипной фигуры на макете или слайде‑шаблоне (если у формы текстового кадра части есть такой стиль);
- В глобальных настройках текста презентации;
такие значения называют local значениями. На любом уровне local значения могут быть определены или опущены. Но когда приложению нужно узнать, как должна выглядеть часть, оно использует effective значения. Вы можете получить effective значения, используя метод getEffective() локального формата.
Этот пример кода показывает, как получить 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();
}
Получить эффективные свойства камеры
Aspose.Slides for Android via Java позволяет разработчикам получать эффективные свойства камеры. Для этой цели в Aspose.Slides был добавлен интерфейс ICameraEffectiveData. Интерфейс ICameraEffectiveData представляет собой неизменяемый объект, содержащий эффективные свойства камеры. Экземпляр интерфейса ICameraEffectiveData используется как часть интерфейса IThreeDFormatEffectiveData, который является парой effective values для класса 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();
}
Получить эффективные свойства светового набора
Aspose.Slides for Android via Java позволяет разработчикам получать эффективные свойства Light Rig. Для этой цели в Aspose.Slides был добавлен интерфейс ILightRigEffectiveData. Интерфейс ILightRigEffectiveData представляет собой неизменяемый объект, содержащий эффективные свойства светового набора. Экземпляр интерфейса ILightRigEffectiveData используется как часть интерфейса IThreeDFormatEffectiveData, который является парой effective values для класса ThreeDFormat.
Этот пример кода показывает, как получить эффективные свойства 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();
}
Получить эффективные свойства фаски фигуры
Aspose.Slides for Android via Java позволяет разработчикам получать эффективные свойства Bevel Shape. Для этой цели в Aspose.Slides был добавлен интерфейс IShapeBevelEffectiveData. Интерфейс IShapeBevelEffectiveData представляет собой неизменяемый объект, содержащий эффективные свойства рельефа грани фигуры. Экземпляр интерфейса IShapeBevelEffectiveData используется как часть интерфейса IThreeDFormatEffectiveData, который является парой effective values для класса 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();
}
Получить эффективные свойства текстового кадра
С помощью Aspose.Slides for Android via Java вы можете получать эффективные свойства Text Frame. Для этой цели в Aspose.Slides был добавлен интерфейс ITextFrameFormatEffectiveData, который содержит эффективные свойства форматирования текстового кадра.
Этот пример кода показывает, как получить эффективные свойства форматирования текстового кадра:
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();
}
Получить эффективные свойства стиля текста
С помощью Aspose.Slides for Android via Java вы можете получать эффективные свойства Text Style. Для этой цели в Aspose.Slides был добавлен интерфейс ITextStyleEffectiveData, который содержит эффективные свойства стиля текста.
Этот пример кода показывает, как получить эффективные свойства стиля текста:
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();
}
Получить значение эффективной высоты шрифта
С помощью Aspose.Slides for Android via Java вы можете получать эффективные свойства высоты шрифта. Ниже приводится код, демонстрирующий изменение эффективного значения высоты шрифта части после установки локальных значений высоты шрифта на разных уровнях структуры презентации:
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();
}
Получить эффективный формат заливки для таблицы
С помощью Aspose.Slides for Android via Java вы можете получать эффективные свойства заливки для разных логических частей таблицы. Для этой цели в Aspose.Slides был добавлен интерфейс ICellFormatEffectiveData, который содержит эффективные свойства заливки. Обратите внимание: формат ячейки всегда имеет приоритет над форматом строки; строка имеет приоритет над форматом столбца; столбец имеет приоритет над форматом всей таблицы.
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
Как определить, что я получил «снимок», а не «живой объект», и когда следует снова считывать эффективные свойства?
Объекты EffectiveData представляют собой неизменяемые снимки вычисленных значений на момент вызова. Если вы изменяете локальные или унаследованные настройки фигуры, получите EffectiveData снова, чтобы получить обновлённые значения.
Влияет ли изменение макета/слайда‑шаблона на уже полученные эффективные свойства?
Да, но только после повторного чтения. Уже полученный объект EffectiveData не обновляется сам автоматически — запросите его вновь после изменения макета или шаблона.
Можно ли изменять значения через EffectiveData?
Нет. EffectiveData доступен только для чтения. Вносите изменения в локальные объекты форматирования (фигура/текст/3D и т.д.), а затем при необходимости снова получайте эффективные значения.
Что происходит, если свойство не задано ни на уровне фигуры, ни в макете/шаблоне, ни в глобальных настройках?
Эффективное значение определяется механизмом значений по умолчанию (по умолчанию PowerPoint/Aspose.Slides). Это полученное значение становится частью снимка EffectiveData.
По эффективному значению шрифта можно ли понять, какой уровень предоставил размер или гарнитуру?
Не напрямую. EffectiveData возвращает окончательное значение. Чтобы узнать источник, проверьте локальные значения на уровне части/абзаца/текстового кадра и стили текста на макете/шаблоне/презентации, чтобы увидеть, где впервые появилось явное определение.
Почему значения EffectiveData иногда совпадают с локальными?
Потому что локальное значение оказалось окончательным (не потребовалось наследование с более высокого уровня). В таких случаях эффективное значение совпадает с локальным.
Когда следует использовать эффективные свойства, а когда работать только с локальными?
Используйте EffectiveData, когда нужен результат «как он отобразится» после применения всего наследования (например, для согласования цветов, отступов или размеров). Если нужно изменить форматирование на конкретном уровне, изменяйте локальные свойства и, при необходимости, заново считывайте EffectiveData для проверки результата.