Richtextbox和Docx转换

时间:2013-11-25 13:14:22

标签: c# richtextbox docx openxml-sdk novacode-docx

我正在用C#编写Word文档的编辑器。我正在使用RichTextBox创建具有格式的文本,并添加一片XDocumento 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库中找到解决方案。

感谢。

2 个答案:

答案 0 :(得分: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>");

答案 1 :(得分:0)

在引用RTFTextBox时,您应该能够使用.Text选项。例如,mytextbox.rtf vs mytextbox.text。至少这是它在Visual Studio 2010中的工作方式。