task 1 complete task2 task2 change test data initialization task3 task2 fix fixes add percents minor fixes
153 lines
3.9 KiB
C#
153 lines
3.9 KiB
C#
using ComponentLibrary1.office_package;
|
|
using ComponentLibrary1.office_package.HelperEnums;
|
|
using ComponentLibrary1.office_package.HelperModels;
|
|
using ComponentLibrary1.office_package.Implements;
|
|
using MigraDoc.DocumentObjectModel;
|
|
using MigraDoc.Rendering;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.ComponentModel;
|
|
using System.Diagnostics;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
|
|
namespace ComponentLibrary1.pdf_table
|
|
{
|
|
public partial class PdfTable : Component
|
|
{
|
|
ISaveToPdf SaveToPdf = new SaveToPdf();
|
|
|
|
public PdfTable()
|
|
{
|
|
InitializeComponent();
|
|
}
|
|
|
|
public PdfTable(IContainer container)
|
|
{
|
|
container.Add(this);
|
|
|
|
InitializeComponent();
|
|
}
|
|
public void CreatePdf<T>(PdfTableInfo<T> info)
|
|
{
|
|
info.CheckFields();
|
|
SaveToPdf.CreatePdf(info);
|
|
SaveToPdf.CreateParagraph(new PdfParagraph
|
|
{
|
|
Text = info.Title,
|
|
Style = "NormalTitle",
|
|
ParagraphAlignment = PdfParagraphAlignmentType.Center
|
|
});
|
|
SaveToPdf.CreateTableWithColumns(info.Data.Count + 2);
|
|
SaveToPdf.CreateRow(new PdfRowParameters());
|
|
int rowIndex = 0;
|
|
int columnIndex = 0;
|
|
List<string> properties = new List<string>();
|
|
string? header;
|
|
foreach (var node in info.Headers)
|
|
{
|
|
if (string.IsNullOrWhiteSpace(node.Text))
|
|
{
|
|
throw new Exception("Cannot read header");
|
|
}
|
|
SaveToPdf.CreateRow(new PdfRowParameters());
|
|
SaveToPdf.InsertTextIntoCell(
|
|
rowIndex,
|
|
columnIndex,
|
|
new PdfCellParameters
|
|
{
|
|
Text = node.Text,
|
|
Style = "NormalTitle",
|
|
ParagraphAlignment = PdfParagraphAlignmentType.Center
|
|
});
|
|
if (node.Nodes.Count == 0)
|
|
{
|
|
SaveToPdf.MergeCells(new PdfCellsMergeParameters
|
|
{
|
|
RowIndex = rowIndex,
|
|
ColumnIndex = columnIndex,
|
|
Direction = PdfCellsMergeDirections.Right
|
|
});
|
|
header = node.Tag as string;
|
|
if (header == null)
|
|
{
|
|
throw new Exception("Cannot read property name");
|
|
}
|
|
properties.Add(header);
|
|
rowIndex++;
|
|
}
|
|
else
|
|
{
|
|
int mergeRowIndex = rowIndex;
|
|
int mergeColumnIndex = columnIndex;
|
|
foreach (TreeNode child in node.Nodes)
|
|
{
|
|
if (string.IsNullOrWhiteSpace(child.Text))
|
|
{
|
|
throw new Exception("Cannot read header");
|
|
}
|
|
SaveToPdf.CreateRow(new PdfRowParameters());
|
|
SaveToPdf.InsertTextIntoCell(
|
|
rowIndex,
|
|
columnIndex + 1,
|
|
new PdfCellParameters
|
|
{
|
|
Text = child.Text,
|
|
Style = "NormalTitle",
|
|
ParagraphAlignment = PdfParagraphAlignmentType.Left
|
|
});
|
|
header = child.Tag as string;
|
|
if (header == null)
|
|
{
|
|
throw new Exception("Cannot read property name");
|
|
}
|
|
properties.Add(header);
|
|
rowIndex++;
|
|
}
|
|
SaveToPdf.MergeCells(new PdfCellsMergeParameters
|
|
{
|
|
RowIndex = mergeRowIndex,
|
|
ColumnIndex = mergeColumnIndex,
|
|
Direction = PdfCellsMergeDirections.Down,
|
|
CellNumber = node.Nodes.Count - 1
|
|
});
|
|
}
|
|
}
|
|
columnIndex = 2;
|
|
foreach (var obj in info.Data)
|
|
{
|
|
if (obj == null)
|
|
{
|
|
throw new Exception("Table Data element cannot be null");
|
|
}
|
|
List<string> cells = new List<string>();
|
|
for (int i = 0; i < properties.Count; i++)
|
|
{
|
|
string propertyName = properties[i];
|
|
var property = obj.GetType().GetProperty(propertyName);
|
|
if (property is null)
|
|
{
|
|
throw new ArgumentException($"Failed to find property {propertyName} in provided objects class");
|
|
}
|
|
var value = property.GetValue(obj)?.ToString();
|
|
if (value == null)
|
|
{
|
|
throw new ArgumentException($"Failed to find property {propertyName} in provided objects class");
|
|
}
|
|
cells.Add(value);
|
|
}
|
|
SaveToPdf.InsertTextIntoColumn(new PdfColumnParameters
|
|
{
|
|
Texts = cells,
|
|
ColumnIndex = columnIndex,
|
|
Style = "Normal",
|
|
ParagraphAlignment= PdfParagraphAlignmentType.Left
|
|
});
|
|
columnIndex++;
|
|
}
|
|
SaveToPdf.SavePdf(info);
|
|
}
|
|
}
|
|
}
|