2013-04-23 45 views
0

我在InfoPath表單設置格式文本框,我的計劃,通過在InfoPath XML如下解析:的OpenXML - InfoPath中富文本框爲Word文檔給出的格式錯誤

XPathNavigator formNameNode = root.SelectSingleNode("/my:myFields/my:Responses/my:Q1", nsMgr); 
string response1 = formNameNode.InnerXml; 

下面的代碼,然後用來打開一個word文檔,並得到一個純文本內容控件調用響應1:

using (WordprocessingDocument myDoc = 
WordprocessingDocument.Open(ms, true)) 
    { 
     MainDocumentPart mainPart = myDoc.MainDocumentPart; 

    List<OpenXmlElement> sdtList = InfoPathToWord.GetContentControl(mainPart.Document, "response1"); 
      InfoPathToWord.AddRichText(0, response1, ref mainPart, ref sdtList); 
} 

然後該代碼調用InfoPathToWord.AddRichText這是如下:

public static void AddRichText(int id, string rtfValue, 
      ref MainDocumentPart mainPart, ref List<OpenXmlElement> sdtList) 
     { 
      if (sdtList.Count != 0) 
      { 
       id++; 
       string altChunkId = "AltChunkId" + id; 
       AlternativeFormatImportPart chunk = 
        mainPart.AddAlternativeFormatImportPart(
        AlternativeFormatImportPartType.Xhtml, altChunkId); 

       using (MemoryStream ms = new MemoryStream(System.Text.Encoding.Default.GetBytes(rtfValue))) 
       { 
        chunk.FeedData(ms); 
        ms.Close(); 
       } 

       AltChunk altChunk = new AltChunk(); 
       altChunk.Id = altChunkId; 

       InfoPathToWord.ReplaceContentControl(sdtList, altChunk); 
      } 
     } 

最後的altChunk取代了「響應1」

public static void ReplaceContentControl(
     List<OpenXmlElement> sdtList, OpenXmlElement element) 
    { 
     if (sdtList.Count != 0) 
     { 
      foreach (OpenXmlElement sdt in sdtList) 
      { 
       OpenXmlElement parent = sdt.Parent; 
       parent.InsertAfter(element, sdt); 
       sdt.Remove(); 
      } 
     } 
    } 

的問題是,它取代了文本,但格式不正確,並顯示「?」輸出文本中的字符。 不知道如果它是由於編碼引起的,我也嘗試過System.Text.Encoding.UTF8.GetBytes(rtfValue), System.Text.Encoding.ASCII.GetBytes(rtfValue),但這似乎沒有任何幫助。

請有人告訴我我做錯了什麼。

在此先感謝。

Mave

回答

0

我使用regx在保存之前清理字符串。

html = Regex.Replace(html,「/ [\ x00- \ x08 \ x0B \ x0C \ x0E- \ x1F \ x80- \ x9F]/u」,「」)'允許標籤和其他可打印字符

Dim ms As New MemoryStream(System.Text.Encoding.UTF8.GetBytes(html)) '創建替代格式導入部分。 昏暗formatImportPart作爲AlternativeFormatImportPart = mainDocPart.AddAlternativeFormatImportPart( 「應用程序/ xhtml + xml」,altChunkId)

Regex to remove all special characters from string?

UPDATE ...經過嚴格的測試,我在發現太多的字符編碼問題使用InfoPath RTF DOCX。