我们正在制作PowerPoint演示文稿,其中包含折线图。在某些情况下,我们需要绘制一个箭头(或其他形状),指向图表中的特定点,给定图表中点的(x,y)
值。
为此,我们需要图表点的绝对位置,相对于幻灯片的左上角。
目前我们正在使用Interop来计算图表绘图区域的尺寸,然后我们可以从中计算给定图表点的绝对位置,如下所示:
// The chart point's X- and Y values
double x = ... ;
double y = ... ;
PowerPoint.Shape shape = ... ;
PowerPoint.Chart chart = shape.Chart;
double plotAreaLeft = shape.Left + chart.ChartArea.Left + chart.PlotArea.InsideLeft;
double plotAreaTop = shape.Top + chart.ChartArea.Top + chart.PlotArea.InsideTop;
double plotAreaWidth = chart.PlotArea.InsideWidth;
double plotAreaHeight = chart.PlotArea.InsideHeight;
// Calculating the range of X- and Y values
double xMin = ... ;
double xRange = ... ;
double yMin = ... ;
double yRange = ... ;
// Calculating the exact position of the point
double left = plotAreaLeft + (x - xMin) * plotAreaWidth / xRange;
double top = plotAreaTop + (y - yMin) * plotAreaHeight / yRange;
现在这很好用,但我们正在将应用程序移动到服务器,并从Interop切换到OpenXml以创建演示文稿。
问题是PlotArea的尺寸不是固定的,而是由PowerPoint动态计算的,这个计算似乎取决于很多因素,包括标签,字体,图例和用户手动改变PlotArea的位置。我们正在尝试对此计算进行逆向工程,但到目前为止,我们还没有能够提出每次都能达到目标的解决方案。
我们已经尝试过商业框架,例如Aspose.Slides,但它们似乎也有同样的问题(功能列在他们的API中,但是值从未计算过 - 它们的值总是NaN
)。
我的问题是:是否有人可以使用我们可以使用的任何帮助或资源,或有任何遇到此问题的经验?
提前致谢。
答案 0 :(得分:0)
我正在Aspose担任开发人员推广员。
感谢您指出图表点的绝对位置问题,并计算Aspose.Slides中PlotArea的尺寸。
要解决上述问题:
ActualX,ActualY,ActualWidth,ActualHeight已在v17.3中添加到IChartPlotArea:https://apireference.aspose.com/net/slides/aspose.slides.charts/ichartplotarea
在v17.4中修复了获取PlotArea和其他图表元素(DataLabel,DataPoint等)的绝对X,Y值的问题。
我建议您尝试使用最新版本的Aspose.Slides以获得最新的更新和修复。
希望能解决您的问题。
答案 1 :(得分:-1)
我忍不住;我也对您的问题的解决方案感兴趣(对于this产品)。这样我希望收到每条新评论的提醒(我没有看到'观看主题'选项)。