Как вставить html в заполнитель Microsoft Word

У меня такая ситуация:

У пользователя есть редактор на его странице, и он вводит текст (с цветами, форматированием, гиперссылками, а также может добавлять изображения). Когда он нажимает «Отправить», данные из редактора (с правильным форматированием) должны быть отправлены в определенный заполнитель в документе Microsoft Office Word.

Я использую OpenXml SDK для записи в документе и пробовал HtmlToOpenXml, чтобы читать html.

Я использую HtmlToOpenXml и из строки html (от пользователя) я нахожу пару абзацев, и теперь мне нужно вставить их в элемент управления содержимым. Знаете ли вы, как я могу найти элемент управления и добавить его в него (если возможно)


person Gesh    schedule 23.09.2013    source источник


Ответы (1)


Мне удалось это исправить, и вот код, который я использовал

            //name of the file which will be saved
            const string filename = "test.docx";
            //html string to be inserted and rendered in the word document
            string html = @"<b>Test</b>"; 
            //the Html2OpenXML dll supports all the common html tags

            //open the template document with the content controls in it(in my case I used Richtext Field Content Control)
            byte[] byteArray = File.ReadAllBytes("..."); // template path

            using (MemoryStream generatedDocument = new MemoryStream())
            {
                generatedDocument.Write(byteArray, 0, byteArray.Length);

                using (WordprocessingDocument doc = WordprocessingDocument.Open(generatedDocument, true))
                {

                    MainDocumentPart mainPart = doc.MainDocumentPart;
                    //just in case
                    if (mainPart == null)
                    {
                        mainPart = doc.AddMainDocumentPart();
                        new Document(new Body()).Save(mainPart);
                    }

                    HtmlConverter converter = new HtmlConverter(mainPart);
                    Body body = mainPart.Document.Body;

                    //sdtElement is the Content Control we need. 
                    //Html is the name of the placeholder we are looking for
                    SdtElement sdtElement = doc.MainDocumentPart.Document.Descendants<SdtElement>()
                        .Where(
                            element =>
                            element.SdtProperties.GetFirstChild<SdtAlias>() != null &&
                            element.SdtProperties.GetFirstChild<SdtAlias>().Val == "Html").FirstOrDefault();

                    //the HtmlConverter returns a set of paragraphs.
                    //in them we have the data which we want to insert in the document with it's formating
                    //After that we just need to append all paragraphs to the Content Control and save the document
                    var paragraphs = converter.Parse(html);

                    for (int i = 0; i < paragraphs.Count; i++)
                    {
                        sdtElement.Append(paragraphs[i]);
                    }

                    mainPart.Document.Save();
                }

                File.WriteAllBytes(filename, generatedDocument.ToArray());
            }
person Gesh    schedule 26.09.2013