从另一个word文档复制的图片是空的

问题描述

生成了一份 SSRS 报告,并将其另存为 Word 文档。该文档包含图片(图表作为平台图像)。 我并没有真正保存 Word 文档,而是在内存中打开它。

然后我使用 OpenXML 创建另一个 word 文档,在女巫中我需要从 SSRS 报告中复制图片

我尝试从ssrs报告中获取图纸,并插入到新的word文档中

MainDocumentPart ssrsMainPart = ssrsDoc.MainDocumentPart;
var drawings = ssrsMainPart.Document.Descendants<Drawing>().ToList();

然后将它们插入到新文档中

MainDocumentPart mainPart = wordDoc.MainDocumentPart;
Body body = mainPart.Document.Body;

for (int i = 0; i < 10; i++)
{
    if (i < drawings.Count())
    {
        var myDrawing = drawings.Skip(i).First();
        myDrawing.Remove();
        body.Append(myDrawing); 
        body.Append(new Paragraph());
    }
}

结果我在生成的文档中只得到了图片占位符,与 ssrs Word 文档中的大小相同,但图片是空的。

我也尝试使用以下代码复制 ImageData:

foreach (var e in ssrsDoc.MainDocumentPart.Document.Body.Elements())
{
    var clonedElement = e.CloneNode(true);
    clonedElement.Descendants<DocumentFormat.OpenXml.Drawing.Blip>().ToList().ForEach(blip =>
    {
        var newRelation = wordDoc.copyImage(blip.Embed,ssrsDoc);
        blip.Embed = newRelation;
    });
    clonedElement.Descendants<DocumentFormat.OpenXml.Vml.ImageData>().ToList().ForEach(imageData =>
    {
        var newRelation = wordDoc.copyImage(imageData.RelationshipId,ssrsDoc);
        imageData.RelationshipId = newRelation;
    });
    wordDoc.MainDocumentPart.Document.Body.AppendChild(clonedElement);
}

copyImage 定义如下:

public static string copyImage(this WordprocessingDocument newDoc,string relId,WordprocessingDocument org)
{
    var p = org.MainDocumentPart.GetPartById(relId) as ImagePart;
    var newPart = newDoc.MainDocumentPart.AddPart(p);
    newPart.FeedData(p.GetStream());
    return newDoc.MainDocumentPart.GetIdOfPart(newPart);
}

但在那之后,我无法再使用 Word 365 打开文档,Word 将文档报告为损坏的文档...

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)