在PPTX中绘制弧

时间:2018-06-20 10:36:39

标签: java apache-poi powerpoint

我想使用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回购,但是我没有运气用弧形找到任何测试用例

有人知道如何配置弧数据(起始角度,弧长)吗?

编辑:

为避免将来造成混乱:

  • 我不知道如何描述曲线。我不是只是通过2个点来描述曲线。
  • 上面的代码是我正在测试的示例,有效

1 个答案:

答案 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
相关问题