105 lines
3.9 KiB
C#
105 lines
3.9 KiB
C#
using Aspose.Words;
|
||
using Aspose.Words.Drawing.Charts;
|
||
using DocumentFormat.OpenXml.Packaging;
|
||
using Labs.HelperClasses;
|
||
using Labs.HelperClasses.WordLineChart;
|
||
using System;
|
||
using System.Collections.Generic;
|
||
using System.ComponentModel;
|
||
using System.Diagnostics;
|
||
using System.Linq;
|
||
using System.Text;
|
||
using System.Threading.Tasks;
|
||
|
||
namespace Labs
|
||
{
|
||
public partial class WordLineChart : Component
|
||
{
|
||
public WordLineChart()
|
||
{
|
||
InitializeComponent();
|
||
}
|
||
|
||
public WordLineChart(IContainer container)
|
||
{
|
||
container.Add(this);
|
||
|
||
InitializeComponent();
|
||
}
|
||
|
||
public void CreateLineChart(WordLineChartConfig config)
|
||
{
|
||
// Проверка наличия заголовка, пути и названия диаграммы
|
||
if (string.IsNullOrEmpty(config.LineChartTitle) || string.IsNullOrEmpty(config.FilePath) || string.IsNullOrEmpty(config.DocumentTitle))
|
||
{
|
||
throw new ArgumentException("Были переданы пустые параметры");
|
||
}
|
||
//Проверка, что данные не пустые
|
||
foreach (var _data in config.Data)
|
||
{
|
||
if (string.IsNullOrEmpty(_data.SeriaName) || string.IsNullOrEmpty(_data.Data.ToString()))
|
||
{
|
||
throw new ArgumentException("Были переданы пустые данные");
|
||
}
|
||
}
|
||
|
||
Document doc = new Document();
|
||
DocumentBuilder builder = new DocumentBuilder(doc);
|
||
|
||
//Стиль для заголовка док-а
|
||
Style titleStyle = builder.Document.Styles.Add(StyleType.Paragraph, "Title");
|
||
titleStyle.Font.Size = 16;
|
||
titleStyle.Font.Bold = true;
|
||
titleStyle.ParagraphFormat.SpaceAfter = 12;
|
||
|
||
// Добавление заголовка документа
|
||
builder.ParagraphFormat.Style = titleStyle;
|
||
builder.Writeln(config.DocumentTitle);
|
||
|
||
// Вставка диаграммы
|
||
Aspose.Words.Drawing.Shape chartShape = builder.InsertChart(ChartType.Line, 500, 300);
|
||
Chart chart = chartShape.Chart;
|
||
|
||
// Заголовок диаграммы
|
||
chart.Title.Text = config.LineChartTitle;
|
||
|
||
//Расположение легенды
|
||
switch (config.LegendLocation)
|
||
{
|
||
case LegendLocation.Left:
|
||
//LegendPosition - класс Aspose
|
||
chart.Legend.Position = LegendPosition.Left;
|
||
break;
|
||
case LegendLocation.Top:
|
||
chart.Legend.Position = LegendPosition.Top;
|
||
break;
|
||
case LegendLocation.Right:
|
||
chart.Legend.Position = LegendPosition.Right;
|
||
break;
|
||
case LegendLocation.Bottom:
|
||
chart.Legend.Position = LegendPosition.Bottom;
|
||
break;
|
||
}
|
||
|
||
//chart.Legend.Position = (Aspose.Words.Drawing.Charts.LegendPosition)config.LegendLocation;
|
||
|
||
ChartSeriesCollection seriesColl = chart.Series;
|
||
seriesColl.Clear();
|
||
// Заполнение сериями и подписями снизу
|
||
foreach (var diagramDatas in config.Data)
|
||
{
|
||
ChartSeries seria = seriesColl.Add(diagramDatas.SeriaName, config.Categories, diagramDatas.Data);
|
||
|
||
// Настройка маркера
|
||
seria.Marker.Symbol = MarkerSymbol.Circle; // круг
|
||
seria.Marker.Size = 4; // размер
|
||
}
|
||
|
||
// Сохранение док-а
|
||
doc.Save(config.FilePath);
|
||
//Удаление вотермарки и текста от Aspose
|
||
new Remover().Remove(config.FilePath);
|
||
}
|
||
}
|
||
}
|