リッチ テキスト ボックスを InfoPath 形式でセットアップしました。私のプログラムは、次のように Infopath XML を解析します。
XPathNavigator formNameNode = root.SelectSingleNode("/my:myFields/my:Responses/my:Q1", nsMgr);
string response1 = formNameNode.InnerXml;
次に、次のコードを使用して Word 文書を開き、response1 というプレーン テキスト コンテンツ コントロールを取得します。
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 が "response1" を置き換えます
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)
たが、どれも役に立たないようです。
誰かが私が間違っていることを教えてください。
前もって感謝します。
メイヴ