有一个旧模块,它使用sparx ea项目的数据生成报告。
您需要在图片中插入图表作为图片。
现在看起来像那样
public static void copyDiagram(
EA.Diagram diagram,
EA.Repository eaRepository)
{
eaRepository.App.Project.PutDiagramImageOnClipboard(diagram.DiagramGUID, 0);
eaRepository.CloseDiagram(diagram.DiagramID);
}
将其复制到剪贴板,之后会出现类似的情况
currentDocumentRange.Paste()
对我来说很奇怪。 我认为使用这样的剪贴板并不是很好,所以我想在将来重写它。
所以,我发现的其他功能看起来只有PutDiagramImageToFile(diagrammGUID, path, type)
如果没有更好的选择是否可以创建新文件,之后通过它的路径插入word文档,然后删除它?
或者,也许还有其他一些SparxEA函数,它以byte[]
格式或类似Image
格式从图中获取图像?
哪种方式更好?
答案 0 :(得分:3)
我正在使用此代码(在图表包装类上)来获取图表的图像,而无需使用剪贴板。
此代码主要用于自定义书面文档生成器,并且速度惊人。
/// <summary>
/// returns diagram image
/// </summary>
public Image image
{
get
{
EA.Project projectInterface = this.model.getWrappedModel().GetProjectInterface();
string diagramGUID = projectInterface.GUIDtoXML(this.wrappedDiagram.DiagramGUID);
string filename = System.IO.Path.GetTempPath() + Guid.NewGuid().ToString() + ".png";
//save diagram image to file (format ".png")
projectInterface.PutDiagramImageToFile(diagramGUID, filename, 1);
//load the contents of the file into a memorystream
MemoryStream imageStream = new MemoryStream(File.ReadAllBytes(filename));
//then create the image from the memorystream.
//this allows us to delete the temporary file right after loading it.
//When using Image.FromFile the file would have been locked for the lifetime of the Image
Image diagramImage = Image.FromStream(imageStream);
//delete the temorary file
System.IO.File.Delete(filename);
return diagramImage;
}
}