Esempio n. 1
0
        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();
        }
Esempio n. 2
0
 public void Create(DocXDocumentObjectModel model)
 {
     lock (_locker)
     {
         CreateInnerMethod(model);
     }
 }
Esempio n. 3
0
 private void CreateUnsafe(DocXDocumentObjectModel model)
 {
     lock (_locker)
     {
         CreateInnerMethod(model);
     }
 }
Esempio n. 4
0
 public BaseApiResponse RenderDocument(DocXDocumentObjectModel model)
 {
     try
     {
         Engine.Create(model);
         return(new BaseApiResponse(true, "Документ создан"));
     }
     catch (Exception ex)
     {
         return(new BaseApiResponse(ex));
     }
 }
Esempio n. 5
0
 /// <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));
     }
 }
Esempio n. 6
0
        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 ?? "");
                    }
                }
            }
        }
Esempio n. 7
0
        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));
        }
Esempio n. 8
0
        /// <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();
                }
            }
        }