Openxml sdk。如何使用图像搜索,读取和替换段落中的文本

时间:2011-12-27 14:58:00

标签: image search sdk replace openxml

我正在生成Word(.docx)文档,并遇到如何在已经存在的文档中插入图表,图像而不是自定义标记的问题。但最初我使用“Altchunk”方法从几个.RTF文件创建文档,将.RTFs插入到模板doc中的内容控件中。那些.RTF文件包含我们的自定义标签,它们看起来像“< ElementType =”Diagram“Name =”Somename“>”并使用如下所示的新行显示在文档中。(我们事先不知道这些标记将在doc中有多少) .......

< ElementType =“Diagram”Name =“图表的某些名称”>

....... 谷歌搜索它,但无法找到如何用图像替换标签的好方法。 因为首先我需要读取标签以便识别图像的名称,所以我知道将使用什么图像而不是标签,然后从文档中删除标签(只是文本)并在其位置放置我刚刚获取的图像,知道名称图像。所以这很复杂,但我希望有人有好主意分享。感谢

我想更具体地描述这个问题:

1)关于 altchunk 方法,我只是找到我用作模板的word文档中的内容控件,当我有rtf字符串时,我在该CC之后插入altchunk。
我的方法如下所示:

    private void ReplaceContentControlWithRTF(MainDocumentPart mainPart, string tagName,     string rtfString) 
{
                SdtBlock sb = mainPart.Document.Body.Descendants<SdtBlock>().Where(r => r.SdtProperties.GetFirstChild<Tag>().Val == tagName).Single();
                string altChunkId = "altChunkId" + altChunkIdNumber++;
                AlternativeFormatImportPart chunk = mainPart.AddAlternativeFormatImportPart(AlternativeFormatImportPartType.Rtf, altChunkId);
                MemoryStream s = new MemoryStream(System.Text.Encoding.UTF8.GetBytes(rtfString));
                chunk.FeedData(s);
                AltChunk altChunk = new AltChunk();
                altChunk.Id = altChunkId;
                DocumentFormat.OpenXml.OpenXmlElement parent = sb.Parent;
                parent.InsertAfter(altChunk, sb);
                sb.Remove();
                mainPart.Document.Save();

}

1 个答案:

答案 0 :(得分:1)

我的回答很长,所以我会将内容与一些标题分开,以便更容易阅读:)。除非你已经找到了更好的方法,否则你应该考虑每一个。

连接文件

我认为当你使用 altchunk 方法时,你会得到第一个文档的xml(原始文档),并且所有附加文档都被编码。 更好的方法是连接文档的内容,因为您可以轻松访问整个文档的xml树。如果你不在连续文档中使用图像,超链接等,这很容易,因为它们需要以特殊的方式处理,并且可以使它更复杂。

或者,您可以尝试在连接文档之前将图像插入到每个文档中。

将内容控制用作文档中的占位符

现在,假设您已经可以访问文档,您应该将内容控件放在Word文档中,在希望显示图像的位置,并将每个图像的标记设置为您应该搜索的值在您的代码中,以找到插入图片的正确位置。您可以在此处找到有关内容控制的一些基本信息:http://office.microsoft.com/en-us/help/content-controls-HA010030750.aspx

插入XML标记和图像的字节

为了将图像插入文档,您不仅要在希望图像显示的位置插入一些XML标记,还要将包含图像的字节添加为ImagePart。我找到了一个教程解释如何在这里做(虽然我没有自己跟着它): http://msdn.microsoft.com/en-us/library/ee342530%28v=office.12%29.aspx

考虑使用OpenXML SDK 2.0生产力工具

为了让您更轻松地使用OpenXML SDK,我建议您使用Microsoft的SDK Productivity Tool。它可以作为OpenXML SDK的一部分进行下载,它允许您打开任何MS Office OpenXML文档,以XML方式显示其内容,甚至可以显示重新创建它所需的C#代码。您可以从此处下载:http://www.microsoft.com/download/en/details.aspx?id=5124

如果您有任何其他问题,请随时询问:)。