Aspose.Slides FOSS for Java позволяет применять визуальные эффекты профессионального качества к объектам PowerPoint полностью на Java, без Microsoft Office и без API‑ключей. В этой статье демонстрируются система заливки, 2D‑эффекты и 3D‑форматирование, доступные в библиотеке.


Система заполнения

У каждой фигуры есть формат заливки, доступ к которому осуществляется через getFillFormat(), который контролирует, как окрашивается её внутренность. Пять типов заливки охватывают весь спектр палитры дизайна PowerPoint.

Сплошная заливка

Самый простой тип заливки — сплошной цвет с необязательной прозрачностью:

import org.aspose.slides.foss.Presentation;
import org.aspose.slides.foss.ISlide;
import org.aspose.slides.foss.IAutoShape;
import org.aspose.slides.foss.IFillFormat;
import org.aspose.slides.foss.IGradientFormat;
import org.aspose.slides.foss.IEffectFormat;
import org.aspose.slides.foss.IThreeDFormat;
import org.aspose.slides.foss.ShapeType;
import org.aspose.slides.foss.FillType;
import org.aspose.slides.foss.GradientShape;
import org.aspose.slides.foss.BevelPresetType;
import org.aspose.slides.foss.CameraPresetType;
import org.aspose.slides.foss.LightRigPresetType;
import org.aspose.slides.foss.LightingDirection;
import org.aspose.slides.foss.MaterialPresetType;
import org.aspose.slides.foss.export.SaveFormat;
import org.aspose.slides.foss.drawing.Color;

try (Presentation prs = new Presentation()) {
    IAutoShape shape = prs.getSlides().get(0).getShapes().addAutoShape(
        ShapeType.ROUND_CORNER_RECTANGLE, 100, 100, 400, 150
    );
    shape.addTextFrame("Solid Fill");

    shape.getFillFormat().setFillType(FillType.SOLID);
    shape.getFillFormat().getSolidFillColor().setColor(new Color(30, 80, 180));

    prs.save("solid.pptx");
}

Заливка линейным градиентом

Градиентные остановки позволяют плавно переходить от одного цвета к другому по всей фигуре:

import org.aspose.slides.foss.Presentation;
import org.aspose.slides.foss.ISlide;
import org.aspose.slides.foss.IAutoShape;
import org.aspose.slides.foss.IFillFormat;
import org.aspose.slides.foss.IGradientFormat;
import org.aspose.slides.foss.IEffectFormat;
import org.aspose.slides.foss.IThreeDFormat;
import org.aspose.slides.foss.ShapeType;
import org.aspose.slides.foss.FillType;
import org.aspose.slides.foss.GradientShape;
import org.aspose.slides.foss.BevelPresetType;
import org.aspose.slides.foss.CameraPresetType;
import org.aspose.slides.foss.LightRigPresetType;
import org.aspose.slides.foss.LightingDirection;
import org.aspose.slides.foss.MaterialPresetType;
import org.aspose.slides.foss.export.SaveFormat;
import org.aspose.slides.foss.drawing.Color;

try (Presentation prs = new Presentation()) {
    IAutoShape shape = prs.getSlides().get(0).getShapes().addAutoShape(
        ShapeType.RECTANGLE, 100, 100, 400, 150
    );

    IFillFormat ff = shape.getFillFormat();
    ff.setFillType(FillType.GRADIENT);
    IGradientFormat gf = ff.getGradientFormat();
    gf.setGradientShape(GradientShape.LINEAR);
    gf.setLinearGradientAngle(90);   // top-to-bottom

    gf.getGradientStops().add(0.0f, new Color(30, 80, 180));   // top: blue
    gf.getGradientStops().add(1.0f, new Color(0, 200, 160));   // bottom: teal

    prs.save("gradient.pptx");
}

2D визуальные эффекты

Внешняя тень

Присоедините полупрозрачную отбрасываемую тень к любой фигуре:

