You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Java代码从*.aird文件生成JPG/JPEG格式图表?

实现Obeo Designer *.aird文件自动导出为JPG的Java方案

可以利用Obeo Designer基于Eclipse EMF和Sirius框架的特性,通过Java代码调用其内部API实现自动导出,核心思路是加载aird文件、获取图表描述器、调用导出服务。以下是具体步骤和代码示例:

1. 依赖准备

确保项目中引入Obeo相关核心依赖(可从Obeo的Maven仓库或本地Eclipse插件库获取),关键依赖包括:

  • org.eclipse.sirius 系列包(核心图表框架)
  • org.eclipse.emf.ecore 和 org.eclipse.emf.common(EMF基础组件)
  • org.eclipse.gmf.runtime 相关包(图形渲染支持)

2. 核心实现代码

import org.eclipse.emf.common.util.URI;
import org.eclipse.emf.ecore.resource.Resource;
import org.eclipse.emf.ecore.resource.ResourceSet;
import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
import org.eclipse.sirius.business.api.session.Session;
import org.eclipse.sirius.business.api.session.SessionManager;
import org.eclipse.sirius.diagram.DDiagram;
import org.eclipse.sirius.diagram.business.api.image.DiagramImageExportService;
import java.io.File;
import java.util.Collection;
import java.util.stream.Collectors;

public class AirdToJpgExporter {
    public static void exportAirdToJpg(String airdFilePath, String outputJpgPath) {
        // 1. 加载aird文件并初始化Session
        URI airdUri = URI.createFileURI(new File(airdFilePath).getAbsolutePath());
        ResourceSet resourceSet = new ResourceSetImpl();
        Session session = SessionManager.INSTANCE.getSession(airdUri, resourceSet);
        session.open();

        try {
            // 2. 从Session中提取所有DDiagram实例
            Collection<DDiagram> diagrams = session.getSemanticResources().stream()
                    .flatMap(resource -> resource.getContents().stream())
                    .filter(content -> content instanceof DDiagram)
                    .map(DDiagram.class::cast)
                    .collect(Collectors.toList());

            if (diagrams.isEmpty()) {
                System.err.println("目标aird文件中未找到可导出的图表");
                return;
            }

            // 3. 导出第一个图表为JPG(可遍历集合实现批量导出)
            DDiagram targetDiagram = diagrams.get(0);
            File outputFile = new File(outputJpgPath);
            // 第三个参数指定格式,第四个参数为缩放比例(1.0为原尺寸)
            DiagramImageExportService.INSTANCE.export(targetDiagram, outputFile, "jpg", 1.0f);
            System.out.println("图表导出完成,路径:" + outputJpgPath);
        } finally {
            // 4. 关闭Session释放资源
            session.close();
        }
    }

    public static void main(String[] args) {
        // 替换为你的实际文件路径
        exportAirdToJpg("/your/path/model.aird", "/your/output/path/diagram.jpg");
    }
}

3. 关键说明

  • Session管理:Obeo的aird文件通过Session统一管理资源,必须先调用open()完成加载,操作结束后调用close()释放资源。
  • 图表筛选:aird文件包含多个语义资源,需筛选出DDiagram类型实例,这对应Obeo Designer中可视化的图表。
  • 导出服务:DiagramImageExportService是Sirius官方提供的导出API,支持JPG/PNG等格式,可自定义缩放比例。
  • 运行环境:代码需在Eclipse Runtime环境(或打包为Eclipse插件)中运行,因为Obeo API依赖Eclipse的OSGi框架,普通Java SE环境需额外处理类路径和依赖冲突。

4. 注意事项

  • 确保aird文件关联的所有模型文件(如.ecore)路径正确,否则Session无法加载完整资源导致导出失败。
  • 可修改代码逻辑,实现按名称筛选目标图表、批量导出所有图表等定制需求。

内容的提问来源于stack exchange,提问作者Vallxy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 01:35:26