Activiti 根据流程定义id生成图片
1.前提是已经部署了流程 会在act_re_procdef表中生成一条数据
根据流程定义的id 生成图片
@GetMapping(value = "/getImageNOId")
public void getImage2(HttpServletResponse response,@RequestParam String processDefinitionId) {
try {
//select * from ACT_RE_PROCDEF
// String processDefinitionId="leave:1:2501";
InputStream is = activitiservice.getDiagramNoId(processDefinitionId);
if (is == null)
return;
response.setContentType("image/png");
BufferedImage image = ImageIO.read(is);
OutputStream out = response.getOutputStream();
ImageIO.write(image, "png", out);
is.close();
out.close();
} catch (Exception ex) {
logger.error("查看流程图失败", ex);
}
}
serviceImpl中
public InputStream getDiagramNoId(String processDefinitionId) {
//获得流程实例
BpmnModel model = repositoryService.getBpmnModel(processDefinitionId);
//使用宋体
String fontName = "宋体";
//获取BPMN模型对象
//获取流程实例当前的节点,需要高亮显示
List<String> currentActs = Collections.EMPTY_LIST; //空list就是没有高亮的
return processEngine.getProcessEngineConfiguration()
.getProcessDiagramGenerator()
.generateDiagram(model, "png", currentActs, new ArrayList<String>(),
fontName, fontName, fontName, null, 1.0);
}
2.根据processInstanceId查询流程图
/**
* 查看流程图 根据processInstanceId
*/
@GetMapping(value = "/getImage")
public void getImage(HttpServletResponse response,
@RequestParam String processInstanceId) {
try {
InputStream is = activitiservice.getDiagram(processInstanceId);
if (is == null)
return;
response.setContentType("image/png");
BufferedImage image = ImageIO.read(is);
OutputStream out = response.getOutputStream();
ImageIO.write(image, "png", out);
is.close();
out.close();
} catch (Exception ex) {
logger.error("查看流程图失败", ex);
}
}
serviceImpl
@Override
public InputStream getDiagram(String processInstanceId) {
//获得流程实例
ProcessInstance processInstance = runtimeService.createProcessInstanceQuery()
.processInstanceId(processInstanceId).singleResult();
String processDefinitionId = StringUtils.EMPTY;
if (processInstance == null) {
//查询已经结束的流程实例
HistoricProcessInstance processInstanceHistory =
historyService.createHistoricProcessInstanceQuery()
.processInstanceId(processInstanceId).singleResult();
if (processInstanceHistory == null)
return null;
else
processDefinitionId = processInstanceHistory.getProcessDefinitionId();
} else {
processDefinitionId = processInstance.getProcessDefinitionId();
}
//使用宋体
String fontName = "宋体";
//获取BPMN模型对象
BpmnModel model = repositoryService.getBpmnModel(processDefinitionId);
//获取流程实例当前的节点,需要高亮显示
List<String> currentActs = Collections.EMPTY_LIST;
if (processInstance != null)
currentActs = runtimeService.getActiveActivityIds(processInstance.getId());
return processEngine.getProcessEngineConfiguration()
.getProcessDiagramGenerator()
.generateDiagram(model, "png", currentActs, new ArrayList<String>(),
fontName, fontName, fontName, null, 1.0);
}