Текущее поведение: я создаю презентацию PowerPoint с помощью Aspose Slides и добавляю несколько диаграмм (простые прямоугольники) с соединителями на несколько слайдов.
Чего я хочу достичь: я хотел бы иметь возможность вручную настроить положение некоторых фигур/соединителей в своем веб-приложении и отразить эти настройки в окончательном файле 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 становится бесполезным для последующих манипуляций.
Вопросы
Есть ли другой способ такой манипуляции? Может быть, другой подход — например, использование собственного API Office? Я также думал о любом способе встроенной настройки, например. чтобы иметь Iframe, в котором я могу отображать только свою диаграмму (извлеченную из исходного файла) и разрешать корректировки, а затем импортировать ее обратно. В этом случае будет гарантировано отношение 1 к 1 и я не буду бросать в середину свои собственные правила рисования, но я не нашел ничего, чтобы добиться такого поведения. Только Office 365, но его нельзя интегрировать таким образом, как я знаю.
Спасибо за любой совет