Илья Федотов a8ccf8459b Base.04
2024-04-17 20:25:41 +04:00

104 lines
3.8 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using DineryBusinessLogic.OfficePackage.HelperEnums;
using DineryBusinessLogic.OfficePackage.HelperModels;
using DocumentFormat.OpenXml.Packaging;
using MigraDoc.DocumentObjectModel;
using MigraDoc.DocumentObjectModel.Tables;
using MigraDoc.Rendering;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace DineryBusinessLogic.OfficePackage.Implements
{
public class SaveToPdf : AbstractSaveToPdf
{
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.Right => ParagraphAlignment.Right,
_ => ParagraphAlignment.Justify
};
}
// Cоздание стилей для документа
private static void DefineStyles(Document document) {
var style = document.Styles["Normal"];
style.Font.Name = "Times New Roman";
style.Font.Size = 14;
style = document.Styles.AddStyle("NormalTitle", "Normal");
style.Font.Bold = true;
}
protected override void CreateParagraph(PdfParagraph pdfParagraph)
{
if (_section == null) {
return;
}
var paragraph = _section.AddParagraph(pdfParagraph.Text);
paragraph.Format.SpaceAfter = "1cm";
paragraph.Format.Alignment = GetParagraphAlignment(pdfParagraph.ParagraphAlignment);
paragraph.Style = pdfParagraph.Style;
}
protected override void CreatePdf(PdfInfo info)
{
_document = new Document();
DefineStyles(_document);
// Ссылка на первую секцию
_section = _document.AddSection();
}
protected override void CreateRow(PdfRowParameters rowParameters)
{
if(_table == null) {
return;
}
var row = _table.AddRow();
for (int i = 0; i < rowParameters.Text.Count; ++i)
{
// заполнение ячейки (добавления параграфа в ячейку)
row.Cells[i].AddParagraph(rowParameters.Text[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;
}
}
protected override void CreateTable(List<string> columns)
{
if (_document == null) {
return;
}
_table = _document.LastSection.AddTable();
foreach (var elem in columns) {
_table.AddColumn(elem);
}
}
protected override void SavePdf(PdfInfo info)
{
var renderer = new PdfDocumentRenderer(true) {
Document = _document,
};
renderer.RenderDocument();
renderer.PdfDocument.Save(info.FileName);
}
}
}