done tables component
This commit is contained in:
parent
1ca6980b3a
commit
04a9c7bd89
18
FormsTesting/Form1.Designer.cs
generated
18
FormsTesting/Form1.Designer.cs
generated
@ -28,6 +28,7 @@
|
||||
/// </summary>
|
||||
private void InitializeComponent()
|
||||
{
|
||||
components = new System.ComponentModel.Container();
|
||||
SelectComponent = new ShabComponentsLibrary.ShabSelectComponent();
|
||||
InputComponent = new ShabComponentsLibrary.ShabInputComponent();
|
||||
GridComponent = new ShabComponentsLibrary.ShabListOutputComponent();
|
||||
@ -37,6 +38,8 @@
|
||||
ShowIntButton = new Button();
|
||||
groupBox3 = new GroupBox();
|
||||
PrintObjectButton = new Button();
|
||||
CreateDocumentWithTables = new Button();
|
||||
DocumentContextComponent = new ShabComponentsLibrary.ShabDocumentContextComponent(components);
|
||||
groupBox1.SuspendLayout();
|
||||
groupBox2.SuspendLayout();
|
||||
groupBox3.SuspendLayout();
|
||||
@ -132,11 +135,22 @@
|
||||
PrintObjectButton.UseVisualStyleBackColor = true;
|
||||
PrintObjectButton.Click += PrintObjectButton_Click;
|
||||
//
|
||||
// CreateDocumentWithTables
|
||||
//
|
||||
CreateDocumentWithTables.Location = new Point(18, 592);
|
||||
CreateDocumentWithTables.Name = "CreateDocumentWithTables";
|
||||
CreateDocumentWithTables.Size = new Size(172, 42);
|
||||
CreateDocumentWithTables.TabIndex = 6;
|
||||
CreateDocumentWithTables.Text = "Документ с таблицами";
|
||||
CreateDocumentWithTables.UseVisualStyleBackColor = true;
|
||||
CreateDocumentWithTables.Click += CreateDocumentWithTables_Click;
|
||||
//
|
||||
// Form1
|
||||
//
|
||||
AutoScaleDimensions = new SizeF(7F, 15F);
|
||||
AutoScaleMode = AutoScaleMode.Font;
|
||||
ClientSize = new Size(637, 581);
|
||||
ClientSize = new Size(637, 660);
|
||||
Controls.Add(CreateDocumentWithTables);
|
||||
Controls.Add(groupBox3);
|
||||
Controls.Add(groupBox2);
|
||||
Controls.Add(groupBox1);
|
||||
@ -159,5 +173,7 @@
|
||||
private Button ShowIntButton;
|
||||
private GroupBox groupBox3;
|
||||
private Button PrintObjectButton;
|
||||
private Button CreateDocumentWithTables;
|
||||
private ShabComponentsLibrary.ShabDocumentContextComponent DocumentContextComponent;
|
||||
}
|
||||
}
|
||||
|
@ -97,5 +97,27 @@ namespace FormsTesting
|
||||
var Test = GridComponent.GetSelectedObject<TestPerson>();
|
||||
MessageBox.Show(Test.ToString());
|
||||
}
|
||||
|
||||
private void CreateDocumentWithTables_Click(object sender, EventArgs e)
|
||||
{
|
||||
string[][] table1 = new string[][]
|
||||
{
|
||||
new string[] { "Стр 1 Кол 1", "Стр 1 Кол 2", "Стр 1 Кол 3" },
|
||||
new string[] { "Стр 2 Кол 1", "Стр 2 Кол 2", "Стр 2 Кол 3" }
|
||||
};
|
||||
|
||||
string[][] table2 = new string[][]
|
||||
{
|
||||
new string[] { "Стр 1 Кол 1", "Стр 1 Кол 2", "Стр 1 Кол 3", "Стр 1 Кол 4", "Стр 1 Кол 5", "Стр 1 Кол 6" },
|
||||
new string[] { "Стр 2 Кол 1", "Стр 2 Кол 2", "Стр 2 Кол 3", "Стр 2 Кол 4", "Стр 2 Кол 5", "Стр 2 Кол 6" },
|
||||
new string[] { "Стр 3 Кол 1", "Стр 3 Кол 2", "Стр 3 Кол 3", "Стр 3 Кол 4", "Стр 3 Кол 5", "Стр 3 Кол 6" },
|
||||
new string[] { "Стр 4 Кол 1", "Стр 4 Кол 2", "Стр 4 Кол 3", "Стр 4 Кол 4", "Стр 4 Кол 5", "Стр 4 Кол 6" },
|
||||
};
|
||||
|
||||
DocumentContextComponent.CreateDocument(
|
||||
@"C:\Comps\Doc1.pdf",
|
||||
"Sample text",
|
||||
new List<string[][]> { table1, table2 });
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -117,4 +117,7 @@
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<metadata name="DocumentContextComponent.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||
<value>17, 17</value>
|
||||
</metadata>
|
||||
</root>
|
@ -0,0 +1,9 @@
|
||||
namespace ShabComponentsLibrary.OfficePackage.HelperEnums
|
||||
{
|
||||
internal enum PdfParagraphAlignmentType
|
||||
{
|
||||
Center,
|
||||
Left,
|
||||
Rigth
|
||||
}
|
||||
}
|
@ -0,0 +1,13 @@
|
||||
using ShabComponentsLibrary.OfficePackage.HelperEnums;
|
||||
|
||||
namespace ShabComponentsLibrary.OfficePackage.HelperModels
|
||||
{
|
||||
internal class PdfParagraph
|
||||
{
|
||||
public string Text { get; set; } = string.Empty;
|
||||
|
||||
public string Style { get; set; } = string.Empty;
|
||||
|
||||
public PdfParagraphAlignmentType ParagraphAlignment { get; set; }
|
||||
}
|
||||
}
|
@ -0,0 +1,13 @@
|
||||
using ShabComponentsLibrary.OfficePackage.HelperEnums;
|
||||
|
||||
namespace ShabComponentsLibrary.OfficePackage.HelperModels
|
||||
{
|
||||
internal class PdfRowParameters
|
||||
{
|
||||
public List<string> Texts { get; set; } = new();
|
||||
|
||||
public string Style { get; set; } = string.Empty;
|
||||
|
||||
public PdfParagraphAlignmentType ParagraphAlignment { get; set; }
|
||||
}
|
||||
}
|
104
ShabComponentsLibrary/OfficePackage/SaveToPdf.cs
Normal file
104
ShabComponentsLibrary/OfficePackage/SaveToPdf.cs
Normal file
@ -0,0 +1,104 @@
|
||||
using MigraDoc.DocumentObjectModel;
|
||||
using MigraDoc.DocumentObjectModel.Tables;
|
||||
using MigraDoc.Rendering;
|
||||
using ShabComponentsLibrary.OfficePackage.HelperEnums;
|
||||
using ShabComponentsLibrary.OfficePackage.HelperModels;
|
||||
|
||||
namespace ShabComponentsLibrary.OfficePackage
|
||||
{
|
||||
internal class SaveToPdf
|
||||
{
|
||||
private Document? _document;
|
||||
private Section? _section;
|
||||
private Table? _table;
|
||||
|
||||
private static ParagraphAlignment GetParagraphAlignment(PdfParagraphAlignmentType Type)
|
||||
{
|
||||
return Type switch
|
||||
{
|
||||
PdfParagraphAlignmentType.Center => ParagraphAlignment.Center,
|
||||
PdfParagraphAlignmentType.Left => ParagraphAlignment.Left,
|
||||
PdfParagraphAlignmentType.Rigth => ParagraphAlignment.Right,
|
||||
_ => ParagraphAlignment.Justify,
|
||||
};
|
||||
}
|
||||
|
||||
private static void DefineStyles(Document Document)
|
||||
{
|
||||
var Style = Document.Styles["Normal"];
|
||||
Style.Font.Name = "Times New Roman";
|
||||
Style.Font.Size = 12;
|
||||
|
||||
Style = Document.Styles.AddStyle("NormalTitle", "Normal");
|
||||
Style.Font.Bold = true;
|
||||
}
|
||||
|
||||
public void CreatePdf()
|
||||
{
|
||||
System.Text.Encoding.RegisterProvider(System.Text.CodePagesEncodingProvider.Instance);
|
||||
_document = new Document();
|
||||
DefineStyles(_document);
|
||||
|
||||
_section = _document.AddSection();
|
||||
}
|
||||
|
||||
public void CreateParagraph(PdfParagraph PdfParagraph)
|
||||
{
|
||||
if (_section == null)
|
||||
return;
|
||||
|
||||
var Paragraph = _section.AddParagraph(PdfParagraph.Text);
|
||||
|
||||
Paragraph.Format.SpaceAfter = "0.1cm";
|
||||
Paragraph.Format.Alignment = GetParagraphAlignment(PdfParagraph.ParagraphAlignment);
|
||||
Paragraph.Style = PdfParagraph.Style;
|
||||
}
|
||||
|
||||
public void CreateTable(List<string> Columns)
|
||||
{
|
||||
if (_document == null)
|
||||
return;
|
||||
|
||||
_table = _document.LastSection.AddTable();
|
||||
foreach (var Column in Columns)
|
||||
{
|
||||
_table.AddColumn(Column);
|
||||
}
|
||||
}
|
||||
|
||||
public void CreateRow(PdfRowParameters RowParameters)
|
||||
{
|
||||
if (_table == null)
|
||||
return;
|
||||
|
||||
var Row = _table.AddRow();
|
||||
for (int i = 0; i < RowParameters.Texts.Count; ++i)
|
||||
{
|
||||
Row.Cells[i].AddParagraph(RowParameters.Texts[i]);
|
||||
if (!string.IsNullOrEmpty(RowParameters.Style))
|
||||
{
|
||||
Row.Cells[i].Style = RowParameters.Style;
|
||||
}
|
||||
|
||||
Unit borderWidth = 0.5;
|
||||
Row.Cells[i].Borders.Left.Width = borderWidth;
|
||||
Row.Cells[i].Borders.Right.Width = borderWidth;
|
||||
Row.Cells[i].Borders.Top.Width = borderWidth;
|
||||
Row.Cells[i].Borders.Bottom.Width = borderWidth;
|
||||
Row.Cells[i].Format.Alignment = GetParagraphAlignment(RowParameters.ParagraphAlignment);
|
||||
Row.Cells[i].VerticalAlignment = VerticalAlignment.Center;
|
||||
}
|
||||
}
|
||||
|
||||
public void SavePdf(string Filename)
|
||||
{
|
||||
var Renderer = new PdfDocumentRenderer(true)
|
||||
{
|
||||
Document = _document
|
||||
};
|
||||
|
||||
Renderer.RenderDocument();
|
||||
Renderer.PdfDocument.Save(Filename);
|
||||
}
|
||||
}
|
||||
}
|
@ -7,4 +7,8 @@
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="PdfSharp.MigraDoc.Standard" Version="1.51.15" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
|
36
ShabComponentsLibrary/ShabDocumentContextComponent.Designer.cs
generated
Normal file
36
ShabComponentsLibrary/ShabDocumentContextComponent.Designer.cs
generated
Normal file
@ -0,0 +1,36 @@
|
||||
namespace ShabComponentsLibrary
|
||||
{
|
||||
partial class ShabDocumentContextComponent
|
||||
{
|
||||
/// <summary>
|
||||
/// Required designer variable.
|
||||
/// </summary>
|
||||
private System.ComponentModel.IContainer components = null;
|
||||
|
||||
/// <summary>
|
||||
/// Clean up any resources being used.
|
||||
/// </summary>
|
||||
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
|
||||
protected override void Dispose(bool disposing)
|
||||
{
|
||||
if (disposing && (components != null))
|
||||
{
|
||||
components.Dispose();
|
||||
}
|
||||
base.Dispose(disposing);
|
||||
}
|
||||
|
||||
#region Component Designer generated code
|
||||
|
||||
/// <summary>
|
||||
/// Required method for Designer support - do not modify
|
||||
/// the contents of this method with the code editor.
|
||||
/// </summary>
|
||||
private void InitializeComponent()
|
||||
{
|
||||
components = new System.ComponentModel.Container();
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
59
ShabComponentsLibrary/ShabDocumentContextComponent.cs
Normal file
59
ShabComponentsLibrary/ShabDocumentContextComponent.cs
Normal file
@ -0,0 +1,59 @@
|
||||
using System.ComponentModel;
|
||||
using System.Windows.Forms.VisualStyles;
|
||||
using ShabComponentsLibrary.OfficePackage;
|
||||
using ShabComponentsLibrary.OfficePackage.HelperEnums;
|
||||
using ShabComponentsLibrary.OfficePackage.HelperModels;
|
||||
|
||||
namespace ShabComponentsLibrary
|
||||
{
|
||||
/// <summary>
|
||||
/// Невизуальный компонент для создания документа с таблицами
|
||||
/// </summary>
|
||||
public partial class ShabDocumentContextComponent : Component
|
||||
{
|
||||
public ShabDocumentContextComponent()
|
||||
{
|
||||
InitializeComponent();
|
||||
}
|
||||
|
||||
public ShabDocumentContextComponent(IContainer Container)
|
||||
{
|
||||
Container.Add(this);
|
||||
InitializeComponent();
|
||||
}
|
||||
|
||||
public void CreateDocument(string Filename, string Title, List<string[][]> Tables)
|
||||
{
|
||||
SaveToPdf Pdf = new SaveToPdf();
|
||||
Pdf.CreatePdf();
|
||||
Pdf.CreateParagraph(new PdfParagraph
|
||||
{
|
||||
Text = Title,
|
||||
Style = "NormalTitle",
|
||||
ParagraphAlignment = PdfParagraphAlignmentType.Left
|
||||
});
|
||||
|
||||
foreach (string[][] Table in Tables)
|
||||
{
|
||||
if (Table.Length == 0)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
Pdf.CreateTable(Enumerable.Repeat("3cm", Table[0].Length).ToList());
|
||||
foreach (string[] Row in Table)
|
||||
{
|
||||
Pdf.CreateRow(new PdfRowParameters
|
||||
{
|
||||
Texts = Row.ToList(),
|
||||
Style = "Normal",
|
||||
ParagraphAlignment = PdfParagraphAlignmentType.Center
|
||||
});
|
||||
}
|
||||
Pdf.CreateParagraph(new PdfParagraph());
|
||||
}
|
||||
|
||||
Pdf.SavePdf(Filename);
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user