private static void CreateInnerMethod(DocXDocumentObjectModel model) { //Преподготовка шаблона (удаление не нужных разделений внутри документа) ProcessTemplate(model); //Удаление основного файла CheckAndDeleteDestinationFile(model.DocumentSaveFileName); using var memStream = new MemoryStream(); var bytes = File.ReadAllBytes(model.DocumentTemplateFileName); memStream.Write(bytes, 0, bytes.Length); memStream.Seek(0, SeekOrigin.Begin); using WordprocessingDocument doc = WordprocessingDocument.Open(memStream, true); ProcessTextReplacing(doc, model); foreach (var tableModel in model.Tables) { DocTableInserter.AddTable(doc, tableModel); } foreach (var image in model.ToReplaceImages) { DocImageInserter.InsertAPicture(doc, image); } var t = doc.SaveAs(model.DocumentSaveFileName); t.Dispose(); }
public void Create(DocXDocumentObjectModel model) { lock (_locker) { CreateInnerMethod(model); } }
private void CreateUnsafe(DocXDocumentObjectModel model) { lock (_locker) { CreateInnerMethod(model); } }
public BaseApiResponse RenderDocument(DocXDocumentObjectModel model) { try { Engine.Create(model); return(new BaseApiResponse(true, "Документ создан")); } catch (Exception ex) { return(new BaseApiResponse(ex)); } }
/// <inheritdoc /> public BaseApiResponse ProccessTemplate(DocXDocumentObjectModel model) { try { CreateUnsafe(model); return(new BaseApiResponse(true, "Ok")); } catch (Exception ex) { Logger.LogError(ex, "Error on document creating"); return(new BaseApiResponse(ex)); } }
private static void ProcessTextReplacing(WordprocessingDocument doc, DocXDocumentObjectModel model) { var body = doc.MainDocumentPart.Document.Body; var texts = FindElemsInElement <Text>(body); foreach (var text in texts) { foreach (var toReplace in model.Replaces) { if (text.Text.Contains(toReplace.Key)) { text.Text = text.Text.Replace(toReplace.Key, toReplace.Value ?? ""); } } } }
public static BaseApiResponse RenderDocForInner(DemoDocumentModel model, string docSaveFileName, string docTemplate) { var humanDeclResult = FullNameDeclension.GetByHumanModel(new HumanModel { FirstName = model.Name, LastName = model.LastName, Patronymic = model.Patronymic }); if (!humanDeclResult.IsSucceeded) { return(humanDeclResult); } var humanDecl = humanDeclResult.ResponseObject; var days = (model.ToDate.Date - model.FromDate.Date).TotalDays; var docModel = new DocXDocumentObjectModel { Replaces = new Dictionary <string, string> { ["{DocumentDate}"] = ToStr(DateTime.Now), ["{FromName}"] = $"{humanDecl.LastName.GetByWordCase(WordCase.Р)} {humanDecl.FirstName.GetByWordCase(WordCase.Р)} {humanDecl.Patronymic.GetByWordCase(WordCase.Р)}".Trim(), ["{Text}"] = $"Прошу предоставить мне ежегодный оплачиваемый отпуск с {ToStr(model.FromDate)} по {ToStr(model.ToDate)} на {days} дней", }, Tables = new List <DocumentTable>(), DocumentTemplateFileName = docTemplate, ToReplaceImages = new List <DocxImageReplace>(), DocumentSaveFileName = docSaveFileName, }; var proccessor = new WordDocumentProcessor(new WordDocumentProcessorOptions { Engine = new DocOpenFormatWordEngine() }); return(proccessor.RenderDocument(docModel)); }
/// <summary> /// УБрать из шаблона документа тексты, которые являются разбитыми по нескольким элементам /// </summary> /// <param name="model"></param> public static void ProcessTemplate(DocXDocumentObjectModel model) { using (var memStream = new MemoryStream()) { var bytes = File.ReadAllBytes(model.DocumentTemplateFileName); memStream.Write(bytes, 0, bytes.Length); memStream.Seek(0, SeekOrigin.Begin); using (WordprocessingDocument doc = WordprocessingDocument.Open(memStream, true)) { var body = doc.MainDocumentPart.Document.Body; var paras = FindElemsInElement <Paragraph>(body); foreach (var para in paras) { foreach (var toReplace in model.Replaces) { if (para.InnerText.Contains(toReplace.Key)) { var pRun = para.GetFirstChild <Run>(); var fRunProp = pRun.GetFirstChild <RunProperties>().CloneNode(true); var text = para.InnerText; para.RemoveAllChildren <Run>(); para.AppendChild(new Run(fRunProp, new Text(text))); } } } var t = doc.SaveAs(model.DocumentTemplateFileName); t.Dispose(); } } }