我在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