2014-04-23 62 views
1

我試圖將一些數據存儲在數據庫中,並使用Open XML SDK使用它填充Word模板的內容控件。數據包含段落,所以在其中有回車符和換行符。數據以nvarchar的形式存儲在數據庫中。從數據庫將CR + LF寫入Open XML

當我打開生成的文檔時,CR + LF組合顯示爲帶有框的問號(不確定此字符的名稱)。這實際上是兩個序列背靠背,所以CR + LFCR + LF等於二奇怪的字符:

strange character

如果我解壓.docx,採取自定義XML部分,做一個十六進制轉儲,我可以清楚地見0d0a 0d0a所以CR + LF在那裏。 Word只是打印它很奇怪。

我試過執行UTF-8編碼在我XmlWriter的設置,但是這似乎並沒有幫助:

Dim docStream As New MemoryStream 
Dim settings As XmlWriterSettings = New XmlWriterSettings() 
settings.Encoding = New UTF8Encoding(False) 
Dim docWriter As XmlWriter = XmlTextWriter.Create(docStream, settings) 

有誰知道我可以獲取Word將正確地呈現時,這些字符通過Open XML SDK寫入.docx

+0

也許有助於理解Word不會保存CR/CRLF組合,而是具有XML構造 - 例如,與 「ABC」,然後換行一個段落,然後在 「高清」 將是更喜歡: ABC高清

+0

正確的。 @bibadia提供了答案。我使用Open XML編輯器的插件來分析發生的事情。您也可以使用您開發的加載項從VS進行調試,並在逐步完成時持續查看xml版本。 –

+0

@bibadia好的,這是有幫助的。我可以運行正則表達式替換數據庫中的字符串來應用正確的標記。但我試圖將這些標籤手動添加到自定義XML部分,Word不能再讀取該文檔。我包含了一些MSDN文章中的'w'命名空間,但這沒有幫助。任何想法,如果這些標籤是不同的自定義XML部分? –

回答

0

要綁定到Word 2013富文本控件,您的XML元素必須包含完整的docx。參見[MS-DOCX]:

存儲在XML元素中的數據將是由代表在結構化文檔標籤範圍的格式化數據扁平WordprocessingML文檔的轉義字符串。

早期版本無法綁定富文本控件。

如果綁定到純文本控件,並且多行設置爲true,則事情應該可以正常工作(使用CR/LF,而不是w:br)。

+0

它肯定需要是一個Rich Text控件。格式化的能力是一項要求。綁定到預先格式化完整的'.docx'實際上是有益的。雖然我不知道如何去做。我上傳了@bibadia建議的Word XML文件。我使用LINQ從數據庫中檢索它。然後我嘗試用我的'XmlWriter'將它作爲一個字符串寫入相應的元素。但是填充的是'System.Byte []'。有關如何將完整的'.docx'寫入Custom XML部分的提示? –

+0

你實際上可以通過w:sdtPr/w:rPr格式化純文本控件,但只能統一。 – JasonPlutext

+0

對於扁平化的WordML,請參閱http://blogs.msdn.com/b/ericwhite/archive/2008/09/29/the-flat-opc-format.aspx – JasonPlutext