86 lines
2.5 KiB
C#
86 lines
2.5 KiB
C#
using MigraDoc.DocumentObjectModel;
|
|
using MigraDoc.DocumentObjectModel.Shapes.Charts;
|
|
using MigraDoc.Rendering;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.ComponentModel;
|
|
using System.Diagnostics;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
|
|
namespace ViewComponents.NotVisualComponents
|
|
{
|
|
public partial class PieChartPDF : Component
|
|
{
|
|
public PieChartPDF()
|
|
{
|
|
InitializeComponent();
|
|
}
|
|
|
|
public PieChartPDF(IContainer container)
|
|
{
|
|
container.Add(this);
|
|
|
|
InitializeComponent();
|
|
}
|
|
|
|
public bool CreatePieChart(DataForPDFPieChart dataForPDFPie)
|
|
{
|
|
// проверки
|
|
if (string.IsNullOrEmpty(dataForPDFPie.FilePath) || string.IsNullOrEmpty(dataForPDFPie.DocumentTitle) || string.IsNullOrEmpty(dataForPDFPie.ChartTitle)
|
|
|| string.IsNullOrEmpty(dataForPDFPie.LegendName)
|
|
|| dataForPDFPie.Items.Count == 0) throw new ArgumentException("Недостаточно данных");
|
|
|
|
Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
|
|
|
|
Document _document = new Document();
|
|
var section = _document.AddSection();
|
|
var paragraph = section.AddParagraph(dataForPDFPie.DocumentTitle);
|
|
paragraph.Format.Alignment = ParagraphAlignment.Center;
|
|
paragraph.Format.SpaceAfter = "2cm";
|
|
|
|
Chart chart = section.AddChart(ChartType.Pie2D);
|
|
chart.Width = Unit.FromCentimeter(16);
|
|
chart.Height = Unit.FromCentimeter(12);
|
|
chart.HeaderArea.AddParagraph(dataForPDFPie.ChartTitle); // заголовок диаграммы
|
|
|
|
Series series = chart.SeriesCollection.AddSeries();
|
|
series.Name = dataForPDFPie.LegendName; // название сериии
|
|
XSeries xseries = chart.XValues.AddXSeries();
|
|
|
|
foreach ((double, string) el in dataForPDFPie.Items) // заполнение серии
|
|
{
|
|
series.Add(el.Item1);
|
|
xseries.Add(el.Item2);
|
|
}
|
|
|
|
switch (dataForPDFPie.diagLegend) // позиция легенды
|
|
{
|
|
case DiagramLegendEnum.Top:
|
|
chart.TopArea.AddLegend();
|
|
break;
|
|
case DiagramLegendEnum.Bottom:
|
|
chart.BottomArea.AddLegend();
|
|
break;
|
|
case DiagramLegendEnum.Right:
|
|
chart.RightArea.AddLegend();
|
|
break;
|
|
case DiagramLegendEnum.Left:
|
|
chart.LeftArea.AddLegend();
|
|
break;
|
|
}
|
|
|
|
chart.DataLabel.Type = DataLabelType.Percent;
|
|
chart.DataLabel.Position = DataLabelPosition.OutsideEnd;
|
|
|
|
PdfDocumentRenderer renderer = new PdfDocumentRenderer(true);
|
|
renderer.Document = _document;
|
|
renderer.RenderDocument();
|
|
renderer.PdfDocument.Save(dataForPDFPie.FilePath);
|
|
|
|
return true;
|
|
}
|
|
}
|
|
}
|