我使用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嵌入所有这些不需要的东西? 感谢。
答案 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