надеюсь пойдет, но мне кажется что нет...
This commit is contained in:
parent
acba0a072a
commit
580a08d48f
@ -9,6 +9,8 @@ using System;
|
|||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.ComponentModel;
|
using System.ComponentModel;
|
||||||
using OxyPlot.WindowsForms;
|
using OxyPlot.WindowsForms;
|
||||||
|
using OxyPlot.Legends;
|
||||||
|
using OxyPlot.Annotations;
|
||||||
|
|
||||||
namespace FormLibrary
|
namespace FormLibrary
|
||||||
{
|
{
|
||||||
@ -25,9 +27,9 @@ namespace FormLibrary
|
|||||||
|
|
||||||
InitializeComponent();
|
InitializeComponent();
|
||||||
}
|
}
|
||||||
public void CreateHistogramPdf(string filePath, string documentTitle, string chartTitle, LegendPosition legendPosition, List<ChartData> chartData)
|
public void CreateHistogramPdf(string filePath, string documentTitle, string chartTitle, LegendPositions legendPosition, List<ChartData> chartData)
|
||||||
{
|
{
|
||||||
// Проверка на заполненность входных данных
|
// Проверка входных данных...
|
||||||
if (string.IsNullOrEmpty(filePath))
|
if (string.IsNullOrEmpty(filePath))
|
||||||
throw new ArgumentException("Путь к файлу не может быть пустым.");
|
throw new ArgumentException("Путь к файлу не может быть пустым.");
|
||||||
if (string.IsNullOrEmpty(documentTitle))
|
if (string.IsNullOrEmpty(documentTitle))
|
||||||
@ -43,8 +45,9 @@ namespace FormLibrary
|
|||||||
throw new ArgumentException($"Набор данных для серии '{data.SeriesName}' некорректен.");
|
throw new ArgumentException($"Набор данных для серии '{data.SeriesName}' некорректен.");
|
||||||
}
|
}
|
||||||
|
|
||||||
// Создание графика
|
// создание графика
|
||||||
var plotModel = new PlotModel { Title = chartTitle };
|
var plotModel = new PlotModel { Title = chartTitle };
|
||||||
|
|
||||||
foreach (var data in chartData)
|
foreach (var data in chartData)
|
||||||
{
|
{
|
||||||
var barSeries = new BarSeries { Title = data.SeriesName };
|
var barSeries = new BarSeries { Title = data.SeriesName };
|
||||||
@ -55,15 +58,18 @@ namespace FormLibrary
|
|||||||
plotModel.Series.Add(barSeries);
|
plotModel.Series.Add(barSeries);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Сохранение графика в изображение
|
// Добавление легенды
|
||||||
var pngExporter = new PngExporter { Width = 600, Height = 400};
|
AddLegend(plotModel, legendPosition);
|
||||||
|
|
||||||
|
// сохранение графика в изображение
|
||||||
|
var pngExporter = new PngExporter { Width = 600, Height = 400 };
|
||||||
using (var stream = new MemoryStream())
|
using (var stream = new MemoryStream())
|
||||||
{
|
{
|
||||||
pngExporter.Export(plotModel, stream);
|
pngExporter.Export(plotModel, stream);
|
||||||
File.WriteAllBytes("chart.png", stream.ToArray());
|
File.WriteAllBytes("chart.png", stream.ToArray());
|
||||||
}
|
}
|
||||||
|
|
||||||
// Создание документа
|
// создание документа
|
||||||
Document document = new Document();
|
Document document = new Document();
|
||||||
document.Info.Title = documentTitle;
|
document.Info.Title = documentTitle;
|
||||||
document.Info.Subject = "Гистограмма";
|
document.Info.Subject = "Гистограмма";
|
||||||
@ -71,18 +77,43 @@ namespace FormLibrary
|
|||||||
Section section = document.AddSection();
|
Section section = document.AddSection();
|
||||||
section.AddParagraph(chartTitle, "Heading1");
|
section.AddParagraph(chartTitle, "Heading1");
|
||||||
|
|
||||||
// Вставка изображения в PDF
|
// вставка изображения в PDF
|
||||||
var image = section.AddImage("chart.png");
|
var image = section.AddImage("chart.png");
|
||||||
image.Width = Unit.FromCentimeter(15);
|
image.Width = Unit.FromCentimeter(15);
|
||||||
|
|
||||||
// Сохранение документа в PDF
|
|
||||||
PdfDocumentRenderer renderer = new PdfDocumentRenderer(true) { Document = document };
|
PdfDocumentRenderer renderer = new PdfDocumentRenderer(true) { Document = document };
|
||||||
renderer.RenderDocument();
|
renderer.RenderDocument();
|
||||||
renderer.PdfDocument.Save(filePath);
|
renderer.PdfDocument.Save(filePath);
|
||||||
|
|
||||||
// Удалите временное изображение, если необходимо
|
|
||||||
File.Delete("chart.png");
|
File.Delete("chart.png");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//добавление легенды
|
||||||
|
private void AddLegend(PlotModel plotModel, LegendPositions legendPosition)
|
||||||
|
{
|
||||||
|
// Создание легенды
|
||||||
|
var legend = new OxyPlot.Legends.Legend
|
||||||
|
{
|
||||||
|
LegendPlacement = LegendPlacement.Outside,
|
||||||
|
LegendPosition = ConvertLegendPosition(legendPosition),
|
||||||
|
LegendOrientation = LegendOrientation.Vertical
|
||||||
|
};
|
||||||
|
|
||||||
|
plotModel.Legends.Add(legend);
|
||||||
|
}
|
||||||
|
|
||||||
|
// конвертация позиции легенды
|
||||||
|
private OxyPlot.Legends.LegendPosition ConvertLegendPosition(LegendPositions legendPosition)
|
||||||
|
{
|
||||||
|
return legendPosition switch
|
||||||
|
{
|
||||||
|
LegendPositions.Top => OxyPlot.Legends.LegendPosition.TopCenter,
|
||||||
|
LegendPositions.Bottom => OxyPlot.Legends.LegendPosition.BottomCenter,
|
||||||
|
LegendPositions.Left => OxyPlot.Legends.LegendPosition.LeftTop,
|
||||||
|
LegendPositions.Right => OxyPlot.Legends.LegendPosition.RightTop,
|
||||||
|
_ => OxyPlot.Legends.LegendPosition.TopCenter, // Положение по умолчанию
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -6,7 +6,7 @@ using System.Threading.Tasks;
|
|||||||
|
|
||||||
namespace FormLibrary.HelperClasses
|
namespace FormLibrary.HelperClasses
|
||||||
{
|
{
|
||||||
public enum LegendPosition
|
public enum LegendPositions
|
||||||
{
|
{
|
||||||
Top,
|
Top,
|
||||||
Bottom,
|
Bottom,
|
@ -200,15 +200,16 @@ namespace Forms
|
|||||||
|
|
||||||
var chartData = new List<ChartData>
|
var chartData = new List<ChartData>
|
||||||
{
|
{
|
||||||
new ChartData { SeriesName = "Серия 1", Data = new Dictionary<string, double> { { "Категория 1", 5 }, { "Категория 2", 10 } } },
|
new ChartData { SeriesName = "Серияd 1", Data = new Dictionary<string, double> { { "Категорияz 1", 5 }, { "Категорияx 2", 10 } } },
|
||||||
new ChartData { SeriesName = "Серия 2", Data = new Dictionary<string, double> { { "Категория 1", 3 }, { "Категория 2", 8 } } }
|
new ChartData { SeriesName = "Серияs 2", Data = new Dictionary<string, double> { { "Категорияa 1", 3 }, { "Категорияs 2", 8 } } },
|
||||||
|
new ChartData { SeriesName = "Серияs 2", Data = new Dictionary<string, double> { { "Категорияa 1", 3 }, { "Категорияs 2", 8 } } }
|
||||||
};
|
};
|
||||||
|
|
||||||
// Укажите путь, куда хотите сохранить PDF
|
// Укажите путь, куда хотите сохранить PDF
|
||||||
string filePath = "G:\\Гистограмма.pdf";
|
string filePath = "G:\\Гистограмма.pdf";
|
||||||
|
|
||||||
// Генерация PDF
|
// Генерация PDF
|
||||||
histogramGenerator.CreateHistogramPdf(filePath, "Название документа", "Заголовок диаграммы", LegendPosition.Top, chartData);
|
histogramGenerator.CreateHistogramPdf(filePath, "Название документа", "Заголовок диаграммы", LegendPositions.Bottom, chartData);
|
||||||
|
|
||||||
MessageBox.Show("PDF успешно сгенерирован!", "Успех", MessageBoxButtons.OK, MessageBoxIcon.Information);
|
MessageBox.Show("PDF успешно сгенерирован!", "Успех", MessageBoxButtons.OK, MessageBoxIcon.Information);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user