博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Activiti实现流程定义部署时自动裁切流程图
阅读量:6828 次
发布时间:2019-06-26

本文共 2482 字,大约阅读时间需要 8 分钟。

hot3.png

版本声明:Activiti 5.22.0 Activiti在流程部署(直接部署BPMN或者由模板转换流程)时,生成的流程图源码里是这样确定尺寸的: image.png

意思是:按画好的流程图最右+10、最下+10的尺寸确定图片的尺寸,而左边的空隙和上边的空隙Activiti并没有帮我们自动去除,这样会导致我们在展示流程图时很难做到将流程图真正置于窗口的中央位置,对画流程图的节点位置很有关系。我们希望最后生成的流程图应该是这个样子的: image.png

这样展示起来就美观多了,好了,大致需求就是这样:在流程部署时,自动根据流程图的左侧节点和上侧节点边缘实现裁切图片; 思路:重写DefaultProcessDiagramGenerator类的generateDiagram方法:

@Override	public InputStream generateDiagram(BpmnModel bpmnModel, String imageType, List
highLightedActivities, List
highLightedFlows, String activityFontName, String labelFontName, String annotationFontName, ClassLoader customClassLoader, double scaleFactor, Color[] colors) { CustomProcessDiagramCanvas customProcessDiagramCanvas = generateProcessDiagram(bpmnModel, imageType, highLightedActivities, highLightedFlows, activityFontName, labelFontName, annotationFontName, customClassLoader, scaleFactor,colors); BufferedImage bufferedImage = customProcessDiagramCanvas.generateBufferedImage(imageType); ByteArrayOutputStream bs = new ByteArrayOutputStream(); ImageOutputStream imOut; try { imOut = ImageIO.createImageOutputStream(bs); ImageIO.write(bufferedImage, "PNG", imOut); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } InputStream is = new ByteArrayInputStream(bs.toByteArray()); return is;// return generateProcessDiagram(bpmnModel, imageType, highLightedActivities, highLightedFlows, // activityFontName, labelFontName, annotationFontName, customClassLoader, scaleFactor,colors)// .generateImage(imageType); }

如果需要将这个裁切保留边距设置为可配置参数的话,还需重写DefaultProcessDiagramCanvas类的generateBufferedImage方法:

@Override	public BufferedImage generateBufferedImage(String imageType) {		if (closed) {			throw new ActivitiImageException("ProcessDiagramGenerator already closed");		}		// Try to remove white space		minX = (minX <= WorkflowConstants.PROCESS_PADDING) ? WorkflowConstants.PROCESS_PADDING : minX;		minY = (minY <= WorkflowConstants.PROCESS_PADDING) ? WorkflowConstants.PROCESS_PADDING : minY;		BufferedImage imageToSerialize = processDiagram;		if (minX >= 0 && minY >= 0) {			imageToSerialize = processDiagram.getSubimage(					minX - WorkflowConstants.PROCESS_PADDING,					minY - WorkflowConstants.PROCESS_PADDING, 					canvasWidth - minX + WorkflowConstants.PROCESS_PADDING,					canvasHeight - minY + WorkflowConstants.PROCESS_PADDING);		}		return imageToSerialize;	}

这样可以随时改变要生成的流程图的保留边距。

转载于:https://my.oschina.net/u/180480/blog/2248966

你可能感兴趣的文章
C#控制台应用程序下 string[] args参数用处
查看>>
linux下vi编辑器命令大全
查看>>
程序员的爱情
查看>>
MySQL 备份和恢复策略
查看>>
简单网络管理协议snmp
查看>>
语言和封装那些事
查看>>
postgres 数据备份与恢复
查看>>
Spring学习总结(2)——Spring的常用注解
查看>>
Java基础学习总结(16)——Java制作证书的工具keytool用法总结
查看>>
Docker镜像与容器命令
查看>>
EFCore笔记之查询数据
查看>>
批量动态生成二维码
查看>>
迭代器,生成器
查看>>
如何用二分法在有序数组中找到你想要的数字
查看>>
单向ospf
查看>>
深蓝串口调试工具2017冬季版(2.14.11)
查看>>
linux ssh_config和sshd_config配置文件
查看>>
Oracle教程之管理索引(六)--Oracle重建索引
查看>>
ubuntu编译最简环境
查看>>
回顾一个考务系统的开发
查看>>