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