将自定义(隐藏)数据附加到Microsoft Word加载项中的图像

时间:2012-08-30 11:26:29

标签: c# ms-word vsto ms-office docx

我正在尝试使用Visual Studio 2010和C#上的VSTO为Microsoft Word(2007及更高版本)编写Office加载项。

加载项会将图像插入从Internet下载的文档中(来自自定义CGI脚本)。这些图像每天都会更新,因此我根据请求添加了一个“刷新”来自服务器的所有图像的按钮。但是,我不确定如何“存储”图像的原始标识符以及文档中嵌入的图像,以了解从服务器获取哪个图像。标识符可以是从几个字符到几百(~200)个字符长的任何地方,但是是ASCII标识符。

目前我像这样插入图片:

    public void InsertPictureFromIdentifier(String identifier)
    {
        Document vstoDocument = Globals.Factory.GetVstoObject(this.Application.ActiveDocument);

        Word.Selection selection = this.Application.Selection;
        if (selection != null && selection.Range != null)
        {
            // Insert the picture control
            var picture = vstoDocument.Controls.AddPictureContentControl(selection.Range, "mypic");
            // And update the image
            UpdatePicture(picture, identifier);
         }
    }

然后在初始插入时调用UpdatePicture,并在刷新时调用以更新图像:

    public void UpdatePicture(PictureContentControl picture, string identifier)
    {
        const int BytesToRead = 1000000;

        // Download the image from the scrip
        var request = WebRequest.Create("http://my.server.com/graph.cgi?"+identifier);
        var response = request.GetResponse();
        var responseStream = response.GetResponseStream();
        var reader = new BinaryReader(responseStream);
        var memoryStream = new MemoryStream();
        Byte[] byteBuffer = new byte[BytesToRead];

        // Transfer to a memory stream
        var bytesRead = reader.Read(byteBuffer, 0, BytesToRead);
        while (bytesRead > 0)
        {
            memoryStream.Write(byteBuffer, 0, bytesRead);
            bytesRead = reader.Read(byteBuffer, 0, BytesToRead);
        }

        // Set the image from the memory stream
        picture.Image = new System.Drawing.Bitmap(memoryStream);
    }

正如您所看到的,我将标识符传递给更新 - 但问题是如何从第二天刷新的'图片'中获取该标识符。我尝试过使用图片的标签,但这仅限于64个字符。我甚至尝试使用图片的标题属性,但这似乎在其他一些最大限制上默默失败。

标识符需要在保存/加载之间保持,与文档中的图像一起移动,并且不可见(我不能只在带有标识符的图像后添加文本)。

0 个答案:

没有答案