activiti5学习资料(5.12版本流程图的生成)
描述:
activiti5.12版本,流程图的生成,在servlet将图片流输出到div层中,然后在页面上显示图形。
activiti版本:5.12版本
导入jar包:
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-spring</artifactId>
<version>${activiti-version}</version>
</dependency>
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-engine</artifactId>
<version>${activiti-version}</version>
</dependency>
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-bpmn-model</artifactId>
<version>${activiti-version}</version>
</dependency>
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-bpmn-converter</artifactId>
<version>${activiti-version}</version>
</dependency>
jsp页面代码:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>流程图</title>
<%@ include file="/inc.jsp"%>
</head>
<body>
<h2>流程图x=${point.x},y=${point.y}</h2>
<div style="position: relative;background:url('${ctx}/bpmImage?processDefinitionId=${processDefinitionId}') no-repeat;width:${point.x}px;height:${point.y}px;">
</div>
</body>
</html>
servlet代码:
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
String proDefId = req.getParameter("processDefinitionId");
// 生成图片
InputStream is = null;
if (StringUtils.isNotEmpty(proDefId)) {
BpmnModel bpmnModel = repositoryService.getBpmnModel(proDefId);
is = ProcessDiagramGenerator.generatePngDiagram(bpmnModel);
}
if (is != null) {
resp.setContentType("image/png");
OutputStream out = resp.getOutputStream();
try {
byte[] bs = new byte[1024];
int n = 0;
while ((n = is.read(bs)) != -1) {
out.write(bs, 0, n);
}
out.flush();
} catch (Exception ex) {
ex.printStackTrace();
} finally {
is.close();
out.close();
}
}
}
如果想设置流程图的div的大小:
遍历流程节点的元素大小,然后获取最大的坐标信息。
代码:
import org.activiti.bpmn.model.BpmnModel;
import org.activiti.bpmn.model.GraphicInfo;
/**
* @description 流程图片辅助类
* @description BpmImageUtil
* @author 不了了之之了之
* @data 2013-3-31
*/
public class BpmImageUtil {
/**
* 获取流程节点元素中,最大的x,y坐标信息
*
* @param bpmnModel
* BpmnModel对象
* @return Point
*/
public static Point getPoint(BpmnModel bpmnModel) {
Point point = null;
if (bpmnModel != null && bpmnModel.getFlowLocationMap().size() > 0) {
int maxX = 0;
int maxY = 0;
for (String key : bpmnModel.getLocationMap().keySet()) {
GraphicInfo graphicInfo = bpmnModel.getGraphicInfo(key);
double elementX = graphicInfo.getX() + graphicInfo.getWidth();
if (maxX < elementX) {
maxX = (int) elementX;
}
double elementY = graphicInfo.getY() + graphicInfo.getHeight();
if (maxY < elementY) {
maxY = (int) elementY;
}
}
point = new Point(maxX, maxY);
} else {
point = new Point(100, 100);
}
return point;
}
}
效果图: