我需要创建一个具有水平或垂直梯度的矩形,填充我用Apache创建的PowerPoint演示文稿。
我用XSLFFreeformShape表示矩形:
XSLFGroupShape currentGroup = ...;
XSLFFreeformShape ppShape = currentGroup.createFreeform();
ppShape.setPath( ... );设置单一的平面颜色很容易:
ppShape.setFillColor( myColor );还有一种通过超类方法XSLFSimpleShape.getFillStyle()获取梯度填充细节的机制。
但是没有相应的setFillStyle(),我没有看到任何其他简单的公共方式来指定梯度。
问题:我可以创建一个带有渐变的矩形吗?如果可以,如何创建?
发布于 2016-11-18 00:34:01
在定义当前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();
}
}https://stackoverflow.com/questions/40666763
复制相似问题