import org.aspose.slides.foss.Presentation;
import org.aspose.slides.foss.ISlide;
import org.aspose.slides.foss.IAutoShape;
import org.aspose.slides.foss.IFillFormat;
import org.aspose.slides.foss.IGradientFormat;
import org.aspose.slides.foss.IEffectFormat;
import org.aspose.slides.foss.IThreeDFormat;
import org.aspose.slides.foss.ShapeType;
import org.aspose.slides.foss.FillType;
import org.aspose.slides.foss.GradientShape;
import org.aspose.slides.foss.BevelPresetType;
import org.aspose.slides.foss.CameraPresetType;
import org.aspose.slides.foss.LightRigPresetType;
import org.aspose.slides.foss.LightingDirection;
import org.aspose.slides.foss.MaterialPresetType;
import org.aspose.slides.foss.export.SaveFormat;
import org.aspose.slides.foss.drawing.Color;

try (Presentation prs = new Presentation()) {
    IAutoShape shape = prs.getSlides().get(0).getShapes().addAutoShape(
        ShapeType.ROUND_CORNER_RECTANGLE, 100, 100, 350, 150
    );
    shape.addTextFrame("Drop Shadow");

    shape.getFillFormat().setFillType(FillType.SOLID);
    shape.getFillFormat().getSolidFillColor().setColor(Color.WHITE);

    IEffectFormat ef = shape.getEffectFormat();
    ef.enableOuterShadowEffect();
    ef.getOuterShadowEffect().setBlurRadius(12);
    ef.getOuterShadowEffect().setDirection(315);   // upper-left
    ef.getOuterShadowEffect().setDistance(8);
    ef.getOuterShadowEffect().getShadowColor().setColor(new Color(100, 0, 0, 0));

    prs.save("shadow.pptx");
}

Эффект свечения

Цветной ореол вокруг края фигуры:

import org.aspose.slides.foss.Presentation;
import org.aspose.slides.foss.ISlide;
import org.aspose.slides.foss.IAutoShape;
import org.aspose.slides.foss.IFillFormat;
import org.aspose.slides.foss.IGradientFormat;
import org.aspose.slides.foss.IEffectFormat;
import org.aspose.slides.foss.IThreeDFormat;
import org.aspose.slides.foss.ShapeType;
import org.aspose.slides.foss.FillType;
import org.aspose.slides.foss.GradientShape;
import org.aspose.slides.foss.BevelPresetType;
import org.aspose.slides.foss.CameraPresetType;
import org.aspose.slides.foss.LightRigPresetType;
import org.aspose.slides.foss.LightingDirection;
import org.aspose.slides.foss.MaterialPresetType;
import org.aspose.slides.foss.export.SaveFormat;
import org.aspose.slides.foss.drawing.Color;

try (Presentation prs = new Presentation()) {
    IAutoShape shape = prs.getSlides().get(0).getShapes().addAutoShape(
        ShapeType.ELLIPSE, 150, 100, 250, 250
    );
    shape.getFillFormat().setFillType(FillType.SOLID);
    shape.getFillFormat().getSolidFillColor().setColor(new Color(20, 60, 140));

    IEffectFormat ef = shape.getEffectFormat();
    ef.enableGlowEffect();
    ef.getGlowEffect().setRadius(20);
    ef.getGlowEffect().getColor().setColor(new Color(200, 0, 180, 255));

    prs.save("glow.pptx");
}

3D Форматирование

Фаска и материал

Метод getThreeDFormat() придаёт любой плоской форме трёхмерный вид. Скомбинируйте фаску с предустановкой камеры и материалом для наилучшего результата:

import org.aspose.slides.foss.Presentation;
import org.aspose.slides.foss.ISlide;
import org.aspose.slides.foss.IAutoShape;
import org.aspose.slides.foss.IFillFormat;
import org.aspose.slides.foss.IGradientFormat;
import org.aspose.slides.foss.IEffectFormat;
import org.aspose.slides.foss.IThreeDFormat;
import org.aspose.slides.foss.ShapeType;
import org.aspose.slides.foss.FillType;
import org.aspose.slides.foss.GradientShape;
import org.aspose.slides.foss.BevelPresetType;
import org.aspose.slides.foss.CameraPresetType;
import org.aspose.slides.foss.LightRigPresetType;
import org.aspose.slides.foss.LightingDirection;
import org.aspose.slides.foss.MaterialPresetType;
import org.aspose.slides.foss.export.SaveFormat;
import org.aspose.slides.foss.drawing.Color;

