首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何为Apache演示文稿中创建的XSLF形状设置渐变填充?

如何为Apache演示文稿中创建的XSLF形状设置渐变填充?
EN

Stack Overflow用户
提问于 2016-11-17 23:15:40
回答 1查看 599关注 0票数 1

我需要创建一个具有水平或垂直梯度的矩形,填充我用Apache创建的PowerPoint演示文稿。

我用XSLFFreeformShape表示矩形:

代码语言:javascript
复制
    XSLFGroupShape currentGroup = ...;
    XSLFFreeformShape ppShape = currentGroup.createFreeform();
    ppShape.setPath( ... );

设置单一的平面颜色很容易:

代码语言:javascript
复制
    ppShape.setFillColor( myColor );

还有一种通过超类方法XSLFSimpleShape.getFillStyle()获取梯度填充细节的机制。

但是没有相应的setFillStyle(),我没有看到任何其他简单的公共方式来指定梯度。

问题:我可以创建一个带有渐变的矩形吗?如果可以,如何创建?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-11-18 00:34:01

在定义当前API时,我主要关注的是给图像渲染器提供足够的信息,而忽略了很多写访问属性。

因此,目前您需要使用XmlObjects来设置梯度:

代码语言:javascript
复制
package org.apache.poi.xslf;

import java.awt.geom.Rectangle2D;
import java.io.FileOutputStream;

import org.apache.poi.sl.usermodel.ShapeType;
import org.apache.poi.xslf.usermodel.XMLSlideShow;
import org.apache.poi.xslf.usermodel.XSLFAutoShape;
import org.apache.poi.xslf.usermodel.XSLFSlide;
import org.junit.Test;
import org.openxmlformats.schemas.drawingml.x2006.main.CTGradientFillProperties;
import org.openxmlformats.schemas.drawingml.x2006.main.CTGradientStop;
import org.openxmlformats.schemas.drawingml.x2006.main.CTGradientStopList;
import org.openxmlformats.schemas.presentationml.x2006.main.CTShape;

public class TestGradientFill {
    @Test
    public void fill() throws Exception {
        XMLSlideShow ppt = new XMLSlideShow();
        XSLFSlide sl = ppt.createSlide();
        XSLFAutoShape as = sl.createAutoShape();
        as.setShapeType(ShapeType.STAR_12);
        as.setAnchor(new Rectangle2D.Double(100, 100, 100, 100));
        CTShape cs = (CTShape)as.getXmlObject();
        CTGradientFillProperties gFill = cs.getSpPr().addNewGradFill();
        gFill.addNewLin().setAng(1800000);
        CTGradientStopList list = gFill.addNewGsLst();

        // set the start pos
        CTGradientStop stop = list.addNewGs();
        stop.setPos(0);
        stop.addNewSrgbClr().setVal(new byte[]{ (byte)0x94, (byte)0xbd, (byte)0x5e });

        // set the end pos (100000 = 100%)
        stop = list.addNewGs();
        stop.setPos(100000);
        stop.addNewSrgbClr().setVal(new byte[]{ 0,0,0 });

        FileOutputStream fos = new FileOutputStream("gradient.pptx");
        ppt.write(fos);
        fos.close();
    }
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40666763

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档