我使用 Apache POI 3.16 在 PowerPoint 演示文稿中插入圆角矩形形状:
XSLFAutoShape cardRect = slide.createAutoShape();
cardRect.setShapeType(ShapeType.ROUND_RECT);
cardRect.setLineColor(Color.LIGHT_GRAY);
如何调整矩形的圆角半径?
最佳答案
到目前为止,这还没有在 apache poi
中实现。但我们可以使用以 org.openxmlformats.schemas.presentationml.x2006.main.CTShape 开头的底层对象.
要获取更多信息,我们可以使用 PowerPoint
创建一个具有圆角矩形形状的简单 PPT,然后简单地解压缩 *.pptx
文件并查看/ppt/slides/slide1.xml
。
对于圆角矩形的半径,我们在那里找到:
<a:avLst>
<a:gd name="adj" fmla="val 25000"/>
</a:avLst>
在形状的 XML 中。
这意味着:有一个 gd(Shape Guide)具有名称“adj”和公式“val n”,其中 n 介于 0(最小值)和 50000(最大值)之间。
所以:
import java.io.FileOutputStream;
import org.apache.poi.xslf.usermodel.*;
import org.apache.poi.sl.usermodel.*;
import org.apache.xmlbeans.XmlObject;
import org.openxmlformats.schemas.presentationml.x2006.main.CTShape;
import org.openxmlformats.schemas.drawingml.x2006.main.CTGeomGuideList;
import org.openxmlformats.schemas.drawingml.x2006.main.CTGeomGuide;
import java.awt.Rectangle;
import java.awt.Color;
public class CreatePPTXRoundedRectangelShape {
static void setRadius(XSLFAutoShape autoShape, int percent) {
if (ShapeType.ROUND_RECT.equals(autoShape.getShapeType())) {
XmlObject xmlObject = autoShape.getXmlObject();
CTShape ctShape = (CTShape)xmlObject;
CTGeomGuideList ctGeomGuideList = ctShape.getSpPr().getPrstGeom().getAvLst();
CTGeomGuide ctGeomGuide = ctGeomGuideList.addNewGd();
ctGeomGuide.setName("adj");
ctGeomGuide.setFmla("val " + (50000*percent/100));
}
}
public static void main(String[] args) throws Exception {
SlideShow slideShow = new XMLSlideShow();
Slide slide = slideShow.createSlide();
int slideWidth = slideShow.getPageSize().width;
XSLFAutoShape cardRect = ((XSLFSlide)slide).createAutoShape();
cardRect.setShapeType(ShapeType.ROUND_RECT);
cardRect.setLineColor(Color.LIGHT_GRAY);
cardRect.setAnchor(new Rectangle(100, 10, slideWidth-200, 90));
//default radius
cardRect = ((XSLFSlide)slide).createAutoShape();
cardRect.setShapeType(ShapeType.ROUND_RECT);
cardRect.setLineColor(Color.LIGHT_GRAY);
cardRect.setAnchor(new Rectangle(100, 110, slideWidth-200, 90));
setRadius(cardRect, 0); //0 radius
cardRect = ((XSLFSlide)slide).createAutoShape();
cardRect.setShapeType(ShapeType.ROUND_RECT);
cardRect.setLineColor(Color.LIGHT_GRAY);
cardRect.setAnchor(new Rectangle(100, 210, slideWidth-200, 90));
setRadius(cardRect, 50); //50% radius
cardRect = ((XSLFSlide)slide).createAutoShape();
cardRect.setShapeType(ShapeType.ROUND_RECT);
cardRect.setLineColor(Color.LIGHT_GRAY);
cardRect.setAnchor(new Rectangle(100, 310, slideWidth-200, 90));
setRadius(cardRect, 100); //100% radius
cardRect = ((XSLFSlide)slide).createAutoShape();
cardRect.setShapeType(ShapeType.ROUND_RECT);
cardRect.setLineColor(Color.LIGHT_GRAY);
cardRect.setAnchor(new Rectangle(100, 410, slideWidth-200, 90));
setRadius(cardRect, 33); //33% radius
FileOutputStream out = new FileOutputStream("CreatePPTXRoundedRectangelShape.pptx");
slideShow.write(out);
out.close();
}
}
关于java - 使用 Apache POI 设置 PowerPoint 文档中圆角矩形的半径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44030139/