rtf文件包含防止字段合并的奇怪格式数据

时间:2011-01-17 17:25:47

标签: formatting document rtf

我使用Word 2007创建了一个RTF文件。我想插入可以在稍后阶段解析并与数据库信息合并的合并字段。该文件中包含“亲爱的[称呼] [姓],你好吗?”。然后我编辑[姓]部分说[姓氏]。如果我现在查看rtf源它包含大量不需要的字符,如下所示:

亲爱的[敬礼] [} {\ rtlch \ fcs1 \ af31507 \ ltrch \ fcs0 \ insrsid6575321 last} {\ rtlch \ fcs1 \ af31507 \ ltrch \ fcs0 \ insrsid2040086 name} {\ rtlch \ fcs1 \ af31507 \ ltrch \ fcs0 \ insrsid2434881]} {\ rtlch \ fcs1 \ af31507 \ ltrch \ fcs0 \ insrsid2040086 \ r \ n \ par你好吗?

这意味着当我尝试合并时,[lastname]太过错,无法找到合并。 有谁知道这里发生了什么,以及我如何阻止Word嵌入所有这些不需要的东西? 感谢。

2 个答案:

答案 0 :(得分:1)

最后我使用System.Windows.Forms.RichTextBox来解决问题,如下所示:

public class RTF
    {
        /// <summary>
        /// Merge the merge data with the target RTF document
        /// </summary>
        /// <param name="byteStream">Original RTF document</param>
        /// <param name="mergeDatatable">Merge Data (as per sproc_GetDocumentMergeData)</param>
        /// <returns>String representation of the RTF document</returns>
        public static string GetMergedRTFDocument(byte[] byteStream,DataTable mergeDatatable)
        {
            System.Windows.Forms.RichTextBox rtb = new System.Windows.Forms.RichTextBox();
            MemoryStream stream = new MemoryStream(byteStream);
            rtb.LoadFile(stream, System.Windows.Forms.RichTextBoxStreamType.RichText); // Use for RTF

            int selstart = 0;
            string findTerm = "";
            DataRow mergerow = mergeDatatable.Rows[0];
            foreach (DataColumn col in mergeDatatable.Columns)
            {
                findTerm = "[" + col.ColumnName + "]";
                selstart = rtb.Find(findTerm);
                while (selstart > -1)
                {
                    rtb.SelectionStart = selstart;
                    rtb.SelectedText = mergerow[col].ToString();
                    selstart = rtb.Find(findTerm);
                }


            }

            return rtb.Rtf;
        }
    }

答案 1 :(得分:0)

您可以使用正则表达式表达式来完成此合并过程。我创建了一篇关于如何做到这一点的博客文章。

Using regular expression to merge database content into Rich Text format template documents

可以在Github上找到用PHP编写的示例: https://github.com/olekrisek/PHP_RTF_RegExMerge