2013-11-25 8 views
0

Я делаю редактор для документов Word в C#. И я использую RichTextBox для создания текста с его форматированием и добавления фрагмента XDocumento docx.Преобразование Richtextbox и Docx

Кто-то может сказать мне, если у вас есть какой-либо способ преобразования? включают в себя верстку ...

Этот пример уже был бы более сложным: формат

RichTextBox:

{\\rtf1\\ansi\\ansicpg1252\\deff0\\deflang1046{\\fonttbl{\\f0\\fnil\\fcharset0 Microsoft Sans Serif;}}\r\n{\\colortbl ;\\red255\\green0\\blue0;}\r\n\\viewkind4\\uc1\\pard\\f0\\fs17 A \\b Nissan \\b0 est\\'e1 \\i mesmo \\i0 disposta a \\ul fincar \\ulnone seus p\\'e9s em solo \\cf1 brasileiro\\cf0 . \\par\r\n}\r\n 

этому OpenXml Формат документа: (по умолчанию для DOCX)

<w:p w:rsidR = "00685F88" w:rsidRDefault = "00685F88"> 
      <w:pPr> 
       <w:widowControl w:val = "0"/> 
       <w:autoSpaceDE w:val = "0"/> 
       <w:autoSpaceDN w:val = "0"/> 
       <w:adjustRightInd w:val = "0"/> 
       <w:spacing 
        w:after = "0pt" 
        w:line = "12pt" 
        w:lineRule = "auto"/> 
       <w:rPr> 
        <w:rFonts 
         w:ascii = "Microsoft Sans Serif" 
         w:hAnsi = "Microsoft Sans Serif" 
         w:cs = "Microsoft Sans Serif"/> 
        <w:sz w:val = "17"/> 
        <w:szCs w:val = "17"/> 
       </w:rPr> 
      </w:pPr> 
      <w:r> 
       <w:rPr> 
        <w:rFonts 
         w:ascii = "Microsoft Sans Serif" 
         w:hAnsi = "Microsoft Sans Serif" 
         w:cs = "Microsoft Sans Serif"/> 
        <w:sz w:val = "17"/> 
        <w:szCs w:val = "17"/> 
       </w:rPr> 
       <w:t xml:space = "preserve">A</w:t> 
      </w:r> 
      <w:r> 
       <w:rPr> 
        <w:rFonts 
         w:ascii = "Microsoft Sans Serif" 
         w:hAnsi = "Microsoft Sans Serif" 
         w:cs = "Microsoft Sans Serif"/> 
        <w:b/> 
        <w:bCs/> 
        <w:sz w:val = "17"/> 
        <w:szCs w:val = "17"/> 
       </w:rPr> 
       <w:t xml:space = "preserve">Nissan</w:t> 
      </w:r> 
      <w:r> 
       <w:rPr> 
        <w:rFonts 
         w:ascii = "Microsoft Sans Serif" 
         w:hAnsi = "Microsoft Sans Serif" 
         w:cs = "Microsoft Sans Serif"/> 
        <w:sz w:val = "17"/> 
        <w:szCs w:val = "17"/> 
       </w:rPr> 
       <w:t xml:space = "preserve">está</w:t> 
      </w:r> 
      <w:r> 
       <w:rPr> 
        <w:rFonts 
         w:ascii = "Microsoft Sans Serif" 
         w:hAnsi = "Microsoft Sans Serif" 
         w:cs = "Microsoft Sans Serif"/> 
        <w:i/> 
        <w:iCs/> 
        <w:sz w:val = "17"/> 
        <w:szCs w:val = "17"/> 
       </w:rPr> 
       <w:t xml:space = "preserve">mesmo</w:t> 
      </w:r> 
      <w:r> 
       <w:rPr> 
        <w:rFonts 
         w:ascii = "Microsoft Sans Serif" 
         w:hAnsi = "Microsoft Sans Serif" 
         w:cs = "Microsoft Sans Serif"/> 
        <w:sz w:val = "17"/> 
        <w:szCs w:val = "17"/> 
       </w:rPr> 
       <w:t xml:space = "preserve">disposta a</w:t> 
      </w:r> 
      <w:r> 
       <w:rPr> 
        <w:rFonts 
         w:ascii = "Microsoft Sans Serif" 
         w:hAnsi = "Microsoft Sans Serif" 
         w:cs = "Microsoft Sans Serif"/> 
        <w:sz w:val = "17"/> 
        <w:szCs w:val = "17"/> 
        <w:u w:val = "single"/> 
       </w:rPr> 
       <w:t xml:space = "preserve">fincar</w:t> 
      </w:r> 
      <w:r> 
       <w:rPr> 
        <w:rFonts 
         w:ascii = "Microsoft Sans Serif" 
         w:hAnsi = "Microsoft Sans Serif" 
         w:cs = "Microsoft Sans Serif"/> 
        <w:sz w:val = "17"/> 
        <w:szCs w:val = "17"/> 
       </w:rPr> 
       <w:t xml:space = "preserve">seus pés em solo</w:t> 
      </w:r> 
      <w:r> 
       <w:rPr>`enter code here` 
        <w:rFonts 
         w:ascii = "Microsoft Sans Serif" 
         w:hAnsi = "Microsoft Sans Serif" 
         w:cs = "Microsoft Sans Serif"/> 
        <w:color w:val = "FF0000"/> 
        <w:sz w:val = "17"/> 
        <w:szCs w:val = "17"/> 
       </w:rPr> 
       <w:t>brasileiro</w:t> 
      </w:r> 
      <w:r> 
       <w:rPr> 
        <w:rFonts 
         w:ascii = "Microsoft Sans Serif" 
         w:hAnsi = "Microsoft Sans Serif" 
         w:cs = "Microsoft Sans Serif"/> 
        <w:sz w:val = "17"/> 
        <w:szCs w:val = "17"/> 
       </w:rPr> 
       <w:t xml:space = "preserve">.</w:t> 
      </w:r> 
     </w:p> 

и наоборот.

Не хотел делать это вручную.

В Micrsoft Office Word вы можете преобразовать формат RTF (используемый в richtextbox) в DOCX. Но я не могу найти решение этого в библиотеке Wird.

Спасибо.

+0

Используя RTF, вы делаете жизнь довольно сложной для себя. – JasonPlutext

ответ

0

Вы можете использовать Regex. Этот шаблон будет соответствовать первому примеру, {Text.*?"(.*?)"}, и вот Regex 101, чтобы это доказать. Тогда C# для этого было бы:

var val = Regex.Replace(input, pattern, "<w:p><w:r><w:t>$0</w:t></w:r></w:p>"); 
+0

Thx Michael, Мне нужно подумать об этом, проблема будет в различных форматах, которые мне пришлось бы конвертировать. В этом случае есть только текст. Я добавляю еще один пример. –

+0

@ThiagoTozzi, к сожалению, нет никакого способа обойти это. Вам нужно будет создать несколько шаблонов Regex для ваших нужд. –

0

Вы просто должны быть в состоянии использовать опцию .text при обращении к RTFTextBox. Например, mytextbox.rtf vs mytextbox.text. По крайней мере, так оно работает в Visual Studio 2010.