using DocumentFormat.OpenXml; using DocumentFormat.OpenXml.Packaging; using DocumentFormat.OpenXml.Wordprocessing; using RodionovLibrary.NonVisualComponents.HelperModels; using System.ComponentModel; namespace RodionovLibrary.NonVisualComponents { public partial class WordLongTextComponent : Component { private WordprocessingDocument? _wordDocument; private Body? _docBody; public WordLongTextComponent() { InitializeComponent(); } public WordLongTextComponent(IContainer container) { container.Add(this); InitializeComponent(); } public void CreateWordText(WordLongTextInfo textInfo) { if (string.IsNullOrEmpty(textInfo.FileName) || string.IsNullOrEmpty(textInfo.Title) || !CheckData(textInfo.Paragraphs)) { throw new ArgumentException("Не все данные заполнены"); } _wordDocument = WordprocessingDocument.Create(textInfo.FileName, WordprocessingDocumentType.Document); MainDocumentPart mainPart = _wordDocument.AddMainDocumentPart(); mainPart.Document = new Document(); _docBody = mainPart.Document.AppendChild(new Body()); AddText(textInfo); _wordDocument.MainDocumentPart!.Document.Save(); _wordDocument.Dispose(); } private void AddText(WordLongTextInfo textInfo) { if (_docBody == null || _wordDocument == null) { return; } AddParagraph(textInfo.Title, fontSize: "48", isBold: true); foreach (var paragraph in textInfo.Paragraphs) { AddParagraph(paragraph, fontSize: "24", isBold: false); } } private void AddParagraph(string text, string fontSize, bool isBold) { if (_docBody == null) { return; } ParagraphProperties paragraphProperties = new(); paragraphProperties.AppendChild(new Justification { Val = JustificationValues.Both }); Paragraph paragraph = new(); paragraph.AppendChild(paragraphProperties); Run docRun = new(); RunProperties runProperties = new(); runProperties.AppendChild(new FontSize { Val = fontSize }); if (isBold) { runProperties.AppendChild(new Bold()); } docRun.AppendChild(runProperties); docRun.AppendChild(new Text(text)); paragraph.AppendChild(docRun); _docBody.Append(paragraph); } private bool CheckData(string[] data) { return data != null && data.Any() && data.All(d => !string.IsNullOrEmpty(d)); } } }