如何通过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
相关产品推荐
相关产品推荐

