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

80 lines
3.3 KiB
C#
Raw Normal View History

using MigraDoc.DocumentObjectModel;
using MigraDoc.DocumentObjectModel.Tables;
using MigraDoc.Rendering;
using System.ComponentModel;
using Document = MigraDoc.DocumentObjectModel.Document;
namespace FormLibrary
{
public partial class PDFTable : Component
{
public PDFTable()
{
InitializeComponent();
System.Text.Encoding.RegisterProvider(System.Text.CodePagesEncodingProvider.Instance);
}
public PDFTable(IContainer container)
{
container.Add(this);
InitializeComponent();
}
// Публичный метод для генерации PDF-документа
public void GeneratePdf(string fileName, string documentTitle, List<string[,]> tables)
{
// Проверка на корректность входных данных
if (string.IsNullOrWhiteSpace(fileName)) throw new ArgumentException("Имя файла не может быть пустым.");
if (string.IsNullOrWhiteSpace(documentTitle)) throw new ArgumentException("Название документа не может быть пустым.");
if (tables == null || tables.Count == 0) throw new ArgumentException("Необходимо передать хотя бы одну таблицу.");
// Создание документа
Document document = new Document();
Section section = document.AddSection();
// Установка заголовка документа
Paragraph title = section.AddParagraph();
title.AddFormattedText(documentTitle, TextFormat.Bold);
title.Format.Alignment = ParagraphAlignment.Center;
section.AddParagraph(); // Пустая строка
// Обработка таблиц
foreach (var tableData in tables)
{
// Создание таблицы
Table table = section.AddTable();
int columnsCount = tableData.GetLength(1);
// Определение колонок
for (int i = 0; i < columnsCount; i++)
{
Column column = table.AddColumn(Unit.FromCentimeter(3)); // Ширина колонки 3 см
}
// Настройка границ таблицы
table.Borders.Width = 0.75; // Толщина границ таблицы
table.Borders.Color = Colors.Black; // Цвет границ таблицы
// Добавление строк и ячеек
for (int i = 0; i < tableData.GetLength(0); i++)
{
Row row = table.AddRow();
for (int j = 0; j < tableData.GetLength(1); j++)
{
row.Cells[j].AddParagraph(tableData[i, j]);
}
}
section.AddParagraph(); // Пустая строка после таблицы
}
// Сохранение документа
PdfDocumentRenderer pdfRenderer = new PdfDocumentRenderer(true);
pdfRenderer.Document = document;
pdfRenderer.RenderDocument();
pdfRenderer.PdfDocument.Save(fileName);
}
}
}