try (Presentation prs = new Presentation()) {
    IAutoShape shape = prs.getSlides().get(0).getShapes().addAutoShape(
        ShapeType.RECTANGLE, 150, 150, 300, 130
    );
    shape.addTextFrame("Metal Button");

    // Blue solid fill
    shape.getFillFormat().setFillType(FillType.SOLID);
    shape.getFillFormat().getSolidFillColor().setColor(new Color(20, 70, 160));

    // 3D bevel + camera + light + material
    IThreeDFormat tdf = shape.getThreeDFormat();
    tdf.getBevelTop().setBevelType(BevelPresetType.CIRCLE);
    tdf.getBevelTop().setWidth(10);
    tdf.getBevelTop().setHeight(5);
    tdf.getCamera().setCameraType(CameraPresetType.PERSPECTIVE_ABOVE);
    tdf.getLightRig().setLightType(LightRigPresetType.BALANCED);
    tdf.getLightRig().setDirection(LightingDirection.TOP);
    tdf.setMaterial(MaterialPresetType.METAL);
    tdf.setDepth(20);

    prs.save("metal-button.pptx");
}

Комбинирование эффектов на одной фигуре

Тень и 3D‑форматирование могут сосуществовать в одной фигуре, позволяя создавать отшлифованные «card»‑дизайны:

import org.aspose.slides.foss.Presentation;
import org.aspose.slides.foss.ISlide;
import org.aspose.slides.foss.IAutoShape;
import org.aspose.slides.foss.IFillFormat;
import org.aspose.slides.foss.IGradientFormat;
import org.aspose.slides.foss.IEffectFormat;
import org.aspose.slides.foss.IThreeDFormat;
import org.aspose.slides.foss.ShapeType;
import org.aspose.slides.foss.FillType;
import org.aspose.slides.foss.GradientShape;
import org.aspose.slides.foss.BevelPresetType;
import org.aspose.slides.foss.CameraPresetType;
import org.aspose.slides.foss.LightRigPresetType;
import org.aspose.slides.foss.LightingDirection;
import org.aspose.slides.foss.MaterialPresetType;
import org.aspose.slides.foss.export.SaveFormat;
import org.aspose.slides.foss.drawing.Color;

try (Presentation prs = new Presentation()) {
    IAutoShape shape = prs.getSlides().get(0).getShapes().addAutoShape(
        ShapeType.ROUND_CORNER_RECTANGLE, 120, 120, 360, 150
    );
    shape.addTextFrame("Premium Card");

    // Fill
    shape.getFillFormat().setFillType(FillType.SOLID);
    shape.getFillFormat().getSolidFillColor().setColor(new Color(30, 80, 180));

    // 3D bevel
    IThreeDFormat tdf = shape.getThreeDFormat();
    tdf.getBevelTop().setBevelType(BevelPresetType.CIRCLE);
    tdf.getBevelTop().setWidth(8);
    tdf.getCamera().setCameraType(CameraPresetType.PERSPECTIVE_ABOVE);
    tdf.setMaterial(MaterialPresetType.PLASTIC);

    // Drop shadow
    IEffectFormat ef = shape.getEffectFormat();
    ef.enableOuterShadowEffect();
    ef.getOuterShadowEffect().setBlurRadius(14);
    ef.getOuterShadowEffect().setDirection(270);
    ef.getOuterShadowEffect().setDistance(8);
    ef.getOuterShadowEffect().getShadowColor().setColor(new Color(70, 0, 0, 0));

    prs.save("premium-card.pptx");
}

Установка

<dependency>
    <groupId>org.aspose.slides.foss</groupId>
    <artifactId>aspose-slides-foss</artifactId>
    <version>1.0.0</version>
</dependency>

Нет установки Office, нет лицензионных ключей, нет сетевых вызовов; вся обработка происходит локально.


Связанные ресурсы