2013-02-05 30 views
4

我正在開發一個.NET C#應用程序,需要創建一個Word文檔,插入存儲在數據庫中的RTF文本片段。有誰知道是否有可能以及如何使用OpenXml(或COM互操作)完成此操作?是否可以使用OpenXml將一些RTF文本插入到Word文檔(.docx)中?

我不需要將一個完整的RTF文件轉換爲Word文檔。我需要以編程方式創建一個Word文檔,並使用C#在Word文檔的不同位置添加RTF文本片段。

+0

你的意思是說docx? OpenXml可以創建一個文檔。我會通過COM interop使用OpenXml。 – Paparazzi

+0

我寧願在COM interop上也使用OpenXml,但我不知道是否可以將一些RTF文本插入到OpenXml文檔中,而無需先解析它。如果有人能指出我的方向是正確的,那就好了。或者,如果可以使用Xaml(使用flowdocument)來完成,那也適用於我,但是我將使用WPF RichTextBox而不是WinForms RichTextBox將文本片段插入到數據庫中。 – Gert

回答

6

您可以通過altChunk錨點導入外部內容。 的altChunk錨定義了一個word文檔內的地方插入 外部內容,如RTF,HTML,XML,...

有關altChunk錨請參閱 更多信息下面的文章MSDN

下面的代碼演示瞭如何使用 OpenXML的SDK插入RTF的塊到Word文檔:

  1. 打開Word文檔。使用唯一的塊ID創建AlternativeFormatImportPart組塊。
  2. 將您的RTF數據輸入到塊(我在這裏使用的是MemoryStream)。
  3. 使用與創建AlternativeFormatImportPart相同的ID創建一個AltChunk
  4. 保存word文檔。

static void Main(string[] args) 
{ 
    using (WordprocessingDocument doc = WordprocessingDocument.Open(@"test.docx", true)) 
    { 
    string altChunkId = "AltChunkId5"; 

    MainDocumentPart mainDocPart = doc.MainDocumentPart; 
    AlternativeFormatImportPart chunk = mainDocPart.AddAlternativeFormatImportPart(
     AlternativeFormatImportPartType.Rtf, altChunkId);     

    string rtfEncodedString = @"{\rtf1\ansi{\fonttbl\f0\fswiss Helvetica;}\f0\pard This is some {\b bold} text.\par}"; 

    using (MemoryStream ms = new MemoryStream(Encoding.ASCII.GetBytes(val))) 
    { 
     chunk.FeedData(ms); 
    } 

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

    mainDocPart.Document.Body.InsertAfter(
     altChunk, mainDocPart.Document.Body.Elements<Paragraph>().Last()); 

    mainDocPart.Document.Save(); 

    } 
} 
相關問題