keep format
im using docX to replace strings in documents, but the formatting (size, font)of the original text string is not kept, why is that
the docx properies can descript the size and font and others.you can do it by yourself
Hello
We were not able to reproduce the issue you described using the latest DocX release.
If we load this document for example : Document.docx, we can find and replace placeholders like [LOCATION] using two methods:
- One using a regex-based function handler (ReplaceTextHandlerFunc).
- One using explicit string matching with StringReplaceTextOptions.
And the placeholders formatting that uses "Avenir Next LT Pro Demi" font name with 16 font size and bold is always kept.
Here's our code snippet :
// Dictionary holding placeholder keys and their replacement values
private static Dictionary<string, string> m_replacePatterns = new Dictionary<string, string>()
{
{ "LOCATION", "the old market square" },
{ "CHARACTER_NAME", "Elena" },
{ "OBJECT", "compass" },
{ "COLOR", "emerald green" },
{ "WEATHER", "fog" },
{ "CITY_NAME", "Virelia" }
};
public static void TextActions()
{
Console.WriteLine("\tTextActions()");
// Load the existing Word document from the specified directory
using (var document = DocX.Load(ParagraphSample.ParagraphSampleResourcesDirectory + @"Document.docx"))
{
// Configure replacement options using a regex pattern for placeholders like [PLACEHOLDER]
var functionReplaceTextOptions = new FunctionReplaceTextOptions()
{
FindPattern = @"\[(.*?)\]", // Match [PLACEHOLDER]
RegexMatchHandler = ParagraphSample.ReplaceTextHandlerFunc, // Callback to get replacement text
RegExOptions = RegexOptions.IgnoreCase // Case-insensitive matching
};
// Get the first paragraph of the document (original source for cloning)
var p = document.Paragraphs?.FirstOrDefault();
// Add spacing and insert a clone of the paragraph for a second replacement approach
document.InsertParagraph().SpacingAfter(100);
var p2 = document.InsertParagraph(p);
// Apply placeholder replacement using the regex-based handler on the first paragraph
p.ReplaceText(functionReplaceTextOptions);
// Apply direct string replacement for each key on the cloned paragraph
foreach (var pair in m_replacePatterns)
{
var stringReplaceTextOptions = new StringReplaceTextOptions()
{
SearchValue = $"[{pair.Key}]",
NewValue = pair.Value
};
p2.ReplaceText(stringReplaceTextOptions);
}
// Save the modified document to the output directory
document.SaveAs(ParagraphSample.ParagraphSampleOutputDirectory + @"Document_Updated.docx");
Console.WriteLine("\tCreated: Document_Updated.docx\n");
}
}
// Callback function for regex match replacement.
// Receives the placeholder key (e.g., "LOCATION") and returns its replacement value if found.
private static string ReplaceTextHandlerFunc(string findStr)
{
if (m_replacePatterns.ContainsKey(findStr))
{
return m_replacePatterns[findStr];
}
// If the placeholder isn't found in the dictionary, return it unchanged
return findStr;
}
Input :
Output :
If the issue persists on your end, please attach a repro sample here and we will investiguate further.
-Thank you
i dont know what happened but it seems to be a problem with my docx files, all new docx files work