Spax EA将图表导出到Word文档的最佳方法

时间:2016-12-13 08:34:46

标签: c# office-interop enterprise-architect

有一个旧模块,它使用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格式从图中获取图像?

哪种方式更好?

1 个答案:

答案 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;
    }
}