Замените содержимое файла RTF на текст, используя AltChunk в Word Document через openxml, создав пробел - PullRequest
0 голосов
/ 28 декабря 2018

Я пытаюсь заменить содержимое файла rtf на textToReplaceByRTFContent в основном документе Word (место назначения).Однако содержимое из файла RTF вставляется в целевой файл.Но есть место, созданное в файле назначения.Отступ слева становится равным 0,56 для содержимого, которое вставляется из файла RTF.Я хочу избавиться от пробелов (левый отступ должен быть 0)

Я скопировал файл rtf и файл CriteriaTest.docx по ссылке ниже.Мне нужно заменить текст "CRITERIA-1" в CriteriaTest.docx содержимым Test.rtf.Приведенный ниже код работает хорошо, с проблемой отступа.Пожалуйста, помогите мне избавиться от этого.

Ссылка на входные файлы

Пожалуйста, найдите ожидаемый и фактический скриншот результата по этой ссылке ActualvsExpected

public class RTFInserter
{

    public static void InsertRTF(string rtfFilePath, string destinationFileName, string textToReplaceByRTFContent)
    {

        using (WordprocessingDocument wordDoc = WordprocessingDocument.Open(destinationFileName, true))
        {
            MainDocumentPart mainPart = wordDoc.MainDocumentPart;

            var holders = mainPart.Document.Body.Descendants<Text>()
             .Where((x) => x.Text == textToReplaceByRTFContent);
            if(holders != null && holders.Count() > 0)
            {
                foreach(var textPlaceHolder in holders)
                {
                    if (textPlaceHolder != null)
                    {
                        var parent = textPlaceHolder.Parent;

                        if (!(parent is Run))  // Parent should be a run element.
                        {

                            // Console.Out.WriteLine("Parent is not run");
                        }
                        else
                        {

                            string altChunkId = "AltChunkId" + Guid.NewGuid().ToString().Replace("-", "");

                            // MainDocumentPart mainDocPart = wordDocument.MainDocumentPart;
                            AlternativeFormatImportPart chunk = mainPart.AddAlternativeFormatImportPart(
                                  AlternativeFormatImportPartType.Rtf, altChunkId);


                            // Read RTF document conte
                            using (FileStream fileStream = File.OpenRead(rtfFilePath))
                            {
                                MemoryStream memStream = new MemoryStream();
                                memStream.SetLength(fileStream.Length);
                                fileStream.Read(memStream.GetBuffer(), 0, (int)fileStream.Length);

                                memStream.Position = 0;
                                chunk.FeedData(memStream);
                            }


                            AltChunk altChunk = new AltChunk();
                            altChunk.Id = altChunkId;


                            textPlaceHolder.Parent.InsertAfter(altChunk, textPlaceHolder);

                            // Remove text place holder.
                            textPlaceHolder.Remove();
                            wordDoc.Save();

                        }
                    }
                }
            }

            //Text textPlaceHolder = mainPart.Document.Body.Descendants<Text>()
            // .Where((x) => x.Text == textToReplaceByRTFContent).FirstOrDefault();


        }
    }
}
...