C# OpenXML Как заменить \r\n с Break()?

У меня есть текстовое поле в моей базе данных, и оно имеет текст с множеством строк. При создании документа MS Word с использованием OpenXML и закладок текст становится одной строкой.

Я заметил, что в каждой новой строке значения закладки показывают символы "\r\n". В поисках решения я нашел несколько ответов, которые мне помогли, но у меня все еще есть проблема.

Я использовал run.Append(new Break()); решением, но замененный текст также показывает название закладки.

Например: bookmark test = "Большой текст здесь в первом абзаце \ r \ n Второй абзац".

Это показано в документе MS Word как:

проверить большой текст здесь, в первом абзаце

Второй абзац

Кто-нибудь может, пожалуйста, помочь мне убрать название закладки?

Вот мой код:

public void UpdateBookmarksVistoria(string originalPath, string copyPath, string fileType)
    {
        string wordmlNamespace = "http://schemas.openxmlformats.org/wordprocessingml/2006/main";

        // Make a copy of the template file.
        File.Copy(originalPath, copyPath, true);

        //Open the document as an Open XML package and extract the main document part.
        using (WordprocessingDocument wordPackage = WordprocessingDocument.Open(copyPath, true))
        {
            MainDocumentPart part = wordPackage.MainDocumentPart;
            //Setup the namespace manager so you can perform XPath queries 
            //to search for bookmarks in the part.
            NameTable nt = new NameTable();
            XmlNamespaceManager nsManager = new XmlNamespaceManager(nt);
            nsManager.AddNamespace("w", wordmlNamespace);
            //Load the part's XML into an XmlDocument instance.
            XmlDocument xmlDoc = new XmlDocument(nt);
            xmlDoc.Load(part.GetStream());

            //pega a url para exibir as fotos
            string url = HttpContext.Current.Request.Url.ToString();
            string enderecoURL;
            if (url.Contains("localhost"))
                enderecoURL = url.Substring(0, 26);
            else if (url.Contains("www."))
                enderecoURL = url.Substring(0, 24);
            else
                enderecoURL = url.Substring(0, 20);

            //Iterate through the bookmarks.
            int cont = 56;
            foreach (KeyValuePair<string, string> bookmark in bookmarks)
            {
                var res = from bm in part.Document.Body.Descendants<BookmarkStart>()
                          where bm.Name == bookmark.Key
                          select bm;
                var bk = res.SingleOrDefault();
                if (bk != null)
                {
                        Run bookmarkText = bk.NextSibling<Run>();
                        if (bookmarkText != null) // if the bookmark has text replace it
                        {
                            var texts = bookmark.Value.Split(new[] { Environment.NewLine }, StringSplitOptions.None);

                            for (int i = 0; i < texts.Length; i++)
                            {
                                if (i > 0)
                                    bookmarkText.Append(new Break());

                                Text text = new Text();
                                text.Text = texts[i];
                                bookmarkText.Append(text); //HERE IS MY PROBLEM
                            }
                        }
                        else // otherwise append new text immediately after it
                        {
                            var parent = bk.Parent; // bookmark's parent element
                            Text text = new Text(bookmark.Value);
                            Run run = new Run(new RunProperties());
                            run.Append(text);
                            // insert after bookmark parent
                            parent.Append(run);
                        }

                        bk.Remove(); // we don't want the bookmark anymore
                }
            }

            //Write the changes back to the document part.
            xmlDoc.Save(wordPackage.MainDocumentPart.GetStream(FileMode.Create));
            wordPackage.Close();
        }}

0 ответов

Другие вопросы по тегам