According to both of these links:
http://www.telerik.com/community/forums/wpf/richtextbox/mailmerge-export-to-html.aspx
http://www.telerik.com/community/forums/silverlight/richtextbox/mail-merge-and-export-as-html-with-merged-tags.aspx
Merge codes are not supported in HTML. These are over a year old now. Will this change? If not, how can I programatically process a document to fix this?
http://www.telerik.com/community/forums/wpf/richtextbox/mailmerge-export-to-html.aspx
http://www.telerik.com/community/forums/silverlight/richtextbox/mail-merge-and-export-as-html-with-merged-tags.aspx
Merge codes are not supported in HTML. These are over a year old now. Will this change? If not, how can I programatically process a document to fix this?
4 Answers, 1 is accepted
0
Paul
Top achievements
Rank 1
answered on 15 Nov 2012, 03:32 PM
I managed to figure out a work around myself. If anyone else should find this helpful, I will post it here. If anyone from Telerik knows a better way or sees flaws, please feel free to post as well!
This will simply find and fix merge codes when opening an HTML document. This code is in the DocumentChanged event handler.
This will simply find and fix merge codes when opening an HTML document. This code is in the DocumentChanged event handler.
// Fix all merge codes for HTML, start by moving to the top of the documenteditor.Document.CaretPosition.MoveToFirstPositionInDocument();// Grab all properties in the merge codes - My object type is "clsMergeCodeExample".PropertyInfo[] properties = typeof(clsMergeCodeExample).GetProperties();// Setup a search queryDocumentTextSearch search = new DocumentTextSearch(editor.Document);List<TextRange> rangesTrackingDocumentChanges = new List<TextRange>();// Define a caret positionDocumentPosition d = editor.Document.CaretPosition;// Find the first text range.TextRange t = search.Find("{MERGEFIELD", d);while (t != null){ // Find the end of the merge code TextRange tEnd = search.Find("}", d); // Combined range TextRange tFinal = new TextRange(t.StartPosition, tEnd.EndPosition); // Find out what the merge code is and remove the } character string code = tEnd.StartPosition.GetCurrentInlineBox().Text.Trim().TrimEnd('}'); // Grab this field PropertyInfo p = properties.FirstOrDefault(fi => fi.Name.Equals(code, StringComparison.CurrentCultureIgnoreCase)); // Adjust the code as needed. Can be skipped. code = (p == null ? "UnknownMergeField" : p.Name); // Highlight the selection we're about to replace to keep styling in tact tFinal.SetSelection(editor.Document); // Finally insert the merge field as needed replacing the selection. editor.Document.InsertField(new MergeField() { PropertyPath = code }, FieldDisplayMode.Code); // Advance to the next one t = search.Find("{MERGEFIELD", d);}0
Accepted
Hello Paul,
Mihail
the Telerik team
We are happy to hear you have found a solution to your problem. At this point, the export of fields in HTML is not planned, so it is not clear when and if it will be implemented.
If you have any other questions, feel free to contact us.
Mihail
the Telerik team
Explore the entire Telerik portfolio by downloading Telerik DevCraft Ultimate.
0
Thilo
Top achievements
Rank 1
Iron
answered on 15 Aug 2014, 08:03 AM
Hello Paul !
this works fine for me !
I changed it to Docvariable
But Question to Telerik:
a Problem is, that RadDocument.InsertField ist declared as Deprecated.
When will it removed and are there any plan to replace it ?
My Code:
this works fine for me !
I changed it to Docvariable
But Question to Telerik:
a Problem is, that RadDocument.InsertField ist declared as Deprecated.
When will it removed and are there any plan to replace it ?
My Code:
private RadDocument ReactivateFieldDOCVARIABLEInHtml(RadDocument document){ string fieldname = "DOCVARIABLE"; // Fix all merge codes for HTML, start by moving to the top of the document document.CaretPosition.MoveToFirstPositionInDocument(); // Setup a search query DocumentTextSearch search = new DocumentTextSearch(document); List<TextRange> rangesTrackingDocumentChanges = new List<TextRange>(); // Define a caret position DocumentPosition d = document.CaretPosition; // Find the first text range. TextRange t = search.Find("{" + fieldname, d); while (t != null) { // Find the end of the merge code TextRange fieldEnd = search.Find("}", d); // Combined range TextRange fieldPosition = new TextRange(t.StartPosition, fieldEnd.EndPosition); // Find out what the merge code is and remove the } character string varName = fieldEnd.StartPosition.GetCurrentInlineBox().Text.Trim().TrimEnd('}'); // Highlight the selection we're about to replace to keep styling in tact fieldPosition.SetSelection(document); // Finally insert the merge field as needed replacing the selection. document.InsertField(new DocumentVariableField() { VariableName = varName }); // Advance to the next one t = search.Find("{" + fieldname, d); } return document;}0
Hi Thilo,
Indeed, the Insert~() methods of RadDocument are deprecated and we advise you against using them, although I cannot say when they are going to be removed exactly . As to an alternative, you can use the InsertField() method of RadRichTextBox. If for some reason you do not have access to RadRichTextBox (the document is not shown in a control or you are working from your view-model), you could always use the RadDocumentEditor class instead.
I hope this helps.
Regards,
Petya
Telerik
Indeed, the Insert~() methods of RadDocument are deprecated and we advise you against using them, although I cannot say when they are going to be removed exactly . As to an alternative, you can use the InsertField() method of RadRichTextBox. If for some reason you do not have access to RadRichTextBox (the document is not shown in a control or you are working from your view-model), you could always use the RadDocumentEditor class instead.
I hope this helps.
Regards,
Petya
Telerik
Check out Telerik Analytics, the service which allows developers to discover app usage patterns, analyze user data, log exceptions, solve problems and profile application performance at run time. Watch the videos and start improving your app based on facts, not hunches.