You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Apache POI 5.2.5的XMLSlideShow无法创建气球与标注形状求助

解决Apache POI 5.2.5中无法创建气球、标注类形状的问题

标注类(如ACCENT_CALLOUT_1、BALLOON)和基础形状的核心区别在于:这类形状包含可调整的特殊结构(比如标注的尾巴、气球的弧度),必须手动设置**调整参数(adjustments)**才能正确渲染。默认情况下POI不会为这类形状自动生成调整值,导致形状无法正常显示。

修改后的Kotlin代码

import org.apache.poi.sl.usermodel.*
import org.apache.poi.xslf.usermodel.XMLSlideShow
import java.awt.Color
import java.awt.Rectangle

fun main() {
    val slideShow: SlideShow<*, *> = XMLSlideShow()
    val slide = slideShow.createSlide()

    // 带调整值的标注形状
    var autoShape = slide.createAutoShape()
    autoShape.shapeType = ShapeType.ACCENT_CALLOUT_1
    autoShape.fillColor = Color.BLUE
    autoShape.anchor = Rectangle(100, 400, 150, 100)
    // 设置标注尾巴的位置偏移(参数取值0-1,对应控制点相对形状的比例)
    autoShape.adjustments = doubleArrayOf(0.2, 0.8)

    // 带调整值的气球形状
    autoShape = slide.createAutoShape()
    autoShape.shapeType = ShapeType.BALLOON
    autoShape.fillColor = Color.GREEN
    autoShape.anchor = Rectangle(300, 400, 150, 100)
    // 气球调整值:第一个控制尾巴位置,第二个控制气球弧度
    autoShape.adjustments = doubleArrayOf(0.3, 0.5)

    // 带调整值的弯曲箭头
    autoShape = slide.createAutoShape()
    autoShape.shapeType = ShapeType.BENT_ARROW
    autoShape.fillColor = Color.YELLOW
    autoShape.anchor = Rectangle(500, 400, 100, 100)
    // 调整值控制箭头弯曲程度
    autoShape.adjustments = doubleArrayOf(0.4)

    // 正常工作的基础形状
    autoShape = slide.createAutoShape()
    autoShape.shapeType = ShapeType.ROUND_1_RECT
    autoShape.fillColor = Color.CYAN
    autoShape.anchor = Rectangle(100, 550, 100, 50)

    val line = slide.createAutoShape()
    line.shapeType = ShapeType.LINE
    line.anchor = Rectangle(250, 250, 100, 200)
    line.fillColor = Color(0, 128, 0)

    // 写入输出文件
    slideShow.write(java.io.FileOutputStream("test-shapes.pptx"))
    slideShow.close()
}

关键细节说明

  • 调整值的作用:不同标注类形状需要的调整参数数量和含义不同,参数取值通常在0-1之间,对应形状可编辑控制点的相对位置:
    • 标注类(ACCENT_CALLOUT_*系列):一般需要2个参数,分别控制标注尾巴的水平、垂直偏移比例
    • 气球形状(BALLOON):2个参数分别控制尾巴位置和气球弧度
    • 弯曲箭头(BENT_ARROW):1个参数控制箭头的弯曲程度
  • 锚点尺寸:标注类形状需要足够的宽高(anchor参数),过小的尺寸可能导致形状显示异常

内容的提问来源于stack exchange,提问作者Mahesh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 08:46:07