OpenXML:向文档添加图像的问题

时间:2011-09-04 02:35:31

标签: openxml

到目前为止,这段代码一直用于构建带有文本的文档几个月而没有任何障碍。我现在正在尝试动态添加图像。我花了大约两天时间盯着代码和研究,结束了。我怀疑问题是没有创建关系(下面有更多细节。)也许不是?

   //set stuff up...
WordprocessingDocument doc = WordprocessingDocument.Open(fsPat, true, new OpenSettings(){
    AutoSave = true,

    MarkupCompatibilityProcessSettings = new MarkupCompatibilityProcessSettings(MarkupCompatibilityProcessMode.ProcessAllParts,
    DocumentFormat.OpenXml.FileFormatVersions.Office2007),

    MaxCharactersInPart = long.MaxValue
    });

    MainDocumentPart mainPart = doc.MainDocumentPart;
.
.Other stuff goes here
.

//now the fun...
Run r2 = new Run();
    // Add an ImagePart.
    ImagePart ip = mainPart.AddImagePart(ImagePartType.Png);
    string imageRelationshipID = mainPart.CreateRelationshipToPart(ip); //
    using (Stream imgStream = ip.GetStream())
        {
        System.Drawing.Bitmap b = new System.Drawing.Bitmap("myfile.png");
        b.Save(imgStream, System.Drawing.Imaging.ImageFormat.Png);
        }
    Drawing drawing = BuildImage(imageRelationshipID, "name"+imageRelationshipID.ToString(), 17, 17);
    r2.Append(drawing);
    p.Append(r2);

图像部分基本上是从http://blog.stuartwhiteford.com/?p=33复制的,目前正在循环中运行。我还复制了他的BuildImage()函数并按原样使用它。

当我打开生成的docx时,我看到红色的Xs,其中的图像显示“此图像当前无法显示。”

当我打开zip时,图像将显示在root / media中,但不会出现我期望的root / word / media。我也找不到任何关系文件中引用的图像。理想情况下,它们位于root / word / _rels / document.xml.rels中。你会注意到我改变了imageRelationshipID的设置方式,希望能解决这个问题。它没有。

请帮忙。谢谢。

1 个答案:

答案 0 :(得分:2)

所以......看起来OpenXML只是讨厌我。我在尝试其他事情时从3-4个地方复制了AddImagePart代码 - 其中没有一个持续很长时间 - 只是无法建立关系。我看到的含义是它们会随AddImagePart函数自动发生。

我最终做了一个完整的解决方法,我添加了我想要放置的所有图片,并删除了我不想要的绘图节点的父节点(一般是运行节点。)因为这些是非常小的图片,这是可行的,并且比尝试根据需要添加它们更优雅,因为我不必跟踪图像存储在磁盘上的位置。