gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 04:37:34 31 4
gpt4 key购买 nike

我需要在使用 Apache POI API 创建的 PowerPoint 演示文稿中创建一个具有水平或垂直渐变填充的矩形。

我正在为矩形使用 XSLFFreeformShape:

    XSLFGroupShape currentGroup = ...;
XSLFFreeformShape ppShape = currentGroup.createFreeform();
ppShape.setPath( ... );

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

    ppShape.setFillColor( myColor );

并且有一种机制可以通过父类(super class)方法XSLFSimpleShape.getFillStyle()获取渐变填充的详细信息。

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

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

最佳答案

在定义当前 API 时,我主要专注于为图像渲染器提供足够的信息,可能遗漏了很多写访问属性。

所以目前你需要使用XmlObjects来设置渐变:

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();
}
}

关于java - 如何为在 Apache POI 演示文稿中创建的 XSLF 形状设置渐变填充?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40666763/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com