Activiti6根据bpmn文件生成流程图

需求

根据上传的bpmn文件生成流程图,目前网上的资料全都是先将流程文件部署之后,然后才可以生成流程图,但是我们项目的需求是先根据bpmn文件生成流程图,确认流程图没有问题之后才能部署(避免失误传错bpmn文件的情况)。

 问题分析

网上没有资料只能自己想办法,既然流程定义部署之后可以生成流程图,并且部署之后在数据库ACT_GE_BYTEARRAY表中发现了流程图文件,那么说明在部署操作时肯定是执行了流程图的生成操作,然后保存到数据库中了,那么只要分析下Activiti源码,看下是在哪一步执行了流程图的操作就可以了。根据分析发现关键得一步在于将bpmn文件转换为BpmnModel,有了BpmnModel 就可以调用generateDiagram方法生成流程图了

解决方案

环境

SpringBoot版本 2.1.0.RELEASE

activiti-spring-boot-starter-basic版本 6.0.0

flowable-image-generator版本 6.0.0

代码

/**

    * 根据流程定义文件生成流程图

    * @param file 流程定义文件

    * @param response

    * @throws IOException

    * @throws XMLStreamException

    */

    public void createFlowImage(MultipartFile file, HttpServletResponse response) throws IOException, XMLStreamException {

        InputStream inputStream = file.getInputStream();

        // 创建转换对象

        BpmnXMLConverter converter = new BpmnXMLConverter();

        // 创建XMLStreamReader读取XML资源

        XMLInputFactory factory = XMLInputFactory.newInstance();

        XMLStreamReader reader = factory.createXMLStreamReader(inputStream);

        // 把XML转换成BpmnModel对象

        BpmnModel bpmnModel = converter.convertToBpmnModel(reader);

// 使用默认配置获得流程图表生成器,并生成追踪图片字符流

        DefaultProcessDiagramGenerator processDiagramGenerator = new DefaultProcessDiagramGenerator();

        InputStream imageStream = processDiagramGenerator.generateDiagram(bpmnModel, "png",  "宋体", "微软雅黑", "黑体", null, 2.0);

        ServletOutputStream output = response.getOutputStream();

        IOUtils.copy(imageStream , output);

    }

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容