Я пытаюсь заменить содержимое файла 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();
}
}
}