我想使用Apache POI画一条弧线。为此,我还不清楚我需要设置用于绘制的点的API。
protected void draw(final XMLSlideShow ppt, final XSLFGroupShape containerGroupShape) {
final XSLFFreeformShape shape = containerGroupShape.createFreeform();
// Positioning
double x = container.toPptX(pos.getX());
double y = container.toPptY(pos.getY());
double w = container.toPpt(pos.getW());
double h = container.toPpt(pos.getH());
// Set shape type & anchor
shape.setShapeType(ShapeType.ARC);
shape.setAnchor(new Rectangle2D.Double(x, y, w, h));
shape.setFillColor(toAwtColor(fillColor));
shape.setLineColor(toAwtColor(strokeColor));
// Which API do I need here?
Path2D.Double gp = new Path2D.Double();
gp.moveTo(0, 0);
gp.lineTo(10, 10);
gp.closePath();
shape.setPath(gp);
}
(注意:这是负责在pptx文件中创建圆弧的方法)
我知道Polygons使用Path2D.Double
,但是这种方式不起作用(或者我的示例数据有误吗?)。我什至尝试研究VCS回购,但是我没有运气用弧形找到任何测试用例
有人知道如何配置弧数据(起始角度,弧长)吗?
编辑:
为避免将来造成混乱:
答案 0 :(得分:2)
如任一所述,您可以创建类型为ShapeType.ARC
的{{3}}。那里的默认圆弧是锚点描述的矩形中的四分之一圆。 或者,您可以使用路径创建自由形状。但是你不能将两者结合在一起。
如果创建默认的ShapeType.ARC
并在PowerPoint
中进行查看,您将看到两个用于设置起始角度和终止角度的手柄。进行操作,然后保存文件,然后简单地解压缩*.pptx
文件并查看/ppt/slides/slide1.xml
。在那里您会找到
<a:avLst>
<a:gd name="adj1" fmla="val [startAngle]"/>
<a:gd name="adj2" fmla="val [endAngle]"/>
</a:avLst>
所以我们需要一个AvLst
的{{1}},然后我们可以通过编程方式操纵两个手柄(调整)。
我们唯一必须另外知道的是,起始角度和终止角度的可能值是多少。通过一些测试设置,可以发现0点位于3点钟位置,而整圈为21,600,000。因此6点位为540万,9点位为1080万,12点位为1620万。这些值与整个圆的大小无关,如果矩形不是正方形,则圆弧是椭圆形的,甚至是正确的。
以下代码显示了如何使用该CTGeomGuideList
绘制圆弧。
它还显示了如何使用ShapeType.ARC
绘制圆弧。这里最简单的方法是绘制贝塞尔曲线,因为XSLFSimpleShape已经提供了创建贝塞尔曲线的方法。
XSLFFreeformShape