当前行为: 我正在使用 Aspose Slides 生成 PowerPoint 演示文稿,并且在几张幻灯片中添加了一些带有连接器的图表(简单矩形)。
我想要实现的目标: 我希望能够在我的 Web 应用程序中手动调整一些形状/连接器的位置,并将这些调整反映在最终的 powerpoint 文件中。
例子:
下一个代码例如是创建 3 个矩形和其中 2 个之间的连接器。此连接器穿过第三个矩形,我希望用户进行最后调整,以移动相交的矩形或重新排列连接器本身
using (var presentation = new Presentation())
{
var slide = presentation.Slides[0];
var primaryShape = slide.Shapes.AddAutoShape(ShapeType.Rectangle, 150, 50, 100, 30);
primaryShape.TextFrame.Text = "shape 1";
var targetShape = slide.Shapes.AddAutoShape(ShapeType.Rectangle, 350, 250, 100, 30);
targetShape.TextFrame.Text = "shape 2";
var intersectedShape = slide.Shapes.AddAutoShape(ShapeType.Rectangle, 300, 180, 100, 30);
intersectedShape.TextFrame.Text = "intersected shape";
var arrow = slide.Shapes.AddConnector(ShapeType.CurvedConnector2, 0, 0, 10, 10, true);
arrow.LineFormat.FillFormat.FillType = FillType.Solid;
arrow.LineFormat.FillFormat.SolidFillColor.Color = System.Drawing.Color.Red;
arrow.StartShapeConnectionSiteIndex = 3;
arrow.StartShapeConnectedTo = primaryShape;
arrow.EndShapeConnectedTo = targetShape;
arrow.EndShapeConnectionSiteIndex = 0;
presentation.Save(fileNameToSave, Aspose.Slides.Export.SaveFormat.Pptx);
}
我尝试过的和问题:
1) 我尝试在 Angular 图表框架中显示我的图表,因为我知道矩形的位置和连接器的类型。问题:Aspose 没有提供连接器通过的确切信息,例如它们是否与某些形状重叠。同样的问题是用于保存返回过程。如果某个连接器与形状交叉,我将在我的网络应用程序中对其进行调整 - 我无法将其 1 对 1 保存在 powerpoint 幻灯片中。一般来说,这里的问题是我正在介绍我自己的关于如何绘制连接器的规则,它与 powerpoint 引擎规则一致。
2)我尝试将图表导出为 SVG 以对 SVG 对象进行一些操作,然后将其导入回来。问题:SVG 将连接器表示为带有一些连接器图像的矩形。没有连接信息,什么都没有。此外,在从 SVG 导入回 Powerpoint 的过程中 - 结果是完全不可预测的,形状的连接不会被存储。PPT对于以后的操作变得毫无用处。
问题
有没有其他的这种操纵方式?也许是另一种方法——比如使用本机 Office API?我也在考虑任何嵌入调整的方式,例如有一个 iframe,我可以在其中只显示我的图表(从初始文件中提取)并允许调整,然后将其导入回来。在这种情况下,将保证 1 对 1 的关系,并且我不会将我自己的绘图规则放在中间,但我发现没有任何东西可以实现这种行为。只有 Office 365,但它不能以我所知道的方式集成。
谢谢你的任何建议