RTF-файл содержит странные данные форматирования, предотвращающие слияние полей - PullRequest
1 голос
/ 17 января 2011

Я создал файл RTF с помощью Word 2007. Я хочу вставить поля слияния, которые можно проанализировать и объединить с информацией базы данных на более позднем этапе. В документе содержалась фраза «Уважаемый [приветствие] [фамилия] Как дела?». Затем я отредактировал часть [фамилия], чтобы сказать [фамилия]. Если я сейчас просматриваю исходный код rtf, он содержит множество нежелательных символов следующим образом:

Уважаемый [приветствие] [} {\ rtlch \ fcs1 \ af31507 \ ltrch \ fcs0 \ insrsid6575321 last} {\ rtlch \ fcs1 \ af31507 \ ltrch \ fcs0 \ insrsid2040086 name} {\ rtlch \ fcs1 \ af31507 ls \ insrsid2434881]} {\ rtlch \ fcs1 \ af31507 \ ltrch \ fcs0 \ insrsid2040086 \ r \ n \ par Как дела?

Это означает, что когда я пытаюсь объединить, [фамилия] слишком искажена, чтобы быть найденной для объединения. Кто-нибудь знает, что здесь происходит, и как я могу предотвратить встраивание Word всех этих нежелательных вещей? Спасибо.

Ответы [ 2 ]

1 голос
/ 09 февраля 2011

В конце я использовал 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;
        }
    }
0 голосов
/ 14 января 2017

Вы можете использовать выражения регулярных выражений для завершения этого процесса слияния.Я создал пост в блоге о том, как это можно сделать.

Использование регулярного выражения для объединения содержимого базы данных в документы шаблона формата Rich Text

Пример, написанный на PHP, можно найти на Github: https://github.com/olekrisek/PHP_RTF_RegExMerge

...