KOP_PIbd-33_Volkov_N.A._Tik.../KopLab1/FormLibrary/ComponentHistogramToPdf.cs

89 lines
3.6 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using FormLibrary.HelperClasses;
using MigraDoc.DocumentObjectModel;
using MigraDoc.DocumentObjectModel.Shapes;
using MigraDoc.DocumentObjectModel.Shapes.Charts;
using MigraDoc.Rendering;
using OxyPlot.Series;
using OxyPlot;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using OxyPlot.WindowsForms;
namespace FormLibrary
{
public partial class ComponentHistogramToPdf : Component
{
public ComponentHistogramToPdf()
{
InitializeComponent();
}
public ComponentHistogramToPdf(IContainer container)
{
container.Add(this);
InitializeComponent();
}
public void CreateHistogramPdf(string filePath, string documentTitle, string chartTitle, LegendPosition legendPosition, List<ChartData> chartData)
{
// Проверка на заполненность входных данных
if (string.IsNullOrEmpty(filePath))
throw new ArgumentException("Путь к файлу не может быть пустым.");
if (string.IsNullOrEmpty(documentTitle))
throw new ArgumentException("Название документа не может быть пустым.");
if (string.IsNullOrEmpty(chartTitle))
throw new ArgumentException("Заголовок диаграммы не может быть пустым.");
if (chartData == null || chartData.Count == 0)
throw new ArgumentException("Набор данных не может быть пустым.");
foreach (var data in chartData)
{
if (string.IsNullOrEmpty(data.SeriesName) || data.Data == null || data.Data.Count == 0)
throw new ArgumentException($"Набор данных для серии '{data.SeriesName}' некорректен.");
}
// Создание графика
var plotModel = new PlotModel { Title = chartTitle };
foreach (var data in chartData)
{
var barSeries = new BarSeries { Title = data.SeriesName };
foreach (var item in data.Data)
{
barSeries.Items.Add(new BarItem(item.Value));
}
plotModel.Series.Add(barSeries);
}
// Сохранение графика в изображение
var pngExporter = new PngExporter { Width = 600, Height = 400};
using (var stream = new MemoryStream())
{
pngExporter.Export(plotModel, stream);
File.WriteAllBytes("chart.png", stream.ToArray());
}
// Создание документа
Document document = new Document();
document.Info.Title = documentTitle;
document.Info.Subject = "Гистограмма";
Section section = document.AddSection();
section.AddParagraph(chartTitle, "Heading1");
// Вставка изображения в PDF
var image = section.AddImage("chart.png");
image.Width = Unit.FromCentimeter(15);
// Сохранение документа в PDF
PdfDocumentRenderer renderer = new PdfDocumentRenderer(true) { Document = document };
renderer.RenderDocument();
renderer.PdfDocument.Save(filePath);
// Удалите временное изображение, если необходимо
File.Delete("chart.png");
}
}
}