问题描述
我生成了一份 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 (将#修改为@)