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;${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; } }
效果图: