gpt4 book ai didi

java - 使用 Apache POI 在 PowerPoint 幻灯片中的两点之间绘制一条线

转载 作者:行者123 更新时间:2023-12-02 02:32:36 25 4
gpt4 key购买 nike

我开始认为我只是看不到明显的东西。

给定以下代码,我想从坐标 [x1, y1] 到 [x2, y2] 画一条线。

int x1 = 20;
int y1 = 10;
int x2 = 30;
int y2 = 5;

XSLFSlide pptSlide = ...

XSLFAutoShape shape = pptSlide.createAutoShape();
shape.setShapeType(ShapeType.LINE);
shape.setAnchor(x1, y1, <width>, <height>);

据我所知,该线开始于 [x1, y1] 的 anchor ,但随后我必须输入宽度和高度,而不是目标点的坐标。但是目标坐标的 y 分量小于起始坐标,因此我尝试将高度设置为负值,这会导致 PowerPoint 尝试打开生成的 PPTX 文档时出现错误(“PowerPoint 发现了一个问题”)内容位于文件 out.pptx 中。");

我很确定我只是忽略了这个问题的明显解决方案,所以任何人都可以帮助我找出如何从文档中的一个点到另一个点绘制一条线?

最佳答案

SetAnchor() 采用 AWT Rectangle2D,它实际上并不关心宽度或高度是否为负(尽管高度为负的矩形不是真实对象)毕竟,是吗?)。但 POI 不会那样解释它,而且不幸的是,它不会抛出异常来让您知道。

据我了解您的情况,您只需选择 x1x2y1y2 之间较低的起始坐标 使正宽度和高度与您所需的端点一致。

类似这样的事情:

// using Apache POI ooxml 3.17
static void drawBetweenTwoPoints(XSLFAutoShape shape, double x1, double x2, double y1, double y2) {
shape.setAnchor(new Rectangle2D.Double(
x1 <= x2 ? x1 : x2, // choose the lowest x value
y1 <= y2 ? y1 : y2, // choose the lowest y value
Math.abs(x2 - x1), // get the actual width
Math.abs(y2 - y1) // get the actual height
));

shape.setFlipVertical(y2 < y1); // lines are drawn from rectangle top-left to
// bottom right by default.
// When y2 is less than y1, flip the shape.
}

关于java - 使用 Apache POI 在 PowerPoint 幻灯片中的两点之间绘制一条线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46850603/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com