当前位置: 首页 > 知识库问答 >
问题:

使用Apache POI在PowerPoint幻灯片中的两点之间画一条线

裴欣荣
2023-03-14

我开始认为我只是无法看到显而易见的事情。

给定下面的代码,我想从坐标[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]开始,但是我必须输入宽度和高度,而不是目标点的坐标。但是目标坐标的y分量小于起始坐标的y分量,所以我尝试将高度设置为负值,这导致PowerPoint试图打开生成的PPTX文档时出错(“PowerPoint发现out.pptx文件中的内容有问题”);

我很确定我只是忽略了这个显而易见的解决方案,所以有人能帮我找出如何在文档中的一点和另一点之间画一条线吗?

共有1个答案

夏侯涵映
2023-03-14

SetAnchor()采用AWT<code>Rectangle2D

根据我对您的方案的理解,您只需要在 x1 和 x2、y1y2 之间选择较低的起始坐标,以便正的宽度和高度与所需的终结点一致。

像这样的东西:

// 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.
}
 类似资料:
  • 描述 (Description) 它在两张幻灯片之间提供空间。 例子 (Example) 以下示例演示了Framework7中幻灯片之间空间的使用 - <!DOCTYPE html> <html> <head> <meta name = "viewport" content = "width = device-width, initial-scale = 1,

  • 现在我生成了一组幻灯片,当我以pps形式打开它时,它不会在幻灯片之间转换,除非我在微软的powerpoint编辑器中打开它(我可以在其中添加转换)并保存它。然后它可以正常转换。 我认为这与幻灯片母版有关:https://poi.apache.org/apidocs/org/apache/poi/xslf/usermodel/XSLFSlideMaster.html但我不确定它是如何使用的,因为它说

  • 我们正在尝试使用Apache POI 3.16从PowerPoint幻灯片中删除图表,但我们遇到了困难。 我们的代码执行以下步骤: 打开现有的 PowerPoint 文档(模板文档) 添加和删除幻灯片 更新现有幻灯片中的图表 这很好。 在某些时候,我们需要从给定的幻灯片中删除图表。这是我们的尝试: < code>pkg.removePart()调用似乎可以工作,但是将最终的PowerPoint文档

  • 上下文:C#中的PowerPoint幻灯片有一个属性slide。名称(通常包含任意字符串值)。在我的C#应用程序中,我想使用这个属性来标识幻灯片(幻灯片顺序不可靠)。 问题:如何手动设置幻灯片。PowerPoint应用程序中的Name属性? 我的问题非常像:“如何在PowerPoint幻灯片中命名对象?”,但只是在幻灯片级别上。 任何帮助都将不胜感激。

  • 我试图在演示文稿中添加幻灯片,但遇到了错误。 上下文:我有一个包含200多页的word文件。每个页面包含一个图像(截图)。我想为MS Word文档中的每个图片创建一个PowerPoint文档;我想将图片粘贴到空白幻灯片中。 我在的行中有一个错误

  • 在PowerPoint VBA编辑器中,我们在VBA项目窗口中获得幻灯片列表,分类在“微软PowerPoint对象”下。此列表将包括包含 ActiveX 控件的幻灯片。 幻灯片上显示有数字(“幻灯片1”、“幻灯片3”等),这些数字看起来是基于幻灯片添加到演示文稿中的顺序——而不是当前演示文稿中幻灯片的实际顺序。但是,幻灯片的标题或名称不包括在内。这使得使用起来很混乱,并且很难找到具有想要使用的控件