如何借助Java库生成含起止事件与用户任务的BPMN图?
可用于生成BPMN流程图的Java库推荐
下面是几个成熟的Java库,能帮你快速构建包含开始/结束事件、用户任务的基础BPMN流程图,支持生成标准BPMN XML,部分还能直接导出可视化图形:
1. Camunda BPM Model API
Camunda是目前最流行的BPMN 2.0实现之一,它的Model API专门用于程序化创建、修改BPMN模型,完全符合BPMN 2.0规范。你可以用它定义流程的各个节点(开始事件、用户任务、结束事件等),然后导出为标准的.bpmn XML文件,后续可以用Camunda Modeler等工具打开查看可视化图形,也可以通过Camunda的Diagram Generator直接生成SVG/PNG。
基础使用示例:
import org.camunda.bpm.model.bpmn.Bpmn; import org.camunda.bpm.model.bpmn.BpmnModelInstance; import org.camunda.bpm.model.bpmn.instance.*; import java.io.FileOutputStream; import java.io.IOException; public class BpmnGenerator { public static void main(String[] args) throws IOException { // 创建空的BPMN模型实例 BpmnModelInstance modelInstance = Bpmn.createEmptyModel(); Definitions definitions = modelInstance.newInstance(Definitions.class); definitions.setTargetNamespace("http://your.company/bpmn"); modelInstance.setDefinitions(definitions); // 创建流程 Process process = modelInstance.newInstance(Process.class); process.setId("sample-process"); definitions.addChildElement(process); // 开始事件 StartEvent startEvent = modelInstance.newInstance(StartEvent.class); startEvent.setId("start"); process.addChildElement(startEvent); // 用户任务1 UserTask userTask1 = modelInstance.newInstance(UserTask.class); userTask1.setId("user-task-1"); userTask1.setName("填写申请"); process.addChildElement(userTask1); // 用户任务2 UserTask userTask2 = modelInstance.newInstance(UserTask.class); userTask2.setId("user-task-2"); userTask2.setName("审核申请"); process.addChildElement(userTask2); // 结束事件 EndEvent endEvent = modelInstance.newInstance(EndEvent.class); endEvent.setId("end"); process.addChildElement(endEvent); // 连接节点 Bpmn.addSequenceFlow(startEvent, userTask1); Bpmn.addSequenceFlow(userTask1, userTask2); Bpmn.addSequenceFlow(userTask2, endEvent); // 导出为BPMN XML文件 FileOutputStream outputStream = new FileOutputStream("sample-process.bpmn"); Bpmn.writeModelToStream(outputStream, modelInstance); outputStream.close(); } }
依赖(Maven):
<dependency> <groupId>org.camunda.bpm.model</groupId> <artifactId>camunda-bpm-model</artifactId> <version>7.21.0</version> </dependency>
2. Activiti Model API
Activiti是另一个老牌的BPMN引擎,它的Model API同样支持程序化构建BPMN模型,功能和Camunda类似,生成的XML也符合BPMN 2.0规范,适合已经在使用Activiti生态的项目。
基础使用示例:
import org.activiti.bpmn.model.*; import org.activiti.bpmn.converter.BpmnXMLConverter; import java.io.FileOutputStream; import java.io.IOException; public class ActivitiBpmnGenerator { public static void main(String[] args) throws IOException { BpmnModel bpmnModel = new BpmnModel(); Process process = new Process(); process.setId("sample-process"); bpmnModel.addProcess(process); // 开始事件 StartEvent startEvent = new StartEvent(); startEvent.setId("start"); process.addFlowElement(startEvent); // 用户任务1 UserTask userTask1 = new UserTask(); userTask1.setId("user-task-1"); userTask1.setName("提交申请"); process.addFlowElement(userTask1); // 用户任务2 UserTask userTask2 = new UserTask(); userTask2.setId("user-task-2"); userTask2.setName("审批申请"); process.addFlowElement(userTask2); // 结束事件 EndEvent endEvent = new EndEvent(); endEvent.setId("end"); process.addFlowElement(endEvent); // 连接节点 process.addFlowElement(new SequenceFlow("start", "user-task-1")); process.addFlowElement(new SequenceFlow("user-task-1", "user-task-2")); process.addFlowElement(new SequenceFlow("user-task-2", "end")); // 导出XML BpmnXMLConverter converter = new BpmnXMLConverter(); byte[] xmlBytes = converter.convertToXML(bpmnModel); FileOutputStream outputStream = new FileOutputStream("activiti-sample.bpmn"); outputStream.write(xmlBytes); outputStream.close(); } }
依赖(Maven):
<dependency> <groupId>org.activiti</groupId> <artifactId>activiti-bpmn-model</artifactId> <version>7.1.0.M6</version> </dependency> <dependency> <groupId>org.activiti</groupId> <artifactId>activiti-bpmn-converter</artifactId> <version>7.1.0.M6</version> </dependency>
3. 生成可视化图形的补充方案
如果需要直接在Java代码中生成流程图图片(SVG/PNG),可以配合以下工具:
- Camunda Diagram Generator:基于Camunda Model API,能直接将BPMN模型实例渲染为SVG,依赖
org.camunda.bpm:camunda-engine即可调用相关方法。 - Apache Batik:可以将生成的SVG转换为PNG等位图格式,适合需要输出图片文件的场景。
内容的提问来源于stack exchange,提问作者codeforHarman
相关产品推荐
相关产品推荐

