diff --git a/KopLab1/FormLibrary/FormLibrary.csproj b/KopLab1/FormLibrary/FormLibrary.csproj
index 3e210aa..7fbd9ef 100644
--- a/KopLab1/FormLibrary/FormLibrary.csproj
+++ b/KopLab1/FormLibrary/FormLibrary.csproj
@@ -7,4 +7,8 @@
enable
+
+
+
+
diff --git a/KopLab1/FormLibrary/PDFTable.Designer.cs b/KopLab1/FormLibrary/PDFTable.Designer.cs
new file mode 100644
index 0000000..16beb31
--- /dev/null
+++ b/KopLab1/FormLibrary/PDFTable.Designer.cs
@@ -0,0 +1,36 @@
+namespace FormLibrary
+{
+ partial class PDFTable
+ {
+ ///
+ /// Обязательная переменная конструктора.
+ ///
+ private System.ComponentModel.IContainer components = null;
+
+ ///
+ /// Освободить все используемые ресурсы.
+ ///
+ /// истинно, если управляемый ресурс должен быть удален; иначе ложно.
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Код, автоматически созданный конструктором компонентов
+
+ ///
+ /// Требуемый метод для поддержки конструктора — не изменяйте
+ /// содержимое этого метода с помощью редактора кода.
+ ///
+ private void InitializeComponent()
+ {
+ components = new System.ComponentModel.Container();
+ }
+
+ #endregion
+ }
+}
diff --git a/KopLab1/FormLibrary/PDFTable.cs b/KopLab1/FormLibrary/PDFTable.cs
new file mode 100644
index 0000000..3f8c9f9
--- /dev/null
+++ b/KopLab1/FormLibrary/PDFTable.cs
@@ -0,0 +1,79 @@
+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 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);
+ }
+ }
+}
diff --git a/KopLab1/Forms/MainForm.Designer.cs b/KopLab1/Forms/MainForm.Designer.cs
index e572193..48b0130 100644
--- a/KopLab1/Forms/MainForm.Designer.cs
+++ b/KopLab1/Forms/MainForm.Designer.cs
@@ -28,6 +28,7 @@
///
private void InitializeComponent()
{
+ components = new System.ComponentModel.Container();
customListBox1 = new FormLibrary.CustomListBox();
button1 = new Button();
button2 = new Button();
@@ -39,6 +40,8 @@
button5 = new Button();
button6 = new Button();
button7 = new Button();
+ pdfTable1 = new FormLibrary.PDFTable(components);
+ button8 = new Button();
SuspendLayout();
//
// customListBox1
@@ -107,7 +110,6 @@
//
valueTableControl1.Location = new Point(487, 12);
valueTableControl1.Name = "valueTableControl1";
- valueTableControl1.SelectedRowIndex = -1;
valueTableControl1.Size = new Size(450, 369);
valueTableControl1.TabIndex = 7;
//
@@ -141,11 +143,22 @@
button7.UseVisualStyleBackColor = true;
button7.Click += ButtonShowData_Click;
//
+ // button8
+ //
+ button8.Location = new Point(26, 481);
+ button8.Name = "button8";
+ button8.Size = new Size(139, 23);
+ button8.TabIndex = 11;
+ button8.Text = "Create PDF";
+ button8.UseVisualStyleBackColor = true;
+ button8.Click += GeneratePdfButton_Click;
+ //
// MainForm
//
AutoScaleDimensions = new SizeF(7F, 15F);
AutoScaleMode = AutoScaleMode.Font;
- ClientSize = new Size(949, 450);
+ ClientSize = new Size(944, 625);
+ Controls.Add(button8);
Controls.Add(button7);
Controls.Add(button6);
Controls.Add(button5);
@@ -176,5 +189,7 @@
private Button button5;
private Button button6;
private Button button7;
+ private FormLibrary.PDFTable pdfTable1;
+ private Button button8;
}
}
\ No newline at end of file
diff --git a/KopLab1/Forms/MainForm.cs b/KopLab1/Forms/MainForm.cs
index fbc6896..f5af8fd 100644
--- a/KopLab1/Forms/MainForm.cs
+++ b/KopLab1/Forms/MainForm.cs
@@ -126,5 +126,43 @@ namespace Forms
MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
+ private void GeneratePdfButton_Click(object sender, EventArgs e)
+ {
+ try
+ {
+ // Создаем экземпляр компонента для генерации PDF
+ var documentGenerator = new PDFTable();
+
+ // Пример таблиц
+ var tables = new List
+ {
+ new string[,]
+ {
+ { "test 1", "test 2", "test 3" },
+ { "test 4", "test 5", "test 6" }
+ },
+ new string[,]
+ {
+ { "test 1", "test 2" },
+ { "test 1", "test 2" }
+ }
+ };
+
+ // Вызываем метод для создания PDF
+ string filePath = "G:\\Отчет.pdf";
+ string documentTitle = "test name";
+
+ documentGenerator.GeneratePdf(filePath, documentTitle, tables);
+
+ // Уведомляем пользователя
+ MessageBox.Show("PDF-документ успешно создан!", "Успех", MessageBoxButtons.OK, MessageBoxIcon.Information);
+ }
+ catch (Exception ex)
+ {
+ // Обрабатываем ошибки
+ MessageBox.Show($"Произошла ошибка: {ex.Message}", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
+ }
+ }
+
}
}
diff --git a/KopLab1/Forms/MainForm.resx b/KopLab1/Forms/MainForm.resx
index 8b2ff64..cd97873 100644
--- a/KopLab1/Forms/MainForm.resx
+++ b/KopLab1/Forms/MainForm.resx
@@ -117,4 +117,7 @@
System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+ 17, 17
+
\ No newline at end of file